Installer Shiori avec Docker: rapide mais pas si simple...

17 mars 2022

Je viens de me casser la tête pendant quelques heures sur mon serveur Raspberry Pi. La raison? Docker, et Shiori. Non non, ne pensez pas que ces deux applications sont mauvaises, LOIN DE LA! Docker est un excellent programme pour déployer des applications où sa complexité réelle est sa propre configuration face aux différentes images proposées par la communauté open-source.

Shiori en revanche, est un clone open-source de Pocket… Tiens, en parlant de ça, vous vous en souvenez de ce partenariat avec Firefox qui avait fait couler beaucoup d’encre? Oui, je sais, j’étais aussi très salé à ce moment… Heureusement qu’il est au moins possible de le désactiver à ce jour (via about:config …)

Bref, oui, Shiori. C’est une alternative open-source à Pocket qui mériterait d’être plus connu pour ceux faisant de la veille technologique. L’application web est réalisée en Golang, et qui a repris de l’activité (en 2022) après un changement de propriétaire. J’ai même vu qu’il existe un plugin pour Firefox/Chrome!

Alors c’est fait, je suis convaincu, je me lance, et je me selfhost cette application qui me paraît être utile pour la productivité! Mais, pour le faire correctement, il me faudra faire un jeu de pistes, et beaucoup de bravoure… Pour vous dire, il m’a fallu presque 3 heures pour trouver tout ce que j’avais besoin, avec installation, configuration et surtout en documentant tous ces problèmes que j’ai rencontré. Alors laissez moi vous faire gagner du temps, si vous avez l’envie de vous l’installer vous-aussi!


Souci #1: Où trouver cette image Docker?

Donc oui, pour me faciliter la tâche, j’ai voulu me chercher l’image de Shiori directement sur Docker Hub. Le premier lien, provenant du créateur original du projet, semble avoir sa dernière mise à jour datant d’il y a 2 ans…

C’est pas super, quand tu sais que la dernière release remonte d’il y a même pas un mois (lors de la création de ce post)..

Encore pire, leur wiki continue de donner le mauvais repos Docker…

Donc la solution serait de le build manuellement ou de ne pas utiliser docker… Sauf que c’est pas super génial, quand tu lances en parallèle Watchtower, et que tu souhaites que tous tes conteneurs Docker soient aussi à jour que possible… A moins que…?


Solution #1 : L’installation

Vous allez rire, mais la solution se trouve devant notre nez. En regardant le README.md, j’ai vu ce détail:

Et en cliquant dedans, nous trouvons… Les derniers builds AVEC leur image Docker.

Avant de l’installer, on vérifie si notre architecture s’y trouve.

Chance, il supporte l’arm64, ce que j’utilise pour mon Raspberry Pi 4. Donc, on récupère l’image:

docker pull ghcr.io/go-shiori/shiori

Maintenant, je vais créer mon docker-compose.yml. Notez que je vais créer un volume en me basant sur leur page Wiki

version: '3.5'
services:
  shiori:
    image: ghcr.io/go-shiori/shiori
    container_name: shiori
    volumes:
      - ./data/:/srv/shiori
    ports:
      - 8080:8080
    restart: unless-stopped

Plus qu’à le lancer (avec un docker-compose up -d) et à se connecter sur le port 8080. Si tout est OK, vous devriez voir cet écran, montrant que Shiori fonctionne.

Identifiants par défaut:
- Username: shiori
- Password: gopher

Souci #2: Mes données!!

Sauf que, si vous êtes un minimum attentif, vous remarquerez que le dossier data crée… Ne contient rien. Ce qui fait que du moment que votre serveur ou service redémarre, vous perdrez tout que vous avez mis dans Shiori. Aie.

En regardant à l’intérieur du conteneur Docker, regardons un peu tout ce qui se passe…

Pour simplifier, on observe que le volume monté n’est absolument pas à sa bonne place. Autrement dit, les données (qui se trouvent dans /shiori ) ne sont pas dans /srv/shiori.

Corrigeons ça en pointant vers le bon dossier…

version: '3.5'
services:
  shiori:
    image: ghcr.io/go-shiori/shiori
    container_name: shiori
    volumes:
      - ./data/:/shiori # <--- Ligne corrigée
    ports:
      - 8080:8080
    restart: unless-stopped

Sauf qu’un souci ne vient jamais seul. En le relançant, on a affaire à un autre problème:

Out of memory, unable to open database file… C’est pas super à lire… On est donc bloqué? 🙁

Solution #2 : Tout est une histoire de permissions !

Comme notre dossier data est crée, notre solution est juste d’adapter notre code à un utilisateur choisi pour que Shiori ne se plaigne pas des droits de fichiers. Dans mon exemple, j’ai choisi l’utilisateur pi, le nom de compte utilisateur par défaut sur Raspberry Pi OS.

Il serait beaucoup plus judicieux d’attribuer les droits pour un utilisateur dédié. Dans tous les cas, la méthode reste la même. Et j’oubliais: il faudra se mettre en root pour la suite des opérations.

Pour pouvoir attribuer correctement ces droits, nous avons besoin de l’UID (User ID) et du GID (Group ID) de l’utilisateur cible, qu’on spécifiera dans Docker.

root@rpi4-services:/home/pi/test# id pi
uid=1000(pi) gid=1000(pi) groupes=1000(pi)

L’UID de pi est 1000, tout comme son GID.

Maintenant, on va modifier les droits du dossier data , et on va permettre aux nouveaux fichiers d’hériter des droits du possesseur du dossier.

chown pi:pi ./data
chmod g+s ./data

Enfin, dans le fichier docker-compose, on va finaliser notre fix en rajoutant un paramètre user :

version: '3.5'
services:
  shiori:
    image: ghcr.io/go-shiori/shiori
    container_name: shiori
    user: "1000:1000" # <-- utilisateur des volumes par défaut.
    volumes:
      - ./data/:/shiori
    ports:
      - 8080:8080
    restart: unless-stopped

Et une fois relancé…

Tout est bon! Vous pouvez désormais sauvegarder vos articles ou pages en toute sécurité dans Shiori!


Source de l’image : https://www.pixiv.net/en/artworks/81866126

Mots clés

Ch0wW

🌍 Entrez dans mon monde! Je poste du contenu en rapport avec les jeux retro, l'informatique, le modding et la réparation d'appareils... N'hésitez pas à me contacter pour toute question ou demande!