#!/bin/bash # ================================================== # OCDP Backend - Docker Compose 快速启动脚本 # ================================================== set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 打印带颜色的消息 print_info() { echo -e "${BLUE}ℹ️ $1${NC}" } print_success() { echo -e "${GREEN}✅ $1${NC}" } print_warning() { echo -e "${YELLOW}⚠️ $1${NC}" } print_error() { echo -e "${RED}❌ $1${NC}" } print_header() { echo "" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE}$1${NC}" echo -e "${BLUE}========================================${NC}" echo "" } # 检查 Docker check_docker() { if ! command -v docker &> /dev/null; then print_error "Docker 未安装,请先安装 Docker" echo "访问: https://docs.docker.com/get-docker/" exit 1 fi if ! docker compose version &> /dev/null; then print_error "Docker Compose 未安装,请先安装 Docker Compose V2" echo "访问: https://docs.docker.com/compose/install/" exit 1 fi print_success "Docker 环境检查通过" } # 检查环境变量文件 check_env_file() { if [ ! -f .env ]; then print_warning ".env 文件不存在,正在从 env.example 创建..." cp env.example .env print_success ".env 文件已创建" print_warning "请编辑 .env 文件,配置必要的环境变量(特别是生产环境的密钥)" echo "" read -p "按回车键继续..." else print_success ".env 文件已存在" fi } # 显示菜单 show_menu() { print_header "OCDP Backend - Docker Compose 快速启动" echo "请选择运行模式:" echo "" echo " 1) Mock 模式 (无需数据库,快速测试)" echo " 2) 生产模式 (完整功能,需要数据库)" echo " 3) 开发模式 (热重载,需要数据库)" echo " 4) 查看服务状态" echo " 5) 查看日志" echo " 6) 停止所有服务" echo " 7) 启动 pgAdmin (数据库管理)" echo " 0) 退出" echo "" } # 启动 Mock 模式 start_mock() { print_header "启动 Mock 模式" print_info "正在启动服务..." docker compose --profile mock up -d echo "" print_success "Mock 模式启动成功!" echo "" print_info "服务访问地址:" echo " 📍 API: http://localhost:8080/api/v1" echo " 📍 Health: http://localhost:8080/health" echo "" print_info "查看日志: docker compose logs -f backend-mock" print_info "停止服务: docker compose down" } # 启动生产模式 start_production() { print_header "启动生产模式" print_info "正在启动数据库和后端服务..." docker compose --profile production up -d echo "" print_info "等待服务就绪..." sleep 5 # 检查服务健康 if curl -sf http://localhost:8080/health > /dev/null 2>&1; then print_success "生产模式启动成功!" else print_warning "服务正在启动中,请稍候..." fi echo "" print_info "服务访问地址:" echo " 📍 API: http://localhost:8080/api/v1" echo " 📍 Health: http://localhost:8080/health" echo "" print_info "数据库信息:" echo " 📍 Host: localhost" echo " 📍 Port: 5432" echo " 📍 Database: ocdp" echo "" print_info "查看日志: docker compose logs -f backend" print_info "停止服务: docker compose down" } # 启动开发模式 start_development() { print_header "启动开发模式" print_info "正在启动开发环境(支持热重载)..." docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d echo "" print_info "等待服务就绪..." sleep 5 print_success "开发模式启动成功!" echo "" print_info "服务访问地址:" echo " 📍 API: http://localhost:8080/api/v1" echo " 📍 Health: http://localhost:8080/health" echo "" print_info "开发模式特性:" echo " 🔥 支持代码热重载(修改代码自动重启)" echo " 📂 源代码已挂载到容器" echo "" print_info "查看日志: docker compose logs -f backend-dev" print_info "停止服务: docker compose down" } # 查看状态 show_status() { print_header "服务状态" docker compose ps } # 查看日志 show_logs() { print_header "查看日志" echo "实时查看日志(按 Ctrl+C 退出)..." echo "" sleep 2 docker compose logs -f } # 停止服务 stop_services() { print_header "停止服务" print_info "正在停止所有服务..." docker compose down print_success "所有服务已停止" } # 启动 pgAdmin start_pgadmin() { print_header "启动 pgAdmin" print_info "正在启动 pgAdmin..." docker compose --profile tools up -d pgadmin echo "" print_success "pgAdmin 启动成功!" echo "" print_info "访问地址: http://localhost:5050" print_info "登录信息:" echo " 📧 邮箱: admin@ocdp.local" echo " 🔑 密码: admin" echo "" print_info "连接数据库配置:" echo " 📍 Host: postgres" echo " 📍 Port: 5432" echo " 📍 Database: ocdp" echo " 📍 Username: postgres" echo " 📍 Password: postgres" } # 主函数 main() { # 获取脚本目录 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" cd "$SCRIPT_DIR/.." # 检查环境 check_docker check_env_file while true; do show_menu read -p "请选择 [0-7]: " choice case $choice in 1) start_mock echo "" read -p "按回车键返回菜单..." ;; 2) start_production echo "" read -p "按回车键返回菜单..." ;; 3) start_development echo "" read -p "按回车键返回菜单..." ;; 4) show_status echo "" read -p "按回车键返回菜单..." ;; 5) show_logs ;; 6) stop_services echo "" read -p "按回车键返回菜单..." ;; 7) start_pgadmin echo "" read -p "按回车键返回菜单..." ;; 0) print_info "再见!" exit 0 ;; *) print_error "无效的选择,请重试" sleep 1 ;; esac done } # 运行主函数 main