Comment installer et configurer un serveur REST restic sous Linux
Restic est un système de sauvegarde par déduplication efficace et moderne qui prend en charge le cryptage ; il est capable de stocker des sauvegardes localement et à distance, via une connexion SFTP ou sur l'une des nombreuses plateformes de stockage prises en charge, telles que les compartiments Amazon S3 et le stockage Google Cloud. En utilisant l'API backend restic REST, il est également possible de transmettre des sauvegardes à l'aide des protocoles HTTP ou HTTPS vers un serveur distant qui implémente l'API REST restic.
Dans ce didacticiel, nous apprenons à utiliser Docker pour déployer et configurer une instance de serveur restic REST sous Linux.
Dans ce didacticiel, vous apprendrez :
- Comment déployer un serveur REST restic à l'aide de Docker sous Linux
- Comment configurer l'authentification et utiliser le cryptage SSL/TLS
Création du répertoire du référentiel et génération des informations d'identification
Avant de pouvoir déployer notre serveur restic REST à l'aide de docker, nous devons choisir le répertoire qui hébergera notre référentiel et nos données de sauvegarde. Pour le bien de ce tutoriel, je vais créer un répertoire « data » dans mon HOME. Ce répertoire sera monté en liaison à l'intérieur du conteneur :
$ mkdir ~/data
Le serveur restic REST exécuté dans le conteneur Docker est livré avec l'authentification activée par défaut. Ceci est important afin d’éviter tout accès non autorisé à nos données. L'authentification du serveur restic REST est implémentée via un fichier .htpasswd ; le serveur REST recherche ce fichier dans le même répertoire où sont stockés les instantanés.
Pour générer nos informations d'authentification, nous devons utiliser l'utilitaire htpasswd. Sur Fedora et les distributions basées sur Fedora, l'utilitaire est inclus dans le package httpd-tools. On peut l'installer avec dnf :
$ sudo dnf install httpd-tools
Sur Debian et les distributions basées sur Debian, le paquet s'appelle apache2-utils :
$ sudo apt-get update && sudo apt-get install apache2-utils
Pour remplir le fichier .htpasswd, nous exécutons :
$ htpasswd -B -c ~/data/.htpasswd resticuser
Avec la commande ci-dessus, nous créons la configuration requise pour accéder au serveur avec le nom d'utilisateur « resticuser ». Si nous ne fournissons pas de mot de passe directement en argument de la commande, nous sommes invités à le saisir de manière interactive :
New password:
Re-type new password:
Adding password for user restserver
Puisque nous avons utilisé l'option -B
, le mot de passe sera haché à l'aide de l'algorithme bcrypt, qui est considéré comme très sécurisé.
Exécuter le conteneur du serveur REST restic
Le serveur restic REST est un logiciel gratuit et open source ; comme l'application restic, elle est écrite en Go, et développée sur GitHub. Le moyen le plus rapide et le plus simple de déployer un serveur REST restic consiste à utiliser Docker (ou Podman) pour exécuter un conteneur basé sur l'image serveur fournie par le projet, disponible sur DockerHub. Pour créer et générer un conteneur de serveur restic REST, tout ce que nous avons à faire est d'utiliser la commande suivante :
$ docker run -p 8000:8000 -v ~/data:/data:z --name restic_rest_server docker.io/restic/rest-server
Jetons un coup d'œil aux options que nous avons utilisées avec la commande. Par défaut, le serveur REST à l'intérieur du conteneur écoute sur le port 8000, nous avons donc utilisé l'option -p
pour mapper le port 8000 de l'hôte au même port à l'intérieur du conteneur (nous aurions pu utiliser n'importe quel port d'hôte , comme le port 80, mais en utilisant un port non privilégié, nous pouvons facilement générer le conteneur en tant qu'utilisateur non root. Jetez un œil à ce didacticiel si vous souhaitez utiliser un port supérieur lors de l'exécution de Docker ou Podman sans privilèges root).
Afin de rendre les sauvegardes persistantes, comme indiqué précédemment, nous avons monté en liaison le répertoire ~/data
sur l'hôte, dans le même répertoire à l'intérieur du conteneur, où les instantanés sont stockés. Dans l'exemple, nous avons utilisé l'option :z pour le montage de liaison : ceci n'est requis que si SELinux est actif, et provoque un changement de contexte pour le répertoire monté, afin qu'il soit accessible depuis le conteneur.
Initialiser un référentiel
À ce stade, nous devrions déjà pouvoir initialiser un référentiel restic avec le client restic, en utilisant l'URL rest:http://resticuser:resticpassword@localhost:8000 :
restic -r rest:http://resticuser:resticpassword@localhost:8000 init
Si tout se passe comme prévu, le référentiel sera généré et initialisé correctement :
created restic repository 0216975ff5 at rest:http://resticuser:***@localhost:8000/
Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.
Bien que le référentiel ait été généré correctement, la transmission des informations d'identification via une connexion HTTP en texte brut est quelque chose que nous devrions vraiment éviter. Pour utiliser le serveur restic REST sur HTTPS, nous devons utiliser un certificat SSL/TLS. Voyons comment procéder.
Utiliser une connexion HTTPS sécurisée
Il existe de nombreuses façons d'obtenir un certificat SSL/TLS. Si nous avons l'intention d'exposer notre serveur restic REST à Internet, nous devons utiliser un certificat tiers valide pour notre domaine. Nous pouvons facilement en obtenir un auprès de Let’s Encrypt, en utilisant certbot. Si nous souhaitons simplement effectuer quelques tests, ou si nous envisageons d'utiliser notre serveur exclusivement sur notre propre réseau, il suffit cependant de générer un certificat auto-signé.
Ici, je suppose que nous avons déjà à la fois le certificat (qui contient la clé publique) et la clé privée, stockées respectivement sous les noms public_key et private_key. Le moyen le plus simple de les utiliser avec le serveur REST exécuté dans un conteneur Docker est de placer les deux dans le répertoire de données que nous avons monté en liaison à l'intérieur du conteneur (le même répertoire où se trouve le fichier .htpasswd ), et exécutez le serveur à l'aide de l'option --tls
. Cependant, comme nous n'exécutons pas le serveur directement, nous devons passer cette option via la variable d'environnement OPTIONS
lors de l'exécution du conteneur :
$ docker run -p 8000:8000 -v ~/data:/data:z -e OPTIONS="--tls" --name restic_rest_server docker.io/restic/rest-server
Nous pouvons désormais communiquer avec le serveur via HTTPS. Puisque, dans ce cas, nous avons utilisé un certificat auto-signé invalide, nous devons exécuter le client restic avec l'option --insecure-tls
, qui ignore la vérification du certificat TLS lors de la connexion à un référentiel :
$ restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init
Conclusions
Dans ce didacticiel, nous avons appris à déployer un serveur REST restic à l'aide de Docker sous Linux. Avec restic, nous pouvons créer des sauvegardes localement ou à distance, en utilisant des connexions SFTP, l'un des services de stockage tiers pris en charge, ou vers un serveur REST restic. Ce dernier offre de meilleures performances par rapport à SFTP et nous donne la possibilité d'exécuter des connexions en ajout uniquement. Pour en savoir plus sur restic et comment effectuer des sauvegardes efficaces, vous pouvez consulter notre tutoriel étape par étape.