Restic: Implémenter un serveur Web pour afficher les sauvegardes

Créé le 18 nov. 2014  ·  42Commentaires  ·  Source: restic/restic

Implémentez une commande restic qui démarre un serveur Web pour parcourir les instantanés.

user interface feature suggestion

Commentaire le plus utile

Je recommanderais une toute autre application appelée quelque chose du genre restic-web écrit en go ou nodejs et réagir ou angular pour pouvoir faire tout ce que vous pouvez faire à partir de l'interface de ligne de commande

Tous les 42 commentaires

Cela semble être beaucoup de complexité pour quelque chose qui ne semble pas être la responsabilité principale d'un programme de sauvegarde. Est-ce vraiment nécessaire ? Quel est le cas d'utilisation ? Je préférerais FUSE (https://github.com/restic/restic/issues/27).

Windows n'a pas de fusible. Avoir un serveur Web de base est très peu de travail en utilisant http://golang.org/pkg/net/http/#FileServer. Cela devrait de toute façon prendre le même type d'interfaces que celles utilisées pour implémenter une interface de fusible.

Exactement ce que je pensais, ce n'est pas beaucoup de code et probablement le seul moyen de parcourir les instantanés sous Windows.

Je suis d'accord. À un moment donné, il est temps d'avoir une interface graphique, et je pense que l'étape la plus naturelle pour cela est un serveur Web intégré qui peut le présenter sur localhost ou même d'autres interfaces si vous le souhaitez. Tout le monde a un navigateur Web et personne n'aurait à jouer avec les applications.

@rakoo, êtes-vous intéressé à travailler sur le serveur Web ensuite ?

Réflexions sur l'interface utilisateur :

  • Démarrez le serveur HTTP avec restic server
  • restic écrit une URL HTTP sur stdout qui inclut un nom d'utilisateur et un mot de passe générés aléatoirement, par exemple http://RarOjHogvueHov:egsevtekwucvith@localhost/snapshots
  • Le serveur Web nécessite une authentification de résumé HTTP
  • Et il ne se lie qu'à localhost

Se lier à autre chose que localhost ne devrait pas être impossible, mais vraiment difficile. Peut-être que nous allons coder en dur localhost pour la première version et voir si les utilisateurs se plaignent.

Les pensées?

C'est plus ou moins ce que j'avais en tête, sauf sans le nom d'utilisateur/mot de passe : IMO, ils offrent peu de valeur contre un attaquant potentiel (nous ferions du HTTP simple, donc le nom d'utilisateur et le mot de passe sont clairement visibles).

Je suis d'accord avec la liaison à localhost uniquement : vu l'espace dans lequel nous opérons, je m'attends à ce que l'utilisateur ait ssh pour accéder à son VPS, donc je pense qu'il est juste de s'attendre à ce qu'il tunnel l'accès à son référentiel de cette façon :

backupserver> restic server 5000

clientmachine> ssh -Nf -L 5000:backupserver:5000
clientmachine> open http://localhost:5000/

Je me rends compte que c'est assez ancien, mais +1 de ma part. Je ne pense pas non plus que le nom d'utilisateur/mot de passe intégré soit utile car pour moi, tout cela est de toute façon derrière un VPN et j'aimerais qu'il démarre au moment de la mise en service du système.

@yatesco Quel est votre cas d'utilisation pour démarrer le composant de serveur Web discuté au démarrage du système ? Je n'arrive pas à en trouver un, pourriez-vous préciser ?

Salut @fd0 - il s'agit d'exposer le référentiel à l'équipe.

Assez inhabituellement peut-être, j'ai un tas de données que je ne veux pas traîner, donc utiliser cette archive comme "stockage à long terme" est génial, mais alors je dois y donner accès depuis l'équipe et un partage samba (par exemple # 377) ou une interface Web serait géniale

D'accord, merci pour l'explication.

Est-il possible d'exposer la monture Fuse via Samba ? Je n'arrive pas à le faire fonctionner, le dossier n'est pas visible. Comment puis-je faire en sorte que la monture Fuse utilise "allow_other" ?

J'ai décrit ce qui doit être fait ici : https://github.com/restic/restic/pull/754#issuecomment -276023059

Voir également le numéro 767 pour les options de montage de fusible.

Est-ce juste un spectateur dont nous avons besoin ? ou une interface graphique complète pour toutes les tâches ? Voici les fonctionnalités que j'imagine pour une interface graphique :

Fonctionnalités de restauration :

  • liste des instantanés (avec date, taille de l'instantané, taille réelle, etc.)
  • parcourir un instantané (trier, rechercher, etc.)
  • afficher l'historique des versions du fichier
  • restaurer un instantané ou une sélection de dossiers/fichiers sur le lecteur local de l'utilisateur

Fonctionnalités d'administration :

  • supprimer des instantanés
  • sauvegarde
  • Chèque
  • reconstruire

Avec Electron, nous conservons l'interface graphique multiplateforme/HTML5 mais avec des fonctionnalités supplémentaires telles que l'accès au système de fichiers, les commandes d'exécution, les connexions ssh ouvertes, les modules natifs, etc.

Je ne peux pas parler pour le projet, mais pour moi, les fonctionnalités de restauration seraient suffisantes.

Je travaille principalement sur des boîtes Windows en SSH sur les serveurs et si les choses échouent, j'aimerais brancher rapidement mon lecteur de sauvegarde pour afficher/télécharger les fichiers en question.

Salut messieurs, je viens juste de commencer à travailler avec restic, vraiment du bon travail, merci ! Mes cinquante cents sur ce sujet. Juste "afficher l'instantané" est un peu inutile à mon humble avis (peut être fait avec un montage de fusible publié par n'importe quel moyen comme nginx, samba, etc.), il devrait certainement y avoir des actions utiles qu'un utilisateur peut faire ensuite, par exemple restaurer des fichiers sur des hôtes sélectionnés, restaurer sql dump sur un hôte de base de données, restaurez tout ce qui restic sauvegardé de manière simple. Il y a deux choses principales : 1. Recherche/classification des données et 2. Faire quelque chose sous les données (par exemple, restaurer, supprimer, partager, classer, comparer des copies (diff), etc.). Pourquoi pas FUSE : il ne s'agit pas du tout de Windows, mais d'UX. Avoir une interface Web pour le magasin de sauvegarde avec une recherche riche et une restauration facile (adaptée à un type de données et à un système particuliers) est vraiment cool. J'imagine une douzaine de cas d'utilisation qui ont du sens pour le magasin de sauvegarde (recherche avancée, restauration à distance, suggestions de politique de sauvegarde, masquage des données, protection PII, déchiquetage, conformité des données, rapports, etc.), ayant une façade Web pour certains d'entre eux (au moins rechercher et restaurer) serait sympa ! Pour la sauvegarde où, dans la plupart des cas, l'objectif principal est simplement de restaurer la version récente de quelque chose, en cas de corruption de données, aussi rapidement que possible, c'est suffisant, mais pour des fonctionnalités telles que l'archivage, une interface Web est indispensable. Btw data archive est une autre fonctionnalité intéressante, par exemple détacher certaines données de restic snap et les déplacer vers une archive à long terme, mais c'est une autre histoire et hors sujet pour le fil) Et oui, si vous décidez de le faire à l'avenir, à mon humble avis devrait être fait dans rest-server, en enveloppant les fonctionnalités de base dans rest api. Ce dernier est logique pour l'intégration avec des systèmes tiers.

Je recommanderais une toute autre application appelée quelque chose du genre restic-web écrit en go ou nodejs et réagir ou angular pour pouvoir faire tout ce que vous pouvez faire à partir de l'interface de ligne de commande

Est-ce que restic pourrait utiliser quelque chose comme https://github.com/dokan-dev/dokany/ sur Windows ?
J'utilise occasionnellement cppcryptfs pour accéder à des dossiers sous Windows qui ont été chiffrés à l'aide de gocryptfs sous Linux et cela semble fonctionner assez bien.

Bonjour,
J'ai trouvé cet article : https://devblogs.microsoft.com/commandline/announcing-wsl-2/
Ça dit:

Maintenant que WSL 2 inclut son propre noyau Linux, il est entièrement compatible avec les appels système. Cela introduit un tout nouvel ensemble d'applications que vous pouvez exécuter dans WSL. Quelques exemples intéressants sont la version Linux de Docker, ainsi que FUSE !

Veuillez prendre en compte que WSL nécessite Hyper-V pour fonctionner, mais :

1) Hyper-V n'est disponible que pour certaines versions de Windows. Par exemple, Windows 10 Pro prend en charge Hyper-V, contrairement à Windows 10 Home.

2) Hyper-V ne peut coexister avec aucun autre logiciel hyperviseur que l'utilisateur utilise déjà (comme VirtualBox, etc.). Ainsi, si quelqu'un utilise déjà VirtualBox (ou tout autre hyperviseur), il ne pourra pas utiliser WSL.

En résumé, je pense que WSL ne doit pas être tenu pour acquis pour chaque utilisateur de Windows.

@aliron19 Pouvez-vous citer une source pour cela ? J'utilise WSL sur mon ordinateur de travail pour exécuter Redis, mais il s'agit d'un ordinateur Windows 10 Home, donc pas d'Hyper-V et pourtant WSL fonctionne très bien.

voir https://docs.microsoft.com/en-us/windows/wsl/wsl2-faq#does -wsl-2-use-hyper-v-will-it-be-available-on-windows-10-home

Merci de clarifier. Il semble que l'exigence Hyper V soit nouvelle pour WSL 2, je pensais qu'aliron parlait de WSL en général. Il est également bon de savoir que Hyper V sera disponible pour les utilisateurs de Windows 10 Home.

Je dirais qu'il faut préférer un serveur Webdav (#485) à une interface HTML.
Cela permettrait également aux utilisateurs de l'ajouter facilement en tant que lecteur réseau à l'explorateur Windows.

Si vous avez un serveur (ou unix/linux) avec nodejs, vous pouvez facilement le faire :

restic mount backup &
npx http-serve backup

Ensuite, vous pouvez parcourir http://127.0.0.1 :8080
et à bientôt les fichiers :

Capture d’écran 2020-07-24 à 17 58 18

Lorsque vous avez terminé, vous pouvez :

CTRL + C # stop npx
fg # bring back restic
CTRL + C # stop restic

Je ne sais pas si restic verrouille le référentiel pendant que vous le montez, ou si vous pouvez ajouter plus de sauvegarde en attendant.
Mais au moins, vous pouvez avoir une petite interface Web pour parcourir vos fichiers.

@vincent-ogury Je pensais que le but de cette fonctionnalité proposée était de fournir une vue de sauvegarde conviviale où restic mount _n'est pas_ disponible.

Vous avez raison. Cela devrait fonctionner dans un menu fixe sur Windows, je suppose.
Une version Web peut être intéressante pour d'autres plateformes.
Il peut simplifier la ligne de commande pour afficher les instantanés, afficher, oublier, démarrer une nouvelle sauvegarde ...

J'aimerais travailler sur ce problème. L'idée est d'implémenter un serveur http vanilla Go avec un modèle html de base. Notre cas d'utilisation est d'avoir une interface de base universelle pour Restic sous Windows
Voici l'étendue de ma tâche :

Problème
Restic ne fournit pas un moyen pratique de parcourir les sauvegardes sous Windows.

Tâche
Essayez de mettre en œuvre une preuve de concept de base d'un serveur Web intégré, qui permet de parcourir et de restaurer les sauvegardes à l'aide d'un navigateur.

Exemple
L'exécution des commandes suivantes créera deux sauvegardes et vous apprendrez à parcourir les sauvegardes via la ligne de commande.

openssl rand -hex 10 > ~/.restic-password
restic -p ~/.restic-password init --repo /tmp/backup

Faire une sauvegarde

restic -p ~/.restic-password --repo /tmp/backup backup ~

Faire quelques changements

date > ~/fichier-avec-changements.txt

Faire la prochaine sauvegarde

restic -p ~/.restic-password --repo /tmp/backup backup ~

Regardez quelles sauvegardes vous avez

restic -p ~/.restic-password --repo /tmp/backup snapshots

référentiel 2ad83051 ouvert avec succès, le mot de passe est correct

ID Heure Hôte Balises Chemins

b8ee7b24 2020-09-11 17:20:17 thorsten-devvm-v3 /root

99388d0b 2020-09-11 17:21:23 thorsten-devvm-v3 /root

2 instantanés

Regardez ce qu'il y a dans une sauvegarde

restic -p ~/.restic-password --repo /tmp/backup ls -l 99388d0b

Obtenez une liste au format json de tous les fichiers de la sauvegarde.

restic -p ~/.restic-password --repo /tmp/backup ls -l --json 99388d0b|jq

Vérifier si un fichier est dans la sauvegarde

restic -p ~/.restic-password --repo /tmp/backup find snmp.json

Restaurer un fichier

restic -p ~/.restic-password --repo /tmp/backup restore last --target /tmp/restore --include "/root/snmp.json"
Caractéristiques
En exécutant quelque chose comme ça, le serveur Web démarre et en interne la sauvegarde est "ouverte".
restic -p ~/.restic-password --repo /tmp/backup webserver 127.0.0.1:3344

En pointant mon navigateur sur

Je peux cliquer sur l'ID de la première colonne et j'obtiens une arborescence de tous les fichiers de l'instantané. Les mêmes données que restic -p ~/.restic-password --repo /tmp/backup ls -l--json renvoie s'affiche. L'arborescence n'a pas besoin de plier et déplier ni d'icônes au début.

Ou je peux cliquer sur un chemin d'un instantané (5ème colonne) et j'obtiens une liste de fichiers dans la sauvegarde appartenant uniquement à ce chemin. Il affiche les mêmes données que restic -p ~/.restic-password --repo /tmp/backup ls -l--chemin--json

Je peux cliquer sur un seul fichier et le télécharger via le navigateur.

Idéalement, je peux cliquer sur un fichier et j'obtiens une liste de toutes les différentes versions classées par date de ce fichier.
Un instantané donne toujours une vue virtuelle de l'ensemble du système de fichiers. Pour identifier les différentes versions d'un fichier, la commande suivante serait utilisée sur la ligne de commande.
restic -p ~/.restic-password --repo /tmp/backup find /root/snmp.json --json|jq
Tous les objets, où mtime est identique, doivent être réduits à un seul objet car les fichiers n'ont pas changé.

À mon humble avis, l'ajout de la prise en charge du "montage restic" sur Windows avec quelque chose comme dokany serait plus logique d'avoir le même workflow de restauration sur Linux et Windows, et de fournir une meilleure expérience utilisateur en utilisant OS Explorer pour parcourir les fichiers.

Veuillez consulter https://github.com/restic/restic/pull/2862 qui adresse qui est destiné à résoudre Restic does not provide a handy way to browse through the backups on Windows de la même manière que cela se fait sur d'autres plates-formes que Windows.

Bien sûr, mais je suppose qu'il est assez difficile pour un utilisateur Windows "typique" d'utiliser l'interface de ligne de commande, mon objectif est de fournir une interface simple et compréhensible que tout utilisateur puisse comprendre.

Pour contourner ce problème, j'ai rassemblé ce que @vincent-ogury et @celogeek ont suggéré (merci !) https://github.com/stevedenman/restic-browser-docker
Je l'ai exécuté sur ma machine Windows (dans Docker sur wsl2) et cela fonctionne bien pour parcourir les instantanés et télécharger des fichiers.

désolé les gars dites-vous que je ne devrais pas le faire? pourquoi il y a un problème avec ça ? les solutions suggérées sont assez difficiles pour un utilisateur moyen dans mon cas, tout ce que nous avons à faire - démarrer le programme (avec les drapeaux définis) et ouvrir le navigateur !

Bonjour.

En tant qu'utilisateur de restic, je voulais juste laisser tomber mes deux cents sur le sujet.

Je suis un utilisateur féru de technologie, donc je suis d'accord avec la façon dont les choses sont en restic. Je suis également conscient que restic s'adresse aux personnes férus de technologie ; par conséquent, les solutions actuelles sont/pourraient être complexes pour certains. Mais je ne vois aucun problème à implémenter un serveur Web local accessible via le navigateur. Cela ne devrait pas remplacer les solutions actuelles, mais comme solution secondaire, ce serait bien d'avoir quelque chose comme ça. Et peut-être que cela rendrait restic plus accessible à encore plus de gens.

Merci.

Je ne suis pas du tout d'accord avec les opinions "c'est trop dur pour les utilisateurs de Windows". Tout d'abord, ces utilisateurs ont déjà réussi à exécuter restic pour sauvegarder leurs fichiers, et exécuter la commande mount au lieu de la commande backup n'est pas plus difficile. Deuxièmement, nous parlons d'ouvrir la ligne de commande et d'entrer restic -r foo mount bar ici. Sérieusement, en quoi est-ce difficile pour quelqu'un ? Si quelqu'un a un problème avec cela, ces personnes doivent s'éduquer. Ce n'est pas quelque chose de "difficile", c'est juste à une ligne de commande.

EDIT: Juste pour clarifier, je veux dire que cela ne devrait pas être difficile du tout pour tout utilisateur de Windows étant donné que restic mount travaille sur Windows comme prévu dans # 2862 - je ne suggère pas ce que @filippobottega a écrit juste en dessous ce commentaire est facile pour un utilisateur Windows moyen. Je ne pense pas qu'il faille utiliser WSL pour utiliser restic mount .

Bonjour,
J'ai monté avec succès une sauvegarde restic sur l'Explorateur Windows à l'aide de WSL2, mais ce n'est pas aussi facile que prévu.
Vous devez:

  1. Installez WSL2 comme expliqué dans le Guide d'installation du sous-système Windows pour Linux pour Windows 10
  2. Changez l'utilisateur par défaut d'Ubuntu en root comme expliqué dans la réponse gurnec à Impossible de modifier /etc/nginx/nginx.conf à partir de Windows.
  3. Connectez-vous à une session Ubuntu en tant que root et montez la sauvegarde restic comme expliqué dans Restaurer à l'aide de mount , par exemple restic -r /mnt/c/ResticBackup -p /mnt/c/ResticBackup/password-file.txt mount /mnt/restic

    A la fin vous pourrez voir :

image

Deuxièmement, nous parlons d'ouvrir la ligne de commande et d'entrer ici restic -r foo mount bar. Sérieusement, en quoi est-ce difficile pour quelqu'un ?

Si vous considérez les options du BIOS pour laisser fonctionner l'hyperviseur, configurer WSL et diagnostiquer tout problème provenant de son dysfonctionnement, etc., cela peut être assez laborieux. À mon avis, l'exigence d'exécuter Microsoft Hypervisor qui est incompatible avec VmWare et VirtualBox que j'utilise est tout simplement ridicule pour restic.

Le pointage et le clic du navigateur Web sont beaucoup plus faciles et http est également un peu mieux pris en charge (indice : navigateurs) que la version Windows de smb si vous souhaitez partager en réseau local. De plus, il n'est pas clair si vous pouvez exposer ces montages via smb, mais même si vous le pouvez, le point tient toujours.

À mon avis, il ne fait aucun doute que l'option du navigateur Web est plus simple.

Si vous envisagez des options du BIOS pour laisser l'hyperviseur fonctionner, configurer WSL et diagnostiquer tout problème provenant de son dysfonctionnement, etc.

@AndrewSav Ce n'est pas ce qui est discuté ici. Voir le commentaire de @rawtaz (c'est moi qui souligne)

EDIT: Juste pour clarifier, je veux dire que cela ne devrait pas être difficile du tout pour tout utilisateur de Windows _vu restic mount travaillant sur Windows comme prévu dans # 2862_ - Je ne suggère pas ce que @filippobottega a écrit juste en dessous ce commentaire est facile pour un utilisateur Windows moyen. Je ne pense pas qu'il faille utiliser WSL pour utiliser restic mount .

@cfbao, vous devez installer un pilote de noyau pour cela. Je suis toujours pour une option qui ne nécessite pas de pilotes de noyau supplémentaires. Je pense qu'il ne devrait pas être question que l'exécution d'un programme et l'ouverture de votre navigateur soient plus simples que l'installation d'un logiciel tiers, probablement en redémarrant après cela, puis en exécutant une ligne de commande obscure (je veux dire par là que vous devez fournir et taper des paramètres de ligne de commande, dans le navigateur, vous pouvez simplement cliquer pour la navigation).

L'installation de pilotes tiers présente également l'inconvénient évident d'avoir un impact sur l'ensemble du système s'il y a un bogue dans ledit pilote. Encore une fois, une exigence de restic pour un pilote tiers n'est pas raisonnable, s'il existe des options (navigateur) beaucoup plus simples.

Autant que je sache, ces options ne se contredisent pas, donc restic peut prendre en charge les deux et ainsi répondre aux besoins des deux groupes.

@cfbao, vous devez installer un pilote de noyau pour cela. Je suis toujours pour une option qui ne nécessite pas de pilotes de noyau supplémentaires.

@AndrewSav Le point étant qu'il s'agit d'une tâche très simple que chaque utilisateur Windows restic serait capable de faire facilement. L'utilité marginale de la mise en œuvre d'un serveur Web est donc considérablement réduite et peut ne pas justifier le coût d'un développement et d'une maintenance limités.

@AndrewSav L'interface Web est agréable pour
Mon opinion est que l'interface Web et le montage approprié du système de fichiers sont des fonctionnalités complémentaires avec des cas d'utilisation quelque peu différents.
Le pilote du noyau tiers (par exemple http://www.secfs.net/winfsp/) ne doit être installé qu'une seule fois et aucun redémarrage n'est requis.
Je ne comprends pas non plus très bien l'argument concernant "l'exécution d'une ligne de commande obscure". N'auriez-vous pas besoin d'exécuter une commande restic pour activer également l'interface Web ?

Merci à tous pour votre contribution! Alors résumons les choses :

  • @fd0 a précédemment suggéré et ainsi approuvé la mise en œuvre d'un navigateur de référentiel de service HTTP dans ce problème et l'a développé dans https://github.com/restic/restic/issues/60#issuecomment -122898872 .
  • Beaucoup de gens pensent que c'est une bonne idée d'avoir cette fonctionnalité indépendante de la plate-forme pour parcourir les instantanés et leurs fichiers.
  • Une opinion commune est que nous voulons également pouvoir restaurer des fichiers à partir de celui-ci, dans la mesure où cela est pratique (nous pourrions ne pas nous attendre à pouvoir restaurer une archive entière via le navigateur Web, il s'agirait plutôt d'un "téléchargement de fichiers " action).
  • Il ne doit effectuer aucune opération d'écriture sur le référentiel, uniquement des opérations de lecture.
  • WebDAV, tout en étant une option pour parcourir les fichiers, est problématique en termes de support client. Nous pourrions également implémenter WebDAV à un moment donné, mais ni celui-ci ni un serveur Web n'excluent l'autre - ce sont des fonctionnalités distinctes.

Je ne vois rien qui empêche la poursuite du travail et un PR pour cela. Personnellement je le supporte. Je pense que nous devrions:

  • Commencez petit, créez une interface graphique Web qui peut parcourir les instantanés et les fichiers qu'elle contient, puis une fois que nous avons une base solide, commencez à ajouter des fonctionnalités de restauration.
  • Faites-le commencer en utilisant la commande restic serve http afin que nous puissions ajouter plus tard d'autres méthodes de service telles que restic serve webdav et peut-être restic serve rest .
  • Faites-lui générer un nom d'utilisateur et un mot de passe temporaires au démarrage du serveur, pour
  • permet de configurer l'adresse IP/le nom d'hôte et le port à lier à l'aide d'un argument, par exemple restic serve http 127.0.0.1:8080 .
  • Ne pas écrire de code laid qui code en dur les actifs/HTML/JS/CSS, mais plutôt intégrer une interface graphique Web appropriée en utilisant par exemple https://github.com/tv42/becky ou même commencer en utilisant simplement net/http/#FileServer .
  • Sachez que c'est une fonctionnalité qui prendra un certain temps à terminer, ce n'est pas quelque chose que nous ferons du jour au lendemain.

Ouvrage existant et références similaires :

Cette page vous a été utile?
0 / 5 - 0 notes