De Github a Jekyll con git por ssh en VPS con Debian, Apache y Letsencrypt
Infotics era un proyecto de tener un blog sobre noticias, eventos, comentarios o información en general relacionada con las tecnologías de la información y la comunicación, con una perspectiva crítica, cooperativa, emancipadora y libre.
Desde que abandonamos la estructura de Cuarto Canal, también decidí convertir a infotics.es en mi página principal y pasar el blog a blog.infotics.es.
Iniciamos ahora una nueva etapa en un servidor propio, con un conjunto de tecnologías que hemos ido aprendiendo a lo largo de estos años y que pretenden conseguir más autonomía y facilitar la vida de quien/es producen estos contenidos.
Aprovecho para hacer un repaso de la historia tecnológica de infotics.es
Wordpress
En su inicio, infotics.es fue un proyecto de blog Wordpress del sistema Wordpress multiblog del proyecto cuartocanal.es alojado en los servidores de xsto.info. Allí compartía vida con otros dos blogs: el propio de Cuarto Canal y sportics.es, con información de deportes y tecnología.
Wordpress permite hacer fácil la vida a quien solo quiere escribir y a quien se preocupa del aspecto del blog, ya que cuenta con muchísimos temas que se pueden instalar libremente. También cuenta con muchos plugins, aunque no todos son fáciles ni van a facilitar la vida. En cualquier caso, es una buena opción para quien no se preocupa de la tecnología sino de escribir.
Es cierto que es Software Libre, pero por mi experiencia, la mayoría de lxs usuarixs con lxs que he tratado lo utilizan porque es gratuito y porque es fácil.
Dado que utilizo Emacs como procesador de textos y org-mode como sintaxis, un reto de aquella época fue conectar orgmode con wordpress, y esto fue posible gracias a encontrarme que alguien como Gabriel Saldaña ya lo estaba haciendo con org2blog de Punchagan. Con un poco de magia, sus tutoriales y también el de vxlabs, completé la configuración para escribir un artículo en org-mode y pasárselo al blog. Resultaba sencillísimo. De hecho, podías configurarlo para varios blogs, por lo que en el momento de publicación eligieras el blog del listado que hubieras creado.
Si alguien quiere seguir por ahí, también le recomiendo la lectura de
esta otra entrada donde explica como hacer que org2blog
soporte
lisp, elisp y lua.
Actualmente todavía lo utilizo en otros blogs en los que participo, como son el de Open Knowledge España o Sanda Sanshou Madrid.
Egelesta.net
Egelesta.net es la cara visible de un servidor que “mantenemos” Pebelino y yo para todo lo que se nos ocurra. Decir mantenemos es mucho decir, ya que el peso, el curro y los medios los da fundamentalmente él, y desde aquí quiero expresar no solo el agradecimiento sino también el gusto de trabajar con él.
Precisamente para experimentar con esos servidores donde trabajábamos con Wordpress, montamos uno en egelesta.net, y de hecho la web principal es el propio servidor multiblog de wordpress.
Instalar infotics.es en uno de esos blogs de wordpress habría sido el siguiente paso si no fuera porque aparecieron otras tecnologías que parecía que respondían mejor a mis intereses.
No os preocupéis que luego volveremos aquí, que es nuestra casa.
Github
Gracias al impulso que desde el grupo de periodismo de datos de Medialab estábamos dando a GitHub; gracias a algunas conversaciones con colegas y amigxs (Carlos, Pablo…) sobre el uso de generadores estáticos de contenido SSG (Static Site Generators) como entorno más apropiado para blogs y páginas personales que los gestores de contenido CMS (Content Management Systems); gracias a la búsqueda de herramientas más configurables, adaptables y que permitan autonomía tecnológica… abracé los súperpoderes de Github.
Esta etapa está explicada en esta entrada y en su repositorio, aunque no lo cuentan todo, quizás lo más obvio. Github es una web que permite, con una cuenta, utilizar un servidor git (el propio Github), crear repositorios públicos y por tanto tener una visibilidad web de todo lo que quieras poner ahí.
La web de GitHub está hecha con Jekyll (su código está disponible en Github) y quizás por eso, Github sirve cualquier repositorio con Jekyll, de tal forma que se convierte Github en un servidor web para Jekyll.
Jekyll sirve desde servidor web todo lo que pongas en la rama
gh-pages
. Lo hace desde el dominio github.io, creando un
subdominio con tu nombre de cuenta y una carpeta con el nombre del
repositorio. Siguiendo esta estructura, el blog en jekyll de Github
estaría en https://flowsta.github.io/blogs.infotics.es.
Aunque hasta ahora no lo había comentado, notad que además Github sirve por https, lo cual es una ventaja para la certificación de la autoría de los contenidos.
Si tienes un dominio o un subdominio, también es posible utilizar el repo con el Jekyll de Github. Para ello hay que hacer dos cosas:
- Crear un registro A, ANAME o ALIAS en el dominio que apunte a las IP de Github, 192.30.252.153 o 192.168.252.154
- Crear un archivo de texto con nombre CNAME con la información del
dominio o subdominio. En este caso, con
blog.infotics.es
La parte negativa de esto es que Github no te permite subir tu propio certificado, pongamos que creado con Let’s Encrypt, por lo que hay que pensar en otras alternativas, mejor si son posibles en tu propio servidor.
Gitlab
Una posibilidad en este punto era migrar el blog a Gitlab, que es como Github pero permite bastante más personalización, además de poder crearse con numerosos SSG como Middleman, Hugo, Hexo o Branch, entre otros.
Sin embargo, en el camino de esta migración, que no era todo lo fácil que pareciera por esa personalización que permite Gitlab, surgió otra ruta.
Servidor propio
En algún momento anterior, había decidido contratar un servidor OVH) con Debian y gestionar el dominio infotics.es. Eso permitía una mínima base para ciertas cosas, como algunas de las que había hecho hasta ahora. Este servidor también lo gestionamos los mismos colegas que egelesta.net.
Ahí está alojada la web de infotics.es, donde Pebelino trabajó el certificado con Let’s Encrypt (pronto os contaremos cómo).
En ese sentido, decidí que era hora también de que esa misma máquina sirviera blog.infotics.es. Para ello, seguí la guía de Digital Ocean para montar un blog con Jekyll y git.
Instalar Jekyll
En nuestro portátil u ordenador local, vamos a instalar Jekyll. Primero descargamos ruby:
curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0
Luego instalamos la gema de jekyll:
gem install jekyll
Nos situamos en el directorio elegido:
cd /ruta/directorio
Y creamos un blog en Jekyll:
jekyll new miblog
Nos situamos en el directorio del blog que Jekyll ha creado y lanzamos el servidor de Jekyll:
cd awesomeblog
jekyll serve
Instalar git
En el servidor, vamos a utilizar git para sincronizar nuestros datos:
apt-get install git-core
Y repetimos la instalación de Jekyll:
curl -L https://get.rvm.io | bash -s stable --ruby=2.0.0
gem install jekyll
Necesitamos un repositorio git desnudo:
cd ~/
mkdir repos && cd repos
mkdir awesomeblog.git && cd awesomeblog.git
git init --bare
Y conectamos git con el servidor:
git remote set-url origin cuenta@servidor.net:ruta-relativa-usuarix-proyecto.git
Ahora viene la magia
En local, crearemos un archivo post-receive
donde contaremos el gancho o
hook. Lo que hace git
es correr los comandos que situemos allí
cada vez que se produzca una actualización del repositorio.
En este caso, .git/hooks/post-receive
construye Jekyll en el
directorio seleccionado con las siguientes variables:
- GIT_REPO es la ruta al repo git desnudo creado en el paso anterior.
- TMP_GIT_CLONE es donde el script comprobará los archivos y construirá el blog antes de copiarlos a la ruta donde el servidor web los sirve.
- PUBLIC_WWW es la ruta donde el sitio reside y es servido por el servidor web.
Por tanto:
#!/bin/bash -l
GIT_REPO=$HOME/ruta/directorio
TMP_GIT_CLONE=$HOME/ruta/tmp
PUBLIC_WWW=/var/www/ruta
git clone $GIT_REPO $TMP_GIT_CLONE
jekyll build --source $TMP_GIT_CLONE --destination $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit
Jekyll al día
No te olvides de tener todas las extensiones -gemas- instaladas, incluida la propia Jekyll:
- jekyll
- jekyll-sitemap
- jekyll-redirect-from
- jemoji
- jekyll-mentions
Para ello:
gem install jekyll
Permisos
Tampoco olvides configurar apropiadamente los permisos de los directorios donde trabajas ni la propiedad de los mismos.
Por último
Esto puede evolucionar, esperemos que a mejor. Lo importante, ahora, es que toda esta información sea tan útil a otras personas como lo ha sido para mí.
El flujo de escritura sigue siendo el que relataba en el github de blogs.infotics.es
- Para no perder las buenas costumbres, los artículos seguirán siendo escritos en orgmode.
- Luego los exporto a Markdown
- Los copio a la carpeta `posts`.
- Incluyo la cabecera en yaml.
- Actualizo el repositorio git
- Se publican en http://blog.infotics.es
ToDo
Algunas tareas pendientes son:
- Mejorar el flujo de publicación desde la escritura en org-mode, y la exportación a markdown
- Recuperar las imágenes que tiene el blog de infotics en cuartocanal.
- Traducir todo el blog al castellano.
- Cambiarle el tema.
- Crear copia automática en Github