Original Article: OpenSuse Linux: 2-directional real time (live) syncronization, Unison
Author: https://gruz.ml

spider.24990811 stdDado

Servidor remoto Linux e máquina local Linux (OpenSuse). Acesso SSH ao servidor remoto com permissões sudo (opcional).

Tarefa

Desenvolvo um site desenvolvido em um servidor remoto. Tenho uma lista de tarefas e, como regra, faço backup do site, coloque-o no meu local comp, trabalho e volte ao servidor de produção quando terminar. Mas e se o cliente quiser trabalhar no site ao mesmo tempo? Por exemplo. Para trabalhar com o conente? Usar o FTP do meu lado não é uma opção, pois não é apenas tempo, mas não permite, p. Para pesquisar texto em muitos arquivos usando, por exemplo, Krusader. Além disso, não consigo usar meu editor favorito de Geany ao usar protocolos integrados de FTP ou SFTP (peixe) do KDE. Quero dizer, não consigo editar um arquivo da conexão FTP / SFTP do Krusader em Geany, apenas em KWrite.

Então eu quero trabalhar no site remoto como se eu trabalhasse no local. Como se a pasta do site remoto fosse montada como um disco rígido normal. Mas todas as montagens ftp / ssh que consegui encontrar eram lentas, incríveis, lentas.

Teoria

Há uma incrível ferramenta Unison que permite sincronizar duas pastas - local e remoto (ou remoto e remoto, ou local e local, etc.). Mas o menos é que, após qualquer alteração de arquivo, você deve executar Unison manualmente para replicar as alterações de arquivo. Então, precisamos fazer o Unison executar automaticamente sempre que mudarmos qualquer coisa na pasta do site..

Então, aqui estão os passos em geral, devemos executar:

  1. Faça login com SSH sem senha no servidor remoto.
  2. Instale o Unison em máquinas locais e remotas.
  3. Sincronize as pastas pela primeira vez manualmente.
  4. Faça um script usando inotifywait para assistir mudanças no host local e executar Unison cada vez que algo for alterado.

Solução

Faça login com SSH sem senha no servidor remoto

Abra o terminal em sua máquina local e execute o comando:

ssh-copy-id -i [email protected]

Você será solicitado a aceitar a impressão digital da chave RSA do servidor remoto e, em seguida, você será solicitado a inserir a senha de root.

Aqui está a minha saída:

gruz@gruz:/mnt/sda2/home/gruz>;; ssh-copy-id -i [email protected]
A autenticidade do hospedeiro 'yoursite.com.ua (95.95.95.95)' não pode ser estabelecido.
RSA key fingerprint is 48:36:22:32:45:09:1d:04:eb:63:d1:60:27:7e:f6:ba.
Tem certeza de que deseja continuar conectando (sim / não)? sim
Aviso: adicionado permanentemente 'yoursite.com.ua' (RSA) para a lista de hosts conhecidos.
[email protected]'s senha: 
Agora tente entrar na máquina, com "ssh '[email protected]'", e check-in:
  ~/.ssh/authorized_keys
para garantir que não adicionamos chaves extras que você não esperava.
gruz@gruz:/mnt/sda2/home/gruz>;

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_12_screen_d339367bf8b2d77373df33fe541fa61.jpeg

Agora você deve poder fazer login sem solicitação de senha:

gruz@gruz:/mnt/sda2/home/gruz>;ssh [email protected]
Último login: Ter Aug 28 12:34:13 2012 a partir de 174-235-133-95.pool.ukrtel.net
[root@portall ~]#

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_12_screen_c6c126bb03da19710e08ad9e0f3702c.jpeg

Isso deve ser feito apenas uma vez.

Instale o Unison em máquinas locais e remotas

No meu OpenSuse local, eu faço:

sudo zypper in unison

No meu CENTOS remoto, eu faço

yum install unison

Nota: Você deve ter versões Unison compatíveis (como uma regra o mesmo) para ser instalado em ambas as máquinas. Mas os sistemas operacionais Linux modernos têm os mesmos por padrão, então não se importam.

Sincronize as pastas pela primeira vez manualmente

Opcional. Pela primeira vez, vale a pena copiar manualmente o site para a pasta local. Isso pode ser muito mais rápido, então, de qualquer outra forma. Então, eu faço backup do meu site Joomla com o AkeebaBackup e extrai-lo para uma pasta local.

De qualquer forma, você precisa conhecer o caminho absoluto local e o caminho absoluto remoto.

Então, meu caminho local é /home/gruz/www/bulat.uaa/www_sync e meu caminho remoto é /some/remote/path/bulat.ua

Execute o Unison, ele abrirá uma janela GUI.

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_bf7610e5215fd0a7e04024dbf5b75dc.jpeg

Pressione Adicionar e siga os passos:

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_c5c04445921ebbd9aef2378d6aaf447.jpeg b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_282de2ddc89ce08e08625e21aa162e3.jpeg
b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_eb236a78d2d641adee95686ec72d48f.jpeg b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_74d23482b5cbbff7a9f53e6ead32865.jpeg
b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_cb3ef1890434263407d3e65cf294f80.jpeg b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_a845b5ecd0fd69ba53b33d622b029c2.jpeg

Em seguida, você verá uma janela com as ações propostas. Alguns não têm "certeza". Selecione tudo e clique em "Direita para Esquerda"

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_985b7c328e7bc42fbd97ef3ae457a0a.jpeg

Pressione ir e aguarde. Quando terminar, você pode fechar a janela.

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_d082f620595f1c07c0603998813561f.jpeg

Eu recomendo abrir o Unison GUI e fazer a sincronização manual cada vez antes de começar a trabalhar com o seu site, de forma fácil ver e resolver (se necessário) tarefas "não seguras". Como regra, você deve definir todos os "Direito para Esquerda".

Faça um script usando o util inotifywait para assistir mudanças no host local e executar Unison cada vez que algo for alterado

Está bem. Agora você pode editar um arquivo em seu host local, salvá-lo e executar unison do terminal:

unison -ui text -auto -batch bulat.ua

Lembrar? Bulat.ua é o meu nome de perfil.

Então, na minha pasta local, eu edito o arquivo README.txt e executo a vírgula acima:

A saída é:

gruz@gruz:/mnt/sda2/home/gruz>;; unison -ui text -auto -batch bulat.ua
Contate o servidor...
Connected [//gruz//mnt/sda2/home/gruz/work/www/bulat.uaa/www_sync -> //some/remote/path/bulat.ua]
Procurando mudanças
  Esperando alterações do servidor
Reconciling changes
changed  ---->            README.txt  
Propagando atualizações
UNISON 2.40.63 comecou a propagação mudanças em 13:58:09.03 em 28 Aug 2012
[BGN] Updating file README.txt from /mnt/sda2/home/gruz/work/www/bulat.uaa/www_sync to //some/remote/path/bulat.ua
[END] Updating file README.txt
UNISON 2.40.63 finalizou a propagação de mudanças em 13:58:09.47 em 28 Aug 2012
Salvando o estado do sincronizador
Sincronização completa em 13:58:10  (1 item transferido, 0 ignorado, 0 falhou)
gruz@gruz:/mnt/sda2/home/gruz>;

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_13_screen_1ae9f81d33369c1235b7551182cb783.jpeg

Como fazê-lo executar automaticamente em cada mudança de arquivo?

Você deve ter inotifywait ferramenta instalada em sua máquina local. No OpenSuse é chamado inotify-tools e pode ser encontrado aqui http://software.opensuse.org/package/inotify-tools.

Então, minha abordagem para usá-lo é ir para um nível superior da minha pasta local. Isso significa no meu caso /home/gruz/www/bulat.uaa E crie um arquivo sync.sh com o seguinte conteúdo:

#!/bin/sh
while inotifywait -r -e modify -e create -e delete ~/www/bulat.uaa/www_sync/; do
    unison -ui text -auto -batch bulat.ua
done

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_14_screen_80ef9f1fb85909761a81719190df586.jpeg

Tornar o arquivo executável.

cd //home/gruz/www/bulat.uaa; chmod +x sync.sh

E execute o arquivo no terminal. Até o terminal está aberto, a sincronização funciona. Quando parar de trabalhar, feche a janela do terminal ou Ctrl+C.

gruz@gruz:~/www/bulat.uaa>;; ./sync.sh
Configurando relógios. Cuidado: desde que -r foi dado, isso pode demorar um pouco! Relógios estabelecidos.

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_14_screen_a1ae5e7d0c8cbb2b69e60859ad2af8f.jpeg

Agora, se eu editar e mudar README.txt Arquivo, posso ver tal saída no terminal:

gruz@gruz:~/www/bulat.uaa>; ./sync.sh
Configurando relógios. Cuidado: desde que -r foi dado, isso pode demorar um pouco!
Relógios estabelecidos.
/home/gruz/www/bulat.uaa/www_sync/ CREATE .goutputstream-Q5DJJW
Contate o servidor...
Connected [//gruz//mnt/sda2/home/gruz/work/www/bulat.uaa/www_sync -> //some/remote/path/bulat.ua]
Looking for changes0
  Esperando alterações do servidor
Conciliar mudanças
mudou  ---->            README.txt  
Propagando atualizações
UNISON 2.40.63 started propagating changes at 14:16:12.02 on 28 Aug 2012
[BGN] Arquivo de atualização README.txt from /mnt/sda2/home/gruz/work/www/bulat.uaa/www_sync to //some/remote/path/bulat.ua
[END] Arquivo de atualização README.txt
UNISON 2.40.63 finalizou a propagação de mudanças em 14:16:12.64 on 28 Aug 2012
Salvando o estado do sincronizador
Sincronização completa em 14:16:13  (1 item transferido, 0 ignorado, 0 falhou)
Configurando relógios. Cuidado: desde que -r foi dado, isso pode demorar um pouco!
Relógios estabelecidos.

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_14_screen_5fdb2984dc9079ddfaa31cc6ba801a3.jpeg

Em seguida, recomendo fazer a janela do terminal do menor tamanho possível e colocá-lo em cima de outras janelas em um canto para ver o processo de replicação.

b_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_14_screen_69b3d38655560c201dc1be5d2b3d0a0.jpegb_300_0_16777215_00_http___static.xscreenshot.com_2012_08_28_14_screen_a081040149806b1a4c7cb2d96cda85f.jpeg

Limitações

  • A replicação não é a velocidade da luz. Demora, em regra, uma parte de um segundo. É por isso que você tem que ver a janela do terminal no topo para ser informada quando terminar. Usualmente, leva o tempo que você pressiona alt + tab para mudar do seu editor para o seu navegador.
  • Depois de algum tempo você não trabalha com o site remoto, podem aparecer arquivos (cache, imagens, outros administradores editam arquivos CSS) que o Unison não pode resolver. Então, ele pergunta ao usuário o que fazer. É por isso que, antes de começar a trabalhar com a GUI Unison do site, execute a sincronização respondendo as perguntas "não seguras", feche e execute o script no terminal.
  • Uma vez que a sincronização leva algum tempo, o par inotify / unison pode ignorar uma alteração se você salvar muito um arquivo até que outro arquivo esteja sendo replicado. Portanto, é necessária alguma atenção mínima.

De outros

Você pode precisar de sincronização de 1 direcional, quando você não se preocupa com a mudança que alguém pode fazer no servidor. Neste caso, uma ferramenta melhor e mais rápida e fácil é RealSync: replicar arquivos do desenvolvedor em SSH em tempo real