#!/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 ""