Files
012-kaopeilian/deploy/scripts/start-kpl.sh
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

187 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
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
# 瑞小美团队开发环境启动脚本
# 域名kpl.ireborn.com.cn
# 使用方法:
# ./start-kpl.sh # 启动基础服务
# ./start-kpl.sh --with-admin # 启动服务 + phpMyAdmin
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查Docker是否运行
check_docker() {
if ! docker info >/dev/null 2>&1; then
log_error "Docker 未运行,请先启动 Docker"
exit 1
fi
}
# 构建镜像
build_images() {
log_info "构建KPL开发环境镜像..."
docker compose -f docker-compose.kpl.yml build --no-cache
}
# 启动服务
start_services() {
local profiles=""
# 解析命令行参数
case "${1:-}" in
--with-admin)
profiles="--profile admin"
log_info "启动KPL服务包含 phpMyAdmin..."
;;
*)
log_info "启动KPL基础服务前后端+数据库)..."
;;
esac
# 启动所有服务
docker compose -f docker-compose.kpl.yml up -d $profiles
}
# 等待服务就绪
wait_for_services() {
log_info "等待服务启动..."
# 等待数据库
log_info "等待 MySQL 数据库启动..."
timeout=60
while ! docker exec kpl-mysql-dev mysqladmin ping -h"localhost" --silent 2>/dev/null; do
timeout=$((timeout - 1))
if [ $timeout -eq 0 ]; then
log_error "MySQL 启动超时"
return 1
fi
sleep 1
done
log_success "MySQL 数据库已就绪"
# 等待 Redis
log_info "等待 Redis 缓存启动..."
timeout=30
while ! docker exec kpl-redis-dev redis-cli ping 2>/dev/null | grep -q PONG; do
timeout=$((timeout - 1))
if [ $timeout -eq 0 ]; then
log_error "Redis 启动超时"
return 1
fi
sleep 1
done
log_success "Redis 缓存已就绪"
# 等待后端服务
log_info "等待后端服务启动..."
timeout=60
while ! curl -s http://localhost:8001/health >/dev/null 2>&1; do
timeout=$((timeout - 1))
if [ $timeout -eq 0 ]; then
log_error "后端服务启动超时"
return 1
fi
sleep 1
done
log_success "后端服务已就绪"
# 等待前端服务
log_info "等待前端服务启动..."
timeout=60
while ! curl -s http://localhost:3002/ >/dev/null 2>&1; do
timeout=$((timeout - 1))
if [ $timeout -eq 0 ]; then
log_error "前端服务启动超时"
return 1
fi
sleep 1
done
log_success "前端服务已就绪"
}
# 显示服务状态
show_status() {
echo ""
log_success "🎉 瑞小美团队开发环境启动成功!"
echo ""
echo "📋 服务访问地址:"
echo " 🌐 正式域名访问: https://kpl.ireborn.com.cn"
echo " 🖥️ 本地前端服务: http://localhost:3002"
echo " 🔧 本地后端API: http://localhost:8001"
echo " 📚 API文档: http://localhost:8001/docs"
echo " 🗄️ MySQL数据库: localhost:3308"
echo " 🔄 Redis缓存: localhost:6380"
if docker ps --filter "name=kpl-phpmyadmin-dev" --format "{{.Names}}" | grep -q phpmyadmin; then
echo " 🛠️ phpMyAdmin: http://localhost:8081"
fi
echo ""
echo "🔧 常用命令:"
echo " 查看日志: docker compose -f docker-compose.kpl.yml logs -f [service_name]"
echo " 停止服务: ./stop-kpl.sh 或 docker compose -f docker-compose.kpl.yml down"
echo " 重启服务: docker compose -f docker-compose.kpl.yml restart [service_name]"
echo ""
echo "💡 开发提示:"
echo " - 🔥 代码修改会自动重载(热重载已启用)"
echo " - 🎨 前端: 修改 kaopeilian-frontend/src/ 目录下的文件"
echo " - ⚙️ 后端: 修改 kaopeilian-backend/app/ 目录下的文件"
echo " - 🔒 已配置HTTPS访问使用域名访问更安全"
echo ""
echo "📌 注意:"
echo " - 此环境与演示系统aiedu.ireborn.com.cn完全隔离"
echo " - 拥有独立的数据库和Redis实例"
echo ""
}
# 主函数
main() {
echo "🚀 瑞小美团队开发环境启动器"
echo "================================"
# 检查 Docker
check_docker
# 启动服务(不重新构建)
start_services "$@"
# 等待服务就绪
if wait_for_services; then
show_status
exit 0
else
log_error "服务启动失败,请检查日志"
docker compose -f docker-compose.kpl.yml logs --tail=50
exit 1
fi
}
# 如果直接运行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi