112 lines
4.6 KiB
Bash
112 lines
4.6 KiB
Bash
#!/bin/bash
|
|
# =============================================================================
|
|
# Migration Script: Move Kong & Keycloak DBs to PostgreSQL Cluster
|
|
# =============================================================================
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m'
|
|
|
|
# Cluster connection
|
|
CLUSTER_HOST="10.11.50.167"
|
|
CLUSTER_PORT="5000"
|
|
CLUSTER_USER="bos_interface"
|
|
CLUSTER_PASS="interface"
|
|
|
|
# Local postgres container
|
|
LOCAL_PG="staging-dataLayer-postgres"
|
|
|
|
echo -e "${YELLOW}=== DIDI Database Migration to Cluster ===${NC}"
|
|
echo ""
|
|
|
|
# Step 1: Create users in cluster
|
|
echo -e "${YELLOW}[1/6] Creating users in cluster...${NC}"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d DIDI << 'EOF'
|
|
-- Create kong user if not exists
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'kong') THEN
|
|
CREATE ROLE kong WITH LOGIN PASSWORD 'kong123';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Create keycloak user if not exists
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'keycloak') THEN
|
|
CREATE ROLE keycloak WITH LOGIN PASSWORD 'keycloak123';
|
|
END IF;
|
|
END $$;
|
|
|
|
SELECT rolname FROM pg_roles WHERE rolname IN ('kong', 'keycloak');
|
|
EOF
|
|
echo -e "${GREEN}✓ Users created${NC}"
|
|
|
|
# Step 2: Dump local databases
|
|
echo -e "${YELLOW}[2/6] Dumping local databases...${NC}"
|
|
mkdir -p /tmp/db-migration
|
|
|
|
docker exec $LOCAL_PG pg_dump -U postgres -Fc kong_db > /tmp/db-migration/kong_db.dump
|
|
echo " - kong_db dumped ($(du -h /tmp/db-migration/kong_db.dump | cut -f1))"
|
|
|
|
docker exec $LOCAL_PG pg_dump -U postgres -Fc keycloak_db > /tmp/db-migration/keycloak_db.dump
|
|
echo " - keycloak_db dumped ($(du -h /tmp/db-migration/keycloak_db.dump | cut -f1))"
|
|
echo -e "${GREEN}✓ Dumps complete${NC}"
|
|
|
|
# Step 3: Create databases in cluster
|
|
echo -e "${YELLOW}[3/6] Creating databases in cluster...${NC}"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d DIDI << 'EOF'
|
|
-- Create kong_db if not exists
|
|
SELECT 'CREATE DATABASE kong_db OWNER kong'
|
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'kong_db')\gexec
|
|
|
|
-- Create keycloak_db if not exists
|
|
SELECT 'CREATE DATABASE keycloak_db OWNER keycloak'
|
|
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'keycloak_db')\gexec
|
|
|
|
\l kong_db keycloak_db
|
|
EOF
|
|
echo -e "${GREEN}✓ Databases created${NC}"
|
|
|
|
# Step 4: Restore to cluster
|
|
echo -e "${YELLOW}[4/6] Restoring databases to cluster...${NC}"
|
|
|
|
# Copy dumps to container
|
|
docker cp /tmp/db-migration/kong_db.dump $LOCAL_PG:/tmp/
|
|
docker cp /tmp/db-migration/keycloak_db.dump $LOCAL_PG:/tmp/
|
|
|
|
# Restore kong_db
|
|
echo " - Restoring kong_db..."
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG pg_restore -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d kong_db --no-owner --no-acl --clean --if-exists /tmp/kong_db.dump 2>/dev/null || true
|
|
|
|
# Restore keycloak_db
|
|
echo " - Restoring keycloak_db..."
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG pg_restore -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d keycloak_db --no-owner --no-acl --clean --if-exists /tmp/keycloak_db.dump 2>/dev/null || true
|
|
|
|
echo -e "${GREEN}✓ Databases restored${NC}"
|
|
|
|
# Step 5: Grant permissions
|
|
echo -e "${YELLOW}[5/6] Granting permissions...${NC}"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d kong_db -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO kong; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO kong;"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d keycloak_db -c "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO keycloak; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO keycloak;"
|
|
echo -e "${GREEN}✓ Permissions granted${NC}"
|
|
|
|
# Step 6: Verify
|
|
echo -e "${YELLOW}[6/6] Verifying migration...${NC}"
|
|
echo "Kong tables:"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d kong_db -c "SELECT count(*) as tables FROM information_schema.tables WHERE table_schema = 'public';"
|
|
echo "Keycloak tables:"
|
|
docker exec -e PGPASSWORD=$CLUSTER_PASS $LOCAL_PG psql -h $CLUSTER_HOST -p $CLUSTER_PORT -U $CLUSTER_USER -d keycloak_db -c "SELECT count(*) as tables FROM information_schema.tables WHERE table_schema = 'public';"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}=== Migration Complete ===${NC}"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo " 1. Stop old containers: docker stop kong keycloak"
|
|
echo " 2. Remove old containers: docker rm kong keycloak"
|
|
echo " 3. Start new services: cd /home/admin365/didi_mono/backend/production && docker compose up -d"
|
|
echo ""
|