#!/bin/bash # 后端服务启动脚本 set -e RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' echo -e "${GREEN}=== 启动后端服务 ===${NC}" # 加载环境变量 if [ -f "../.env.local" ]; then echo -e "${YELLOW}加载配置...${NC}" export $(cat ../.env.local | grep -v '^#' | xargs) fi # 数据库配置 DB_HOST=${DB_HOST:-127.0.0.1} DB_PORT=${DB_PORT:-3306} DB_USER=${DB_USER:-root} DB_PASSWORD=${DB_PASSWORD:-} # 构建数据库连接字符串 if [ -z "$DB_PASSWORD" ]; then SQL_CONNECTION="mysql+pymysql://${DB_USER}@${DB_HOST}:${DB_PORT}/yunioncloud?charset=utf8mb4" else SQL_CONNECTION="mysql+pymysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/yunioncloud?charset=utf8mb4" fi echo "数据库连接: ${DB_USER}@${DB_HOST}:${DB_PORT}/yunioncloud" # 创建日志目录 mkdir -p logs # 检查二进制文件是否存在 check_binary() { local service=$1 if [ ! -f "_output/bin/${service}" ]; then echo -e "${YELLOW}${service} 未编译,开始编译...${NC}" # 忽略 git 错误,只关注编译结果 make cmd/${service} 2>&1 | grep -v "fatal: " | grep -v "error: malformed" || true fi } # 启动服务 start_service() { local service=$1 local port=$2 local extra_args=$3 echo -e "${YELLOW}启动 ${service} (端口 ${port})...${NC}" ./_output/bin/${service} \ --config /dev/null \ --sql-connection "$SQL_CONNECTION" \ --port ${port} \ --enable-ssl=false \ ${extra_args} \ > logs/${service}.log 2>&1 & echo $! > logs/${service}.pid echo -e "${GREEN}✓ ${service} 已启动 (PID: $!)${NC}" } # 停止已运行的服务 stop_existing() { echo -e "${YELLOW}检查并停止已运行的服务...${NC}" for service in keystone region glance apigateway; do if [ -f "logs/${service}.pid" ]; then pid=$(cat logs/${service}.pid) if ps -p $pid > /dev/null 2>&1; then echo "停止 ${service} (PID: ${pid})" kill $pid 2>/dev/null || true fi rm logs/${service}.pid fi done sleep 1 } # 主流程 main() { stop_existing # 检查并编译服务 check_binary keystone check_binary region check_binary glance check_binary apigateway # 启动服务 start_service keystone 35357 "" sleep 2 start_service region 30889 "--auth-url http://127.0.0.1:35357/v3" sleep 2 start_service glance 9292 "--auth-url http://127.0.0.1:35357/v3" sleep 2 start_service apigateway 3000 "--auth-url http://127.0.0.1:35357/v3" sleep 1 echo "" echo -e "${GREEN}=== 后端服务启动成功 ===${NC}" echo "" echo "服务地址:" echo " Keystone (认证): http://localhost:35357" echo " Region (计算): http://localhost:30889" echo " Glance (镜像): http://localhost:9292" echo " APIGateway: http://localhost:3000" echo "" echo "日志目录: backend/logs/" echo "查看日志: tail -f logs/*.log" echo "停止服务: ./stop-backend.sh" echo "" } main