Sincronizando Diretórios do Linux com Cloud Drives via Rclone e Webmin

Sincronizando Diretórios do Linux com Cloud Drives via Rclone e Webmin

Dica especialmente útil para quem possui servidor Linux e precisa sincronizar alguns diretórios com cloud drives, como OneDrive, Google Drive, Dropbox, etc. O Rclone é uma alternativa open source com milhares de contribuições da comunidade, o que torna seu código constantemente auditável e protegido contra uso malicioso. Em meu caso, para simplificar a administração do Linux, utilizo a interface Webmin, igualmente open source e muito estável.

No passo a passo a seguir vou reproduzier a situação que passei, utilizando o Rclone para replicar um diretório do meu servidor Linux para uma pasta no OneDrive. Tudo o que vou fazer aqui no terminal do Webmin pode perfeitamente ser feito diretamente no terminal do Linux.

Instalando o Rclone

Para abrir o terminal do Webmin, vá para a aba “Webmin” e utilize a opção “Tools – Terminal” no menu da esquerda.

Para fins deste exemplo, vou trabalhar com o usuáiro “root”. Isso poupará uma série de trabalhos extras após a configuração. Uma vez no terminal, entre com os comandos:

# Para ter certeza que está logado como root:
su -

# Para Instalar:
curl https://rclone.org/install.sh | bash

# Para verificar se a instalação foi bem sucedida:
rclone version

# Exemplo de reposta:
rclone v1.75.1
- os/version: ubuntu 22.04 (64 bit)
- os/kernel: 5.15.0-194-generic (x86_64)
- os/type: linux
- os/arch: amd64
- go/version: go1.26.8
- go/linking: static
- go/tags: none

Se a instalação foi bem sucedida, já podemos ir para o próximo passo: configuração.

Configurando

O Rclone trabalha baseado em instâncias. Você pode configurar várias instâncias, cada uma sincronizando com um cloud drive diferente. Depois de criada a instância, você irá se referir a aquela unidade pelo nome da instância como se fosse a designação de um drive.

Exemplo: Você cria uma instância que sincroniza com o Google Drive chamada “gdrv”, para ver o conteúdo da pasta “/docs/copia”, você vai utilizar o comando ‘rclone lsd gdrv:docs/copia”.

Para darmos continudade aos exemplos, vou mostrar como realizar a configuração de uma instância que sincroniza com o OneDrive.

rclone config

Daí basta ir seguindo as instruções em tela para configurar o seu cloud drive, até chegar no ponto da autenticação. Abaixo uma dica sobre como responder as perguntas feitas no processo de configuração para habilitar a conexão com o OneDrive:

  • Instance: n (new remote).
  • Name: Nome da instância. Esse é o nome que será utilizado para se referenciar à instância que está sendo configurada neste momento, por exemplo “fotos-onedrive”, “arquivos-onedrive”. Esse nome será importante para executar a cópia ou sincronia. Daqui para frente será referenciado como <instância>.
  • Storage Type: onedrive (ou o número correspondente).
  • Client Secret / Client Id: Deixar em branco.
  • Region: 1 – Microsoft Cloud Global.
  • Edit Advanced Config: n.
  • Use Auto Config: n. A não ser que você esteja executando a instalação a partir de um computador que possui interface gráfica e browser.

Se tudo deu certo, agora o Rclone estará exibindo uma mensagem parecida com essa:

Option config_token.
For this to work, you will need rclone available on a machine that has
a web browser available.
For more help and alternate methods see: https://rclone.org/remote_setup/
Execute the following on the machine with the web browser (same rclone
version recommended):
        rclone authorize "onedrive"
Then paste the result.
Enter a value.
config_token>

Este é o ponto no qual o Rclone está aguardando a sua credencial de acesso ao OneDrive. Para gerar esta credencial, siga os passos:

  1. No seu computador com interface gráfica baixe o Rclone a partir do site https://rclone.org/downloads/
  2. Extraia os arquivos para alguma pasta e, através do prompt de comando vá até ela.
  3. Exceute o comando:
rclone.exe authorize "onedrive"

Ao fazer isso, se abrirá um browser fazendo login no OneDrive e pedindo permissões para o Rclone. Autorize tudo o que é pedido. Conforme eu disse antes, o Rclone é uma solução open source fiscalizada por milhares de programadores ao redor do mundo. É garantido que o código é seguro e que seus dados não serão manipulados por nenhum atacante externo. Depois que autorizar, de volta ao prompt de comando, você terá uma resposta parecida com isso:

Paste the following into your remote machine --->
{"access_token":"...","token_type":"Bearer","refresh_token":"...","expiry":"..."}
<---End paste

Copie todo o conteúdo JSON acima e cole no servidor Linux em resposta ao prompt “config_token>”.

  • OneDrive type: personal (caso esteja sincronizando com um OneDrive padrão para consumidor final).
  • Keep This Remote: y.
  • Q para sair.
# Para ver a configuração do Rclone:
rclone config show

# A resposta deve ser algo como:
[arquivos-onedrive]
type = onedrive
token = {"access_token":...}
drive_id = ...
drive_type = personal

# Este comando mostra o conteúdo do OneDrive:
rclone lsd <instância>:

# Exemplo:
rclone lsd arquivos-onedrive:

Realizando a Primeira Cópia ou Sincronia

O Rclone pode realizar dois processos distintos: cópia ou sincronia.

  • Cópia: Os arquivos são copiados do servidor Linux para o cloud drive.
  • Sincronia: Funciona como o client do seu cloud drive no computador, cópia bidirecional. O que está no servidor é copiado para o cloud drive e vice-versa.

O comando a seguir realiza o processo uma única vez, sendo necessário executá-lo todas as vezes que achar necessário. Caso a pasta de destino não exista no cloud drive, ela será criada.

Cópia

rclone copy <diretório local> <instância>:<pasta remota>

# Exemplo:
rclone copy /var/www/uploads arquivos-onedrive:Backup/uploads --create-empty-src-dirs

Sincronia

rclone sync <diretório local> <instância>:<pasta remota> --create-empty-src-dirs

# Exemplo:
rclone sync /var/www/uploads arquivos-onedrive:Backup/uploads --create-empty-src-dirs

Automatizando o Processo

Para automatizar o processo, vamos criar uma tarefa cron job no Webmin. Para isso, na aba “Webmin” abra a opção “System – Scheduled Cron Jobs” e clique no botão “Create a new screduled cron job”.

Agora vamos a algumas considerações importantes antes de efetivamente criar a tarefa:

Como a tarefa será automatizada, é importante termos registrado em um arquivo de log o resultado de cada vez que o processo for executado. Para isso, o comando de cópia ou sincronia deve levar um parâmetro que informa sobre a criação deste arquivo de log, ficando assim:

# Parâmetro: --log-file=<caminho/nome do arquivo log>

rclone sync <diretório local> <instância>:<pasta remota> --create-empty-src-dirs --log-file=/var/log/rclone-sync.log

# Exemplo:
rclone sync /var/www/uploads arquivos-onedrive:ServerBackup/uploads --create-empty-src-dirs --log-file=/var/log/rclone-sync.log

Para garantir que a tarefa será executada em qualquer contexto, o ideal é definir o usuário como “root”, porém isso nos traz um problema enorme: depois de realizado o processo de cópia ou sincronia, a propriedade dos arquivos passa para o usuário root, tornando-os invisíveis para o seu usuário web, impossibilitando acesso FTP. Para resolver esse problema temos algumas opções.

Uma das opções é fazer com que usário do cron job seja o mesmo usário web. Parece a mais simples, porém isso nos trará outros problemas no futuro.

O ideal é deixar o processo ocorrer normalmente como usuário “root”, alterando assim a propriedade dos arquivos alteradas para root e depois executar outro comando para que sejam novamente alteradas para o usuário web. Parece mais complexo, porém no final das contas é a solução isenta de maiores complexidades. Para alterar a propriedade, deve ser utilizado o comando:

chown -R <usario>:<usuario grupo> <diretório>

# Exemplo - Usuário web "mediaftp":
chown -R mediaftp:users /var/www/media

Então, lá no “Command” do cron job vamos colocar os dois comandos em sequência, para isso, basta separá-los com “&&”, desta forma, dado o meu exemplo acima, utilizando o usuário “root” para executar a tarefa, o comando ficaria:

rclone sync /var/www/media/WS arquivos-onedrive:ServerBackup/WS --create-empty-src-dirs --log-file=/var/www/media/WS/rclone-sync.log && chown -R mediaftp:users /var/www/media/WS

Alerta importante ao iniciar o cron job:

Tive um problema por aqui ao sincronizar com o OneDrive e acredito que os outros cloud drives também possam ter esse tipo de restrição. Para manter uma sncronia constante, coloquei a tarefa para ser executada a cada 5 minutos. Issou causou um bloqueio da conta por parte da Microsoft, eles entendem como uso abusivo. Depois que recuperei a conta, para evitar futuro transtorno, aumentei o tempo para uma hora e até o momento está funcionando sem problemas.

Resolvendo Problemas

FTP

No meu caso, o diretório utilizado para realizar a sincronia é alimentado via FTP. Logo que instalei o Rclone, eu não conseguia mais esse tipo de acesso. Depois de muito pesquisar, o problema foi em relação as regras do firewall. Acredito que a instalação do programa tenha alterado as regras e gerado esse problema. No meu cenário, cujo programa de FTP é o ProFTPD, tive que executar os seguintes comandos para reabilitar seu funcionamento através do firewall:

# Backup do arquivo de configuração do ProFTPD, por garantia.
cp /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.bak

# Ajuste da faixa de portas
sed -i 's/PassivePorts 30000 31000/PassivePorts 49152 65535/g' /etc/proftpd/proftpd.conf

# Verificando se funcionou (deve aparecer "PassivePorts 49152 65535")
grep -i "passive" /etc/proftpd/proftpd.conf

# Reiniciar o ProFTPD
systemctl restart proftpd

# Verificar se o serviço está em execução
systemctl status proftpd

Deixe seu comentário