Cómo crear un sitio web estático con Jekyll

Dr Jekyll and Mr Hyde

En este artículo vamos a explicar cómo crear un sitio web estático usando una pieza de software muy interesante llamada Jekyll, un generador de sitios web estáticos.

Un sitio web estático es una colección de páginas web escritas a mano o generadas por un programa de software, cuyo contenido y funcionalidad solo puede ser cambiada al editar directamente los archivos HTML.

Este tipo de sitios web no tienen acceso a una base de datos, por lo que no pueden almacenar ni consultar información para actualizar o personalizar el contenido de las páginas web de forma dinámica.

Ventajas de las páginas web estáticas

En primer lugar, no requieren un servicio de hosting sofisticado (con soporte para PHP, Python o Ruby), debido a que el sitio está compuesto simplemente de archivos HTML, CSS y JavaScript.

La velocidad de carga es mayor por el simple hecho de no tener que consultar la información desde una base de datos. Esto también hace que el sitio sea menos vulnerable a ataques cibernéticos ya que no hay datos almacenados en línea.

Como resultado, se puede ahorrar considerablemente en costos de hosting ya que solo se necesitará el servicio de almacenamiento de archivos y transferencia de datos. Si se utilizan servicios como Github Pages, ¡el costo del hosting puede reducirse a cero!

Desventajas de las páginas web estáticas

No es posible crear o editar las páginas con un editor en línea, como en el caso de Wordpress. Para crear una página estática es necesario crear un archivo HTML y agregar el contenido usando código HTML.

En algunos casos, es posible crear páginas web estáticas usando archivos Markdown y algunas plantillas HTML. Esto es cierto para algunos generadores de sitios web estáticos como Jekyll.

No es posible tener usuarios. La creación de las páginas y del contenido estarán limitadas a las personas que tengan acceso a los archivos HTML y que tengan el suficiente conocimiento técnico para crear y publicar las páginas.

En conclusión…

A pesar de las desventajas, los sitios web estáticos son una excelente opción para los dueños de blogs y sitios de contenido pequeños o medianos que están buscando alternativas a sistemas como Joomla, Wordpress o Drupal; que desean ahorrar en costos de hosting o que desean reducir la vulnerabilidad de un sitio web a ataques cibernéticos.

A continuación vamos a entrar en materia, explicando detalladamente cómo crear un sitio web estático con Jekyll.

Instalando Jekyll

Para continuar, es necesario tener Ruby instalado en nuestra computadora.

Para comenzar debemos instalar Jekyll en nuestra computadora. Para esto vamos a ejecutar la siguiente instrucción en la terminal:

$ gem install jekyll bundler

La instrucción anterior instalará Jekyll, así como la librería Bundler que sirve para facilitar la instalación de librerías adicionales que pudiésemos necesitar a la hora de crear las páginas web estáticas.

Creando un nuevo sitio web estático

Para crear un nuevo sitio web estático, ejecutamos el siguiente comando en la terminal:

$ jekyll new jekyll-site

Al ejecutarlo, Jekyll creará un directorio llamado jekyll-site con la siguiente estructura:

jekyll-site/
  _posts/
    2016-11-28-welcome-to-jekyll.markdown
  _config.yml
  about.md
  Gemfile
  index.md

Debido a que Jekyll es principalmente un generador de blogs, en el directorio _posts/ almacenaremos todos los artículos que deben aparecer en orden cronológico. Como podemos ver, Jekyll ya ha generado un artículo de ejemplo.

El archivo _config.yml sirve para editar las configuraciones por defecto de Jekyll. Con él podemos controlar la forma en la que Jekyll debe generar los artículos y las páginas web estáticas.

El archivo Gemfile permite definir las dependencias o librerías de Ruby adicionales que podamos llegar a necesitar al momento de crear el sitio web. Este archivo es similar al archivo requirements.txt en Python o al archivo packages.json en el ambiente JavaScript.

Finalmente, los archivos con extensión .md o .markdown son los que componen el contenido de las páginas y artículos del sitio web estático. Jekyll los transformará a código HTML en el proceso de compilación.

Adicionalmente, se instalarán algunas librerías adicionales como son el tema minima y una librería para la generación de feeds RSS.

Un tema es un conjunto de plantillas HTML, archivos CSS y JavaScript que definen la apariencia de un sitio Jekyll.

Por último, vamos a generar el sitio. Para esto, ejecutamos las siguientes instrucciones en la terminal:

$ cd jekyll-site/
$ bundle exec jekyll serve

Con lo cual podemos ver el sitio generado en un navegador web, accediendo a la dirección http://localhost:4000/:

Sitio web estático Jekyll

Agregando artículos al sitio web estático

Para agregar artículos al sitio web estático que acabamos de generar, vamos a crear un nuevo archivo en el directorio _posts/ y lo vamos a nombrar teniendo en cuenta el patrón YYYY-MM-DD-nombre-del-archivo.markdown:

jekyll-site/
  _posts/
    2016-11-28-bienvenido-a-jekyll.markdown

El nombre debe contener el año, mes y día de creación para que Jekyll pueda generar y organizar el artículo de manera apropiada.

A continuación, vamos a agregar una sección especial al inicio del archivo llamada Front Matter. Esta sección contiene variables de configuración e información que podemos utilizar en el cuerpo del artículo al momento de generarlo.

---
layout: post
title: ¡Bienvenido a Jekyll!
date: 2016-11-28 10:44:50 -0500 -0500
categories: jekyll update español
---

El texto dentro del Front Matter debe escribirse en formato YAML.

La variable layout sirve para definir el tipo de plantilla que debe usarse para generar el artículo. Estos layouts se encuentran definidos en el tema instalado anteriormente.

La variable title contiene el título del artículo y se mostrará en el HTML generado como un heading de nivel uno <h1>.

A pesar que la fecha de creación del artículo ya ha sido definida en el nombre del archivo, la variable date sirve para agregar detalles adicionales como la hora y la zona horaria.

La variable categories permite definir las categorías a las que pertenece el artículo. Con esta información, Jekyll puede organizar automáticamente las páginas por categoría.

También se puede utilizar la variable category en lugar de categories para cuando se desee definir una única categoría. Si adicionalmente deseamos organizar los artículos por etiquetas, podemos hacer uso de la variable tags.

Si deseamos incluir el nombre del autor, podemos utilizar la variable author. Si son varios autores, entonces podemos usar la variable authors.

Finalmente podemos agregar el contenido del artículo enseguida del Front Matter:

Usted encontrará este artículo en el directorio `_posts`. Adelante, editelo y
re-compile el sitio para ver sus cambios. Usted puede re-compilar el sitio de
diferentes maneras, pero la más común es ejecutando `jekyll serve`, el cual
inicia un servidor web y regenera el sitio cuando un archivo es actualizado.

Para crear artículos nuevos, simplemente agregue un archivo en el directorio
`_posts` de manera que siga esta convención `YYYY-MM-DD-nombre-del-artículo.ext`
e incluya la información necesaria en el _front matter_. Déle un vistazo al
código fuente para este artículo para tener una idea de cómo funciona.

Jekyll también ofrece soporte para _snippets_ de código:

{% highlight ruby %}
def print_hi(name)
  puts "Hi, #{name}"
end
print_hi('Tom')
#=> prints 'Hi, Tom' to STDOUT.
{% endhighlight %}

Revise la [documentación de Jekyll][jekyll-docs] para mayor información sobre
como sacar el máximo provecho de Jekyll. Reporte todos los _bugs_ a [Jekyll en
GitHub][jekyll-gh]. Si tiene preguntas, puede discutirlas en [Jekyll
Talk][jekyll-talk].

[jekyll-docs]: http://jekyllrb.com/docs/home
[jekyll-gh]:   https://github.com/jekyll/jekyll
[jekyll-talk]: https://talk.jekyllrb.com/

El cuerpo del artículo debe estar escrito en formato Markdown. Al guardar el archivo, Jekyll detectará los cambios y hará que el servidor local se recargue automáticamente.

Adicionalmente, podemos apreciar unas etiquetas especiales: {% highlight ruby %} y {% endhighlight %}. Particularmente, estas etiquetas sirven para agregar color al texto que se encuentra dentro. El texto en mención es un fragmento de código Ruby.

Este tipo de etiquetas también son útiles para controlar el comportamiento del generador de páginas estáticas. La explicación de cómo usarlas será tema de un próximo artículo.

Si accedemos a la página del artículo en el navegador, podemos ver el resultado:

Sitio web estático Jekyll

Agregando páginas al sitio web estático

Además de artículos de blog, Jekyll tiene la capacidad de generar páginas estáticas. El proceso de creación de una página estática es idéntico al de un artículo.

Al contrario de un artículo de blog, las páginas estáticas no se organizan cronológicamente, ni tampoco en categorías o etiquetas.

A continuación vamos a crear una nueva página estática, creando para ello un archivo llamado acerca.md en el directorio raíz:

jekyll-site/
  acerca.md

La sección Front Matter de una página es mas simple que la de un artículo. Agregamos las siguientes líneas al inicio del archivo:

---
layout: page
title: Acerca
permalink: /acerca/
---

La variable permalink se utiliza para manipular la URL de la página. En este caso le indicamos a Jekyll que la URL debe ser /acerca/ y no /acerca.html, la cual sería la URL por defecto.

La variable permalink puede ser usada tanto en artículos como en páginas estáticas.

Enseguida, agregamos el contenido:

Este es el tema básico de Jekyll. Puede encontrar más información acerca de la
personalización de su tema, así como documentación sobre el uso de Jekyll en
[jekyllrb.com](http://jekyllrb.com/).

Puede encontrar el código fuente del tema en: {% include icon-github.html
username="jekyll" %} / [minima](https://github.com/jekyll/minima)

Puede encontrar el código fuente de Jekyll en {% include icon-github.html
username="jekyll" %} / [6](https://github.com/jekyll/jekyll)

Cómo se mencionó anteriormente, el contenido siempre debe estar escrito en formato Markdown.

En esta oportunidad, apreciamos una nueva etiqueta en el contenido de la página estática: {% include icon-github.html username="jekyll" %}, la cual permite incluir una plantilla HTML dentro de otra.

Al cargar la dirección http://localhost:4000/acerca/, podemos ver la página generada:

Sitio web estático Jekyll

Cambiando la configuración de Jekyll

La configuración de Jekyll se compone de un listado de variables que permiten controlar el proceso de generación del sitio web estático.

Jekyll define una serie de variables de configuración por defecto, pero también se pueden crear nuevas variables a la medida de las necesidades.

Estas variables pueden ser utilizadas en las plantillas del tema para modificar su comportamiento en ciertas situaciones o para inyectar información como el titulo, descripción y autores de un artículo o página determinada.

Para ilustrar lo anterior, vamos a modificar el título del sitio web. Para esto vamos a abrir el archivo _config.yml y vamos a cambiar el valor de la variable title así:

title: Un título asombroso

Para hacer efectivo el cambio que acabamos de hacer, debemos reiniciar el servidor local presionando CTRL+C y ejecutando de nuevo el siguiente comando en la terminal:

$ bundle exec jekyll serve

Podemos observar que hemos cambiado el título del sitio de forma exitosa:

Sitio web estático Jekyll

Aquí termina este artículo introductorio sobre cómo crear sitos web estáticos con Jekyll. En un próximo artículo estaremos explicando el proceso de creación de un template Jekyll.