Download da documentação completa
Manter backups confiáveis é um requisito básico para qualquer servidor doméstico ou ambiente self-hosted. O CasaOS, apesar de extremamente prático, não oferece nativamente uma estratégia robusta de backup em nuvem.
Neste artigo, você aprenderá como:
- Instalar a versão mais recente do Rclone (v1.72.1) no Debian e RHEL
- Criar o token do OneDrive em um PC externo com navegador
- Copiar esse profile para um servidor CasaOS headless
- Automatizar o backup completo usando um script profissional com Docker e logs
Visão geral da arquitetura
O fluxo final será:
- PC externo (com navegador)
- Geração do token OneDrive (
rclone authorize)
- Geração do token OneDrive (
- Servidor CasaOS (headless)
- Instalação do Rclone v1.72.1
- Importação do profile
- Execução automática via script + cron
- OneDrive
- Armazenamento seguro em
/RCLONE
- Armazenamento seguro em
1. Instalando o Rclone v1.72.1 no Debian
Evite versões antigas dos repositórios padrão. Para OneDrive e uploads grandes, use sempre a versão oficial mais recente.
Download e instalação
wget https://downloads.rclone.org/v1.72.1/rclone-v1.72.1-linux-amd64.deb
dpkg -i rclone-v1.72.1-linux-amd64.deb
Validação
rclone version
Saída esperada:
rclone v1.72.1
2. Instalando o Rclone v1.72.1 no RHEL / Rocky / AlmaLinux
wget https://downloads.rclone.org/v1.72.1/rclone-v1.72.1-linux-amd64.rpm
rpm -Uvh rclone-v1.72.1-linux-amd64.rpm
Valide:
rclone version
3. Criando o token do OneDrive em um PC externo
Como servidores CasaOS geralmente não possuem navegador, o token deve ser criado externamente.
No PC com navegador (Linux, macOS ou Windows)
Instale a mesma versão do Rclone (v1.72.1) e execute:
rclone authorize "onedrive"
O navegador será aberto. Faça login no OneDrive e autorize o acesso.
Ao final, o Rclone exibirá um JSON com o token, por exemplo:
{
"access_token": "...",
"token_type": "Bearer",
"refresh_token": "...",
"expiry": "2026-01-17T02:00:00Z"
}
Copie todo o conteúdo.
4. Importando o token no CasaOS (servidor headless)
No servidor CasaOS (como root):
rclone config
Passos:
n→ criar novo remote- Nome:
onedrive - Tipo:
onedrive - Quando solicitado
config_token, cole o JSON completo - Salve a configuração
O arquivo será criado em:
/root/.config/rclone/rclone.conf
Teste rápido
rclone lsd onedrive:
Se listar corretamente, o token está funcional.
5. Script final de backup: CasaOS → OneDrive
O script abaixo:
- Para containers Docker (MariaDB por último)
- Executa o
rclone sync - Reinicia os containers
- Gera logs compactados
- Mantém apenas logs com até 7 dias
📄 onedrive-rclone.sh
#!/bin/bash
set -euo pipefail
############################
# CONFIGURAÇÕES
############################
SRC="/DATA"
DEST="onedrive:/RCLONE"
LOG_DIR="/var/log/onedrive-rclone"
TIMESTAMP="$(date '+%Y-%m-%d_%H-%M-%S')"
MAIN_LOG="${LOG_DIR}/onedrive-rclone-${TIMESTAMP}.log"
RCLONE_LOG="${LOG_DIR}/rclone-debug-${TIMESTAMP}.log"
MAIN_TAR="${SRC}/onedrive-rclone-${TIMESTAMP}.tar.gz"
RCLONE_TAR="${SRC}/rclone-debug-${TIMESTAMP}.tar.gz"
DOCKER_LIST="/tmp/docker_containers.list"
############################
# PREPARAÇÃO
############################
mkdir -p "$LOG_DIR"
touch "$MAIN_LOG" "$RCLONE_LOG"
exec > >(tee -a "$MAIN_LOG") 2>&1
echo "============================================================"
echo "[START] Backup iniciado em $(date)"
echo "============================================================"
############################
# PARAR CONTAINERS DOCKER
############################
echo "[INFO] Coletando containers Docker em execução..."
docker ps --format '{{.ID}} {{.Names}}' > "$DOCKER_LIST" || true
if [ -s "$DOCKER_LIST" ]; then
echo "[INFO] Parando containers (exceto mariadb)..."
grep -v ' mariadb$' "$DOCKER_LIST" | awk '{print $1}' | xargs -r docker stop
echo "[INFO] Parando containers mariadb por último..."
grep ' mariadb$' "$DOCKER_LIST" | awk '{print $1}' | xargs -r docker stop
else
echo "[INFO] Nenhum container Docker em execução."
fi
############################
# PARAR CASAOS SERVICES
############################
systemctl list-unit-files --type=service | \
awk '{print $1}' | grep '^casaos' | xargs -r systemctl stop
echo "[INFO] Parando os serviços do CasaOS..."
############################
# RCLONE SYNC
############################
echo "[INFO] Iniciando rclone sync de ${SRC} para ${DEST}..."
rclone sync "$SRC" "$DEST" \
--progress \
--log-level NOTICE \
--log-file "$RCLONE_LOG" \
--stats 1m \
--stats-file-name-length 0 \
--transfers 8 \
--checkers 8 \
--retries 3 \
--timeout 12h \
--onedrive-chunk-size 100M \
--onedrive-no-versions \
--fast-list \
--one-file-system \
--drive-stop-on-upload-limit \
--delete-during
echo "[INFO] rclone sync finalizado."
############################
# REINICIAR CASAOS SERVICES
############################
systemctl list-unit-files --type=service | \
awk '{print $1}' | grep '^casaos' | xargs -r systemctl start
echo "[INFO] Reiniciando os serviços do CasaOS..."
############################
# REINICIAR CONTAINERS
############################
if [ -s "$DOCKER_LIST" ]; then
echo "[INFO] Reiniciando containers Docker..."
# 1) Inicia mariadb primeiro
if grep -q ' mariadb$' "$DOCKER_LIST"; then
echo "[INFO] Iniciando containers mariadb primeiro..."
grep ' mariadb$' "$DOCKER_LIST" | awk '{print $1}' | xargs -r docker start
echo "[INFO] Aguardando 30 segundos para mariadb estabilizar..."
sleep 30
fi
# 2) Inicia demais, um por vez, 30s delay
echo "[INFO] Iniciando demais containers com delay de 30s..."
grep -v ' mariadb$' "$DOCKER_LIST" | awk '{print $1}' | while read -r CID; do
echo "[INFO] Iniciando container ${CID}..."
docker start "$CID"
echo "[INFO] Aguardando 30 segundos..."
sleep 30
done
fi
############################
# FINALIZAÇÃO
############################
echo "============================================================"
echo "[END] Backup finalizado em $(date)"
echo "============================================================"
############################
# COMPACTAR LOGS EM /DATA
############################
echo "[INFO] Compactando logs para ${SRC}..."
# Log principal
tar -czf "$MAIN_TAR" -C "$LOG_DIR" "$(basename "$MAIN_LOG")"
# Log rclone
tar -czf "$RCLONE_TAR" -C "$LOG_DIR" "$(basename "$RCLONE_LOG")"
############################
# REMOVER LOGS TEMPORÁRIOS
############################
echo "[INFO] Removendo logs temporários em ${LOG_DIR}..."
rm -f "$MAIN_LOG" "$RCLONE_LOG"
############################
# ROTACIONAR LOGS (MÁX 7)
############################
echo "[INFO] Rotacionando logs compactados em ${SRC} (máx 7 de cada tipo)..."
# Mantém apenas 7 arquivos mais recentes para cada padrão
ls -1t "${SRC}/onedrive-rclone-"*.tar.gz 2>/dev/null | sed -e '1,7d' | xargs -r rm -f
ls -1t "${SRC}/rclone-debug-"*.tar.gz 2>/dev/null | sed -e '1,7d' | xargs -r rm -f
############################
# LIMPEZA
############################
rm -f "$DOCKER_LIST"
exit 0
6. Agendamento automático (cron)
crontab -e
Backup diário às 04:00:
0 4 * * * /usr/local/bin/onedrive-rclone.sh
Conclusão
Com o Rclone atualizado e o token do OneDrive corretamente gerado, o CasaOS se torna perfeitamente capaz de realizar backups confiáveis, automáticos e escaláveis para a nuvem, mesmo com centenas de gigabytes de dados.
Essa abordagem elimina falhas de autenticação, melhora a estabilidade e garante rastreabilidade completa via logs.

Comments are closed