Haciendo del Desarrollo y la Arquitectura Web, ciencia y pasión.

Despliega tu website con Git

Pues bien, ya tienes terminada tu pagina web. En tu entorno local tienes tu nueva flamante web, que te has currado con el framework de moda. Lo empaquetas en un zip o un tgz y lo "efetepeas" copias al servidor en producción, lo descomprimes y listo. Peeeero, a las 3 de la mañana nuestro cliente de Japon ha indicado que no se puede registrar nuevos usuarios. Al parecer la última versión del código es incosistente. Los tests, si es que había, no tuvieron en cuenta que los cambios en la bbdd aun no estaban desplegados. Así que pasaron por alto un campo nuevo de la tabla de usuarios que faltaba y que impide registrar usuarios nuevos.

Es preciso volver a la version anterior. Nuestro rudimentario sistema de desplegado no es capaz de dar respuesta estas incidencias. Así que vamos a integrar Git en nuestro sistema de despliegues. Esto nos permitirá tener un control de versiones, un método de subidas rapido y eficaz. Pues sin más vamos a proceder a crear un repositorio en local, despues en el servidor vamos a configurar la carpeta donde se desplegará nuestra web. Lo primero que haremos será irnos al servidor donde deberemos tener instalado git, un apt-get install git nos hará el papel. Lo primero deberemos tener identificado el derectorio donde vamos tener la web instalada, normalmente dentro de /var/www/xxx. Ok,  para nuestro ejemplo, lo llamaremos mysite.

mkdir /var/www/mysite.

Despues nos crearemos un repositorio en el servidor en otra carpeta, por ejemplo, /var/repository/mysite.git


mkdir -p /var/repository/mysite.git

Entramos dentro de la carpeta recien creada e inicializamos el repositorio con :

git init --bare

Perfecto hasta ahora ya tenemos nuestro repo listo para ser usado y la carpeta de nuesta web. Ahora vamos a poner en marcha un hook de git, que no es mas que una serie de scripts que dispone Git para lanzar en ciertas situaciones. Así que nos vamos a la carpeta hooks dentro de nuestro repositorio.

cd /var/repository/mysite.git/hooks

Dentro de los hooks crearemos un nuevo hook al que llamaremos post-receive con el siguiente contenido:


#!/bin/sh
git --work-tree=PATH-a-la-carpeta-del-servidor-web --git-dir=PATH-a-la-carpeta-del-repositorio checkout -f name_de_la_rama

Cambiamos los nombres de las carpeta y para el nombre de la rama si no se especifica por defecto es master. Es preciso hacer que el script sea ejecutable asi que lanzamos un chmod a+x y que el directorio destino tiene los privilegios adecuados para escribir.

chmod a+x post-receive

Una vez completado estos pasos podemos irnos al cliente donde tenemos nuestra copia local, en nuestra plataforma de desarrollo y si no está iniciada un repositorio de git, lo hacemos con:

git init

Después configuramos nuestro repositorio para que se conecte con el servidor con el siguiente comando:

git remote add nombre_del_repositorio ssh://my_user@ip_de_servidor/PATH-al-directorio-del-repositorio

Por último solo nos falta hacer un push. Cada vez que se hace un push, se lanza el hook que ejecuta nuestro script para poblar desde el repositorio a la carpeta destino:

git push nombre_del_repositorio nombre_de_la_rama

Y listo, nuestra web ha quedado desplegada. Hay que tener en cuenta que podría haber más pasos. Dependiendo del framework será preciso instalar los bundles o modulos, que no se subieron por que así lo indicaba el gitignore. Además es posible que halla que ejecutar las migraciones, para mantener las actualizaciones en la bbdd. Habrá que prestar atención que no se quede la web en modo debug que pudiera dar más información de la necesaria. Más adelante haremos alguna prueba con Jenkins que es la solución realmente deseable.