start-backend.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #!/bin/bash
  2. # 后端服务启动脚本
  3. set -e
  4. RED='\033[0;31m'
  5. GREEN='\033[0;32m'
  6. YELLOW='\033[1;33m'
  7. NC='\033[0m'
  8. echo -e "${GREEN}=== 启动后端服务 ===${NC}"
  9. # 加载环境变量
  10. if [ -f "../.env.local" ]; then
  11. echo -e "${YELLOW}加载配置...${NC}"
  12. export $(cat ../.env.local | grep -v '^#' | xargs)
  13. fi
  14. # 数据库配置
  15. DB_HOST=${DB_HOST:-127.0.0.1}
  16. DB_PORT=${DB_PORT:-3306}
  17. DB_USER=${DB_USER:-root}
  18. DB_PASSWORD=${DB_PASSWORD:-}
  19. # 构建数据库连接字符串
  20. if [ -z "$DB_PASSWORD" ]; then
  21. SQL_CONNECTION="mysql+pymysql://${DB_USER}@${DB_HOST}:${DB_PORT}/yunioncloud?charset=utf8mb4"
  22. else
  23. SQL_CONNECTION="mysql+pymysql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/yunioncloud?charset=utf8mb4"
  24. fi
  25. echo "数据库连接: ${DB_USER}@${DB_HOST}:${DB_PORT}/yunioncloud"
  26. # 创建日志目录
  27. mkdir -p logs
  28. # 检查二进制文件是否存在
  29. check_binary() {
  30. local service=$1
  31. if [ ! -f "_output/bin/${service}" ]; then
  32. echo -e "${YELLOW}${service} 未编译,开始编译...${NC}"
  33. # 忽略 git 错误,只关注编译结果
  34. make cmd/${service} 2>&1 | grep -v "fatal: " | grep -v "error: malformed" || true
  35. fi
  36. }
  37. # 启动服务
  38. start_service() {
  39. local service=$1
  40. local port=$2
  41. local extra_args=$3
  42. echo -e "${YELLOW}启动 ${service} (端口 ${port})...${NC}"
  43. ./_output/bin/${service} \
  44. --config /dev/null \
  45. --sql-connection "$SQL_CONNECTION" \
  46. --port ${port} \
  47. --enable-ssl=false \
  48. ${extra_args} \
  49. > logs/${service}.log 2>&1 &
  50. echo $! > logs/${service}.pid
  51. echo -e "${GREEN}✓ ${service} 已启动 (PID: $!)${NC}"
  52. }
  53. # 停止已运行的服务
  54. stop_existing() {
  55. echo -e "${YELLOW}检查并停止已运行的服务...${NC}"
  56. for service in keystone region glance apigateway; do
  57. if [ -f "logs/${service}.pid" ]; then
  58. pid=$(cat logs/${service}.pid)
  59. if ps -p $pid > /dev/null 2>&1; then
  60. echo "停止 ${service} (PID: ${pid})"
  61. kill $pid 2>/dev/null || true
  62. fi
  63. rm logs/${service}.pid
  64. fi
  65. done
  66. sleep 1
  67. }
  68. # 主流程
  69. main() {
  70. stop_existing
  71. # 检查并编译服务
  72. check_binary keystone
  73. check_binary region
  74. check_binary glance
  75. check_binary apigateway
  76. # 启动服务
  77. start_service keystone 35357 ""
  78. sleep 2
  79. start_service region 30889 "--auth-url http://127.0.0.1:35357/v3"
  80. sleep 2
  81. start_service glance 9292 "--auth-url http://127.0.0.1:35357/v3"
  82. sleep 2
  83. start_service apigateway 3000 "--auth-url http://127.0.0.1:35357/v3"
  84. sleep 1
  85. echo ""
  86. echo -e "${GREEN}=== 后端服务启动成功 ===${NC}"
  87. echo ""
  88. echo "服务地址:"
  89. echo " Keystone (认证): http://localhost:35357"
  90. echo " Region (计算): http://localhost:30889"
  91. echo " Glance (镜像): http://localhost:9292"
  92. echo " APIGateway: http://localhost:3000"
  93. echo ""
  94. echo "日志目录: backend/logs/"
  95. echo "查看日志: tail -f logs/*.log"
  96. echo "停止服务: ./stop-backend.sh"
  97. echo ""
  98. }
  99. main