Initial commit

This commit is contained in:
Rafael Dias Martins
2026-08-31 14:10:20 -03:00
commit 8fcb5aac66
454 changed files with 60207 additions and 0 deletions
+136
View File
@@ -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!"