Recherche de site Web

Comment installer et configurer un serveur REST restic sous Linux


Restic est un système de sauvegarde de 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 plates-formes de stockage prises en charge, telles que les compartiments Amazon S3 et le stockage Google Cloud. En utilisant l’API backend REST retique, il est également possible d’envoyer des sauvegardes à l’aide des protocoles HTTP ou HTTPS à un serveur distant qui implémente l’API REST restał.

Dans ce tutoriel, nous apprenons à utiliser Docker pour déployer et configurer une instance de serveur REST restic sur Linux.

Dans ce tutoriel, vous allez apprendre :

  • 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 REST restic à l’aide de docker, nous devons choisir le répertoire qui hébergera notre dépôt et sauvegardera les données. Pour les besoins de ce tutoriel, je vais créer un répertoire « data » à l’intérieur de mon HOME. Ce répertoire sera monté en liaison à l’intérieur du conteneur :

mkdir ~/data

Le serveur REST restic qui s’exécute à l’intérieur du 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 REST restic est implémentée via un fichier .htpasswd ; le serveur REST recherche ce fichier dans le même répertoire que celui où les instantanés sont stockés.

Pour générer nos identifiants d’authentification, nous devons utiliser l’utilitaire htpasswd. Sur Fedora et les distributions basées sur Fedora, l’utilitaire est inclus dans le paquet httpd-tools. Nous pouvons l’installer avec dnf :

sudo dnf install httpd-tools

Sur Debian et les distributions basées sur Debian, en revanche, le paquet est appelé 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

Comme 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ûr.

Exécution du conteneur de serveur REST restic

Le serveur REST restic 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 est d’utiliser Docker (ou Podman), pour exécuter un conteneur basé sur l’image serveur fournie par le projet, qui est disponible sur DockerHub. Pour créer et générer un conteneur de serveur REST restique, 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 sur l’hôte au même port à l’intérieur du conteneur (nous aurions pu utiliser n’importe quel port hôte, tel que 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 coup d’œil à ce tutoriel 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 dit précédemment, nous lions le répertoire ~/data monté sur l’hôte, au 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 : cela n’est nécessaire que si SELinux est actif, et provoque un changement de contexte pour le répertoire monté, afin qu’il soit accessible depuis le conteneur.

Initialisation d’un référentiel

À ce stade, nous devrions déjà être en mesure d’initialiser un dépôt 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 dépôt 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 d’informations d’identification via une connexion HTTP en texte brut est quelque chose que nous devrions vraiment éviter. Pour utiliser le serveur REST restic sur HTTPS, nous devons utiliser un certificat SSL/TLS. Voyons comment faire.

Utilisation d’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 REST restic à 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. Cependant, si nous voulons simplement effectuer quelques tests, ou si nous prévoyons d’utiliser notre serveur exclusivement dans notre propre réseau, il suffit 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és respectivement en tant que public_key et private_key. La façon la plus simple de les utiliser avec le serveur REST fonctionnant à l’intérieur d’un conteneur docker, est de placer les deux dans le répertoire de données que nous montons à l’intérieur du conteneur (le même répertoire où se trouve le fichier .htpasswd), et d’exécuter le serveur en utilisant 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 maintenant 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 dépôt :

restic -r rest:https://resticuser:resticpassword@localhost:8000 --insecure-tls init

Conclusions

Dans ce tutoriel, 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 d’ajout uniquement. Pour en savoir plus sur restic et sur la façon d’effectuer des sauvegardes efficaces, vous pouvez consulter notre tutoriel étape par étape.

Articles connexes: