GIT en el mundo real

Deployar a producción con GIT Más videos

Descripción del tema

GIT es una herramienta indispensable para desarrollar software, en este tutorial se mostrará como poder deployar nuestras aplicaciones a producción con un simple push.

GIT cuenta con hooks que podemos escuchar y ejecutar acciones cuando estos eventos sucedan, si alguna vez has utilizado heroku ya sabrás que para deployar a esta plataforma lo hacemos mediante git, un simple push y heroku se encarga del resto. 

Realizar deployments con GIT no es tan complicado como pareciera, simplemente basta con hacer un script que nos permita ejecutar nuestro deployment de manera automática y ejecutarlo en alguno de los hooks disponibles.

Para este tutorial necesitamos tener acceso a un servidor, personalmente utilizo DigitalOcean, tienen un excelente servicio al cliente, además de que cuentan con una comunidad muy grande y el precio de los VPS es muy barato (Sólo $5 al mes el más básico).

Crear el repositorio en el servidor

Una vez que tienes tu servidor es necesario instalar GIT, instalarlo en linux es extremadamente sencillo usando los binarios, en ubuntu:

$ sudo apt-get install git

Ya que instalamos git vamos a crear un repositorio en nuestro servidor. Podemos crearlo en nuestro home o en cualquier lugar, solo necesitamos permisos de escritura.

$ cd ~
$ mkdir -p projects/mysite.git
$ cd projects/mysite.git
$ git init --bare

La parte más importante es el último comando, aquí inicializamos un repositorio utilizando la opción --bare. Este parámetro nos permite crear un repositorio sin el workspace,  esto lo hacemos así porque en el servidor no vamos a estar modificando archivos, por lo tanto no necesitamos el workspace.

Script para deployar

Lo siguiente que haremos es utilizar el hook post-receive, este hook se disparará cuando el repositorio reciba nuevos cambios. Aquí es donde vamos a ejecutar nuestro script para deployar automáticamente.

Si observamos el listado de archivos generados al inicializar el repositorio, podemos ver que tenemos varios folders, entre ellos uno que se llama hooks. Vamos a crear el script dentro de este folder.

$ cd hooks
$ vim post-receive

El script para deployar que usaremos en este ejemplo es el siguiente.

#!/bin/sh
# 
## store the arguments given to the script
read oldrev newrev refname

## Where to store the log information about the updates
LOGFILE=/home/YOUR_USER/logs/mysite.com/deployment.log

# The deployed directory (the running site)
DEPLOYDIR=/var/www/mysite.com/public_html
## Record the fact that the push has been received echo -e "Received Push Request at $( date +%F )" >> $LOGFILE echo " - Old SHA: $oldrev New SHA: $newrev Branch Name: $refname" >> $LOGFILE ## Update the deployed copy echo "Starting Deploy" >> $LOGFILE echo " - Starting code update" GIT_WORK_TREE="$DEPLOYDIR" git checkout -f #<------- echo " - Finished code update" echo "Copying database config." >> $LOGFILE cp /home/YOUR_USER/private/wp-config.php $DEPLOYDIR/wp-config.php echo "Finished Deploy" >> $LOGFILE

Primero definimos las variables donde está el log y donde vamos a deployar los cambios recibidos, luego vamos dejando algunos logs.

Lo más importante aquí es cuando se hace el checkout, lo que hacemos es definir el workspace de git en el directorio que necesitamos deployar, en este caso el directorio público de nuestro sitio, pero puede ser cualquier otro lugar. El checkout lo que hace es sacar la última versión de master y remplazar los archivos anteriores.

Por último en este ejemplo copiamos el wp-config.php con las credenciales a nuestra base de datos al directorio donde deployamos, esto es un ejemplo de como podríamos deployar un sitio en wordpress, pero realmente podemos deployar cualquier proyecto.

Antes de hacer el checkout podríamos hacer un respaldo de los archivos anteriores en un archivo zip, también podríamos hacer un respaldo de la base de datos, si estuviéramos usando rails podríamos ejecutar las migraciones después del checkout o hacer cualquier cosa que requiramos.

Por último necesitamos darle permisos de ejecución a nuestro script, así que ejecutamos el siguiente comando.

$ chmod +x post-receive

Ya tenemos configurado nuestro server, antes de salir asegurate de crear los directorios donde estarán los logs, de lo contrario el script tendrá errores y no se hará correctamente el deployment. También asegúrate tener permisos de escritura en donde haremos el checkout con git, de lo contrario no podremos escribir y no se va a deployar nada.

Agregando el servidor remoto

Ahora en nuestra máquina local vamos a agregar el nuevo repositorio remoto que tenemos en nuestro VPS.

En nuestro proyecto que queremos deployar ejecutamos el siguiente comando:

$ git remote add production ssh://YOUR_USER@yourdomain.com:22/home/YOUR_USER/projects/mysite.git

Aquí se asume que ya cuentas con un proyecto en GIT, la URL que usamos corresponde a tu usuario y el dominio de tu servidor, puedes usar la IP también si no cuentas con un dominio, el puerto ssh es el 22 por defecto, así que podemos removerlo de la URL, pero lo he dejado por si has cambiado el puerto del ssh en tu servidor.

Es importante definir correctamente el PATH donde esta el repositorio en tu servidor. Con eso ya podemos comenzar a deployar de la siguiente manera:

$ git push production master

Y listo! git te pedirá el password de tu usuario en el VPS para poder enviar los cambios, puedes configurar las llaves en tu servidor para no estar poniendo el password a cada rato.

Ahora si abres tu sitio en un navegador deberías ver los nuevos cambios aplicados automáticamente, aquí estamos asumiendo que ya tienes tu servidor corriendo y sirviendo tu sitio.

Conclusión

Como se pudo observar, hemos usado ya varios conceptos que se explicaron anteriormente en el curso, deployar con git es algo sencillo y muy útil. Personalmente deployo de esta manera todos mis sitios, un simple comando en nuestra máquina local y listo! 

Si tienes dudas ya sabes que puedes usar el foro, si puedes compartir este tutorial en tus redes sociales te lo agradeceré en gran manera.

Te gustaría recibir más tutoriales como este en tu correo?

Este tutorial pertenece al curso GIT en el mundo real, te recomiendo revises el resto de los tutoriales ya que están en secuencia de menor a mayor complejidad.

Si deseas recibir más tutoriales como este en tu correo te recomiendo registrarte al curso, si ya eres miembro solo identifícate y registrate al curso, si no eres miembro te puedes registrar gratuitamente!

Si no gustas registrarte en este momento no es necesario! Aún así puedes recibir los nuevos tutoriales en tu correo! Jamás te enviaremos Spam y puedes cancelar tu suscripción en cualquier momento.

¿Olvidaste tu contraseña?

Se el primero en comentar!

Instructor del curso

Crysfel3

Autor: Crysfel Villa

Lleva un par de años utilizando GIT de manera productiva, antes de GIT utilizaba SVN y mucho antes CVS. No se arrepiente de haber cambiado de sistema de versiones.

Regístrate a este curso

Este tutorial pertenece al curso GIT en el mundo real, revisa todos los tutoriales que tenemos en este mismo curso ya que están en secuencia y van de lo más sencillo a lo más complicado.

Ya que este curso no está finalizado al registrarte podrás recibir en tu correo los nuevos tutoriales de este curso!

Tendrás acceso a descargar los videos, códigos y material adicional.

Podrás resolver los ejercicios incluidos en el curso así como los Quizzes.

Llevarás un registro de tu avance.