- Renamed auth-service to iam-service across various files for consistency. - Updated deployment workflows, database migration scripts, and documentation to reflect the service name change. - Enhanced bilingual documentation for clarity on the new service structure and usage. - Removed outdated references to auth-service in scripts and configuration files to streamline the project structure.
81 lines
3.0 KiB
Bash
Executable File
81 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
SERVICE=$1
|
|
BACKUP_DIR="${2:-./backups}"
|
|
|
|
# EN: Validate arguments
|
|
# VI: Xác thực tham số
|
|
if [ -z "$SERVICE" ]; then
|
|
echo "Usage: $0 <service-name> [backup-dir]"
|
|
echo "Example: $0 iam-service"
|
|
exit 1
|
|
fi
|
|
|
|
# EN: Create backup directory if not exists
|
|
# VI: Tạo thư mục backup nếu chưa tồn tại
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# EN: Generate timestamped filename
|
|
# VI: Tạo tên file với dấu thời gian
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
|
BACKUP_FILE="$BACKUP_DIR/${SERVICE}_${TIMESTAMP}.sql"
|
|
|
|
echo "💾 Backing up database for $SERVICE..."
|
|
|
|
# EN: Extract database URL from .env or environment
|
|
# VI: Trích xuất database URL từ .env hoặc biến môi trường
|
|
cd "services/$SERVICE"
|
|
|
|
if [ -z "$DATABASE_URL" ]; then
|
|
# EN: Check local .env file
|
|
# VI: Kiểm tra file .env cục bộ
|
|
if [ -f ".env" ]; then
|
|
DATABASE_URL=$(grep DATABASE_URL .env | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
|
# EN: Check shared env file
|
|
# VI: Kiểm tra file env chia sẻ
|
|
elif [ -f "../../deployments/local/.env.local" ]; then
|
|
DATABASE_URL=$(grep DATABASE_URL ../../deployments/local/.env.local | cut -d '=' -f2- | tr -d '"' | tr -d "'")
|
|
fi
|
|
fi
|
|
|
|
# EN: Validate DATABASE_URL is set
|
|
# VI: Xác thực DATABASE_URL đã được thiết lập
|
|
if [ -z "$DATABASE_URL" ]; then
|
|
echo "❌ DATABASE_URL not found. Please set it in:"
|
|
echo " - services/$SERVICE/.env"
|
|
echo " - deployments/local/.env.local"
|
|
echo " - Or as environment variable"
|
|
exit 1
|
|
fi
|
|
|
|
# EN: Use pg_dump directly with DATABASE_URL (works with Neon and standard PostgreSQL)
|
|
# VI: Sử dụng pg_dump trực tiếp với DATABASE_URL (hoạt động với Neon và PostgreSQL chuẩn)
|
|
#
|
|
# Neon URLs format: postgresql://user:pass@ep-xxx.region.neon.tech/dbname?sslmode=require
|
|
# Standard format: postgresql://user:pass@host:port/dbname
|
|
|
|
# EN: Check if pg_dump supports connection string (PostgreSQL 11+)
|
|
# VI: Kiểm tra xem pg_dump có hỗ trợ connection string không (PostgreSQL 11+)
|
|
if pg_dump --version | grep -qE "1[1-9]|2[0-9]"; then
|
|
# EN: Use connection string directly (supports Neon)
|
|
# VI: Sử dụng connection string trực tiếp (hỗ trợ Neon)
|
|
pg_dump "$DATABASE_URL" > "../$BACKUP_FILE"
|
|
else
|
|
# EN: Fallback: Parse connection string for older pg_dump
|
|
# VI: Dự phòng: Phân tích connection string cho bản pg_dump cũ hơn
|
|
# EN: Remove query parameters for parsing
|
|
# VI: Loại bỏ các tham số query để phân tích
|
|
CLEAN_URL=$(echo $DATABASE_URL | sed 's/?.*//')
|
|
DB_USER=$(echo $CLEAN_URL | sed -n 's/.*:\/\/\([^:]*\):.*/\1/p')
|
|
DB_PASS=$(echo $CLEAN_URL | sed -n 's/.*:\/\/[^:]*:\([^@]*\)@.*/\1/p')
|
|
DB_HOST=$(echo $CLEAN_URL | sed -n 's/.*@\([^:]*\):.*/\1/p')
|
|
DB_PORT=$(echo $CLEAN_URL | sed -n 's/.*:\([0-9]*\)\/.*/\1/p')
|
|
DB_NAME=$(echo $CLEAN_URL | sed -n 's/.*\/\([^?]*\).*/\1/p')
|
|
|
|
PGPASSWORD=$DB_PASS pg_dump -h $DB_HOST -p ${DB_PORT:-5432} -U $DB_USER -d $DB_NAME > "../$BACKUP_FILE"
|
|
fi
|
|
|
|
echo "✅ Backup created: $BACKUP_FILE"
|