Pelican, un generador de sitios estáticos.
Un generador de sitios web estáticos es una herramienta que permite escribir contenido utilizando un formato como Markdown (o ReStructuredText, AsciiDoc o algún otro) y procesarlo para obtener un sitio web estático.
Al generar el sitio web se pueden insertar enlaces, etiquetas para clasificar los contenidos y utilizar hojas de estilo para definir el aspecto de la salida. Todo de manera automática.
Así el usuario se centra en escribir los contenidos y después ejecuta el generador de sitios web para actualizar la salida.
En este artículo se va a demostrar el uso de Pelican, pero otro generador de sitios web estáticos muy práctico es Hugo.
Sobre Pelican
Pelican es un generador de sitios web estáticos libre y escrito en Python. Su nombre es un anagrama del nombre de la palabra calepin, que es un bloc de notas en Francés. Tiene muchos temas y plugins diferentes, pero la instalación básica —que se puede realizar sin privilegios de administrador en un minuto— ya permite generar unos sitios con un aspecto estupendo.
La documentación de Pelican es muy detallada y cuenta con una sección Quickstart que explica su instalación. Como la instalación se puede realizar a través de pip —la herramienta para la gestión de paquetes en Python—, cualquier usuario puede instalar Pelican en su directorio sin necesitar permisos de administrador.
Para instalar Pelican y Markdown bastará con ejecutar:
pip3 install pelican markdown
Una vez instalado, antes de poder utilizar la herramienta puede ser necesario cerrar el shell y volverlo a abrir para que la variable de entorno PATH esté actualizada.
Después podremos crear un par de directorios y ejecutar el asistente pelican-quickstart para crear un nuevo sitio:
vcarceler@torvalds-100:~$ mkdir -p pelican/actividades
vcarceler@torvalds-100:~$ cd pelican/actividades/
vcarceler@torvalds-100:~/pelican/actividades$ pelican-quickstart
Welcome to pelican-quickstart v4.0.1.
This script will help you create a new Pelican-based website.
Please answer the following questions so this script can generate the files
needed by Pelican.
> Where do you want to create your new web site? [.]
> What will be the title of this web site? Actividades
> Who will be the author of this web site? Victor Carceler
> What will be the default language of this web site? [ca] es
> Do you want to specify a URL prefix? e.g., https://example.com (Y/n) n
> Do you want to enable article pagination? (Y/n)
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] Europe/Madrid
> Do you want to generate a tasks.py/Makefile to automate generation and publishing? (Y/n)
> Do you want to upload your website using FTP? (y/N)
> Do you want to upload your website using SSH? (y/N)
> Do you want to upload your website using Dropbox? (y/N)
> Do you want to upload your website using S3? (y/N)
> Do you want to upload your website using Rackspace Cloud Files? (y/N)
> Do you want to upload your website using GitHub Pages? (y/N)
Done. Your new project is available at /home/vcarceler/pelican/actividades
vcarceler@torvalds-100:~/pelican/actividades$
Una vez inicializado, el directorio actividades quedará así:
vcarceler@torvalds-100:~/pelican/actividades$ ll
total 32
drwxrwxr-x 4 vcarceler vcarceler 4096 de ge 23 17:26 ./
drwxrwxr-x 3 vcarceler vcarceler 4096 de ge 23 17:25 ../
drwxrwxr-x 2 vcarceler vcarceler 4096 de ge 23 17:26 content/
-rw-rw-r-- 1 vcarceler vcarceler 2669 de ge 23 17:26 Makefile
drwxrwxr-x 2 vcarceler vcarceler 4096 de ge 23 17:26 output/
-rw-rw-r-- 1 vcarceler vcarceler 868 de ge 23 17:26 pelicanconf.py
-rw-rw-r-- 1 vcarceler vcarceler 589 de ge 23 17:26 publishconf.py
-rw-rw-r-- 1 vcarceler vcarceler 1748 de ge 23 17:26 tasks.py
vcarceler@torvalds-100:~/pelican/actividades$
Donde se puede observar:
- El directorio content, en el que escribiremos nuestro contenido.
- El directorio output, donde una vez generado aparecerá el contenido web.
- El fichero pelicanconf.py con la configuración del sitio.
La configuración por defecto de Pelican es razonable, pero a mí me gusta descomentar la última línea de pelicanconf.py para que se utilicen URLs relativas.
# Uncomment following line if you want document-relative URLs when developing
RELATIVE_URLS = True
Primer documento Markdown
Ya ha llegado el momento de comenzar a escribir contenidos, en este caso en Markdown. Como ejemplo se escribirá un pequeño documento, content/instalación-apache.md, que explicará como instalar un servidor web Apache en Ubuntu.
El contenido del fichero puede ser:
Title: Instalación de Apache Date: 2019-01-23 17:41 Category: WWW La instalación de Apache es muy sencilla. Bastará con ejecutar como administrador los siguientes comandos: `apt update` y
`apt install apache2`.
Si no estás familiarizado con la sintáxis de Markdown puedes consultar la excelente guía de Joe Di Castro.
Generar la salida web
Cuando se añada o modifique el contenido se puede ejecutar pelican para regenerar la salida web.
vcarceler@torvalds-100:~/pelican/actividades$ pelican content
Done: Processed 1 article, 0 drafts, 0 pages, 0 hidden pages and 0 draft pages in 0.11 seconds.
vcarceler@torvalds-100:~/pelican/actividades$
Lo que habrá generado el contenido web en el directorio output:
vcarceler@torvalds-100:~/pelican/actividades$ ll output
total 44
drwxrwxr-x 5 vcarceler vcarceler 4096 de ge 23 17:52 ./
drwxrwxr-x 4 vcarceler vcarceler 4096 de ge 23 17:52 ../
-rw-rw-r-- 1 vcarceler vcarceler 2135 de ge 23 17:52 archives.html
drwxrwxr-x 2 vcarceler vcarceler 4096 de ge 23 17:52 author/
-rw-rw-r-- 1 vcarceler vcarceler 2124 de ge 23 17:52 authors.html
-rw-rw-r-- 1 vcarceler vcarceler 2059 de ge 23 17:52 categories.html
drwxrwxr-x 2 vcarceler vcarceler 4096 de ge 23 17:52 category/
-rw-rw-r-- 1 vcarceler vcarceler 2774 de ge 23 17:52 index.html
-rw-rw-r-- 1 vcarceler vcarceler 2899 de ge 23 17:52 instalacion-de-apache.html
-rw-rw-r-- 1 vcarceler vcarceler 2038 de ge 23 17:52 tags.html
drwxrwxr-x 5 vcarceler vcarceler 4096 de ge 23 17:52 theme/
vcarceler@torvalds-100:~/pelican/actividades$
Listo para llevar a cualquier servidor web o publicar en nuestro directorio ~/public_html
.