start.sh 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. #!/bin/bash
  2. # RAG 系统 Docker 启动脚本
  3. # 用法: ./start.sh [dev|prod]
  4. set -e
  5. # 颜色定义
  6. RED='\033[0;31m'
  7. GREEN='\033[0;32m'
  8. YELLOW='\033[1;33m'
  9. NC='\033[0m' # No Color
  10. # 打印带颜色的消息
  11. print_info() {
  12. echo -e "${GREEN}[INFO]${NC} $1"
  13. }
  14. print_warn() {
  15. echo -e "${YELLOW}[WARN]${NC} $1"
  16. }
  17. print_error() {
  18. echo -e "${RED}[ERROR]${NC} $1"
  19. }
  20. # 检查 Docker 是否安装
  21. check_docker() {
  22. if ! command -v docker &> /dev/null; then
  23. print_error "Docker 未安装,请先安装 Docker"
  24. exit 1
  25. fi
  26. # 检查 docker-compose 或 docker compose
  27. if command -v docker-compose &> /dev/null; then
  28. DOCKER_COMPOSE_CMD="docker-compose"
  29. elif docker compose version &> /dev/null; then
  30. DOCKER_COMPOSE_CMD="docker compose"
  31. else
  32. print_error "Docker Compose 未安装,请先安装 Docker Compose"
  33. exit 1
  34. fi
  35. print_info "Docker 和 Docker Compose 已安装"
  36. }
  37. # 检查 .env 文件
  38. check_env_file() {
  39. if [ ! -f "../.env" ]; then
  40. print_warn ".env 文件不存在,从 .env.example 复制"
  41. if [ -f "../.env.example" ]; then
  42. cp ../.env.example ../.env
  43. print_info ".env 文件已创建,请根据需要修改配置"
  44. else
  45. print_error ".env.example 文件不存在"
  46. exit 1
  47. fi
  48. fi
  49. }
  50. # 启动开发环境
  51. start_dev() {
  52. print_info "启动开发环境..."
  53. $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml up -d --build
  54. print_info "等待服务启动..."
  55. sleep 10
  56. print_info "开发环境已启动!"
  57. echo ""
  58. echo "访问地址:"
  59. echo " - API 文档: http://localhost:8000/docs"
  60. echo " - pgAdmin: http://localhost:5050 (admin@example.com / admin)"
  61. echo ""
  62. echo "查看日志:"
  63. echo " $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml logs -f"
  64. echo ""
  65. echo "停止服务:"
  66. echo " $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down"
  67. }
  68. # 启动生产环境
  69. start_prod() {
  70. print_info "启动生产环境..."
  71. $DOCKER_COMPOSE_CMD -f docker-compose.yml up -d --build
  72. print_info "等待服务启动..."
  73. sleep 10
  74. print_info "生产环境已启动!"
  75. echo ""
  76. echo "访问地址:"
  77. echo " - API 文档: http://localhost:8000/docs"
  78. echo ""
  79. echo "查看日志:"
  80. echo " $DOCKER_COMPOSE_CMD -f docker-compose.yml logs -f"
  81. echo ""
  82. echo "停止服务:"
  83. echo " $DOCKER_COMPOSE_CMD -f docker-compose.yml down"
  84. }
  85. # 停止服务
  86. stop_services() {
  87. local env=$1
  88. if [ "$env" = "dev" ]; then
  89. print_info "停止开发环境..."
  90. $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down
  91. elif [ "$env" = "prod" ]; then
  92. print_info "停止生产环境..."
  93. $DOCKER_COMPOSE_CMD -f docker-compose.yml down
  94. else
  95. print_info "停止所有服务..."
  96. $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down 2>/dev/null || true
  97. $DOCKER_COMPOSE_CMD -f docker-compose.yml down 2>/dev/null || true
  98. fi
  99. print_info "服务已停止"
  100. }
  101. # 显示帮助信息
  102. show_help() {
  103. echo "用法: $0 [命令]"
  104. echo ""
  105. echo "命令:"
  106. echo " dev 启动开发环境"
  107. echo " prod 启动生产环境"
  108. echo " stop 停止所有服务"
  109. echo " stop-dev 停止开发环境"
  110. echo " stop-prod 停止生产环境"
  111. echo " help 显示帮助信息"
  112. echo ""
  113. echo "示例:"
  114. echo " $0 dev # 启动开发环境"
  115. echo " $0 prod # 启动生产环境"
  116. echo " $0 stop # 停止所有服务"
  117. }
  118. # 主函数
  119. main() {
  120. # 切换到 docker 目录
  121. cd "$(dirname "$0")"
  122. local command=${1:-dev}
  123. case $command in
  124. dev)
  125. check_docker
  126. check_env_file
  127. start_dev
  128. ;;
  129. prod)
  130. check_docker
  131. check_env_file
  132. start_prod
  133. ;;
  134. stop)
  135. check_docker
  136. stop_services
  137. ;;
  138. stop-dev)
  139. check_docker
  140. stop_services "dev"
  141. ;;
  142. stop-prod)
  143. check_docker
  144. stop_services "prod"
  145. ;;
  146. help|--help|-h)
  147. show_help
  148. ;;
  149. *)
  150. print_error "未知命令: $command"
  151. show_help
  152. exit 1
  153. ;;
  154. esac
  155. }
  156. # 运行主函数
  157. main "$@"