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

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

209 lines
5.8 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
# 考培练系统开发环境启动脚本
# 使用方法:
# ./start-dev.sh # 启动基础服务
# ./start-dev.sh --with-admin # 启动服务 + phpMyAdmin
# ./start-dev.sh --with-mail # 启动服务 + 邮件测试
# ./start-dev.sh --full # 启动所有服务
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
}
# 清理旧容器
cleanup() {
log_info "清理旧容器..."
docker-compose -f docker-compose.dev.yml down --remove-orphans 2>/dev/null || true
# 清理孤立的容器
docker ps -a --filter "name=kaopeilian-" --format "{{.ID}}" | xargs -r docker rm -f 2>/dev/null || true
}
# 构建镜像
build_images() {
log_info "构建开发环境镜像..."
docker-compose -f docker-compose.dev.yml build --no-cache
}
# 启动服务
start_services() {
local profiles=""
# 解析命令行参数
case "${1:-}" in
--with-admin)
profiles="--profile admin"
log_info "启动完全Docker化服务包含 phpMyAdmin..."
;;
--with-mail)
profiles="--profile mail"
log_info "启动完全Docker化服务包含邮件测试..."
;;
--full)
profiles="--profile admin --profile mail"
log_info "启动所有Docker化服务..."
;;
*)
log_info "启动完全Docker化基础服务前后端+数据库)..."
;;
esac
# 启动所有服务(包括前后端)
docker-compose -f docker-compose.dev.yml up -d frontend-dev backend-dev mysql-dev redis-dev $profiles
}
# 等待服务就绪
wait_for_services() {
log_info "等待服务启动..."
# 等待数据库
log_info "等待 MySQL 数据库启动..."
timeout=60
while ! docker exec kaopeilian-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 kaopeilian-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:8000/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:3001/ >/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 " 🌐 前端开发服务器: http://localhost:3001 (Docker容器)"
echo " 🔧 后端API服务: http://localhost:8000 (Docker容器)"
echo " 📚 API文档: http://localhost:8000/docs"
echo " 🗄️ MySQL数据库: localhost:3306 (Docker容器)"
echo " 🔄 Redis缓存: localhost:6379 (Docker容器)"
if docker ps --filter "name=kaopeilian-phpmyadmin-dev" --format "{{.Names}}" | grep -q phpmyadmin; then
echo " 🛠️ phpMyAdmin: http://localhost:8080"
fi
if docker ps --filter "name=kaopeilian-mailhog-dev" --format "{{.Names}}" | grep -q mailhog; then
echo " 📧 邮件测试界面: http://localhost:8025"
fi
echo ""
echo "🔧 常用命令:"
echo " 查看日志: docker-compose -f docker-compose.dev.yml logs -f [service_name]"
echo " 停止服务: docker-compose -f docker-compose.dev.yml down"
echo " 重启服务: docker-compose -f docker-compose.dev.yml restart [service_name]"
echo ""
echo "💡 开发提示:"
echo " - 🔥 代码修改会自动重载Docker热重载已启用"
echo " - 🎨 前端: 修改 kaopeilian-frontend/src/ 目录下的文件"
echo " - ⚙️ 后端: 修改 kaopeilian-backend/app/ 目录下的文件"
echo " - 🐳 所有服务均运行在Docker容器中环境完全一致"
echo ""
}
# 主函数
main() {
echo "🚀 考培练系统开发环境启动器"
echo "================================"
# 检查 Docker
check_docker
# 清理旧环境
cleanup
# 构建镜像
build_images
# 启动服务
start_services "$@"
# 等待服务就绪
if wait_for_services; then
show_status
exit 0
else
log_error "服务启动失败,请检查日志"
docker-compose -f docker-compose.dev.yml logs --tail=50
exit 1
fi
}
# 如果直接运行此脚本
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi