Cómo instalar Jekyll usando Docker

Cómo instalar Jekyll usando Docker Créditos de imagen: Unsplash

Existen dos formas de instalar el generador de sitios web Jekyll en un equipo de desarrollo:

  • Clásica: Instalando las librerías de Ruby y el paquete gem de Jekyll, ya sea desde los repositorios del sistema operativo o descargando el fichero instalador.
  • Usando contenedores: A partir de una imagen (Docker en nuestro caso) en la que ya esté instalado Ruby y Jekyll, se creará un contenedor desde el que se ejecutarán los comandos necesarios para trabajar.

La ventaja de utilizar Docker son:

  • En un mismo equipo se podrá trabajar cómodamente con diferentes versiones de Jekyll, según lo requiera cada proyecto.
  • El equipo permanecerá limpio de librerías que sólo se utilizan con Jekyll.
  • Traspasar una instalación a otro equipo será tan fácil como copiar los ficheros de configuración del proyecto y ejecutar el comando que crea el contenedor.

Instalación con la imagen Docker

Lógicamente, antes de emplear este método es necesario haber instalado Docker en nuestro equipo.

  • Iniciar el demonio Docker.
$ systemctl start docker.service
  • Con la siguiente instrucción crearemos un blog demo con la plantilla básica. Lo que hará este comando será lo siguiente:

    1. Descargar la versión indicada de la imagen Jeylll, si aún no la tenemos en local.
    2. Crear un contenedor basado en esa imagen llamado mi-blog.
    3. Montar la carpeta actual local en la carpeta /srv/jekyll del contenedor.
    4. Ejecutar en el contenedor el comando jekyll new mi-blog, lo que creará un nuevo proyecto Jekyll en la carpeta ./mi-blog/.
    5. Abrir la carpeta del nuevo proyecto.

El parámetro --rm indica que el contenedor se limpiará después de que el comando termine. El parámetro -it permite que se abra un seudo-TTY con stdin, lo que posibilita ejecutar comandos mientras el contenedor esté ejecutándose.

$ export JEKYLL_VERSION=4.2.2
  export site_name="mi-blog"
  docker run --rm \
    --volume="$PWD:/srv/jekyll" \
    -it jekyll/jekyll:$JEKYLL_VERSION \
    sh -c "chown -R jekyll /usr/gem/ && jekyll new $site_name" \
    && cd $site_name

-------------------------------------------------------
Unable to find image 'jekyll/jekyll:4.2.2' locally
4.2.2: Pulling from jekyll/jekyll
df9b9388f04a: Pull complete
....
5b38ada00694: Pull complete
Digest: sha256:c6ef24955783315c86ce3cf5c60911c2cb4818967322f2d18eeb2193b3e85f1813
Status: Downloaded newer image for jekyll/jekyll:4.2.2
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux-musl]
Running bundle install in /srv/jekyll/mi-blog...
  Bundler: Fetching gem metadata from https://rubygems.org/....
  Bundler: Resolving dependencies...
  ....
  Bundler: Bundle complete! 7 Gemfile dependencies, 31 gems now installed.
  Bundler: Use `bundle info [gemname]` to see where a bundled gem is installed.
New jekyll site installed in /srv/jekyll/mi-blog.
  • Por ahora sólamente hemos iniciado el contenedor y creado los ficheros del proyecto, que se podrán leer, modificar o agregar en la carpeta ./mi-blog/ creada.

  • Para construir el sitio web debemos ejecutar la siguiente instrucción.

$ docker run --rm --volume="$PWD:/srv/jekyll" -it jekyll/jekyll:$JEKYLL_VERSION jekyll build

------------------------------------------------------
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux-musl]
Configuration file: /srv/jekyll/_config.yml
            Source: /srv/jekyll
       Destination: /srv/jekyll/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
       Jekyll Feed: Generating feed for posts
                    done in 0.302 seconds.
 Auto-regeneration: disabled. Use --watch to enable.
  • Una vez construido el sitio (alojado en la carpeta _site), podremos levantar el servidor para comprobar su funcionamiento.

¡AVISO! Es probable que de error al iniciar el servidor. Si es el caso, añadir la siguiente línea en el fichero Gemfile: gem 'webrick'

$ docker run --name $site_name --volume="$PWD:/srv/jekyll" -p 3000:4000 -it jekyll/jekyll:$JEKYLL_VERSION jekyll serve --watch --drafts

-------------------------------------------------------
Fetching gem metadata from https://rubygems.org/.........
Resolving dependencies...
Using bundler 2.3.13
Using public_suffix 4.0.7
....
Installing webrick 1.7.0
Bundle complete! 8 Gemfile dependencies, 32 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
ruby 3.1.1p18 (2022-02-18 revision 53f5fc4236) [x86_64-linux-musl]
Configuration file: /srv/jekyll/_config.yml
            Source: /srv/jekyll
       Destination: /srv/jekyll/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
       Jekyll Feed: Generating feed for posts
                    done in 0.292 seconds.
 Auto-regeneration: enabled for '/srv/jekyll'
    Server address: http://0.0.0.0:4000/
  Server running... press ctrl-c to stop.

Para mostrar la página web debemos abrir en un navegador la siguiente dirección: http://localhost:3000/. Mientras se sirve el sitio, cualquier modificación que hagamos en los ficheros se verá reflejada en el navegador, simplemente actualizando la página afectada.

  • Tras la creación del contenedor, éste se podrá iniciar y parar con las siguientes instrucciones.
  1. Abrir la carpeta del proyecto.
    $ cd ~/proyectos-web/mi-blog
    
  2. Iniciar el contenedor.
    $ docker container start mi-blog
    
  3. Parar el contenedor.
    $ docker container stop mi-blog
    

Artículos relacionados

Comentarios