Backup CasaOS no OneDrive via Rclone

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á:

  1. PC externo (com navegador)
    • Geração do token OneDrive (rclone authorize)
  2. Servidor CasaOS (headless)
    • Instalação do Rclone v1.72.1
    • Importação do profile
    • Execução automática via script + cron
  3. OneDrive
    • Armazenamento seguro em /RCLONE

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.

CATEGORIES:

Software Livre

Comments are closed