Restic: Implementar servidor web para visualizar backups

Criado em 18 nov. 2014  ·  42Comentários  ·  Fonte: restic/restic

Implemente um comando restic que inicia um servidor da web para navegar por instantâneos.

user interface feature suggestion

Comentários muito úteis

Eu recomendaria todo um outro aplicativo chamado algo ao longo das linhas de restic-web escrito em go ou nodejs e react ou angular para ser capaz de fazer tudo o que você pode fazer na interface de linha de comando

Todos 42 comentários

Isso parece muita complexidade para algo que não parece ser a principal responsabilidade de um programa de backup. Isso é realmente necessário? Qual é o caso de uso? Eu preferiria o FUSE (https://github.com/restic/restic/issues/27).

O Windows não tem fusível. Ter um servidor web básico dá muito pouco trabalho usando http://golang.org/pkg/net/http/#FileServer. Isso deve levar o mesmo tipo de interface usado para implementar uma interface de fusível de qualquer maneira.

Exatamente o que pensei, não é muito código e provavelmente a única maneira de navegar por instantâneos no Windows.

Eu concordo. Em algum momento é hora de uma GUI, e acho que a etapa mais natural para isso é um servidor da web embutido que pode apresentá-lo no localhost ou mesmo em outras interfaces, se desejado. Todo mundo tem um navegador da Web e não é preciso mexer nos aplicativos.

@rakoo, você está interessado em trabalhar no próximo servidor da web?

Reflexões sobre a interface do usuário:

  • Inicie o servidor HTTP com restic server
  • restic escreve um URL HTTP para stdout que inclui nome de usuário e senha gerados aleatoriamente, por exemplo, http://RarOjHogvueHov:egsevtekwucvith@localhost/snapshots
  • O servidor da web requer autenticação de resumo HTTP
  • E ele só se liga ao localhost

Vincular a algo diferente do localhost não deveria ser impossível, mas muito difícil. Talvez possamos codificar o localhost para a primeira versão e ver se os usuários reclamam.

Pensamentos?

Isso é mais ou menos o que eu tinha em mente, exceto sem o nome de usuário / senha: IMO eles fornecem pouco valor contra um invasor em potencial (faríamos HTTP simples, para que o nome de usuário e a senha sejam claramente visíveis).

Não há problema em vincular apenas ao localhost: vendo o espaço em que operamos, espero que o usuário tenha ssh para acessar seu VPS, então acho que é justo esperar que eles encapsulem o acesso ao seu repo desta forma:

backupserver> restic server 5000

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

Sei que isso é muito antigo, mas um de mim. Eu também não acho que o nome de usuário / senha embutido seja útil para mim, tudo isso está atrás de uma VPN de qualquer maneira e eu gostaria que iniciasse na hora de ligar o sistema.

@yatesco Qual é o seu caso de uso para iniciar o componente de servidor da web discutido no momento da inicialização do sistema? Não consigo pensar em nenhum, poderia explicar?

Olá @ fd0 - é para expor o repositório para a equipe.

Talvez um tanto incomum, eu tenho um monte de dados que não quero ficar por aí, então usar este arquivo como 'armazenamento de longo prazo' é ótimo, mas eu preciso fornecer acesso a ele da equipe e um compartilhamento de samba (por exemplo, # 377) ou uma interface do usuário da web seria ótimo

Ok, obrigado pela explicação.

É possível expor a montagem do fusível via Samba? Não consigo fazer funcionar, a pasta não está visível. Como faço para que o suporte do fusível use "allow_other"?

Eu esbocei o que precisa ser feito aqui: https://github.com/restic/restic/pull/754#issuecomment -276023059

Consulte também o problema nº 767 para obter as opções de montagem do fusível.

Precisamos apenas de um visualizador? ou uma GUI completa para todas as tarefas? Aqui estão os recursos que imagino para uma GUI:

Recursos de restauração:

  • listar instantâneos (com data, tamanho do instantâneo, tamanho real, etc.)
  • navegar por um instantâneo (classificar, pesquisar, etc.)
  • ver o histórico da versão do arquivo
  • restaurar um instantâneo ou uma seleção de pasta / arquivos para a unidade local do usuário

Recursos de administrador:

  • remover instantâneos
  • cópia de segurança
  • Verifica
  • reconstruir

Com o Electron , mantemos a interface de plataforma cruzada / HTML5, mas com recursos adicionais, como acesso ao sistema de arquivos, comandos exec, conexões ssh abertas, módulos nativos, etc.

Não posso falar pelo projeto, mas para mim, os recursos de restauração seriam suficientes.

Trabalho principalmente em caixas do Windows com SSH nos servidores e, se as coisas falharem, gostaria de conectar minha unidade de backup rapidamente para visualizar / baixar os arquivos em questão.

Olá senhores, acabei de começar a trabalhar com restic, trabalho muito bom, obrigado! Meus cinquenta centavos neste tópico. Apenas 'ver instantâneo' é um pouco inútil imho (pode ser feito com a montagem de fusível publicada por qualquer meio como nginx, samba, etc), definitivamente deve haver algumas ações úteis que um usuário pode fazer a seguir, por exemplo, restaurar arquivos para hosts selecionados, restaurar sql dump para algum host db, restaure qualquer coisa que tenha backup feito de maneira fácil. Existem duas coisas principais: 1. Pesquisa / classificação de dados e 2. Faça algo sob os dados (por exemplo, restaurar, excluir, compartilhar, classificar, comparar cópias (diff), etc.). Por que não o FUSE: não tem nada a ver com o Windows, mas com a experiência do usuário. Ter um front-end da web para armazenamento de backup com pesquisa avançada e fácil restauração (adaptado a um sistema e tipo de dados específicos) é muito legal. Imagino dezenas de casos de uso que fazem sentido para armazenamento de backup (pesquisa avançada, restauração remota, sugestões de política de backup, mascaramento de dados, proteção de PII, fragmentação, conformidade de dados, relatórios, etc), tendo uma frente da web para alguns deles (pelo menos pesquisar e restaurar) seria bom! Para backup onde na maioria dos casos o objetivo principal é apenas restaurar uma versão recente de algo, em caso de corrupção de dados, o mais rápido possível, é bom o suficiente, mas para funcionalidades como arquivamento ter um frontend da web é uma obrigação. Btw data archive é outro recurso interessante, por exemplo, desanexar certos dados do Restic Snap e movê-los para um arquivo de longo prazo, mas esta é outra história e fora do tópico para o tópico) E sim, se você decidir fazer isso no futuro, imho isso deve ser feito no rest-server, envolvendo os recursos principais na API rest. O último faz sentido para integração com sistemas de terceiros.

Eu recomendaria todo um outro aplicativo chamado algo ao longo das linhas de restic-web escrito em go ou nodejs e react ou angular para ser capaz de fazer tudo o que você pode fazer na interface de linha de comando

O restic poderia utilizar algo como https://github.com/dokan-dev/dokany/ no Windows?
Ocasionalmente, uso cppcryptfs para acessar pastas no Windows que foram criptografadas com gocryptfs no Linux e parece funcionar razoavelmente bem.

Olá,
Encontrei este artigo: https://devblogs.microsoft.com/commandline/announcing-wsl-2/
Diz:

Agora que o WSL 2 inclui seu próprio kernel Linux, ele tem compatibilidade total de chamadas de sistema. Isso apresenta um novo conjunto de aplicativos que você pode executar dentro do WSL. Alguns exemplos interessantes são a versão Linux do Docker, bem como o FUSE!

Por favor, leve em consideração que WSL requer Hyper-V para funcionar, mas:

1) O Hyper-V está disponível apenas para algumas versões do Windows. Por exemplo, o Windows 10 Pro tem suporte para Hyper-V, enquanto o Windows 10 Home não.

2) O Hyper-V não pode coexistir com nenhum outro software hipervisor que o usuário já esteja usando (como VirtualBox, etc). Portanto, se alguém já estiver usando o VirtualBox (ou qualquer outro hipervisor), não poderá usar WSL.

Em resumo, acho que o WSL não deve ser considerado um dado adquirido para todos os usuários do Windows.

@ aliron19 Você pode citar uma fonte para isso? Estou usando o WSL no meu pc de trabalho para executar o redis, mas este é um pc com Windows 10 Home, portanto, não há Hyper-V e, ainda assim, o WSL funciona bem.

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

Obrigado por esclarecer. Parece que o requisito do Hyper V é novo para WSL 2, pensei que Aliron estava falando sobre WSL em geral. Também é bom saber que o Hyper V estará disponível para usuários do Windows 10 Home.

Eu diria que devemos preferir um servidor Webdav (# 485) em vez de uma interface HTML.
Isso também permitiria aos usuários adicioná-lo facilmente como uma unidade de rede ao Windows Explorer.

Se você tem um servidor (ou unix / linux) com nodejs, pode fazer isso facilmente:

restic mount backup &
npx http-serve backup

Então você pode navegar http://127.0.0.1 : 8080
e ver seus arquivos:

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

Quando terminar, você pode:

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

Não sei se o restic bloqueia o repositório enquanto você o monta ou se você pode adicionar mais backups enquanto isso.
Mas pelo menos você pode ter uma pequena interface da web para navegar em seus arquivos.

@ vincent-ogury Achei que o objetivo desse recurso proposto é fornecer uma visualização de backup amigável, onde restic mount _não_está_ disponível.

Você está certo. Isso deve funcionar dentro de uma janela de encaixe no Windows, eu acho.
Uma versão da web pode ser boa para outras plataformas.
Pode ser uma linha de comando simplificada para mostrar instantâneos, visualizar, esquecer, iniciar um novo backups ...

Eu gostaria de trabalhar neste assunto. A ideia é implementar um servidor http Go vanilla com algum modelo html básico. Nosso caso de uso é ter alguma interface básica universal para Restic no Windows
Aqui está o escopo da minha tarefa:

Problema
A Restic não fornece uma maneira prática de navegar pelos backups no Windows.

Tarefa
Tente implementar uma prova de conceito básica de um servidor web embutido, que permite navegar e restaurar os backups usando um navegador.

Exemplo
Executar os comandos a seguir criará dois backups e você aprenderá como navegar pelos backups por meio da linha de comando.

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

Faça um backup

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

Faça algumas mudanças

data> ~ / arquivo-com-alterações.txt

Faça o próximo backup

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

Veja quais backups você tem

restic -p ~ / .restic-password --repo / tmp / instantâneos de backup

repositório 2ad83051 aberto com sucesso, a senha está correta

Caminhos de tags de host de tempo de ID

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

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

2 instantâneos

Veja o que está dentro de um backup

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

Obtenha uma lista formatada em json de todos os arquivos do backup.

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

Verifique se um arquivo está no backup

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

Restaurar um arquivo

restic -p ~ / .restic-password --repo / tmp / backup restore mais recente --target / tmp / restore --include "/root/snmp.json"
Especificações
Ao executar algo assim, o servidor web é iniciado e, internamente, o backup é "aberto".
restic -p ~ / .restic-password --repo / tmp / backup webserver 127.0.0.1:3344

Apontando meu navegador para HTTP://127.0.0.1 : 3344, obtenho a lista de todos os instantâneos no repositório. São os mesmos dados que os instantâneos restic -p ~ / .restic-password --repo / tmp / backup mostram.

Posso clicar no ID na primeira coluna e obter uma visualização em árvore de todos os arquivos no instantâneo. Os mesmos dados que restic -p ~ / .restic-password --repo / tmp / backup ls -l--json retorna é exibido. A visualização em árvore não precisa ser dobrada e desdobrada nem ícones no início.

Ou posso clicar em um caminho de um instantâneo (5ª coluna) e obter uma lista de arquivos no backup pertencentes apenas a este caminho. Ele exibe os mesmos dados que restic -p ~ / .restic-password --repo / tmp / backup ls -l--caminho--json

Posso clicar em um único arquivo e baixá-lo pelo navegador.

Idealmente, posso clicar em um arquivo e obter uma lista de todas as diferentes versões ordenadas por data desse arquivo.
Um instantâneo sempre dá uma visão virtual de todo o sistema de arquivos. Para identificar as diferentes versões de um arquivo, o seguinte comando seria usado na linha de comando.
restic -p ~ / .restic-password --repo / tmp / backup find /root/snmp.json --json | jq
Todos os objetos, onde mtime é idêntico, devem ser reduzidos a um único objeto porque os arquivos não foram alterados.

IMHO adicionando suporte de "montagem restic" no Windows com algo como dokany faria mais sentido ter o mesmo fluxo de trabalho de restauração no Linux e Windows e fornecer uma melhor experiência do usuário usando o OS Explorer para navegar pelos arquivos.

Por favor, veja https://github.com/restic/restic/pull/2862 quais endereços pretendem resolver Restic does not provide a handy way to browse through the backups on Windows da mesma forma que em outras plataformas além do Windows.

Claro, mas acho que é muito difícil para um usuário "típico" do Windows usar a interface de linha de comando, meu objetivo é fornecer uma interface simples e compreensível que qualquer usuário possa entender.

Como solução alternativa, juntei o que @ vincent-ogury e @celogeek sugeriram (obrigado!) E criei este dockerfile; https://github.com/stevedenman/restic-browser-docker
Eu o tenho executado em minha máquina Windows (no Docker em wsl2) e funciona muito bem para navegar por instantâneos e baixar arquivos.

desculpe pessoal, você diz que eu não deveria fazer isso? por que há um problema com isso? as soluções sugeridas são bastante difíceis para um usuário médio, no meu caso, tudo o que precisamos fazer - iniciar o programa (com os sinalizadores definidos) e abrir o navegador!

Olá.

Como um colega usuário inquieto, eu só queria deixar cair meus dois centavos sobre o assunto.

Eu sou um usuário experiente em tecnologia, então estou bem com a forma como as coisas estão no repouso. Também estou ciente de que o Restic é voltado para pessoas que entendem de tecnologia; portanto, as soluções atuais são / podem ser complexas para alguns. Mas não vejo nenhum problema em implementar um servidor da web local acessível por meio do navegador. Não deve substituir as soluções atuais, mas como uma solução secundária seria bom ter algo assim. E talvez, isso tornasse o repouso mais acessível a ainda mais pessoas.

Obrigado.

Discordo totalmente das opiniões "é muito difícil para os usuários do Windows". Em primeiro lugar, esses usuários já conseguiram executar o restic para fazer backup de suas coisas, e executar o comando mount em vez do comando backup não é mais difícil. Em segundo lugar, estamos falando sobre abrir a linha de comando e inserir restic -r foo mount bar aqui. Sério, como isso é difícil para alguém? Se alguém está tendo problemas com isso, essas pessoas precisam se educar. Isso não é algo "difícil", é apenas uma linha de comando de distância.

EDIT: Só para esclarecer, quero dizer que isso não deve ser difícil para qualquer usuário do Windows dado restic mount trabalhando no Windows como em # 2862 - não estou sugerindo o que @filippobottega escreveu logo abaixo este comentário é fácil para um usuário comum do Windows. Não acho que se deva usar WSL para usar restic mount .

Olá,
Montei com êxito um backup restic no Windows Explorer usando WSL2, mas não é tão fácil como esperava.
Voce tem que:

  1. Instale o WSL2 conforme explicado no Subsistema Windows para Linux Guia de Instalação para Windows 10
  2. Mude o usuário padrão do Ubuntu para root, conforme explicado na resposta do gurnec em Não é possível editar /etc/nginx/nginx.conf do Windows.
  3. Faça logon em uma sessão do Ubuntu como root e monte o backup restic conforme explicado em Restaurar usando montagem , por exemplo restic -r /mnt/c/ResticBackup -p /mnt/c/ResticBackup/password-file.txt mount /mnt/restic

    No final você poderá ver:

image

Em segundo lugar, estamos falando sobre abrir a linha de comando e inserir restic -r foo mount bar aqui. Sério, como isso é difícil para alguém?

Se você considerar as opções do BIOS para permitir que o hipervisor funcione, configurar o WSL e diagnosticar quaisquer problemas decorrentes do mau funcionamento, etc., isso pode ser bastante trabalhoso. Na minha opinião, um requisito para executar o Microsoft Hypervisor que é incompatível com o VmWare e o VirtualBox que estou usando é simplesmente ridículo para o Restic.

É muito mais fácil apontar e clicar no navegador da Web e também o http é um pouco melhor suportado (dica: navegadores) do que o sabor do Windows do smb se você quiser compartilhar em LAN. Além disso, não está claro se você pode expor essas montagens via SMB, mas mesmo se puder, a questão ainda está de pé.

Na minha opinião, não há dúvida de que a opção do navegador da web é mais simples.

Se você considerar as opções do BIOS para permitir que o hipervisor funcione, configurando o WSL e diagnosticando quaisquer problemas decorrentes de mau funcionamento, etc.

@AndrewSav Isso não é o que está sendo discutido aqui. Veja o comentário de @rawtaz (ênfase minha)

EDIT: Só para esclarecer, quero dizer que isso não deve ser difícil para qualquer usuário do Windows _dado restic mount trabalhando no Windows como em # 2862_ - não estou sugerindo o que @filippobottega escreveu logo abaixo este comentário é fácil para um usuário comum do Windows. Não acho que se deva usar WSL para usar restic mount .

@cfbao você precisa instalar um driver de kernel para isso. Estou sempre por uma opção que não requer dirvers de kernel adicionais. Acho que não há dúvida de que executar um programa e abrir seu navegador é mais simples do que instalar algum software de terceiros, provavelmente reiniciando depois disso e executando alguma linha de comando obscura (com isso quero dizer que você precisa fornecer e digitar parâmetros de linha de comando, no navegador, você simplesmente pode clicar para navegar).

A instalação de drivers de terceiros também tem uma clara desvantagem de afetar todo o sistema se houver um bug no driver. Novamente, um requisito do restic para um driver de terceiros não é razoável, se houver opções muito mais simples (navegador).

Até onde posso ver, essas opções não são contraditórias, então o restic pode apoiar ambos e, assim, atender às necessidades de ambos os grupos.

@cfbao você precisa instalar um driver de kernel para isso. Estou sempre por uma opção que não requer dirvers de kernel adicionais.

@AndrewSav Point sendo que é uma tarefa muito simples que todo usuário do Windows Restic seria capaz de fazer facilmente. A utilidade marginal de implementação de um servidor web é, portanto, bastante reduzida e pode não justificar o custo de desenvolvimento e manutenção restic.

@AndrewSav A interface da web é boa para dar uma olhada no backup, posso imaginar. Mas se houver uma tarefa para restaurar vários arquivos de diferentes diretórios, prefiro o gerenciador de arquivos decente e o instantâneo de backup montado como um sistema de arquivos. Se o restic for fornecer interface WebDAV para trás, que ainda é uma solução inferior no Windows devido às limitações do cliente WebDAV: 1) o limite máximo de tamanho de arquivo padrão é 50M, o usuário precisaria fazer manipulações de registro para estendê-lo para 4G; 2) alguns caracteres não são suportados em nomes de arquivo.
Minha opinião é que a interface web e a montagem adequada do sistema de arquivos são recursos complementares com casos de uso um tanto diferentes.
O driver de kernel de terceiros (por exemplo, http://www.secfs.net/winfsp/) deve ser instalado apenas uma vez e não é necessário reinicializar.
Eu também não entendo muito bem o argumento sobre "executar alguma linha de comando obscura". Você não precisaria executar algum comando restic para ativar a interface da web também?

Obrigado a todos por sua contribuição! Então, vamos resumir as coisas:

  • @ fd0 já sugeriu e, portanto, aprovou a implementação de um navegador de repositório de serviço HTTP neste problema e elaborou sobre ele em https://github.com/restic/restic/issues/60#issuecomment -122898872.
  • Muitas pessoas acham que é uma boa ideia ter esse recurso de plataforma neutra para navegar por instantâneos e seus arquivos.
  • Uma opinião comum é que também queremos poder restaurar arquivos a partir dele, na medida em que for prático (não podemos esperar ser capazes de restaurar um arquivo inteiro por meio do navegador da web, seria mais como "baixar arquivos " açao).
  • Ele não deve fazer nenhuma operação de gravação no repositório, apenas operações de leitura.
  • O WebDAV, embora seja uma opção para navegar em arquivos, é problemático em termos de suporte ao cliente. Podemos implementar WebDAV também em algum ponto, mas nem isso nem um servidor web exclui o outro - são recursos separados.

Não vejo nada impedindo a continuação do trabalho e um PR para isso. Pessoalmente, eu apoio. Eu acho que devemos:

  • Comece pequeno, faça uma GUI da web que possa navegar por instantâneos e arquivos nela, então, quando tivermos uma base sólida, comece a adicionar a funcionalidade de restauração.
  • Faça com que comece usando o comando restic serve http para que possamos adicionar outros métodos de servir isso, como restic serve webdav e talvez restic serve rest .
  • Faça com que ele gere um nome de usuário e senha temporários ao iniciar o servidor, para
  • permite configurar o IP / nome do host e a porta para vincular usando um argumento, por exemplo, restic serve http 127.0.0.1:8080 .
  • Não escreva um código feio que codifique ativos / HTML / JS / CSS, mas, em vez disso, incorpore uma GUI da web adequada usando, por exemplo, https://github.com/tv42/becky ou mesmo comece usando apenas net / http / # FileServer .
  • Perceba que este é um recurso que levará algum tempo para ser concluído, não é algo que faremos durante a noite.

Trabalho existente e referências semelhantes:

Esta página foi útil?
0 / 5 - 0 avaliações