10 actores clave del ecosistema de las Startups: ¿Quiénes son?

Ecosistema de las Startups

Como Startup o emprendimiento, no es probable que tengas éxito sin el apoyo de los demás. Formar parte del ecosistema de las startups puede ayudarte en tu camino o incluso darle ese impulso que necesitas para salir adelante. Algunos de los actores del ecosistema son bastante aparentes, como lo son los emprendedores y los inversionistas; … Leer más

Desarrollando Aplicaciones Web con PHP7.0 y Docker

Docker es un software de manejo de contenedores, mientras que PHP7.0 es la última versión de este lenguaje de programación que incluye mejoras que hacen que la velocidad de su funcionamiento sea 50% más veloz que su predecesor. En este tutorial crearemos un ambiente de desarrollo usando Docker con lo cual no tendremos que instalar ningún otro software ni librería para funcionar.

Origen: ctala/apache2_php7_awsebs – Docker Hub

Docker

Ya hace un tiempo que quería probar como funcionaba Docker para el desarrollo de aplicaciones para no tener que instalar todo nuevamente en mi máquina. Hace unos días ya llegó mi nueva laptop por lo que ya no tengo excusas para no trabajar y se me ocurrió la brillante idea de procastinar aprendiendo y creando imagenes de Docker en vez de iniciar directamente con lo que debía hacer. El resultado fue satisfactorio por lo que estoy muy contento, así que aprovecho de compartir no solo como desarrollar en PHP7.0 usando Docker, si no que además utilizaremos una imagen que creé para este cometido que incluye todo lo necesario para poder desarrollar sin problemas en PHP7.0, además de herramientas que hacen que el proceso sea más sencillo.

Prerequisitos :

  • Tener Docker ya instalado.
  • Los comandos que mostraré son en base a un HOST linux, lo que no quiere decir que la imagen que ocuparemos no funcione con otro HOST.

Obteniendo la Imagen

Uno de los beneficios de trabajar con containers, es que podemos instalar uno de ellos en base a una imagen que ya tenga todo para llegar y utilizar. Uno de los problemas que tuve al inicio es que no entendí muy bien cual era la diferencia entre un contenedor y una imagen, lo que podemos resumir como que el contenedor es la visualización de la imagen que ocuparemos. » El contenedor es el que ocuparemos, mientras que la imagen genera el contenedor «.

Ejecutamos el siguiente comando para descargar la imagen que utilizaremos como base para el contenedor que tendrá nuestra aplicación web.

docker pull ctala/apache2_php7_awsebs

 

Con el comando anterior descargamos la imagen base. No importa cuantos contenedores creemos en base de esta imagen, esta imagen solo deberemos descargarla una vez.

Iniciando el contenedor.

La imagen anterior esta lista para ser utilizada y al momento de [generar el contenedor inicia el servidor web Apache de manera automática. En este caso solo debemos enfocarnos en iniciar el contenedor. Algo que vale la pena destacar es que si el contenedor es eliminado, todo el contenido se pierde. Debido a esto se montará la carpeta donde tenemos el código web desde la máquina HOST para no tener problemas.

sudo docker run -d -p 80:80 -i \
-v/MIREPO:/var/www/html \
-t ctala/apache2_php7_awsebs

 

El comando anterior ejecuta el contenedor como demonio por lo que no se eliminará si salimos, hace un puente entre el puerto 80 del contenedor y el puerto 80 de nuestro host ( Computador ) y monta la carpeta /MIREPO que tiene el repositorio local en la dirección web del servidor desde nuestra imagen llamada apache2_php7_awsebs.

Accediendo al contenedor.

Uno de los beneficios de Docker es que podemos acceder al contenedor como si fuera una máquina virtual. Para hacerlo simplemente listamos los contenedores que estén corriendo y «ejecutamos» una consola bash para poder acceder.

sudo docker ps
Contenedores Docker Activos
Contenedores Docker Activos

El comando anterior resulta en la lista de los contenedores activos con su respectivo ID y los puertos que está ocupando. En nuestro caso el puerto 80 del contenedor está relacionado con el puerto 80 de nuestra máquina host.

Ahora asumiendo que tenemos el resultado anterior, ingresaremos a la consola de esa máquina.

$ sudo docker exec -it 78764af8e071 bash

 

Con esto podemos instalar todo lo que nos haya faltado, utilizar las herramientas incluidas, o simplemente analizar los logs del sistema.

 

Otras Herramientas Incluidas.

Esta imagen no solo viene con PHP7.0 y Apache, también viene lista con :

  • Cliente Mysql.
  • Composer, para el manejo de las librerías de PHP.
  • EBS-CLI. Herramientas para la conexión con Elastic BeanStalk de Amazon.
  • Curl.
  • Git para el manejo de los repositorios.

Usando esta imagen puedes crear tantos contenedores como lo deseos o simplemente usar uno y cambiar la dirección desde donde se obtiene la información del repositorio.

Por mi parte estaré utilizando está imagen para el desarrollo de aplicaciones por lo que estaré modificándola a medida que sea necesario.

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

Crear una Base de Datos MySQL remota para optimizar el rendimiento del sitio WordPress.

Cuando el sitio comienza a tener más tráfico tenemos que comenzar a pensar en como poder manejarlo. Lo más sencillo y lo que recomiendo es sacar la base de datos del servidor, en especial debido a que Mysql al no tener recursos suficientes simplemente deja de funcionar. Esto logra que cada servidor maneje su propia carga, además de ser el primer paso para tener un sitio con balanceador de carga.

En mi caso particular lancé un nuevo eCommerce con Woocommerce / WordPress en el cual no separé desde un inicio la BdD de datos debido a que pensé que el sitio tendría menos tráfico y carga asociada, me equivoqué, lo que es realmente bueno.

Sin embargo no puedo dejar que el eCommerce se caiga cada vez que tenga mucho tráfico, no sería muy agradable perder ventas por esto.

Este minitutorial está alojado en digital ocean, la verdad lo he probado hace un tiempo y funciona bastante bien. Sin embargo  se puede extrapolar para cualquier servidor linux, en mi caso Ububtu 14.04.

Entonces, lo que haremos :

  1. Crear un nuevo servidor ( Droplet ) al cual le instalaremos una base de datos Mysql.
  2. Instalar la base de datos Mysql.
  3. Configurar la BdD en modo seguro/ Producción.
  4. Crear un usuario / password para el acceso del sitio wordpress.
  5. ( Opcional ) – Configurar el firewall del servidor.

Creando el nuevo droplet

Esto ya es bastante sencillo, simplemente vamos a el panel de administración de Digital Ocean y hacemos click en crear un nuevo droplet. Asegurate que el servidor quede en el mismo datacenter donde se encuentra tu máquiba virtual que aloja tu servidor wordpress, de no ser así funcionará pero no a la velocidad esperada para nuestro sitio.

Digital Ocean Create Droplet
Digital Ocean Create Droplet

Por ahora el servidor MySQL no necesita ser más potente que la versión más sencilla, de ser necesario en un futuro simplemente hacemos el upgrade, pero recomiendo usar un caché en el servidor de wordpress.

Instalando Mysql

Ya teniendo nuestra máquina recién horneada, accedemos a ella para instalar el servidor mysql.

sudo apt-get install mysql-server

Debido a que estaremos en un servidor de producción, recomiendo poner una contraseña segura para el usuario root y solo acceder a él desde la máquina local y ninguna remota. Si es paranoia, aún no me ha pasado nada pero no esperaré a que me pase.

Ya teniendo el servicio de mysql andando, ahora simplemente ejecutemos un script que simplemente elimina las posibles vulnerabilidades de seguridad que tiene mysql en servidores de desarrollo.

sudo mysql_secure_installation

Ya que estamos acá, para probar que todo funciona accederemos a La bdD por consola y crearemos la base de datos para wordpress.

# mysql -u root -pMICLAVESINESPACIODESPUESDELAP

Ya habiendo ingresado la creamos.

mysql> create database wordpress;
 Query OK, 1 row affected (0.00 sec)

Configurando el acceso remoto.

Antes que todo, le debemos decir a Mysql cual es su IP, así que procedemos a editar el archivo:

sudo vim /etc/mysql/my.cnf

Y buscamos donde dice bind-address y lo cambiamos por nuestro IP :

bind-address        = TUIP

Si tu IP es pública, va esa. Si tienes una red interna, usas el IP de la red interna.

Ahora reiniciamos el servicio para ver que todo funcione bien.

sudo service mysql restart

Generando las credendiales para WordPress

Ya tenemos el servidor virtual, mysql instalado, y la capacidad de ser accedido de manera remota, lo que nos falta es un usuario que pueda acceder de manera  por este medio.  Recordar que ya creamos la BdD llamada wordpress en un punto anterior.

Creemos el usuario y le damos los accesos necesarios a nuestra base de datos para que wordpress pueda funcionar de manera correcta :

CREATE USER 'MIUSUARIO'@'localhost' IDENTIFIED BY 'MICLAVE';
CREATE USER 'MIUSUARIO'@'%' IDENTIFIED BY 'MICLAVE';
GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'MIUSUARIO'@'localhost';
GRANT SELECT,DELETE,INSERT,UPDATE ON wordpress.* TO 'MIUSUARIO'@'%';

Con lo anterior creamos tanto el usuario remoto como el local. No olvides modificar la nueva información en el archivo de configuración de wordpress para que los cambios funcionen.

Asegurando el servidor

Si notaron, en este momento cualquier IP puede acceder a nuestro servidor. Dependiendo de la configuración esto puedo ser bueno o malo, si bien esto se puede bloquear directamente desde la configruación de acceso a mysql, lo que haremos es configurar el firewall para solo aceptar el tráfico de los IPs que nosotros permitamos.

Asumiendo que tenemos UFW ( Uncomplicated Firewall ) ya instalado, simplemente agregamos la siguiente regla :

# sudo ufw allow from MYIP to any port 3306

Lo que hace es que le permite acceder al puerto 3306 a la IP dada. Si no lo tienes instalado revisa este blog bost : Firewall usando UFW en un servidor Ubuntu / Debian.

Además recomiendo bloquear todas las conexiones que no estén permitidas. ( No hagas esto si no haz agregado ssh a la lista de permitidos ).

# sudo ufw default deny incoming

Y eso sería todo :D.

 

Origen: How To Set Up a Remote Database to Optimize Site Performance with MySQL | DigitalOcean

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

Ubuntu 14.04 LTS + : Cambiar la zona horaria.

Para todos los que quieren cambiar la zona horaria con  CentOS, Ubuntu, Fedora, Debian para sus servidores.

Estaba acostumbrado a usar tzdata pero al parecer en las versiones más «recientes» no viene por defecto. Para poder hacer el cambio de la zona horaria  usaremos el comando timedatectl. Para esto necesitamos tener acceso a la máquina en donde queremos cambiar la configuración, puede ser físicamente o de manera virtual a través de una consola.

Si ocupamos simplemente el comando nos da la siguiente información :

root@MANAGER:~# timedatectl
      Local time: Wed 2015-11-11 09:30:44 CLT
  Universal time: Wed 2015-11-11 12:30:44 UTC
        RTC time: Wed 2015-11-11 12:30:44
        Timezone: America/Santiago (CLT, -0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

En donde aparece la zona universal y la local que son los datos que nos interesan. En mi caso yo ya cambié la zona horaria de este servidor.

Ahora, veamos la lista de las zonas horarias y seleccionemos la que nos interesa. En este caso usaré grep para obtener la zona horario correspondiente a Santiago. De no usar grep esto devolvería la lista de todas las zonas horarias disponibles.

root@MANAGER:~# timedatectl list-timezones  | grep Santiago
America/Santiago

Ya teniendo nuestra zona horaria simplemente le decimos al servidor que es la que queremos ocupar.

root@MANAGER:~# timedatectl set-timezone America/Santiago

La verdad es para nada complejo, puedes además hacerlo a través de php si no tienes acceso a la consola del servidor pero eso lo veremos en otra oportunidad.

Origen: Ubuntu 14.04 LTS : Set System Timezone : Server World

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

Usando Linux y el portal de MiPyme del Sistema de Impuestos Internos.

GUÍA PARA INSTALAR EL CERTIFICADO DIGITAL LINUX UBUNTU

Uno de los problemas que había tenido para no migrar todos los computadores de Windows a Ubuntu era el no poder usar este último para poder generar las facturas electrónicas con el portal de MiPyme del Sistema de Impuestos Internos. Había estado ocupando Virtual Box para hacer esto personalmente ya que Windoes dejó hace muchos años de ser mi Sistema Operativo principal.

Hoy ingresé al portal del Sistema de Impuestos internos y «descubrí»  un mensaje que anteriormente no había hecho. «Para firmar el documento desde sus sistema operativo debe de subir la llave al servidor» o algo similar …

Leer más