Restic: Implementar un servidor web para ver las copias de seguridad

Creado en 18 nov. 2014  ·  42Comentarios  ·  Fuente: restic/restic

Implemente un comando restic que inicie un servidor web para buscar instantáneas.

user interface feature suggestion

Comentario más útil

Recomendaría una aplicación completamente diferente llamada algo similar a restic-web escrito en go o nodejs y react o angular para poder hacer todo lo que puede hacer desde la interfaz de línea de comandos

Todos 42 comentarios

Esto parece una gran complejidad para algo que no parece ser la responsabilidad principal de un programa de respaldo. ¿Es esto realmente necesario? ¿Cuál es el caso de uso? Preferiría FUSE (https://github.com/restic/restic/issues/27).

Windows no tiene fusible. Tener un servidor web básico es muy poco trabajo usando http://golang.org/pkg/net/http/#FileServer. Esto debería tomar el mismo tipo de interfaces que se utilizan para implementar una interfaz de fusible de todos modos.

Exactamente lo que pensaba, no es mucho código y probablemente la única forma de buscar instantáneas en Windows.

Estoy de acuerdo. En algún momento es el momento de una GUI, y creo que el paso más natural para eso es un servidor web integrado que puede presentarlo en localhost o incluso en otras interfaces si se desea. Todo el mundo tiene un navegador web y uno no tendría que jugar con las aplicaciones.

@rakoo, ¿está interesado en trabajar en el servidor web a continuación?

Pensamientos sobre la interfaz de usuario:

  • Inicie el servidor HTTP con restic server
  • restic escribe una URL HTTP en stdout que incluye nombre de usuario y contraseña generados aleatoriamente, por ejemplo, http://RarOjHogvueHov:egsevtekwucvith@localhost/snapshots
  • El servidor web requiere autenticación de resumen HTTP
  • Y solo se une a localhost

La vinculación a otra cosa que no sea localhost no debería ser imposible, pero sí difícil. Tal vez codifiquemos localhost para la primera versión y veamos si los usuarios se quejan.

¿Pensamientos?

Esto es más o menos lo que tenía en mente, excepto sin el nombre de usuario / contraseña: en mi opinión, brindan poco valor contra un atacante potencial (haríamos HTTP simple, por lo que el nombre de usuario y la contraseña son claramente visibles).

Estoy bien con la vinculación solo a localhost: al ver el espacio en el que operamos, espero que el usuario tenga ssh para acceder a su VPS, por lo que creo que es justo esperar que accedan a su repositorio de esta manera:

backupserver> restic server 5000

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

Me doy cuenta de que esto es bastante antiguo, pero +1 de mi parte. Tampoco creo que el nombre de usuario / contraseña incrustado sea útil para mí, todo esto está detrás de una VPN de todos modos y me gustaría que comenzara en el momento de la puesta en marcha del sistema.

@yatesco ¿Cuál es su caso de uso para iniciar el componente de servidor web discutido en el momento del inicio del sistema? No puedo pensar en uno, ¿podría explicarlo?

Hola @ fd0 : es para exponer el repositorio al equipo.

Tal vez de manera bastante inusual, tengo un montón de datos que no quiero que cuelguen, por lo que usar este archivo como 'almacenamiento a largo plazo' es genial, pero luego necesito proporcionar acceso a él desde el equipo y un recurso compartido de samba (por ejemplo, # 377) o una interfaz de usuario web sería genial

Ok, gracias por la explicación.

¿Es posible exponer el soporte Fuse a través de Samba? No puedo hacer que funcione, la carpeta no está visible. ¿Cómo consigo que la montura Fuse use "allow_other"?

He resumido lo que se debe hacer aquí: https://github.com/restic/restic/pull/754#issuecomment -276023059

Consulte también el número 767 para conocer las opciones de montaje de fusibles.

¿Es solo un visor lo que necesitamos? o una GUI completa para todas las tareas? Aquí las características que imagino para una GUI:

Restaurar funciones:

  • enumerar instantáneas (con fecha, tamaño de instantánea, tamaño real, etc.)
  • navegar por una instantánea (ordenar, buscar, etc.)
  • ver el historial de versiones del archivo
  • restaurar una instantánea o una selección de carpetas / archivos en la unidad local del usuario

Funciones de administrador:

  • eliminar instantáneas
  • respaldo
  • cheque
  • reconstruir

Con Electron mantenemos la GUI multiplataforma / HTML5 pero con características adicionales como acceso al sistema de archivos, comandos exec, conexiones ssh abiertas, módulos nativos, etc.

No puedo hablar por el proyecto, pero para mí, las funciones de restauración serían suficientes.

Principalmente trabajo en Windows Box SSH en los servidores y, si algo falla, me gustaría conectar rápidamente mi unidad de respaldo para ver / descargar los archivos en cuestión.

Hola caballeros, acabo de empezar a trabajar con restic, muy buen trabajo, gracias! Mis cincuenta centavos sobre este tema. Simplemente 'ver instantánea' es un poco inútil en mi humilde opinión (se puede hacer con el montaje de fusibles publicado por cualquier medio como nginx, samba, etc.), definitivamente debería haber algunas acciones útiles que un usuario pueda hacer a continuación, por ejemplo, restaurar archivos en hosts seleccionados, restaurar volcado sql a algún host de base de datos, restaure cualquier cosa que restic haya respaldado de manera fácil. Hay dos cosas principales: 1. Búsqueda / clasificación de datos y 2. Hacer algo debajo de los datos (por ejemplo, restaurar, eliminar, compartir, clasificar, comparar copias (diff), etc.). ¿Por qué no FUSE? No se trata de Windows en absoluto, se trata de UX. Tener una interfaz web para el almacenamiento de copias de seguridad con búsqueda completa y restauración fácil (adaptada a un tipo de datos y sistema en particular) es realmente genial. Me imagino una docena de casos de uso que tienen sentido para el almacenamiento de copias de seguridad (búsqueda avanzada, restauración remota, sugerencias de políticas de copia de seguridad, enmascaramiento de datos, protección de PII, trituración, cumplimiento de datos, informes, etc.), tener un frente web para algunos de ellos (al menos buscar y restaurar) sería bueno! Para la copia de seguridad donde en la mayoría de los casos el propósito principal es simplemente restaurar la versión reciente de algo, en caso de corrupción de datos, lo más rápido posible, es lo suficientemente bueno, pero para funciones como el archivo, tener una interfaz web es imprescindible. Por cierto, el archivo de datos es otra característica interesante, p. Ej., Separar ciertos datos del snap restic y moverlos a un archivo a largo plazo, pero esta es otra historia y está fuera de tema para el hilo) Y sí, si decides hacer esto en el futuro, en mi humilde opinión debe hacerse en rest-server, envolviendo las características principales en rest api. Este último tiene sentido para la integración con sistemas de terceros.

Recomendaría una aplicación completamente diferente llamada algo similar a restic-web escrito en go o nodejs y react o angular para poder hacer todo lo que puede hacer desde la interfaz de línea de comandos

¿Restic podría utilizar algo como https://github.com/dokan-dev/dokany/ en Windows?
De vez en cuando uso cppcryptfs para acceder a carpetas en Windows que se cifraron con gocryptfs en Linux y parece funcionar razonablemente bien.

Hola,
Encontré este artículo: https://devblogs.microsoft.com/commandline/announcing-wsl-2/
Dice:

Ahora que WSL 2 incluye su propio kernel de Linux, tiene compatibilidad total con las llamadas al sistema. Esto presenta un conjunto completamente nuevo de aplicaciones que puede ejecutar dentro de WSL. Algunos ejemplos interesantes son la versión para Linux de Docker, así como FUSE!

Tenga en cuenta que WSL requiere Hyper-V para funcionar, pero:

1) Hyper-V solo está disponible para algunas versiones de Windows. Por ejemplo, Windows 10 Pro es compatible con Hyper-V, mientras que Windows 10 Home no.

2) Hyper-V no puede coexistir con ningún otro software de hipervisor que el usuario ya esté usando (como VirtualBox, etc.). Entonces, si alguien ya está usando VirtualBox (o cualquier otro hipervisor), no podrá usar WSL.

En resumen, creo que WSL no debe darse por sentado para todos los usuarios de Windows.

@ aliron19 ¿Puedes citar una fuente para eso? Estoy usando WSL en mi PC de trabajo para ejecutar redis, pero esta es una PC con Windows 10 Home, por lo que no hay Hyper-V y, sin embargo, WSL funciona bien.

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

Gracias por aclararlo. Parece que el requisito de Hyper V es nuevo para WSL 2, pensé que aliron estaba hablando de WSL en general. También es bueno saber que Hyper V estará disponible para los usuarios de Windows 10 Home.

Yo diría que deberíamos preferir un servidor Webdav (# 485) en lugar de una interfaz HTML.
Esto también permitiría a los usuarios agregarlo fácilmente como una unidad de red al explorador de Windows.

Si tiene un servidor (o unix / linux) con nodejs, puede hacerlo fácilmente:

restic mount backup &
npx http-serve backup

Luego puede navegar por http://127.0.0.1 : 8080
y ver tus archivos:

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

Cuando haya terminado, puede:

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

No sé si restic bloquea el repositorio mientras lo monta, o si puede agregar más copias de seguridad mientras tanto.
Pero al menos puede tener una pequeña interfaz web para navegar por sus archivos.

@ vincent-ogury Pensé que el objetivo de esta función propuesta es proporcionar una vista de respaldo fácil de usar donde restic mount _no_está disponible.

Tienes razón. Esto debería funcionar dentro de una ventana acoplable en Windows, supongo.
Una versión web puede ser buena para otras plataformas.
Puede simplificar la línea de comandos para mostrar instantáneas, ver, olvidar, iniciar una nueva copia de seguridad ...

Me gustaría trabajar en este tema. La idea es implementar un servidor http vanilla Go con una plantilla html básica. Nuestro caso de uso es tener una interfaz básica universal para Restic en Windows
Aquí está el alcance de mi tarea:

Problema
Restic no proporciona una forma práctica de navegar a través de las copias de seguridad en Windows.

Tarea
Intente implementar una prueba de concepto básica de un servidor web incorporado, que permita navegar y restaurar las copias de seguridad usando un navegador.

Ejemplo
La ejecución de los siguientes comandos creará dos copias de seguridad y aprenderá a examinar las copias de seguridad a través de la línea de comandos.

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

Hacer una copia de seguridad

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

Hacer algunos cambios

fecha> ~ / archivo-con-cambios.txt

Haz la próxima copia de seguridad

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

Mira que copias de seguridad tienes

restic -p ~ / .restic-password --repo / tmp / instantáneas de respaldo

el repositorio 2ad83051 se abrió correctamente, la contraseña es correcta

Rutas de etiquetas de host de tiempo de ID

b8ee7b24 2020-09-11 17:20:17 thorsten-devvm-v3 / raíz

99388d0b 2020-09-11 17:21:23 thorsten-devvm-v3 / raíz

2 instantáneas

Mira lo que hay dentro de una copia de seguridad

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

Obtenga una lista con formato json de todos los archivos de la copia de seguridad.

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

Verifique si un archivo está en la copia de seguridad

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

Restaurar un archivo

restic -p ~ / .restic-password --repo / tmp / backup restore latest --target / tmp / restore --include "/root/snmp.json"
Especificaciones
Al ejecutar algo así, el servidor web se inicia e internamente la copia de seguridad está "abierta".
restic -p ~ / .restic-password --repo / tmp / backup webserver 127.0.0.1:3344

Apuntando mi navegador a HTTP://127.0.0.1 : 3344 obtengo la lista de todas las instantáneas en el repositorio. Son los mismos datos, que muestra restic -p ~ / .restic-password --repo / tmp / backup snapshots.

Puedo hacer clic en el ID en la primera columna y obtengo una vista de árbol de todos los archivos en la instantánea. Los mismos datos que restic -p ~ / .restic-password --repo / tmp / backup ls -lSe muestra --json returns. La vista de árbol no necesita plegarse y desplegarse ni iconos al principio.

O puedo hacer clic en una ruta de una instantánea (quinta columna) y obtengo una lista de archivos en la copia de seguridad que pertenecen solo a esta ruta. Muestra los mismos datos que restic -p ~ / .restic-password --repo / tmp / backup ls -l--sendero--json

Puedo hacer clic en un solo archivo y descargarlo a través del navegador.

Idealmente, puedo hacer clic en un archivo y obtengo una lista de todas las versiones diferentes ordenadas por fecha de ese archivo.
Una instantánea siempre ofrece una vista virtual de todo el sistema de archivos. Para identificar las diferentes versiones de un archivo, se usaría el siguiente comando en la línea de comandos.
restic -p ~ / .restic-contraseña --repo / tmp / backup buscar /root/snmp.json --json | jq
Todos los objetos, donde mtime es idéntico, deben reducirse a un solo objeto porque los archivos no han cambiado.

En mi humilde opinión, agregar soporte de "montaje restic" en Windows con algo como dokany tendría más sentido para tener el mismo flujo de trabajo de restauración en Linux y Windows, y proporcionar una mejor experiencia de usuario usando OS Explorer para navegar por los archivos.

Consulte https://github.com/restic/restic/pull/2862 qué direcciones están destinadas a resolver Restic does not provide a handy way to browse through the backups on Windows de la misma manera que se hace en otras plataformas que no sean Windows.

Claro, pero supongo que es bastante difícil para un usuario "típico" de Windows usar la interfaz de línea de comandos, mi objetivo es proporcionar una interfaz simple y comprensible que cualquier usuario pueda entender.

Como solución alternativa, reuní lo que sugirieron @ vincent-ogury y https://github.com/stevedenman/restic-browser-docker
Lo he estado ejecutando en mi máquina con Windows (en Docker en wsl2) y funciona muy bien para buscar instantáneas y descargar archivos.

lo siento chicos, ¿dices que no debería hacerlo? ¿Por qué hay un problema con eso? Las soluciones sugeridas son bastante difíciles para un usuario medio, en mi caso, todo lo que tenemos que hacer es iniciar el programa (con las banderas definidas) y abrir el navegador.

Hola.

Como compañero usuario restic, solo quería dejar mis dos centavos sobre el tema.

Soy un usuario conocedor de la tecnología, así que estoy bien con la forma en que están las cosas en restic. También soy consciente de que restic es hacia las personas conocedoras de la tecnología; por lo tanto, las soluciones actuales son / podrían ser complejas para algunos. Pero no veo ningún problema en implementar un servidor web local al que se pueda acceder a través del navegador. No debería reemplazar las soluciones actuales, pero como solución secundaria sería bueno tener algo así. Y quizás, eso haría que Restic sea más accesible para aún más personas.

Gracias.

Estoy totalmente en desacuerdo con las opiniones de "es demasiado difícil para los usuarios de Windows". En primer lugar, estos usuarios ya han logrado ejecutar restic para hacer una copia de seguridad de sus cosas, y ejecutar el comando de montaje en lugar del comando de copia de seguridad no es más difícil. En segundo lugar, estamos hablando de abrir la línea de comando e ingresar restic -r foo mount bar aquí. En serio, ¿cómo es esto difícil para alguien? Si alguien tiene problemas con eso, esas personas deben educarse a sí mismas. Esto no es algo "difícil", es sólo una línea de comando de distancia.

EDITAR: Solo para aclarar, quiero decir que esto no debería ser difícil en absoluto para cualquier usuario de Windows dado que restic mount trabaja en Windows como se indica en # 2862 - No estoy sugiriendo lo que @filippobottega escribió justo debajo este comentario es fácil para un usuario medio de Windows. No creo que uno deba usar WSL para usar restic mount .

Hola,
He montado con éxito una copia de seguridad restic en el Explorador de Windows usando WSL2, pero no es tan fácil como esperaba.
Tienes que:

  1. Instale WSL2 como se explica en la Guía de instalación del Subsistema de Windows para Linux para Windows 10
  2. Cambie el usuario predeterminado de Ubuntu a root como se explica en la respuesta de gurnec en No se puede editar /etc/nginx/nginx.conf desde Windows.
  3. Inicie sesión en una sesión de Ubuntu como root y monte la copia de seguridad restic como se explica en Restaurar usando el montaje , por ejemplo restic -r /mnt/c/ResticBackup -p /mnt/c/ResticBackup/password-file.txt mount /mnt/restic

    Al final podrás ver:

image

En segundo lugar, estamos hablando de abrir la línea de comando e ingresar restic -r foo mount bar aquí. En serio, ¿cómo es esto difícil para alguien?

Si considera las opciones de BIOS para permitir que el hipervisor funcione, configurar WSL y diagnosticar cualquier problema que surja de su mal funcionamiento, etc., esto puede ser bastante laborioso. En mi opinión, un requisito para ejecutar Microsoft Hypervisor que es incompatible con VmWare y VirtualBox que estoy usando, es simplemente ridículo para restic.

Apuntar y hacer clic en el navegador web es mucho más fácil y también http es algo mejor compatible (pista: navegadores) que el sabor de Windows de smb si desea compartir en LAN. Además, no está claro si puede exponer estos soportes a través de smb, pero incluso si puede, el punto sigue en pie.

En mi opinión, no hay duda de que la opción del navegador web es más sencilla.

Si considera las opciones de BIOS para permitir que el hipervisor funcione, configure WSL y diagnostique cualquier problema que surja de su mal funcionamiento, etc.

@AndrewSav Eso no es lo que se está discutiendo aquí. Ver comentario de @rawtaz (énfasis mío)

EDITAR: Solo para aclarar, quiero decir que esto no debería ser difícil para ningún usuario de Windows _ dado que restic mount trabaja en Windows como se indica en # 2862_ - No estoy sugiriendo lo que @filippobottega escribió justo debajo este comentario es fácil para un usuario medio de Windows. No creo que uno deba usar WSL para usar restic mount .

@cfbao necesitas instalar un controlador de kernel para eso. Siempre estoy a favor de una opción que no requiera dirvers de kernel adicionales. Creo que esto no debería ser una duda de que ejecutar un programa y abrir su navegador es más simple que instalar algún software de terceros, probablemente reiniciar después de eso y luego ejecutar alguna línea de comando oscura (con eso me refiero a que necesita proporcionar y escribir parámetros de línea de comando, en el navegador, simplemente puede hacer clic para navegar).

La instalación de controladores de terceros también tiene una clara desventaja de afectar a todo el sistema si hay un error en dicho controlador. Una vez más, un requisito de restic para un controlador de terceros no es razonable, si hay opciones (del navegador) mucho más simples.

Por lo que puedo ver, estas opciones no se contradicen, por lo que restic puede apoyar a ambos y, por lo tanto, satisfacer las necesidades de ambos grupos.

@cfbao necesitas instalar un controlador de kernel para eso. Siempre estoy a favor de una opción que no requiera dirvers de kernel adicionales.

@AndrewSav El punto es que es una tarea muy simple que todos los usuarios restos de Windows podrían hacer fácilmente. Por lo tanto, la utilidad marginal de implementar un servidor web se reduce en gran medida y puede que no justifique el costo de desarrollo y mantenimiento restringidos.

@AndrewSav La interfaz web es buena para mirar alrededor de la copia de seguridad, me lo puedo imaginar. Pero si hay una tarea para restaurar varios archivos de diferentes directorios, preferiría el administrador de archivos decente y la instantánea de respaldo montados como un sistema de archivos. Si restic va a proporcionar una interfaz WebDAV en la parte posterior que sigue siendo una solución inferior en Windows debido a las limitaciones de su cliente WebDAV: 1) el límite de tamaño máximo de archivo predeterminado es 50M, el usuario deberá realizar manipulaciones de registro para extenderlo a 4G; 2) algunos caracteres no se admiten en los nombres de archivo.
Mi opinión es que la interfaz web y el montaje adecuado del sistema de archivos son características complementarias con casos de uso algo diferentes.
El controlador del kernel de terceros (por ejemplo, http://www.secfs.net/winfsp/) solo debe instalarse una vez y no es necesario reiniciar.
Tampoco entiendo del todo el argumento sobre "ejecutar alguna línea de comando oscura". ¿No necesitaría ejecutar algún comando restic para activar la interfaz web también?

¡Gracias a todos por sus comentarios! Así que resumamos las cosas:

  • @ fd0 sugirió previamente y, por lo tanto, aprobó la implementación de un navegador de repositorio de servicio HTTP en este problema y lo desarrolló en https://github.com/restic/restic/issues/60#issuecomment -122898872.
  • Mucha gente piensa que es una buena idea tener esta función de plataforma neutral para explorar instantáneas y sus archivos.
  • Una opinión común es que también queremos poder restaurar archivos desde él, en la medida en que sea práctico (es posible que no esperemos poder restaurar un archivo completo a través del navegador web, sería más una "descarga de archivos "acción).
  • No debe realizar ninguna operación de escritura en el repositorio, solo operaciones de lectura.
  • WebDAV, si bien es una opción para buscar archivos, es problemático en términos de soporte al cliente. Podríamos implementar WebDAV también en algún momento, pero ni eso ni un servidor web excluyen al otro, son características separadas.

No veo nada que impida continuar con el trabajo y un PR para esto. Personalmente lo apoyo. Pienso que deberíamos:

  • Comience con algo pequeño, cree una GUI web que pueda buscar instantáneas y archivos en ella, luego, una vez que tengamos una base sólida, comience a agregar la funcionalidad de restauración.
  • Haga que comience a usar el comando restic serve http para que luego podamos agregar otros métodos de servir esto, como restic serve webdav y quizás restic serve rest .
  • Haga que genere un nombre de usuario y contraseña temporales al iniciar el servidor, para
  • permite configurar la IP / nombre de host y el puerto para enlazar usando un argumento, por ejemplo, restic serve http 127.0.0.1:8080 .
  • No escriba código feo que codifique activos / HTML / JS / CSS, sino que incruste una GUI web adecuada usando, por ejemplo, https://github.com/tv42/becky o incluso comience simplemente usando net / http / # FileServer .
  • Tenga en cuenta que esta es una función que llevará bastante tiempo terminar, no es algo que haremos de la noche a la mañana.

Obra existente y referencias similares:

¿Fue útil esta página
0 / 5 - 0 calificaciones