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

Leer más

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 !

 

 

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 ).

¿ Cómo lo haremos ?

En este caso nos conectaremos desde nuestro computador linux a un servidor de características similares que es el cual tiene acceso a la Base de Datos MYSQL. En resumen lo que se hará es crear un puerto local por el cual nos conectaremos a la base de datos remota.  Ojo pestaña y ceja, esta base de datos no necesariamente está en el servidor al que nos conectaremos, si bien puedes estarlo este servidor solo debe tener acceso a ella.

Creamos el túnel desde consola.

En mi caso tengo un servidor mysql local, por lo que asignaremos el puerto 3307 a la base de datos que nos conectaremos. Necesitamos lo siguiente  :

  1. Dirección IP o Nombre de dominio de la BdD
  2. Dirección IP o Nombre de dominio del servidor con acceso a la BdD
  3. Obviamente los accesos correspondientes al servidor y a la base de datos !

El comando SSH con el que se genera el túnel quedaría de la siguiente manera.

ssh -L 3307:DIRECCIONBDD:3306 \
USUARIOSERVER@IPSERVER
  1. DIRECCIONBDD es la dirección de la BdD.
  2. USUARIOSERVER es el usuario del servidor que tiene el acceso a la BdD.
  3. IPSERVER es la dirección IP del servidor que tiene el acceso a la BdD.

Si todo sale bien ahora podremos conectarnos directamente a la BdD de manera local usando el puerto 3307. Existe la posibilidad que tu BdD no ocupe el puerto 3306, en ese caso simplemente la cambiar para el que corresponda.

Accediendo a la BdD

Para probar usaremos el cliente MySQL por consola, pero puedes usar MySQL Workbench, PHPMyAdmin o el que estimes conveniente.

mysql -u USUARIO -pPASSWD -h 127.0.0.1 -P 3307

Si tu usuario y passwords son correctos ya podrías acceder a la BdD aunque sea remota como se fuera local y aunque no tuvieras permisos de acceso a través de tu IP. Esto es para mantener la seguridad de tu BdD !

 

 

 

 

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.

Creando la configuración inicial.

Antes que todo nos situamos en la carpeta de la aplicación de la cual haremos el upgrade y ejecutamos el comando eb init. Si ya lo habíamos hecho anteriormente usaremos la opción de «interactive» como fue mi caso. Resaltaré en negrita la selección del menú correspondiente.

ctala@BeaTriX-CTMGroup:~/REPOS/tbk-aas-server$ eb init --interactive

Select a default region
1) us-east-1 : US East (N. Virginia)
2) us-west-1 : US West (N. California)
3) us-west-2 : US West (Oregon)
4) eu-west-1 : EU (Ireland)
5) eu-central-1 : EU (Frankfurt)
6) ap-south-1 : Asia Pacific (Mumbai)
7) ap-southeast-1 : Asia Pacific (Singapore)
8) ap-southeast-2 : Asia Pacific (Sydney)
9) ap-northeast-1 : Asia Pacific (Tokyo)
10) ap-northeast-2 : Asia Pacific (Seoul)
11) sa-east-1 : South America (Sao Paulo)
12) cn-north-1 : China (Beijing)
(default is 3): 

Select an application to use
1) APP1
2) APP2
3) APP3
4) [ Create new Application ]
(default is 3): 3
Select the default environment. 
You can change this later by typing "eb use [environment_name]".
1) APP3-devel
2) APP3-prod
(default is 1): 2

Select a platform.
1) Node.js
2) PHP
3) Python
4) Ruby
5) Tomcat
6) IIS
7) Docker
8) Multi-container Docker
9) GlassFish
10) Go
11) Java
(default is 1): 2

Select a platform version.
1) PHP 5.4
2) PHP 5.5
3) PHP 5.6
4) PHP 7.0
5) PHP 5.3
(default is 1): 4

Con esto lo que hacemos es decirle a beanstalk como funcionar. Si se creara la aplicación desde cero partiría de inmediato con php7, pero como no es nuestro caso lo que haremos primero es guardar la configuración de nuestro enviroment según lo que tenemos en la nube.

Creando y editando la configuración del enviroment.

ctala@BeaTriX-CTMGroup:~/REPOS/tbk-aas-server$ eb config save app3-prod --cfg app3-prod-config

Configuration saved at: /home/ctala/REPOS/app3/.elasticbeanstalk/saved_configs/app3-prod-config.cfg.yml

Una vez guardada la configuración por defecto la editaremos según lo que necesitemos. En nuestro caso buscamos la línea que define el Stack a ocupar y la editamos.

Cambiaremos esto :

SolutionStack: 64bit Amazon Linux 2016.03 v2.1.3 running PHP 5.6

Por esto

SolutionStack: 64bit Amazon Linux 2016.03 v2.1.3 running PHP 7.0

Si, solo cambiaremos la parte donde sale la versión de PHP. En este caso es sencillo ya que el SolutionStack existe y se llama de esa manera.

Actualizando la configuración en la nube.

Ya teniendo nuestra nueva configuración lo que debemos hacer es subirla a amazon y luego cargarla.

ctala@BeaTriX-CTMGroup:~/REPOS/app3$ eb config put app3-prod-config
ctala@BeaTriX-CTMGroup:~/REPOS/app3$ eb config app3-prod --cfg tbk-aas-server-prod-config 
Printing Status: INFO: Environment update is starting.                                
INFO: Updating environment app3-prod's configuration settings. 
INFO: Created Auto Scaling launch configuration named: awseb-e-4g3mx5ymyq-stack-AWSEBAutoScalingLaunchConfiguration-16CD5LSR5ERIN INFO: Auto Scaling group update progress: Rolling update initiated. Terminating 1 obsolete instance(s) in batches of 1, while keeping at least 1 instance(s) in service. Waiting on resource signals with a timeout of PT30M when new instances are added to the autoscaling group. 
INFO: Auto Scaling group update progress: Temporarily setting autoscaling group MinSize and DesiredCapacity to 2. 
INFO: Environment health has transitioned from Ok to Info. Configuration update in progress (running for 30 seconds). 
INFO: Auto Scaling group update progress: New instance(s) added to autoscaling group - Waiting on 1 resource signal(s) with a timeout of PT30M. 
INFO: Added instance [i-051d72f3a5ba93b63] to your environment.      INFO: Still waiting for the following 1 instances to become healthy: [i-051d72f3a5ba93b63]. 
INFO: Deleted Auto Scaling launch configuration named: awseb-e-4g3mx5ymyq-stack-AWSEBAutoScalingLaunchConfiguration-10200GU7CE7MB 
INFO: Successfully deployed new configuration to environment.

Ahora así de simple hemos actualizado el enviroment para que use la versión de php7 sin tener downtime y manteniendo los servicios relacionados como pueden ser las bases de datos.

Espero que les sirva !

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.