| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- #!/bin/bash
- # RAG 系统 Docker 启动脚本
- # 用法: ./start.sh [dev|prod]
- set -e
- # 颜色定义
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- NC='\033[0m' # No Color
- # 打印带颜色的消息
- print_info() {
- echo -e "${GREEN}[INFO]${NC} $1"
- }
- print_warn() {
- echo -e "${YELLOW}[WARN]${NC} $1"
- }
- print_error() {
- echo -e "${RED}[ERROR]${NC} $1"
- }
- # 检查 Docker 是否安装
- check_docker() {
- if ! command -v docker &> /dev/null; then
- print_error "Docker 未安装,请先安装 Docker"
- exit 1
- fi
-
- # 检查 docker-compose 或 docker compose
- if command -v docker-compose &> /dev/null; then
- DOCKER_COMPOSE_CMD="docker-compose"
- elif docker compose version &> /dev/null; then
- DOCKER_COMPOSE_CMD="docker compose"
- else
- print_error "Docker Compose 未安装,请先安装 Docker Compose"
- exit 1
- fi
-
- print_info "Docker 和 Docker Compose 已安装"
- }
- # 检查 .env 文件
- check_env_file() {
- if [ ! -f "../.env" ]; then
- print_warn ".env 文件不存在,从 .env.example 复制"
- if [ -f "../.env.example" ]; then
- cp ../.env.example ../.env
- print_info ".env 文件已创建,请根据需要修改配置"
- else
- print_error ".env.example 文件不存在"
- exit 1
- fi
- fi
- }
- # 启动开发环境
- start_dev() {
- print_info "启动开发环境..."
- $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml up -d --build
-
- print_info "等待服务启动..."
- sleep 10
-
- print_info "开发环境已启动!"
- echo ""
- echo "访问地址:"
- echo " - API 文档: http://localhost:8000/docs"
- echo " - pgAdmin: http://localhost:5050 (admin@example.com / admin)"
- echo ""
- echo "查看日志:"
- echo " $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml logs -f"
- echo ""
- echo "停止服务:"
- echo " $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down"
- }
- # 启动生产环境
- start_prod() {
- print_info "启动生产环境..."
- $DOCKER_COMPOSE_CMD -f docker-compose.yml up -d --build
-
- print_info "等待服务启动..."
- sleep 10
-
- print_info "生产环境已启动!"
- echo ""
- echo "访问地址:"
- echo " - API 文档: http://localhost:8000/docs"
- echo ""
- echo "查看日志:"
- echo " $DOCKER_COMPOSE_CMD -f docker-compose.yml logs -f"
- echo ""
- echo "停止服务:"
- echo " $DOCKER_COMPOSE_CMD -f docker-compose.yml down"
- }
- # 停止服务
- stop_services() {
- local env=$1
-
- if [ "$env" = "dev" ]; then
- print_info "停止开发环境..."
- $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down
- elif [ "$env" = "prod" ]; then
- print_info "停止生产环境..."
- $DOCKER_COMPOSE_CMD -f docker-compose.yml down
- else
- print_info "停止所有服务..."
- $DOCKER_COMPOSE_CMD -f docker-compose.dev.yml down 2>/dev/null || true
- $DOCKER_COMPOSE_CMD -f docker-compose.yml down 2>/dev/null || true
- fi
-
- print_info "服务已停止"
- }
- # 显示帮助信息
- show_help() {
- echo "用法: $0 [命令]"
- echo ""
- echo "命令:"
- echo " dev 启动开发环境"
- echo " prod 启动生产环境"
- echo " stop 停止所有服务"
- echo " stop-dev 停止开发环境"
- echo " stop-prod 停止生产环境"
- echo " help 显示帮助信息"
- echo ""
- echo "示例:"
- echo " $0 dev # 启动开发环境"
- echo " $0 prod # 启动生产环境"
- echo " $0 stop # 停止所有服务"
- }
- # 主函数
- main() {
- # 切换到 docker 目录
- cd "$(dirname "$0")"
-
- local command=${1:-dev}
-
- case $command in
- dev)
- check_docker
- check_env_file
- start_dev
- ;;
- prod)
- check_docker
- check_env_file
- start_prod
- ;;
- stop)
- check_docker
- stop_services
- ;;
- stop-dev)
- check_docker
- stop_services "dev"
- ;;
- stop-prod)
- check_docker
- stop_services "prod"
- ;;
- help|--help|-h)
- show_help
- ;;
- *)
- print_error "未知命令: $command"
- show_help
- exit 1
- ;;
- esac
- }
- # 运行主函数
- main "$@"
|