Files
ocdp-go/backend/scripts/docker-quick-start.sh
mangomqy c5e51ed069 ocdp v1
2025-11-13 02:54:06 +00:00

274 lines
6.8 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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