Saltar al contenido

Publicar sitio estático usando git

Los sitios estáticos siempre han sido geniales pero lo que no ha sido genial es su mantenimiento, con esto me refiero a subir/publicar las archivos al servidor Web. Lo que había hecho era utilizar rsync con SSH o SFTP, ninguna de las dos opciones terminaba de convencerme. Ignorante yo de saber que hace varios años otras personas ya habían encontrado la solución a éste simple problema; usar git.

Git como software para versionar código agrega la genial ventaja que existe un control a los cambios y con unas órdenes de la línea de comandos el sitio se puede devolver rápidamente al estado que se encontraba hace un mes o un año.

La principal dificultad en este tipo de gestión de un sitio Web es que el proveedor de hospedaje debe permitir el uso de git, me llevé las manos a la cara pensando “genial, un servidor dedicado siempre es más costoso que uno compartido y pagué por adelantado tres años a mi actual proveedor”. No recordaba que el cPanel tiene más opciones que las que aparecen en mi línea de visión; mi proveedor actual ofrece la opción para utilizar Git. Terminadas mis vacilaciones vamos al hueso del asunto.

Como publicar el sitio

Primero hay que instalar Git, dependiendo de tu sistema operativo así será el proceso. Luego hay que ir al directorio principal que contiene lo que se va a publicar en el sitio, para mi es /edgar/sitio/public_html, este directorio debe ser inicializado:

git init

Esto hará la inicialización normal de un nuevo repositorio y que generará su propio .git dentro del directorio principal. Luego crearemos el primer commit:

git add .

git commit -m "Primera versión del sitio"

Del lado del servidor he creado un par de claves públicas que están autorizadas dentro del mismo. Luego en el servidor he creado el directorio /home/publicgit aquí es donde va a vivir el repositorio principal, dentro del mismo hay que inicializarlo:

git init --bare

Uso –bare porque sólo va a recibir los cambios enviados (push) desde el repositorio local. Ahora hay que crear un hook para replicar los cambios al directorio público del sitio:

vim publicgit/hooks/post-receive

Dentro del mismo agregamos lo siguiente, para mi /home/public_html es el directorio público del sitio Web:

#!/bin/sh
GIT_WORK_TREE=/home/public_html git checkout -f

Salvamos y lo hacemos ejecutable:

chmod +x publicgit/hooks/post-receive

De vuelta en nuestro sistema local debemos agregar este servidor a nuestro repositorio:

git remote add servidorWeb ssh://[email protected]:22/home/publicgit

Y en un mundo normal agregaríamos el par de claves públicas al sistema y podríamos enviar cambios al repositorio, pero en mi caso debido a circunstancias anormales no puedo hacer eso entonces debo hacer lo siguiente para referenciar la clave pública:

ssh-agent bash -c 'ssh-add /mnt/usb/id_rsa; git push servidorWeb master'

Si tu situación es normal sólo tenés que hacer git push servidorWeb master, ingresás tu clave y observás como la publicación se lleva a cabo. Entonces, cualquier cambio a futuro que hagás a tu sitio estático sólo será cuestión de agregar o eliminar archivos con git, hacer commits y publicar.