Ma bibliothèque d’ebook en ligne avec calibre et rsync

Au fil des années, j’ai constitué une petite bibliothèque virtuelle de livres numériques ebooks.  Jusqu’il y a peu, mes livres étaient répartis un peu partout sur mes disques durs, sans moyen simple de les consulter, ni de retrouver facilement les livres traitant d’un sujet en particulier.

Il y a quelques mois, j’ai pris le taureau par les cornes et j’ai enfin mis de l’ordre dans ma collection.  Depuis, elle est bien rangée et consultable facilement, sur mon poste de travail, ou depuis n’importe où via une simple interface web.

Le logiciel Calibre

Le logiciel Calibre est la base pour organiser sa bibliothèque.  C’est un logiciel libre qui tourne aussi bien sous Windows que Linux, et qui a pour vocation de trier et classer tous les livres disponibles. Tout nouveau livre doit être importé dans Calibre: cela signifie qu’un certain temps est nécessaire pour importer un ensemble relativement important de livres…

Fenêtre principale de Calibre
Fenêtre principale de Calibre

Lors de l’importation, il est capital de remplir correctement les méta-données des livres.  Ce sont elles qui permettront un tri et des recherches efficaces.  Personnellement, je fais particulièrement attention aux métadonnées suivantes:

  • le titre du livre
  • l’auteur.  Pour des revue de presse, l’auteur correspond au titre de la revue.
  • la série. Utile pour des revues de presse, ou pour des tomes de roman.
  • les étiquettes: j’essaie de mettre au moins trois étiquettes par livre.  Cela permet de définir le type de livre (roman, presse, bd, manuel…), le sujet abordé (science, nature, psychologie, aventure…), le public (jeunesse), etc…
  • la langue
  • la description: par exemple les principaux titres d’une revue, ou le synopsis pour un roman.
  • la date de publication
  • la photo de couverture

Pour les romans et manuels, les méta-données peuvent souvent être récupérées en cliquant sur bouton « Télécharger les métadonnées »: calibre va se connecter à Google, Amazon et autres pour proposer un ensemble de métadonnées, sur base du titre.

Une fois tous les livres importés, calibre propose une interface de recherche assez puissante.  C’est déjà pas mal…

Interface web pour Calibre

…Ce qui serait encore mieux c’est de pouvoir accéder à notre bibliothèque calibre depuis Internet. C’est possible car Calibre propose un serveur web intégré, qui nous allons installer sur notre serveur d’auto-hébergement Debian.

sudo apt-get install calibre

Il faut créer un répertoire spécifique sur le serveur pour contenir notre bibliothèque:

sudo mkdir /var/calibre/

Enfin, nous allons synchroniser notre bibliothèque calibre entre notre poste de travail et notre serveur Debian.  Depuis Linux, rsync est hyper simple et très performant:

rsync -e ssh -av --delete-after Bibliothèque\ calibre/ serveur_ip:/var/calibre/Bibliothèque\\\ Calibre/

Il faut remplacer serveur_ip par le nom d’hôte ou l’IP de notre serveur.

Sous Windows, l’utilitaire DirSyncPro peut être utilisé pour le même résultat.

Démarrage avec systemd

Pour démarrer le serveur calibre automatiquement, il faut créer le fichier /etc/systemd/system/calibre-server.service décrivant le service:

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

[Service]
Type=simple
ExecStart=/usr/bin/calibre-server --with-library "/var/calibre/Bibliothèque Calibre" -p 9999

[Install]
WantedBy=default.target

On active le service:

systemctl enable calibre-server
systemctl start  calibre-server

En se connectant en HTTP sur le port 9999 du serveur, on devrait accéder à un joli interface sur notre bibliothèque!

Interface web de Calibre

Sécurité: authentification, SSL, reverse proxy

Le serveur calibre ne gère pas d’authentification: tout le monde a accès à la bibliothèque.  De plus, même s’il supporte un mode HTTPS, ce n’est pas simple de gérer les certificats SSL avec Let’s Encrypt.

Pour remédier à ces petites faiblesses, j’ai configuré Apache en reverse proxy avec un nom de domaine dédié et des certificats SSL valides fournis par Let’s Encrypt.  J’ai rajouté une authentification basique qui me permet de n’autoriser l’accès qu’aux personnes possédant un compte reconnu par Apache.

Voici le fichier de configuration de mon site /etc/apache2/sites-available/books.conf:

<VirtualHost *:80>
ServerName books.example.com
DocumentRoot /var/www/books

ErrorLog ${APACHE_LOG_DIR}/books-error.log
CustomLog ${APACHE_LOG_DIR}/books-access.log combined

RewriteEngine on
RewriteRule ^ https://books.example.com%{REQUEST_URI} [L,QSA,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName books.example.com
DocumentRoot /var/www/books

ProxyPreserveHost on
ProxyPass / http://127.0.0.1:9999/
ProxyPassReverse / http://127.0.0.1:9999/

<Location />
AuthType Basic
AuthName "Bibliothèque calibre"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Location>

ErrorLog ${APACHE_LOG_DIR}/books-error.log
CustomLog ${APACHE_LOG_DIR}/books-access.log combined

SSLCertificateFile /etc/letsencrypt/live/books.example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/books.example.com/privkey.pem
</VirtualHost>

</IfModule>

Ce fichier comprend plusieurs éléments:

  • Deux VirtualHosts avec un nom d’hôte identique, un sur le port 80 (HTTP), un sur le port 443 (HTTPS)
  • Une redirection automatique vers l’HTTPS (RewriteRule)
  • Une authentification « basic » sur la racine du site
  • Les commandes de ReverseProxy vers le port local 9999 (ProxyPass & ProxyPassReverse)
  • les liens vers les fichiers SSL générés par Let’s Encrypt.

Pour activer le tout:

a2ensite books
systemctl reload apache2

Pour terminer la configuration, il faut encore interdire l’accès au port natif 9999 de calibre, car il n’y a pas d’authentification ni de SSL.  Dans mon cas, comme j’utilise ufw pour configurer mon pare-feu, le port était déjà fermé.

Vous voici avec une jolie bibliothèque accessible en ligne!

Calibre: listing des livres

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *