Cómo instalar Calibre Ebook Server en Ubuntu 22.04

Calibre es un gestor de libros electrónicos gratuito y de código abierto. Funciona como una aplicación de escritorio multiplataforma junto con un componente de servidor. El componente de escritorio puede gestionar tu biblioteca de libros electrónicos en un único dispositivo. Y el componente servidor te permite

  • Acceder a tus libros desde cualquier lugar del mundo.
  • Transferir fácilmente tus libros a dispositivos móviles.
  • Compartir libros con tus amigos y familiares.
  • Leer libros electrónicos directamente en la web.

En este tutorial, aprenderás a instalar el servidor Calibre en una máquina Ubuntu 22.04.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un usuario no root con privilegios sudo.
  • El Cortafuegos sin complicaciones (UFW) está activado y en ejecución.
  • Un nombre de dominio Completamente Cualificado apuntando al servidor. Para nuestro tutorial, utilizaremos el dominio calibre.example.com.
  • Todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el Cortafuegos

El primer paso antes de instalar ningún paquete es configurar el cortafuegos para que permita las conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2 – Descarga e instala el servidor Calibre

Ubuntu 22.04 viene con Calibre, pero es mejor instalarlo directamente para tener la última versión.

El primer paso es instalar algunas dependencias.

$ sudo apt install libopengl0 libxkbcommon-x11-0 libegl1 libfontconfig libgl1-mesa-glx

Descarga el instalador del servidor Calibre.

$ wget https://download.calibre-ebook.com/linux-installer.sh

Haz ejecutable el script de instalación.

$ chmod +x ./linux-installer.sh

Ejecuta el instalador.

$ sudo ./linux-installer.sh

Recibirás algunas advertencias porque el instalador espera un escritorio y no un servidor. Es seguro ignorar las advertencias.

Paso 3 – Crea una biblioteca Calibre y añade tu primer libro

El siguiente paso es crear una biblioteca Calibre y añadirle algunos libros. Para nuestro tutorial, descargaremos el libro Las aventuras de Sherlock Holmes de Arthur Conan Doyle del Proyecto Gutenberg.

$ wget http://www.gutenberg.org/ebooks/1661.kindle.noimages -O adventuresofsherlockholmes.mobi

Coge siempre la versión Kindle del libro del sitio. En este caso, cambiaremos el nombre de la versión Kindle a filename.mobi porque el formato Mobi se admite de forma nativa en Kindle, razón por la que se denomina así en el sitio. También ofrece mejores opciones de formato que la versión Epub.

Crea un directorio para la biblioteca Calibre.

$ mkdir calibre-library

Añade el libro que acabas de descargar a la biblioteca utilizando el comando calibredb. Especificamos la ubicación de la biblioteca en el propio comando.

$ calibredb add adventuresofsherlockholmes.mobi --with-library calibre-library/
Added book ids: 1

Puedes añadir varios libros a la vez de la siguiente manera.

$ calibredb add *.mobi --with-library calibre-library/

Paso 4 – Iniciar el servidor Calibre

Ahora que ya tenemos listos nuestros libros, es el momento de iniciar el servidor Calibre.

$ calibre-server calibre-library

El comando calibre-server toma como argumento la ubicación de la biblioteca. Deberías ver una salida similar.

calibre server listening on 0.0.0.0:8080
OPDS feeds advertised via BonJour at: your_server_ip port: 8080

Esto expone el servidor Calibre en el puerto 8080. Para ver el servidor, primero tienes que abrir el puerto. Ejecuta el siguiente comando para abrir el puerto 8080.

$ sudo ufw allow 8080

Abre la URL http://<yourserverIP>:8080/ en tu navegador y obtendrás la siguiente pantalla. La pantalla se mostrará oscura o clara dependiendo de la elección del tema de tu sistema operativo.

Calibre Server Inicio

Haz clic en el enlace calibre-library para ver el libro que has añadido en el paso anterior.

Vista de la biblioteca del servidor Calibre

Cierra el servidor pulsando las teclas Ctrl + C en tu terminal.

Puedes utilizar un puerto diferente para exponer el servidor Calibre. Para ello, utiliza el siguiente comando. Tendrás que asegurarte de que el puerto está abierto en el cortafuegos.

$ calibre-server calibre-library --port 7654

Paso 5 – Crear un archivo de servicio systemd

Para que el proceso del servidor Calibre sea persistente y sobreviva a los reinicios, necesitas crear un archivo de servicio systemd para el mismo.

Crea un archivo llamado calibre-server.service en el directorio /etc/sytemd/system/ y ábrelo para editarlo.

$ sudo nano /etc/systemd/system/calibre-server.service

Pega en él el siguiente código.

[Unit]
Description=Calibre Server
After=network.target

[Service]
Type=simple
User=<username>
Group=<username>
ExecStart=/opt/calibre/calibre-server /home/<username>/calibre-library --enable-local-write

[Install]
WantedBy=multi-user.target

La bandera --enable-local-write da al servidor acceso de escritura para añadir nuevos libros a la biblioteca. Esto se debe a que no puedes añadir libros utilizando el comando calibredb mientras el servidor está en ejecución.

Sustituye <username> por el nombre de usuario de tu sistema Linux en el código anterior. Guarda y cierra el archivo pulsando Ctrl+W e introduciendo Y cuando se te solicite.

Recarga el demonio de servicio para activar el archivo de servicio.

$ sudo systemctl daemon-reload

Activa e inicia el servicio Calibre.

$ sudo systemctl enable calibre-server
$ sudo systemctl start calibre-server

Comprueba el estado del servicio.

$ sudo systemctl status calibre-server
? calibre-server.service - Calibre Server
     Loaded: loaded (/etc/systemd/system/calibre-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-07-25 07:23:42 UTC; 15s ago
   Main PID: 1877 (BonJour)
      Tasks: 13 (limit: 2241)
     Memory: 53.3M
        CPU: 762ms
     CGroup: /system.slice/calibre-server.service
             ??1877 /opt/calibre/bin/calibre-server /home/<username>/calibre-library --enable-local-write

Jul 25 07:23:42 calibre systemd[1]: Started Calibre Server.
Jul 25 07:23:42 calibre calibre-server[1877]: QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-<username>'
Jul 25 07:23:42 calibre calibre-server[1877]: calibre server listening on 0.0.0.0:8080
Jul 25 07:23:43 calibre calibre-server[1877]: OPDS feeds advertised via BonJour at: 69.28.84.201 port: 8080

Paso 6 – Activar la autenticación de usuario

Puedes añadir autenticación de usuario a Calibre para proteger tu biblioteca y que no esté disponible para cualquiera. Primero, detén el servidor Calibre.

$ sudo systemctl stop calibre-server

Calibre utiliza una base de datos SQLite para almacenar las credenciales de usuario. Inicia el script de gestión de usuarios de Calibre para añadir un usuario.

$ sudo calibre-server --manage-users

Se te darán cuatro opciones y se te preguntará por tu elección. Pulsa 1 para añadir un nuevo usuario, y proporciona el nombre de usuario y la contraseña para terminar de añadir un nuevo usuario.

1) Add a new user
2) Edit an existing user
3) Remove a user
4) Cancel

What do you want to do? [1-4]: (Press 1)
Enter the username: howtoforge
Enter the new password for howtoforge:
Re-enter the new password for howtoforge, to verify:
User howtoforge added successfully!

A continuación, tienes que editar el archivo de servicio para comprobar la autenticación. Abre el archivo para editarlo.

$ sudo nano /etc/systemd/system/calibre-server.service

Añade la bandera --enable-auth al final de la línea que empieza por ExecStart para activar la autenticación del usuario.

...
ExecStart=/opt/calibre/calibre-server "/home/<username>/calibre-library" --userdb "/home/<username>/.config/calibre/server-users.sqlite" --enable-local-write --enable-auth
...

Guarda y cierra el archivo pulsando Ctrl+W e introduciendo Y cuando se te solicite.

Vuelve a cargar el demonio de servicio e inicia el servicio.

$ sudo systemctl daemon-reload
$ sudo systemctl start calibre-server

Si abres la URL de la biblioteca, se te pedirá tu nombre de usuario y contraseña antes de permitirte acceder a ella. Introduce tus credenciales y pulsa el botón Iniciar sesión para acceder a la biblioteca.

Mensaje de autenticación del servidor Calibre

Paso 7 – Añadir libros automáticamente a la biblioteca

Calibre te permite añadir libros automáticamente a la biblioteca mediante una tarea Cron. Para ello, busca nuevos libros en un directorio a intervalos regulares y los añade a la biblioteca. Esta es la forma más rápida de añadir libros, ya que basta con subirlos al directorio para que aparezcan pronto en la biblioteca sin ninguna intervención manual.

El primer paso es crear un directorio de vigilancia.

$ mkdir ~/calibre-watch
$ cd ~/calibre-watch

Descarga el libro War and Peace de Leo Tolstoy a este directorio desde el Proyecto Gutenberg.

$ wget https://www.gutenberg.org/ebooks/2600.kindle.images -O warandpeace.mobi

Si te fijas, esta vez estamos descargando una versión que tiene imágenes. Esto varía de un libro a otro en el Proyecto Gutenberg. Algunos tienen versiones con imágenes y otros no. Calibre funciona bien con ambos formatos.

Abre el editor Crontab.

$ crontab -e

Si es la primera vez que utilizas el Crontab, se te pedirá que elijas un editor.

no crontab for <username> - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.basic
  3. /usr/bin/vim.tiny
  4. /bin/ed

Choose 1-4 [1]:

Introduce 1 para elegir el editor Nano, ya que es el más fácil de manejar.

Añade el siguiente comando al final del archivo.

*/5 * * * * calibredb add /home/<username>/calibre-watch/ -r --with-library http://localhost:8080#calibre-library --username mycalibreuser --password StrongPassword! && rm -r /home/<username>/calibre-watch/*

Este script añadirá todos los archivos del directorio /home/<username>/calibre-watch a la biblioteca de calibre y eliminará todos los archivos originales, puesto que ya no son necesarios. La tarea anterior se ejecutará cada 5 minutos. Sustituye <username> por el nombre de usuario de tu sistema Linux y añade tus credenciales de Calibre en los lugares adecuados.

Guarda y cierra el archivo pulsando Ctrl+W e introduciendo Y cuando se te solicite. Espera unos minutos y vuelve a cargar el sitio del servidor de calibre para ver aparecer en la biblioteca el libro que acabas de añadir.

Paso 8 – Instalar Nginx

Ubuntu 22.04 viene con una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Paso 9 – Instalar SSL

Ahora mismo, Calibre está expuesto en un puerto HTTP a través de una dirección IP. Para protegerlo mejor, habilitaremos el acceso a través de un dominio dedicado utilizando un certificado SSL.

Necesitamos instalar Certbot para generar el certificado SSL para Calibre. Puedes instalar Certbot utilizando el repositorio de Ubuntu o conseguir la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d calibre.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/calibre.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Abre el archivo /etc/letsencrypt/renewal/calibre.example.com.conf para editarlo.

$ sudo nano /etc/letsencrypt/renewal/calibre.example.com.conf

Pega el siguiente código en la parte inferior.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Hemos generado el certificado SSL utilizando la opción autónoma de Certbot. Ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para apagar y reiniciar automáticamente el servidor Nginx, por lo que no requieren intervención manual.

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 10 – Configurar Nginx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/calibre.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/calibre.conf

Pega en él el siguiente código. Sustituye calibre.example.com por el nombre de tu dominio. Hemos fijado el valor de la variable client_max_body_size en 50MB. Puedes cambiarlo según tus necesidades.

server {

    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    http2_push_preload on; # Enable HTTP/2 Server Push
    
    # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
    # prevent replay attacks.
    #
    # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
    ssl_early_data on;

    server_name calibre.example.com;

    client_max_body_size 50M;

    access_log  /var/log/nginx/calibre.access.log;
    error_log   /var/log/nginx/calibre.error.log;

    ssl_certificate      /etc/letsencrypt/live/calibre.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/calibre.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/calibre.example.com/chain.pem;
    
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;        
    }
}
# enforce HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name  calibre.example.com;
    return 301   https://$host$request_uri;
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Comprueba la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx para habilitar los archivos de configuración.

$ sudo systemctl restart nginx

Visita https://calibre.example.com en tu navegador para acceder a Calibre. Podrás ver que el libro añadido mediante Cron también está disponible en la biblioteca.

Actualización de la biblioteca Calibre

Conclusión

Con esto concluye nuestro tutorial sobre la instalación del servidor Calibre en una máquina Ubuntu 22.04 utilizando Nginx. También hemos configurado Calibre para habilitar la autenticación básica y añadir soporte para añadir automáticamente nuevos libros. Calibre Server incluye muchas herramientas de línea de comandos. Para saber más sobre ellas, puedes visitar la Documentación de Calibre. Si tienes alguna pregunta, publícala en los comentarios.

También te podría gustar...