refactor(infra): 统一微服务基础设施为共享模式
- 将 presence-service 添加到主 docker-compose.yml(端口 3011,Redis DB 10) - 更新 init-databases.sh 添加 rwa_admin 和 rwa_presence 数据库 - 重构 admin-service/deploy.sh 使用共享基础设施 - 重构 presence-service/deploy.sh 使用共享基础设施 - 添加 authorization-service 开发指南文档 解决多个微服务独立启动重复基础设施(PostgreSQL/Redis/Kafka)的问题 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
d6227a574b
commit
893399e07f
|
|
@ -31,14 +31,14 @@ log_step() { echo -e "${CYAN}[STEP]${NC} $1"; }
|
|||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SERVICES_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
# Load environment
|
||||
# Load environment from parent services directory (shared .env)
|
||||
load_env() {
|
||||
if [ -f "$SCRIPT_DIR/.env" ]; then
|
||||
export $(cat "$SCRIPT_DIR/.env" | grep -v '^#' | xargs)
|
||||
log_info "Loaded .env from $SCRIPT_DIR"
|
||||
elif [ -f "$SERVICES_DIR/.env" ]; then
|
||||
if [ -f "$SERVICES_DIR/.env" ]; then
|
||||
export $(cat "$SERVICES_DIR/.env" | grep -v '^#' | xargs)
|
||||
log_info "Loaded .env from $SERVICES_DIR"
|
||||
elif [ -f "$SCRIPT_DIR/.env" ]; then
|
||||
export $(cat "$SCRIPT_DIR/.env" | grep -v '^#' | xargs)
|
||||
log_info "Loaded .env from $SCRIPT_DIR"
|
||||
fi
|
||||
}
|
||||
|
||||
|
|
@ -76,9 +76,9 @@ case "$1" in
|
|||
start)
|
||||
show_banner
|
||||
load_env
|
||||
log_info "Starting $SERVICE_NAME..."
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose up -d
|
||||
log_info "Starting $SERVICE_NAME using shared infrastructure..."
|
||||
cd "$SERVICES_DIR"
|
||||
docker compose up -d "$SERVICE_NAME"
|
||||
log_success "$SERVICE_NAME started"
|
||||
log_info "Waiting for service to be healthy..."
|
||||
sleep 5
|
||||
|
|
@ -88,8 +88,8 @@ case "$1" in
|
|||
stop)
|
||||
show_banner
|
||||
log_info "Stopping $SERVICE_NAME..."
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose down
|
||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
||||
log_success "$SERVICE_NAME stopped"
|
||||
;;
|
||||
|
||||
|
|
@ -102,17 +102,17 @@ case "$1" in
|
|||
up)
|
||||
show_banner
|
||||
load_env
|
||||
log_info "Starting all services (foreground)..."
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose up
|
||||
log_info "Starting $SERVICE_NAME in foreground..."
|
||||
cd "$SERVICES_DIR"
|
||||
docker compose up "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
down)
|
||||
show_banner
|
||||
log_info "Stopping and removing all containers..."
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose down -v
|
||||
log_success "All containers and volumes removed"
|
||||
log_info "Stopping $SERVICE_NAME container..."
|
||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
||||
log_success "$SERVICE_NAME container removed"
|
||||
;;
|
||||
|
||||
# =========================================================================
|
||||
|
|
@ -127,8 +127,8 @@ case "$1" in
|
|||
;;
|
||||
|
||||
logs-all)
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose logs -f
|
||||
cd "$SERVICES_DIR"
|
||||
docker compose logs -f "$SERVICE_NAME"
|
||||
;;
|
||||
|
||||
status)
|
||||
|
|
@ -263,9 +263,10 @@ case "$1" in
|
|||
|
||||
clean-all)
|
||||
show_banner
|
||||
log_warn "Cleaning $SERVICE_NAME (removing containers, volumes, and images)..."
|
||||
cd "$SCRIPT_DIR"
|
||||
docker compose down -v --rmi local
|
||||
log_warn "Cleaning $SERVICE_NAME (removing container and image)..."
|
||||
docker stop "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rm "$CONTAINER_NAME" 2>/dev/null || true
|
||||
docker rmi "$IMAGE_NAME" 2>/dev/null || true
|
||||
log_success "$SERVICE_NAME fully cleaned"
|
||||
;;
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ services:
|
|||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-rwa_user}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-rwa_secure_password}
|
||||
POSTGRES_MULTIPLE_DATABASES: rwa_identity,rwa_wallet,rwa_mpc,rwa_backup,rwa_planting,rwa_referral,rwa_reward,rwa_leaderboard,rwa_reporting,rwa_authorization,rwa_admin
|
||||
POSTGRES_MULTIPLE_DATABASES: rwa_identity,rwa_wallet,rwa_mpc,rwa_backup,rwa_planting,rwa_referral,rwa_reward,rwa_leaderboard,rwa_reporting,rwa_authorization,rwa_admin,rwa_presence
|
||||
ports:
|
||||
- "5432:5432"
|
||||
volumes:
|
||||
|
|
@ -493,6 +493,47 @@ services:
|
|||
networks:
|
||||
- rwa-network
|
||||
|
||||
presence-service:
|
||||
build:
|
||||
context: ./presence-service
|
||||
dockerfile: Dockerfile
|
||||
container_name: rwa-presence-service
|
||||
ports:
|
||||
- "3011:3011"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- APP_PORT=3011
|
||||
- API_PREFIX=api/v1
|
||||
- DATABASE_URL=postgresql://${POSTGRES_USER:-rwa_user}:${POSTGRES_PASSWORD:-rwa_secure_password}@postgres:5432/rwa_presence?schema=public
|
||||
- JWT_SECRET=${JWT_SECRET}
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_PORT=6379
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
||||
- REDIS_DB=10
|
||||
- KAFKA_ENABLED=true
|
||||
- KAFKA_BROKERS=kafka:29092
|
||||
- KAFKA_CLIENT_ID=presence-service
|
||||
- KAFKA_GROUP_ID=presence-service-group
|
||||
- PRESENCE_WINDOW_SECONDS=180
|
||||
- SNAPSHOT_INTERVAL_SECONDS=60
|
||||
- TZ=Asia/Shanghai
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
kafka:
|
||||
condition: service_started
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3011/api/v1/health"]
|
||||
interval: 30s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# Volumes
|
||||
# ===========================================================================
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ EOSQL
|
|||
}
|
||||
|
||||
# Create all required databases
|
||||
for db in rwa_identity rwa_wallet rwa_mpc rwa_backup rwa_planting rwa_referral rwa_reward rwa_leaderboard rwa_reporting rwa_authorization; do
|
||||
for db in rwa_identity rwa_wallet rwa_mpc rwa_backup rwa_planting rwa_referral rwa_reward rwa_leaderboard rwa_reporting rwa_authorization rwa_admin rwa_presence; do
|
||||
create_database "$db"
|
||||
done
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue