Openmediavault : déplacement de Docker

Alors que je commençais à réfléchir à la stratégie de sauvegarde de mon NAS (Openmediavault sur Odroid-hc2, 1 seul HD), j’ai du faire face à la problématique Docker.

Comme chaque soft (Plex, Nextcloud, qBittorrent) tourne dans un container, il est important de sauvegarder ceux-ci, et pas seulement les données qu’ils contiennent.

De plus, les containers Docker étant par défaut installés sur le disque système, soit une carte microSD dans mon cas, où il est préférable d’écrire le moins possible, cette configuration n’est pas optimale.

Je suis alors tombé sur cette vidéo : Why and how to move your Docker folder qui explique comment déplacer Docker, et je l’ai donc mis cela en pratique aujourd’hui, après plusieurs jours de réflexion. Car j’avais un peu peur de « casser » ma config, qu’un des containers Docker ne redémarre pas : j’avais pas mal galéré à installer Nextcloud, je ne voulais retomber dans les mêmes problèmes.

Mais finalement tout s’est globalement bien passé, à part un problème de droits sur mes dossiers Nextcloud justement. J’ai réglé le problème grâce aux sauvegardes que j’avais fait avant de me lancer (solution de facilité).

Voyons tout ça…

Docker

Par défaut, Docker est donc installé dans /var/lib/docker, comme on peut le voir dans Openmediavault/OMV-Extras :

Pour le déplacer, il suffit de modifier ce chemin, et de cliquer sur le bouton Save :

Je déplace donc Docker sur mon HD, dans le dossier /srv/dev-disk-by-label-DATA/AppData déjà utilisé par tous les containers Docker pour y stocker leurs fichiers de configuration. C’est pratique, je pourrais ainsi tout sauvegarder d’un coup : les containers et leur configuration.

Après quelques instants, Docker est redémarré, mais tous les containers ont disparu, y compris Portainer, qu’il va falloir réinstaller, c’est l’affaire d’un click. Jusque là, tout est vraiment simple.

Containers

La bonne nouvelle, c’est que l’on va pouvoir recréer ses containers sans perdre leur configuration ou les fichiers de données. Il va suffire de faire pointer les variables d’environnement correspondantes (les ‘volumes’) sur les mêmes dossiers que lors de la première création du container.

Pour Plex et Nextcloud, je suis passé par les Stacks, j’avais sauvegardé leurs configurations dans ce format, tout a donc été très simple : dans Portainer, sélectionner Stacks et cliquer sur le bouton Add stack :

Il suffit ensuite de coller le contenu que j’avais sauvegardé, mais que l’on peut retrouver sur la page du projet. L’important est de bien mettre les mêmes valeurs pour les différents volumes où sont nos fichiers :

---
version: "2"
services:
  plex:
    image : ghcr.io/linuxserver/plex
    container_name : plex
    network_mode: host
    environment:
      - PUID=997
      - PGID=100
      - VERSION=Docker
      - UMASK_SET=022
    volumes:
      - /srv/dev-disk-by-label-DATA/AppData/Plex:/config
      - /srv/dev-disk-by-label-DATA/OMV-DATA/Series:/Series
      - /srv/dev-disk-by-label-DATA/OMV-DATA/Films:/Films
      - /srv/dev-disk-by-label-DATA/OMV-DATA/Docus:/Docus
    restart: unless-stopped

Et voilà ! En quelques minutes (les softs vont être téléchargés à nouveau), mon instance Plex est de nouveau disponible, et toutes les données conservées (par exemple les films Vus/Non Vus).

Pour qBittorent-OpenVPN, comme il y avait des paramètres non supportées par Portainer, j’avais le script utilisé pour l’installation, il a donc suffit de le relancer :

Les logiciels nécessaires sont téléchargés à nouveau, puisque Docker a été déplacé…

Templates

Il y a aussi la solution des « Templates » pour recréer rapidement ses containers. Par défaut, ceux proposés dans Portainer sont assez restreints, mais on peut modifier la liste proposée en la remplaçant par une autre plus adaptée à l’utilisateur standard. Il suffit d’aller dans Settings, et de remplacer le lien existant :

https://raw.githubusercontent.com/portainer/templates/master/templates-2.0.json

Par celui-ci, récupéré sur le page du projet Github selfhosted_templates :

https://raw.githubusercontent.com/SelfhostedPro/selfhosted_templates/portainer-2.0/Template/template.json

Puis cliquer sur « Save settings ». La liste des templates désormais proposée est alors beaucoup plus étoffée, on y retrouve Plex, Nextcloud, Pihole, Mariadb, etc…

L’idée est de s’en servir comme une base, et de l’éditer pour modifier certaines variables pour l’adapter à notre environnement personnel, et dans ce cas précis, faire pointer les variables de type ‘Volumes’ ou ‘Config’ au même endroit que précédemment.

Nextcloud

Nextcloud a été le plus compliqué, comme je m’y attendais, heureusement j’avais dupliqué mes données avant de me lancer.

J’avais le fichier « Stack » de l’installation, celui qui installe en même temps Nextcloud, Mariadb et Swag (voir l’installation de Nextcloud). Je l’ai donc lancé et là, première erreur :

Bind for 0.0.0.0:444 failed : port is already allocated

Au moins le message est clair, et en vérifiant, il y avait une erreur dans mon fichier ‘docker-compose’, sans doute suite à un des premiers essais que j’avais fait en voulant l’installer : j’avais le port défini en 444:443 pour le container nextcloud au lieu de 443:443. Une fois corrigé, les trois containers nextcloud/mariadb/swag sont créés et démarrés sans problème.

Ensuite, je reçois un premier message de mon client Nextcloud sur le PC m’informant qu’il y a une erreur avec le certificat. En effet, en recréant mon instance Nextcloud, un nouveau certificat a été créé, il va donc falloir le valider pour chaque client se connectant à l’instance : le client Nextcloud sur le smartphone ou sur le PC, mais aussi dans Firefox pour accéder à la WebUI.

Première surprise : je retombe sur la page d’initialisation de Nextcloud, où il faut définir un administrateur, la base de données, etc… :

La page d’installation de Nextcloud

C’est finalement logique, puisque c’est une nouvelle instance de Nextcloud… Mais quand j’entre ‘pascal’ pour le compte administrateur, il refuse et me dit que le nom d’utilisateur est déjà pris. OK, c’est vrai (et tant mieux, ça veut dire que mon compte existe toujours, et c’est bien ce que je voulais), je crée donc un utilisateur ‘admin’ pour terminer l’installation.

Du coup, j’ai même droit à une mise à jour… So far so good !

Je me reconnecte en tant que ‘pascal’, retrouve mes dossiers, et je crois alors que « tout est bien qui finit bien ». Hélas, un peu plus tard, je me rends compte que je n’ai pas les droits d’écriture sur mes dossiers ! C’est une photo prise sur le smartphone qui me le signale car le téléchargement échoue. Et c’est confirmé via l’interface web, impossible d’ajouter le moindre fichier à mes dossiers Nextcloud.

J’ai fait quelques recherches rapides sur internet, ça m’a paru vite assez compliqué à dépanner, Nextcloud est apparemment bien sécurisé, et j’ai vite opté pour la solution la plus simple : tout effacer, recréer les répertoires, et y recopier les fichiers précédemment sauvegardés.

Bon, ce n’est pas très glorieux, mais l’opération a été assez rapide, et je n’avais pas envie de me plonger dans les permissions et autres ACLs de Nextcloud ! 😯 Ça peut vite devenir une belle prise de tête !

Conclusion

C’est une bonne chose d’avoir fait cette modification, et pour l’essentiel, tout s’est bien passé.

Non seulement mon disque système microSD ne sera plus sollicité par Docker, mais la sauvegarde sera beaucoup plus simple, puisque le répertoire AppData est déjà partagé par Openmediavault, et une simple tâche avec Rsync fera parfaitement l’affaire.

Ce sera l’objet du prochain article, qui traitera de la stratégie de sauvegarde. C’est important, car en quittant Synology pour ce système Odroid-hc2, je n’ai plus de RAID (un seul HD) et il ne s’agit pas de perdre toute cette belle configuration ! 😉

Un commentaire sur “Openmediavault : déplacement de Docker”

Laisser un commentaire

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