Introdução
O Ghost é uma plataforma de blog incrivelmente rápida e elegante. Mas, ao contrário do WordPress, ele não tem plugins de backup com um clique.
Isso muda hoje.
Neste guia, você vai configurar um sistema de backup diário totalmente automatizado que:
- Faz o dump do seu banco de dados MySQL
- Faz backup de todos os temas, imagens e conteúdos
- Compacta tudo em um único
.zip - Envia o arquivo com segurança para o seu armazenamento na nuvem (pCloud, NextCloud, Google Drive, Dropbox etc.)
Tudo usando ferramentas gratuitas: rclone + um script bash simples + cron.
Vamos começar.
Passo 1: Instale o Rclone
sudo apt update && sudo apt install -y rclone
O Rclone é o canivete suíço do armazenamento na nuvem — ele suporta mais de 70 provedores.
Lista completa: https://rclone.org/overview/
Passo 2: Configure o Rclone (conecte seu armazenamento na nuvem)
Rode:
rclone config
Siga as perguntas:
- n → novo remote
- Dê um nome como ghost-backup ou pcloud
- Escolha seu provedor (por exemplo, webdav para NextCloud, pcloud, google drive etc.)
- Informe suas credenciais/URL quando for pedido
Teste se funciona:
rclone ls ghost-backup:
Você deve ver os arquivos do seu remote (ou uma pasta vazia, se for novo).
Digite q para sair.
Passo 3: Pegue as credenciais do banco de dados do Ghost
Entre com o usuário do Ghost (não o root):
su - yourghostuser
cd /var/www/ghost # or wherever you installed Ghost
cat config.production.json
Procure a seção do banco de dados. Você verá algo assim:
"database": {
"client": "mysql",
"connection": {
"host": "localhost",
"user": "ghost_db_user",
"password": "yoursecretpassword",
"database": "ghost_prod"
}
}
Anote:
- Nome do banco de dados (ghost_prod)
- Usuário (ghost_db_user)
- Senha
Passo 4: Crie o script de backup
Crie o script como root:
nano /root/backup-ghost.sh
Cole isto (depois edite as variáveis abaixo):
#!/bin/bash
# === EDIT THESE VALUES ===
GHOST_USER="yourghostuser" # e.g. ghost
GHOST_PATH="/var/www/ghost" # path to your Ghost install
DB_NAME="ghost_prod" # from config.production.json
DB_USER="ghost_db_user" # from config.production.json
DB_PASS="yoursecretpassword" # from config.production.json
BACKUP_NAME="theselfhostingart-blog" # name for your backup zip
RCLONE_REMOTE="ghost-backup" # name you gave in rclone config
RCLONE_PATH="/" # folder in your cloud (use / for root)
# =========================
DATE=$(date +'%Y-%m-%d_%H-%M')
BACKUP_DIR="/home/$GHOST_USER/backups/$DATE"
ZIP_FILE="$BACKUP_DIR/$BACKUP_NAME-$DATE.zip"
echo "Starting Ghost backup: $DATE"
# Create backup directory
mkdir -p "$BACKUP_DIR"
# Backup database
echo "Backing up database..."
mysqldump -u "$DB_USER" -p"$DB_PASS" --add-drop-table "$DB_NAME" | gzip > "$BACKUP_DIR/db.sql.gz"
# Backup content folder (themes, images, etc.)
echo "Backing up content folder..."
rsync -av --exclude='logs' --exclude='cache' "$GHOST_PATH/content/" "$BACKUP_DIR/content/"
# Compress everything
echo "Compressing backup..."
zip -r "$ZIP_FILE" "$BACKUP_DIR/content" "$BACKUP_DIR/db.sql.gz" > /dev/null
# Upload to cloud
echo "Uploading to cloud storage..."
rclone copy "$ZIP_FILE" "$RCLONE_REMOTE:$RCLONE_PATH"
# Cleanup: remove local backups older than 1 day (optional but recommended)
echo "Cleaning up old local backups..."
find /home/$GHOST_USER/backups -type d -mtime +1 -exec rm -rf {} +
echo "Backup complete: $ZIP_FILE → $RCLONE_REMOTE:$RCLONE_PATH"
Torne-o executável:
chmod +x /root/backup-ghost.sh
Teste manualmente primeiro:
/root/backup-ghost.sh
Confira seu armazenamento na nuvem — você deve ver um arquivo como: theselfhostingart-blog-2025-04-05_03-22.zip
Passo 5: Automatize com o cron (backups diários)
crontab -e
Adicione esta linha para um backup diário às 2h da manhã:
cron0 2 * * * /usr/bin/bash /root/backup-ghost.sh >> /var/log/ghost-backup.log 2>&1
Salve e saia.
Agora o seu blog Ghost tem backup automático todos os dias.
O que entra no backup?
- Banco de dados completo (posts, usuários, configurações)
- Todas as imagens enviadas
- Temas personalizados
- Tudo o que é preciso para restaurar ou migrar
Você pode até mandar esse .zip para o suporte do Ghost(Pro) — eles conseguem importá-lo diretamente.
Bônus: restaure em caso de desastre
Para restaurar:
- Instale um Ghost novo
- Descompacte o backup
- Importe o banco: gunzip < db.sql.gz | mysql -u user -p dbname
- Substitua a pasta content/
- Rode ghost restart
Créditos e agradecimentos
Este método foi inspirado e aprimorado a partir deste excelente post: How to Automatically Backup Ghost Blogs – Kenton Vizdos
Obrigado, Kenton!
Agora o seu blog auto-hospedado dorme mais tranquilo à noite. 😴💾
Obrigado pela leitura!