Skip to main content

De nuevo en marcha

Después de un largo tiempo sin editar el blog vuelvo a las andadas. El motivo principal para dejar de escribir fue que comencé a trabajar como profesor (mi primera sustitución!) y la preparación de clases más otras actividades que necesito hacer para tener una salud mental mínima no me dejaron mucho tiempo para pensar ni escribir aquí.

Este post, sin embargo, es una guía para poner en marcha un servidor que use hugo como cms y que además pueda alojar distintos sitios web. Va a ser muy básico, centrado en la configuración que se requiere en el server, y con alguna cosa más, para que en caso que haya un accidente (como que se me olvide cómo podía acceder al server, justo lo que me pasó esta vez…) pueda volver a poner en marcha el proyecto lo más rápida e indoloramente posible.

Yo utilizo un server con Debian 10, apache2 y git (y por supuesto ssh para acceder al servidor). Es fácil que todo esto suene a chino a cualquier recién llegado. Como digo, es para tenerlo claro yo, así que puedes hacer como que no has visto esto ;)

La estructura del servidor apache

Mis necesidades son básicas: quiero dos servicios web alojados en un mismo servidor virtual, y quiero tener distintas direcciones url para acceder a cada uno de ellos. Hacer esto con apache es sorprendentemente simple, pero por algún motivo a mí me costó mucho de hacer.

Primero necesitamos poner en marcha apache, que es tan sencillo como instalarlo y activar el servicio para que se ejecute:

apt install apache2 & # instalamos
systemctl enable apache2 & # activamos
systemctl start apache2 # ponemos en marcha

Después hay que configurar la página por defecto. En mi instalación de Debian esta página estaba en /var/www/html, y la configuración para este sitio en /etc/apache2/enabled-sites/000-default.conf. En este último archivo se configura la dirección (url) y el directorio/carpeta donde está el sitio, y muchas otras cosas más.

Para añadir un sitio extra hay que añadir un bloque VirtualHost debajo del primero. En este bloque especificaremos ServerAdmin (e-mail), ServerName y ServerAlias. Estos últimos son la url principal y alguna que queramos que redirija, respectivamente. También es importantísimo añadir DirectoryRoot, el directorio donde está nuestro sitio. Quedaría así

# aquí estaría la configuración original de 000-default.conf
<VirtualHost *:80> # el *:80 hace que recoja todo el tráfico del puerto 80, el html
	ServerAdmin admin@host.com
	DocumentRoot /var/www/directorio_raíz

	ServerName la_dirección_extra.es
	# ServerAlias www.la_dirección_extra.es
</VirtualHost>

Con esto nuestro servidor apache debería redirigir correctamente el tráfico a uno u otro directorio, y mostrar los dos sitios web en las dos direcciones url que hayamos especificado

Poniendo a punto git

Para subir los cambios que realizo en el blog me gusta utilizar git, una herramienta de control de versiones con licencia libre, creada por el autor de Linux, Linus Torvalds, y que se podría considerar el estándar en internet. Automatiza el proceso de controlar los cambios que se realizan en los diversos proyectos de código, y cuando pueda empezar a editar textos, cosa que pretendo hacer en LaTeX, vendrá muy bien para poder tener versiones en pruebas y versiones definitivas, sin perjuicio de ningún tipo (además de servir como copia de seguridad).

Para ponerlo en marcha utilizo este tutorial (no tengo que usarlo a menudo y me olvido de como se hace). En lugar de los directorios por defecto elijo los que considero más adecuados para mi flujo. En concreto, el directorio en el que trabajo de manera local (es decir, la carpeta donde guardo mi blog en mi ordenador) se llama “Blog”, y ahí es donde inicio el repositorio local (la parte que pone “John’s computer”).

Para que se pueda acceder por ssh, si no se utiliza el puerto 22, el que está por defecto, hay que decirle a git cómo hacerlo: git remote add nombre_del_repo ssh://git@servidor.org:1234/carpeta_remota.git

Antes de ponerme a subir el blog, necesito una manera de automatizar el proceso de compilación (hugo recive una serie de archivos y los convierte de manera automática en un sitio web, para más info sigue el link del principio del blog). Para eso añado un documento en la carpeta remota (donde irán los cambios que suba con git): carpeta_remota/hooks/post-receive. El contenido es el siguiente (copiado de aquí):

#!/bin/bash

export GIT_WORK_TREE=/home/git/tu_blog

echo `pwd`
echo "Generating site with Hugo for yolo-web"

mkdir -p $GIT_WORK_TREE
chmod 755 $GIT_WORK_TREE

git checkout -f master

rm -rf $GIT_WORK_TREE/public
cd $GIT_WORK_TREE && /snap/bin/hugo

find $GIT_WORK_TREE/public -type f -print | xargs -d '\n' chmod 644
find $GIT_WORK_TREE/public -type d -print | xargs -d '\n' chmod 755

echo "All done! 0 problems"

Para que esto funcione es importante que los permisos esten bien puestos: sudo chmod +x carpeta_remota/hooks/post-receive. Comprueba también que todas las carpetas a las que deba acceder el usuario git en el servidor sean de hecho accesibles al usuario git.

Instalar Hugo

Esto se puede hacer antes o después. Yo he optado por seguir al autor del blog de donde saqué este script y procedí a instalar hugo con snap. Para esto hay que tener snap previamente instalado, así que:

apt install snapd
snap install hugo

Una vez que todo esto está en marcha ya se puede mandar el blog desde el ordenador personal al servidor, y debería funcionar todo (a mí me funciona si lo hago todo así).

Cierre

Todo esto está lejos de ser accesible al común de los mortales. Yo puedo hacerlo porque en mi adolescencia y primera juventud (que estoy empezando a abandonar) perdí mucho tiempo trasteando con ordenadores, linux, programación y demás cosas por el estilo, pero empezar de cero con un proyecto de este tipo es la mejor manera de dejar de escribir un blog antes de empezar.

No obstante, para algún adolescente o joven con tiempo puede ser un proyecto muy motivante, si bien frustrante al principio (a pesar de la cantidad de tutoriales que hay), y desde luego una vez que has conseguido poner en marcha un sitio web, con ayuda, pero con el trabajo que tú has puesto, te sientes muy satisfecho.