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

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

Essa 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, instalando 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.

O processo que será aqui explicado serve para sincronizar o diretório uma única vez, por isso, para manter o serviço funcionando de forma contínua como fazem os clients dos programas de drive na nuvem, vou usar o recurso de cronjobs do Webmin.

Instalando o Rclone

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

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

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: Esse é o nome que será utilizado para se referenciar ao serviço que configurando no momento, por exemplo “fotos-onedrive”, “arquivos-onedrive”. Esse nome será importante para executar a cópia ou sincronia. Daqui para frente será referenciado como <nome-do-drive>.
  • 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 <nome-do-drive>:

# 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 OneDrive.
  • Sincronia: Funciona como o client do OneDrive no computador, cópia bidirecional. O que está no servidor é copiado para o OneDrive 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 OneDrive, ela será criada.

Cópia

rclone copy <diretório local> <nome-do-drive>:<pasta remota>

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

Sincronia

rclone sync <diretório local> <nome-do-drive>:<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 cronjob no Webmin. Para isso, na aba Webmin abra a opção System – Scheduled Cron Jobs – Create a new screduled cron job.

Agora vamos a algumas considerações 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 automatizado. 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> <nome-do-drive>:<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 é que, após realizado o processo de sincronia e a propriedade dos arquivos alteradas para root, elas sejam novamente alteradas para o usuário web. Parece mais complexo, porém no final das contas é a solução mais simples. Para alterar a propriedade, deve ser utilizado o comando:

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

# Exemplo:
chown -R mediaftp:users /var/www/media

Deixe seu comentário