Initial commit
This commit is contained in:
Executable
+136
@@ -0,0 +1,136 @@
|
||||
#!/bin/bash
|
||||
# ==========================================
|
||||
# BACKUP MONGODB - PRODUÇÃO
|
||||
# ==========================================
|
||||
# Suporta MongoDB nativo ou Docker
|
||||
# Uso: ./backup-mongodb.sh
|
||||
#
|
||||
# Adicionar ao crontab (deployuser):
|
||||
# 0 2 * * * cd /var/www/iciv && ./docker/production/backup-mongodb.sh >> ~/backup-mongodb.log 2>&1
|
||||
|
||||
set -e
|
||||
|
||||
# ==========================================
|
||||
# CONFIGURAÇÕES
|
||||
# ==========================================
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
|
||||
BACKUP_DIR="${BACKUP_DIR:-$PROJECT_DIR/backups/mongodb}"
|
||||
|
||||
RETENTION_DAYS="${RETENTION_DAYS:-7}"
|
||||
|
||||
CONTAINER_NAME="${MONGO_CONTAINER:-course-plat-mongodb}"
|
||||
|
||||
ENV_FILE="${ENV_FILE:-$PROJECT_DIR/.env.production}"
|
||||
if [ -f "$ENV_FILE" ]; then
|
||||
set -a
|
||||
source <(grep -v '^\s*#' "$ENV_FILE")
|
||||
set +a
|
||||
fi
|
||||
|
||||
MONGO_USERNAME="${MONGO_USERNAME:-admin}"
|
||||
MONGO_PASSWORD="${MONGO_PASSWORD:-password}"
|
||||
MONGO_DB="${MONGO_DB:-course-plat}"
|
||||
|
||||
# ==========================================
|
||||
# FUNÇÕES
|
||||
# ==========================================
|
||||
|
||||
log() {
|
||||
echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1"
|
||||
}
|
||||
|
||||
error() {
|
||||
log "ERROR: $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
build_mongo_uri() {
|
||||
if [ -n "$MONGO_USERNAME" ] && [ -n "$MONGO_PASSWORD" ]; then
|
||||
echo "mongodb://${MONGO_USERNAME}:${MONGO_PASSWORD}@127.0.0.1:27017/${MONGO_DB}?authSource=admin"
|
||||
else
|
||||
echo "mongodb://127.0.0.1:27017/${MONGO_DB}"
|
||||
fi
|
||||
}
|
||||
|
||||
# ==========================================
|
||||
# DETECÇÃO: Docker ou nativo
|
||||
# ==========================================
|
||||
|
||||
DOCKER_CMD="$(command -v docker 2>/dev/null || true)"
|
||||
|
||||
USE_DOCKER=false
|
||||
if [ -n "$DOCKER_CMD" ] && "$DOCKER_CMD" ps 2>/dev/null | grep -q "$CONTAINER_NAME"; then
|
||||
USE_DOCKER=true
|
||||
log "Modo: Docker (container: $CONTAINER_NAME)"
|
||||
else
|
||||
MONGODUMP="$(command -v mongodump 2>/dev/null || true)"
|
||||
if [ -z "$MONGODUMP" ]; then
|
||||
error "mongodump nao encontrado. Instale: sudo apt install mongo-tools"
|
||||
fi
|
||||
log "Modo: MongoDB nativo"
|
||||
fi
|
||||
|
||||
# ==========================================
|
||||
# INÍCIO
|
||||
# ==========================================
|
||||
|
||||
log "Iniciando backup do MongoDB..."
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
TIMESTAMP=$(date +%Y%m%d-%H%M%S)
|
||||
BACKUP_FILE="$BACKUP_DIR/mongodb-$TIMESTAMP.gz"
|
||||
|
||||
MONGO_URI=$(build_mongo_uri)
|
||||
log "Executando mongodump..."
|
||||
|
||||
if [ "$USE_DOCKER" = true ]; then
|
||||
"$DOCKER_CMD" exec "$CONTAINER_NAME" mongodump \
|
||||
--uri="$MONGO_URI" \
|
||||
--archive \
|
||||
--gzip \
|
||||
> "$BACKUP_FILE" 2>&1 || error "Falha no mongodump (docker)"
|
||||
else
|
||||
"$MONGODUMP" \
|
||||
--uri="$MONGO_URI" \
|
||||
--archive="$BACKUP_FILE" \
|
||||
--gzip \
|
||||
2>&1 || error "Falha no mongodump"
|
||||
fi
|
||||
|
||||
if [ ! -f "$BACKUP_FILE" ]; then
|
||||
error "Arquivo de backup nao foi criado"
|
||||
fi
|
||||
|
||||
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
|
||||
log "Backup concluido: $BACKUP_FILE ($BACKUP_SIZE)"
|
||||
|
||||
# ==========================================
|
||||
# LIMPEZA
|
||||
# ==========================================
|
||||
|
||||
log "Removendo backups antigos (mais de $RETENTION_DAYS dias)..."
|
||||
|
||||
REMOVED=$(find "$BACKUP_DIR" \
|
||||
-name "mongodb-*.gz" \
|
||||
-type f \
|
||||
-mtime +$RETENTION_DAYS \
|
||||
-print -delete 2>/dev/null | wc -l)
|
||||
|
||||
log "Backups removidos: $REMOVED"
|
||||
|
||||
# ==========================================
|
||||
# RESUMO
|
||||
# ==========================================
|
||||
|
||||
TOTAL_BACKUPS=$(find "$BACKUP_DIR" -name "mongodb-*.gz" -type f | wc -l)
|
||||
TOTAL_SIZE=$(du -sh "$BACKUP_DIR" 2>/dev/null | cut -f1)
|
||||
|
||||
log "Resumo:"
|
||||
log " - Backup atual: $BACKUP_FILE"
|
||||
log " - Total de backups: $TOTAL_BACKUPS"
|
||||
log " - Tamanho total: $TOTAL_SIZE"
|
||||
log "Backup do MongoDB concluido com sucesso!"
|
||||
Reference in New Issue
Block a user