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

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.

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 !

¡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,

Cómo Tener la misma zona horaria en Mysql y PHP

Tener las hora del servidor MySQL y de PHP sincronizadas permite que no tengamos problemas en el análisis de los datos de nuestras aplicaciones y/o sistemas, en especial si uno de los factores de medición dependen de la diferencia de estos tiempos. Acá veremos como tener la misma zona horaria para ambos servicios.

Suele suceder que cuando usamos funciones de Mysql que retornan la hora y además otras por parte de PHP, la hora en ambas no es la misma. Esto es debido a que las configuraciones de ambas no son la misma.

Ambas horas vienen desde la configuración del servidor, pero por defecto ambas están en la zona horaria UTC, así que no importa la hora que tengamos en el servidor, la hora de estos servicios será distinta si no las configuramos de manera adecuada.

A continuación como configurar ambas.

Configurando la zona horaria en el servidor MySQL

Si bien podemos editar directamente el archivo de configuración de MySQL, lo que haremos es crear un archivo distinto que solo posea la definición de la zona horaria. De esta manera evitamos perder esta información por alguna actualización.

  1. Creamos el archivo de configuración en la carpeta conf.d de mysql. Todos los archivos con extensión .conf serán cargados desde aquí.
  2. Definimos el timezone del archivo. Acá puedes usar diferencias horarias, o zonas horarias. Las diferencias horarias son contra UTC que es el : +00:00 .
  3. Reiniciamos el servidor de mysql para actualizar la información.

Si bien puedes usar el editor que quieras, yo usaré  VIM por costumbre.

#vim /etc/mysql/conf.d/date.conf

y en el contenido definimos nuestra zona horaria. En mi caso además de «America/Santiago» podría haber puesto «-03:00».

default_time_zone='America/Santiago'

Ahora reiniciamos el servicio y debería estar funcionando.

# service mysql restart

Para corroborarlo, podemos loguearnos a mysql y ejecutar :

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2016-02-10 12:03:35 |
+---------------------+
1 row in set (0.00 sec)

Configurando la zona horaria en PHP

En este caso si editaremos directamente el archivo php.ini que se encarga de la configuración de php para apache. Si tienes otro servidor simplemente lo haces donde corresponda.

# vim /etc/php5/apache2/php.ini

Buscamos y editamos el siguiente contenido según corresponda :

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "America/Santiago"

Y en este caso reiniciamos el servidor de apache.

# sudo service apache2 restart

Eso sería todo, ahora tu BdD y aplicación web tienen la misma hora :).

¡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,

Certificados SSL Gratuitos y Validados

Let’s Encrypt is a free, automated, and open certificate authority brought to you by the Internet Security Research Group (ISRG).

Hace ya un par de días como respuesta a un twitt me llegó un mensaje de   Angel Cardenas (@AnglDavd) sobre un sistema que genera y valida certificados ssl para las páginas web. Tomando en consideración que he pagado por muchos de estos certificados, lo cual no es barato,  obviamente la idea de un certificado gratuito  me generó curiosidad.

La instalación fue bastante sencilla y funcionó de inmediato en uno de mis servidores Ubuntu Server 14.04 siguiendo las instrucciones publicadas en el sitio web :

$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto --help

Con esto simplemente bajamos el sript de automatización que instala todas las dependencias y genera los certificados. En mi caso yo uso servidores apache, por lo que la instalación fue tan sencilla como ejecutar :

./letsencrypt-auto --apache

Con lo anterior se generaron y validaron automáticamente los certificados para mi servidor.

En otro de mis servidores, esto no funcionó, arrojandome un error :

Failed authorization procedure  (tls-sni-01): urn:acme:error:connection

Por lo que según las instrucciones encontradas en el foro ejecuté la instalación standalone para generar los certificados ( Hay que detener el demonio de apache primero ).

./letsencrypt-auto certonly --standalone -d pandora.cl -d www.pandora.cl

Lo que dio como resultado

Updating letsencrypt and virtual environment dependencies.......
Running with virtualenv: /root/.local/share/letsencrypt/bin/letsencrypt certonly -a standalone -d pandora.cl -d www.pandora.cl

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
   /etc/letsencrypt/live/pandora.cl/fullchain.pem. Your cert will
   expire on 2016-03-11. To obtain a new version of the certificate in
   the future, simply run Let's Encrypt again.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Ya teniendo los certificados creados, simplemente de manera manual se hace la instalación en el servidor de apache luego de haber habilitado el modulo correspondiente.

# sudo a2enmod ssl

Ahora en el archivo  default-ssl.conf dentro de la configuración de apache2 agregamos lo siguiente al sitio por defecto.

SSLCertificateFile /etc/letsencrypt/live/pandora.cl/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/pandora.cl/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/pandora.cl/chain.pem

Ya teniendo el módulo activo, la configuración lista, simplemente activamos la configuración.

# a2ensite default-ssl.conf

Bueno, eso sería todo. Como podrán notar el caso de prueba en donde me falló la configuración automática fue para el sitio web de pandora.cl . Actualmente estoy usando este certificado en el sitio, sin embargo me percaté que alguno de los links no están con https, así que no se asusten si el certificado no aparece con color verde.

 

¡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,