Creando un servidor de MySQL local con Docker

Docker es un software de manejo de contenedores que permite exportar tu código junto con la configuración del entorno en donde se encuentra de manera sencilla y liviana sin preocuparse por los cambios que puedan haber en el sistema operativo, mientras que MySQL es la base de datos relacional Open Source más popular.

El objetivo de este POST es explicar el paso a paso de la creación de un contenedor de MySQL de manera local que se pueda acceder desde otras aplicaciones instaladas en la misma máquina. Se usa un computador con Ubuntu 18.04 LTS para el tutorial.

Requerimientos

  • Docker Instalado

Descargando la Imagen desde Docker

El tener la imagen del servidor de MySQL en nuestro computador nos permitirá crear todos los contenedores que queramos de MySQL en nuestra máquina. Podríamos llegar a tener uno por cada proyecto que estemos desarrollando para no mezclar las bases de datos, para tener un orden lógico, o simplemente para que cada una de ellas no sea muy pesada.

Para obtener la imagen simplemente hacemos pull desde el repositorio oficial.

$ sudo docker pull mysql/mysql-server:latest

En este caso estaré trabajando con la última versión de MySQL, sin embargo se puede especificar la versión que deseas utilizar en vez de latest, por ejemplo  5.7, 5.7.24, 5.7.24-1.1.8 .

Ejecutando el contenedor a partir de la imagen

Ya teniendo la imagen estamos listos para ejecutarla. En este caso como queremos que además se pueda ejecutar desde fuera de los contenedores, y posiblemente desde Internet, debemos hacer un forward del puerto para poder acceder.

sudo docker run --name=MyMySQLServer -d -p 6603:3306 mysql/mysql-server:latest

En este caso llamamos al servidor MyMySQLServer en modo daemon (-d hace que se ejecute en el background), y este es el nombre que usaremos de ahora en adelante. En este caso además de ejecutarlo le instruimos a docker que haga un forward del puerto 6603 al 3306 de dentro de docker, por lo que si queremos acceder desde fuera del contenedor lo haremos en el puerto 6603 de la máquina host. 

Si bien el Servidor MySQL ya está corriendo, no sabemos cual es la clave de ROOT de MySQL, como este contenedor la genera de manera automática, simplemente debemos revisar los logs para ver cual es la clave de administrador.

sudo docker logs MyMySQLServer | grep GENERATED

Con docker logs obtenemos los logs de inicio del contenedor con MySQL, mientras que con grep filtramos el contenido para poder ver cual fue la clave de root generada al inicio. En este caso :

[Entrypoint] GENERATED ROOT PASSWORD: IMWop4h#0J0Bk@hLAk@n1uKuSUs

Ahora solo nos falta modificar la clave y permitir conexiones desde fuera del contenedor.

Modificando el servidor MySQL.

Si bien no podemos acceder aún al servidor MySQL desde afuera, si podemos hacerlo desde el mismo contenedor.

sudo docker exec -it MyMySQLServer mysql -uroot -p

Al ejecutar el comando nos preguntará la clave de root que es la que obtuvimos en el punto anterior. Simplemente copia y pega la clave obtenida anteriormente.

Ahora estamos dentro del servidor MySQL del contenedor.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 119
Server version: 8.0.13 MySQL Community Server - GPL

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Antes que todo, cambiaremos la clave por una más fácil de recordar.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

Recomiendo no usar la clave password :P.

Ahora especificaremos al servidor que el usuario root puede acceder desde cualquier lado. Insisto, en mi caso es un servidor de desarrollo local, no recomiendo hacer esto en producción.

mysql> UPDATE mysql.user set host="%" where user="root";

En este momento tenemos todo para poder acceder desde fuera del contenedor a nuestra base de datos MySQL, lo único que debemos hacer es reiniciar el servicio. Siéntete libre de cerrar la ventana o simplemente escribir exit.

Reiniciando el contenedor.

Si bien podríamos acceder con bash directamente a la máquina, reiniciar el servicio utilizando docker es mucho más sencillo.

sudo docker restart MyMySQLServer

Ahora, para probar si todo está bien, puedes usar tu cliente mysql preferido para poder acceder al servidor. En este caso usaremos la línea de comandos para hacerlo más sencillo.

 mysql -u root -ppassword -h 127.0.0.1 -P 6603

Si realizamos todo de manera correcta podemos acceder al servidor MySQL de manera local en el puerto 6603 usuando el usuario root y password password.

Conclusión

Tener uno o más servidores MySQL de manera  local es bastante sencillo, y lo mejor es que no consumen recursos mientras no se estén ejecutando. Esto es perfecto para los que tenemos un laptop para desarrollar y queremos que la batería dure lo más posible, además de tener un orden lógico y poder diferenciar las bases de datos por proyectos.

 

 

 

 

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

¡MANTENGÁMONOS EN CONTACTO!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

Fixing Ubuntu USB-C to HDMI DELL DA200

DA 200 UBUNTU XPS WORKING

Has been almost a year that I bought my dell XPS developers edition with the DA200 adapter, which only works with low resolutions due to a published bug. http://en.community.dell.com/support-forums/software-os/f/3525/t/19999974 . Other USB-C  to HDMI adapters / docks also fail with the same.

During all this time there was no solution without compiling and patching the kernel, as described here : https://patchwork.kernel.org/patch/9646451/ .

I was using Ubuntu 16.04.3 LTS with the Kernel 4.10 before the upgrade, with the latest Intel drivers and Gnome Shell enviroment.

On the 3rd of September of 2017, the Linux Kernel 4.13 was released, and included the patch about this particular driver. You can see more information about this here : https://lkml.org/lkml/2017/9/3/155

What we are going to do now, is simple install this version of the kernel in order to fix the issue. By the way, in this moment I am writing with my external monitor connected through my USB-C/HDMI converter.

Downloading the Kernel 4.13

We download from the official site, http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/. In my case I will download the 64bit debs.

  • wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300_4.13.0-041300.201709031731_all.deb
  • wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-headers-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb
  • wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.13/linux-image-4.13.0-041300-generic_4.13.0-041300.201709031731_amd64.deb

After downloading the kernel packages, we just install them.

sudo dpkg -i *.deb

 

and once everything is installed properly, we just reboot. Now everything should be working as it should.

I hope it is useful for you !

 

 

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

¡MANTENGÁMONOS EN CONTACTO!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

Crear un túnel SSH para acceder a un servidor MYSQL Remoto

Mysql Remoto a Través de Túnel SSH

Un túnel SSH consiste en una conexión segura creada a partir de una conexión SSH. En general puede asegurar cualquier transferencia o protocolo inseguro. Por ejemplo podríamos hacer una transferencia a través de FTP segura usando este tipo de túneles.

En este caso nuestro foco no será solo encriptar la comunicación con la base de datos, si no que será darle acceso a un computador, por ejemplo de escritorio, al servidor de base de datos a través de un servidor que tenga acceso a ella.

¿ Por que haremos esto ?

Si bien podríamos dar el acceso directamente a nuestro computador a través de nuestra dirección IP esto podría transformarse en una brecha de seguridad. En especial si compartimos la red con más personas en nuestras oficinas o en nuestro trabajo. En mi caso en este momento estoy trabajando en un apart hotel, por lo que agregar la dirección IP del apart hotel no es una opción para mi. ( Ojo, si se puede a costa de seguridad ).

Leer más

Actualizar Elastic BeanStalk Enviroment para usar PHP7.0 con eb-cli

AWS Elastic Beanstalk es un servicio fácil de utilizar para implementar y escalar servicios y aplicaciones web.

Ahora veremos como hacer el upgrade de la versión de PHP de un servicio ( enviroment ) ya corriendo.

Antes de hacerlo :

  1. Ya debes de estar familiarizado con lo que es ElasticBeanstalk.
  2. Debes de tener los comandos de consola de EB instalasdos ( EB-CLI ).
  3. Asumiremos el upgrade desde una máquina con consola linux.

Leer más

Utilizando el nuevo y gratuito servicio AWS Certificate Manager

Un certificado SSL sirve, dentro de otras cosas, para darle un nivel de seguridad mayor al usuario de una página web al encriptar su contenido. Ahora veremos como utilizar la nueva herramienta gratuita de Amazon la cual crea certificados SSL.

Origen: AWS Certificate Manager

Hace ya un tiempo que me llegó el mail de amazon contándome de esta nueva funcionalidad, pero no fue hasta el día de hoy cuando necesité ocuparla que de verdad me di el tiempo de revisarla.

En la actualidad tener un certificado SSL es una necesidad, especialmente y usas datos personales o simplemente para el envío de contraseñas, ya que además los buscadores privilegian en el ranking las páginas que utilizan este protocolo y disminuyes la probabilidad de que tu sitio pueda ser vulnerado.

A continuación describiremos algunos de los pros y contras de este nuevo servicio.

Pros del AWS Certificate Manager :

  1. Es muy sencillo solicitar un nuevo certificado.
  2. En minutos puedes tener el certificado funcionando con un Cloud Formation o con un Elastic Load Balancer de Amazon.
  3. Si usas replicación, no tienes que configurar cada máquina, simplemente lo instalas en los servicios mencionados anteriormente. En especial si  usas escalamiento horizontal.
  4. Al tener el certificado fuera de la máquina disminuyes la carga de esta ( CPU ).

Contras del AWS Certificate Manager :

  1. No sirve para la instalación directa en una instancia. Solo sirve con los servicios antes mencionados.
  2. NO puede ser ocupado fuera de Amazon.
  3. Aún no disponible en todas las zonas.

 

Si bien los Pros y Contras del AWS Certificate Manager pueden parecer algo restrictivos ( ya que lo son ), la verdad es que es un servicio muy fácil de ocupar. En unos minutos tuve un sitio funcionando en una red privada nueva, con una máquina nueva y un balanceador de carga nuevo que además poseía el certificado generado por Amazon.

 

Certificado SSL de Amazon
Certificado SSL de Amazon usado para Cubopolis.com

 

Por mi parte lo estaré probando en un nuevo proyecto para ver como me funciona en general, pero no debería tener problemas relacionados.

Si eres de los que ha comprado certificados en el pasado, o simplemente haya tenido que configurar servidores con ellos, entenderás lo útil que puede ser esta herramienta.

Si no quieres utilizar AWS Certificate Manager para generar los certificados SSL, además de no querer pagar una enormidad por ellos, te recomiendo leer este post sobre Let’s Encrypt que te ayuda a generar certificados SSL validados de manera gratuita.

 

¡Mantengamos el contacto!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

¡MANTENGÁMONOS EN CONTACTO!

Me encantaría que te mantuvieras al día con el contenido que estoy generando. Recuerda que no es solo el blog, son las redes sociales, libros, y distintos pódcast 😎.

Hago todo lo posible para no hacer Spam,

Share to...