Como fazer backup automático do seu blog Ghost auto-hospedado

Este é um guia de como fazer backup automático do seu blog com o Ghost CMS auto-hospedado.

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:

  1. Instale um Ghost novo
  2. Descompacte o backup
  3. Importe o banco: gunzip < db.sql.gz | mysql -u user -p dbname
  4. Substitua a pasta content/
  5. 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!

Criado com Hugo
Tema Stack desenvolvido por Jimmy