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 :
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 :
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… :
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 ! 😉
Une réflexion sur « Openmediavault : déplacement de Docker »