Sincronize uma pasta entre dois computadores com um observador do sistema de arquivos para que, sempre que um arquivo for modificado, ele seja imediatamente replicado

19

Eu tenho:

  • um VPS do Linux (na verdade, é um contêiner) que eu conecto via SSH na porta IP 203.0.113.0 1234

  • um computador doméstico (por trás de um roteador), IP público 198.51.100.17, que é o Debian ou o Windows + Cygwin

Qual é o mais fácil de ter uma pasta /home/inprogress/ sincronizada (em ambas as direções), um pouco como rsync , mas com um observador de sistema de arquivos , para que cada vez que um arquivo seja modificado é imediatamente replicado no outro lado? (ou seja, não há necessidade de chamar manualmente um programa de sincronização)

Estou procurando uma solução de linha de comando / sem-GUI, já que o servidor está sem cabeça.

Existe uma solução incorporada Linux / Debian?

    
por Basj 27.11.2018 / 13:05

2 respostas

19

Após o comentário do @ Kusalananda, eu finalmente passei algumas horas testando Syncthing para este caso de uso e ele funciona muito bem. Ele detecta automaticamente as alterações em ambos os lados e a replicação é muito rápida.

Exemplo: imagine que você está trabalhando localmente em server.py em seu software de bloco de notas favorito, você clicou em CTRL + S (Salvar). Alguns segundos depois, ele é automaticamente replicado no servidor distante (sem qualquer diálogo pop-up).

Uma coisa importante que eu notei é que você não precisa pensar no IP do computador doméstico e servidor com o Syncthing: cada "dispositivo" (computador, servidor, telefone, etc.) tem um DeviceID exclusivo e se você compartilhar o ID com outro dispositivo, ele descobrirá automaticamente como eles devem se conectar uns aos outros.

Para fazer:

  • Lado do computador em casa (Windows ou Linux):

    Use a ferramenta normal de configuração do navegador Syncthing

  • Lado do VPS:

    Primeiro, conecte o VPS com um encaminhamento de porta:

    ssh <user>@<VPS_IP> -L 8385:localhost:8384
    

    A última opção irá redirecionar a ferramenta de configuração da web Syncthing do VPS, escutando na porta 8384 para a porta 8385 do computador doméstico.

    Em seguida, execute isso no VPS:

    wget https://github.com/syncthing/syncthing/releases/download/v0.14.52/syncthing-linux-amd64-v0.14.52.tar.gz 
    tar xvfz syncthing-linux-amd64-v0.14.52.tar.gz
    nohup syncthing-linux-amd64-v0.14.52/syncthing &
    

    Em seguida, no navegador do computador doméstico, abra o link : essa será a configuração do Syncthing do VPS!

Outra solução que tentei:

  • SSHFS usando este tutorial . Por favor, note que neste tutorial eles não usam sshfs-win mas win-sshfs em vez disso (estes são dois projetos diferentes). Eu tentei os dois e não consegui fazer nenhum deles funcionar (provavelmente um problema com a configuração do VPS).

  • Esta é também uma referência interessante: link

Vantagens adicionais do Syncthing que acabei de notar:

  • você pode reduzir fsWatcherDelayS no config.xml de 10 para 2 segundos para que depois de fazer CTRL + S, 2 segundos depois (+ o tempo para fazer upload, ou seja, menos de 1 segundo para um pequeno arquivo de texto) está no outro computador

  • Se você sincronizar dois computadores que estão na mesma rede local (apenas fornecendo o DeviceID uns aos outros, sem precisar se preocupar com endereços IP locais), ele notará automaticamente não precisa transitar pela internet, mas pode lidar localmente. Isso é ótimo e permite uma transferência de velocidade muito rápida (4 MB / s!) De phone <--> computer conectada ao mesmo roteador doméstico via WiFi ... ... enquanto ela estaria presa a 100 KB / s em ADSL com uma sincronização do Dropbox! (meu ADSL está limitado a 100 KB / s no upload)

por 27.11.2018 / 16:34
16

Parece que o Unison deve fazer o trabalho.

Unison is a file-synchronization tool for OSX, Unix, and Windows. It allows two replicas of a collection of files and directories to be stored on different hosts (or different disks on the same host), modified separately, and then brought up to date by propagating the changes in each replica to the other.

Ele tem uma GUI opcional que pode facilitar a resolução de conflitos, mas tudo também pode ser feito usando uma interface de usuário baseada em texto. Você também pode predefinir como resolver conflitos para uma operação totalmente autônoma.

Há um componente de observador de arquivos (fsmonitor) para acionar uma sincronização sempre que necessário. Pesquise "relógio de repetição" em o manual para detalhes.

Parece que o Debian tem a versão correta (2.48+) empacotado da caixa .

    
por 27.11.2018 / 13:28