Como instalar e configurar o Syncthing para sincronizar diretórios no Ubuntu 14.04
Introdução
Existem muitos programas capazes de manter arquivos sincronizados entre diferentes computadores. O Syncthing é uma nova opção atraente que é multiplataforma, totalmente de código aberto, muito flexível e fácil de usar.
Neste guia, mostraremos como começar a usar o Syncthing para sincronizar dados entre duas instâncias do servidor Ubuntu 14.04. Isso permitirá que você sincronize arquivos perfeitamente entre esses servidores com base em diretórios \watch configurados.
Pré-requisitos e Objetivos
Para concluir este guia, você precisará de acesso a duas instâncias do servidor Ubuntu 14.04.
Para os fins deste guia, chamaremos esses servidores:
- servidor
- servidor dois
Estes serão parceiros iguais, portanto não há uma relação primária/secundária. Você deve ter uma conta de usuário regular configurada em cada um deles (você pode descobrir como seguindo as etapas 1 a 4 em nosso guia inicial de configuração do servidor para Ubuntu 14.04 aqui).
A conta de usuário regular neste guia será chamada demouser
, mas você deve usar qualquer nome de usuário que desejar. Isso não precisa ser separado de sua conta regular não root.
Instalaremos e configuraremos o Syncthing em cada uma dessas máquinas para que os arquivos possam ser compartilhados entre elas. Depois de concluir os procedimentos descritos neste guia, você deverá ter dois servidores, cada um com um diretório que espelhará as alterações no outro computador.
Instalaremos o Syncthing como um aplicativo no nível do sistema e criaremos um script Upstart. Isso permitirá que nossas instâncias Syncthing iniciem na inicialização e reiniciem corretamente, em vez de gerar novas instâncias a cada vez, como acontece por padrão.
Download inicial e instalação
A primeira coisa que precisamos fazer para começar é baixar o binário Syncthing em cada um de nossos servidores.
Para encontrar a versão empacotada mais recente, acesse a página de lançamentos no GitHub. Existem botões para cada um dos tipos de sistema operacional na parte inferior.
Se seus sistemas Linux forem de 32 bits, escolha a seleção que começa com \syncthing-linux-386-...
. Se os servidores que você estiver usando forem de 64 bits, escolha aquele rotulado \syncthing-linux-amd64-...
”. Não baixe o arquivo em seu computador local. Em vez disso, clique com o botão direito do mouse no arquivo apropriado e selecione Copiar endereço do link ou qualquer outra opção semelhante que você tenha.
Faremos o download desses arquivos usando o comando wget
em cada um de nossos servidores. Em seus servidores, digite wget
seguido de um espaço e cole o link que você copiou. A versão e a arquitetura do sistema podem ser diferentes para você:
cd ~
wget https://github.com/calmh/syncthing/releases/download/v0.8.15/syncthing-linux-amd64-v0.8.15.tar.gz
Agora, podemos descompactar o tarball digitando:
tar xzvf syncthing*.tar.gz
Mova para o diretório recém-criado:
cd syncthing*
Aqui, temos um arquivo executável chamado syncthing
que podemos usar para iniciar o serviço. Queremos copiar isso para um local em nosso PATH
para que possamos chamá-lo como um aplicativo normal.
Faça isso com privilégios de sudo digitando:
sudo cp syncthing /usr/local/bin
Agora, podemos voltar ao nosso diretório inicial e remover com segurança todos os arquivos e diretórios do Syncthing restantes.
cd ~
rm -rf syncthing*
Conclua todas as etapas acima em ambos os servidores.
O aplicativo agora está instalado, mas há mais algumas coisas que precisamos fazer antes que ele esteja pronto para uso.
Altere as opções da GUI para permitir a visualização remota
Por padrão, a interface da web do Syncthing está disponível apenas para conexões do mesmo computador. Isso não funcionará para nossos propósitos, pois estamos trabalhando com servidores remotos.
Para corrigir isso, precisamos editar uma linha no arquivo de configuração do Syncthing. No entanto, o arquivo de configuração ainda não foi criado.
Para criar o arquivo automaticamente, podemos iniciar o serviço brevemente. Digite o comando syncthing
para colocá-lo em funcionamento:
syncthing
O processo syncthing
não é um daemon, o que significa que ele é executado na sessão de shell atual (vamos contornar isso implementando um script Upstart momentaneamente). Ele iniciará o processo e criará alguns arquivos necessários.
Depois de um momento, você verá uma mensagem informativa sobre seu ID de nó semelhante a esta:
[2EQK3] 15:47:15 OK: Ready to synchronize default (read-write)
[2EQK3] 15:47:15 INFO: Node 2EQK3ZR77PTBQGM44KE7VQIQG7ICXJDEOK34TO3SWOVMUL4QFBHA is "server1" at [dynamic]
Quando você vê isso, significa que o processo foi inicializado corretamente. Agora podemos interromper o processo digitando:
CTRL-C
Isso interromperá o processo e nos dará controle sobre o terminal novamente.
Agora podemos editar o arquivo de configuração que foi criado. Abra o arquivo em seu editor de texto:
nano ~/.config/syncthing/config.xml
Procure uma seção que lide com a GUI. Deve ficar assim:
<gui enabled="true" tls="false">
<address>127.0.0.1:8080</address>
</gui>
A única alteração que precisamos fazer é substituir o endereço localhost (127.0.0.1
) por 0.0.0.0
, que representa todas as interfaces de rede. Esta seção ficará assim quando você terminar:
<gui enabled="true" tls="false">
<address>0.0.0.0:8080</address>
</gui>
Salve e feche o arquivo quando terminar. Faremos uma configuração mais extensa posteriormente através da interface web.
Novamente, conclua esses procedimentos em ambos os servidores que você está configurando.
Crie um script upstart para lidar com estados de serviço
Em seguida, vamos implementar um script Upstart para gerenciar nosso processo. Isso nos permitirá iniciar automaticamente o processo Syncthing quando o servidor inicializar. Também nos permitirá executá-lo como um serviço, sem assumir o controle de nossa sessão.
O script Upstart que usaremos foi retirado de uma postagem nos fóruns de discussão do Syncthing. Crie e abra o arquivo Upstart com privilégios de root em seu editor digitando:
sudo nano /etc/init/syncthing.conf
Dentro, usaremos as seguintes linhas para controlar nosso processo Upstart:
description "Syncthing P2P sync service"
start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [!2345]
env STNORESTART=yes
env HOME=/home/demouser
setuid "demouser"
setgid "demouser"
exec /usr/local/bin/syncthing
respawn
Vamos ver o que isso significa.
Começamos com uma descrição geral do serviço. Em seguida, definimos quando o serviço deve iniciar e parar. Aqui, estamos dizendo ao sistema que ele deve ser iniciado após o sistema de arquivos e as interfaces de rede não locais serem ativadas. Ele será interrompido sempre que o sistema sair de um dos runlevels normais.
Em seguida, definiremos uma variável de ambiente que diz ao Syncthing para não reiniciar usando seus próprios mecanismos. Isso ocorre porque, na verdade, ele gera um novo processo a cada vez sem limpar o antigo. Para evitar isso, vamos implementar a capacidade de reiniciar dentro deste script Upstart mais tarde.
A próxima variável de ambiente define o diretório inicial que será usado pelo Syncthing. Isso será usado para localizar os arquivos de configuração corretos e preencher previamente os campos na GUI. Também especificaremos o usuário e o grupo usando os parâmetros setuid
e setgid
, respectivamente. Modifique todos esses três valores para apontar para as informações do usuário.
Em seguida, definimos o caminho para o comando real que vamos executar. Finalmente, usamos respawn
para dizer ao Upstart para reiniciar automaticamente o processo se ele for interrompido prematuramente. Isso é usado para reiniciar automaticamente o processo (de forma limpa) quando o processo Syncthing tenta reiniciar internamente.
Quando terminar, salve e feche o arquivo.
Agora você pode iniciar o serviço digitando:
sudo initctl start syncthing
Conclua as etapas acima em ambos os servidores.
Configurando a segurança na interface do usuário da Web
Finalmente estamos prontos para configurar nossas instâncias por meio da interface do usuário da web.
Faça login em cada uma das interfaces Syncthing de seus servidores visitando seus endereços IP públicos e a porta 8080
:
http://server1_public_IP:8080
http://server2_public_IP:8080
Você verá a tela principal do Syncthing:
A primeira coisa que precisamos fazer é adicionar um pouco de segurança à nossa interface. Vá para o menu \Editar no canto superior direito e clique na seleção \Configurações:
No lado direito, precisamos configurar um nome de usuário e senha para a interface da web. Também queremos habilitar a criptografia TLS para nossas sessões para que nosso tráfego não seja interceptado em trânsito marcando a caixa \HTTPS:
Quando terminar, clique no botão \Salvar na parte inferior.
Você verá uma mensagem solicitando que reinicie o serviço para que as alterações entrem em vigor:
Clique no botão \Reiniciar.
Você provavelmente precisará atualizar a página para que as alterações sejam recarregadas corretamente. Ao fazer isso, você provavelmente encontrará um aviso SSL semelhante a este:
Isso apenas informa que a entidade que assinou o certificado SSL não está na lista de autoridades de certificação confiáveis do seu navegador. Isso é esperado, pois os certificados são autoassinados. É seguro clicar em \Continuar mesmo assim para continuar.
Você receberá um prompt de autenticação para o nome de usuário e a senha que você configurou:
Preencha os valores apropriados e faça o login. Sua interface agora está mais segura do tráfego externo.
Conclua estas etapas em ambos os servidores.
Conectando os dois servidores e compartilhando diretórios
Para compartilhar conteúdo, o Syncthing requer que ambas as extremidades da conexão adicionem o outro servidor à sua lista de nós. Então, ambos os lados também devem adicionar um repositório (diretório) para sincronizar.
Para adicionar um nó, você precisará do ID do nó complementar. Você pode obter esse ID acessando o menu \Editar no canto superior direito e selecionando a opção \Mostrar ID.
Isso abrirá uma sobreposição com um ID longo que você pode copiar. Ele também fornecerá um código QR caso você esteja configurando o aplicativo de smartphone. Copie o ID do primeiro nó.
No segundo servidor, clique no menu \Editar e selecione \Adicionar Nó.
Uma sobreposição aparecerá com campos que você deve configurar para adicionar o outro servidor. No campo \Node ID, cole o ID que você copiou do primeiro servidor. No campo \Node Name, selecione qualquer nome descritivo que gostaria de usar para o outro servidor. Deixe os \Endereços como \dinâmicos:
Quando terminar, clique em \Salvar para adicionar o novo nó.
Execute esse mesmo processo na ordem inversa para que ambos os servidores tenham o servidor oposto em sua configuração. No momento, ignore quaisquer solicitações para reiniciar o serviço, pois faremos mais algumas alterações adicionais primeiro.
Na interface da web, os nós aos quais você está conectado são mostrados no lado direito. Os repositórios que você está compartilhando estão listados à esquerda. Por padrão, uma pasta chamada Sync
será criada em seu diretório inicial para atuar como o repositório padrão. Se o menu estiver compactado, clique no nome para expandir a listagem:
Clique no botão \Editar para configurar o repositório. Na parte inferior, você terá a opção de compartilhar este repositório com qualquer um dos nós que você configurou. Marque a caixa associada ao nó oposto e clique no botão\Botão Salvar”:
Agora, você pode clicar no botão \Reiniciar para implementar suas alterações:
Agora, qualquer alteração feita no diretório ~/Sync
será espelhada no servidor oposto. Por padrão, isso será sincronizado a cada 60 segundos, mas isso pode ser alterado no menu \Configurações.
Você pode adicionar diretórios adicionais que deseja espelhar escolhendo a opção \Adicionar repositório no menu \Editar. O \Repository ID deve ser o mesmo em cada um dos servidores dos diretórios a serem associados.
Conclusão
Neste ponto, você deve ter dois servidores conectados e sincronizando o conteúdo de um único diretório. Você pode facilmente expandir isso adicionando repositórios adicionais (diretórios) ou adicionando nós adicionais para também sincronizar.
Se você planeja sincronizar arquivos do sistema com diretórios aos quais um usuário normal não teria acesso de gravação, provavelmente precisará modificar o arquivo Upstart para usar a conta root
ou qualquer outra conta de usuário necessária para executar o ações necessárias.