feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

View File

@@ -0,0 +1,75 @@
#!/bin/bash
# 构建脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 函数定义
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查 Docker 是否安装
if ! command -v docker &> /dev/null; then
error "Docker 未安装,请先安装 Docker"
exit 1
fi
# 检查 docker-compose 是否安装
if ! command -v docker-compose &> /dev/null; then
warn "docker-compose 未安装,尝试使用 docker compose"
DOCKER_COMPOSE="docker compose"
else
DOCKER_COMPOSE="docker-compose"
fi
# 获取参数
ENVIRONMENT=${1:-production}
VERSION=${2:-latest}
REGISTRY=${3:-""}
log "开始构建考培练系统前端..."
log "环境: $ENVIRONMENT"
log "版本: $VERSION"
# 设置镜像名称
IMAGE_NAME="kaopeilian-frontend"
if [ -n "$REGISTRY" ]; then
FULL_IMAGE_NAME="$REGISTRY/$IMAGE_NAME:$VERSION"
else
FULL_IMAGE_NAME="$IMAGE_NAME:$VERSION"
fi
# 构建镜像
log "构建 Docker 镜像: $FULL_IMAGE_NAME"
if [ "$ENVIRONMENT" = "development" ]; then
docker build --target development -t "$FULL_IMAGE_NAME-dev" .
log "开发环境镜像构建完成: $FULL_IMAGE_NAME-dev"
else
docker build --target production -t "$FULL_IMAGE_NAME" .
log "生产环境镜像构建完成: $FULL_IMAGE_NAME"
fi
# 清理悬挂镜像
log "清理悬挂镜像..."
docker image prune -f
log "构建完成!"
# 显示镜像信息
log "镜像信息:"
docker images | grep "$IMAGE_NAME" | head -5

132
frontend/docker/scripts/deploy.sh Executable file
View File

@@ -0,0 +1,132 @@
#!/bin/bash
# 部署脚本
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 函数定义
log() {
echo -e "${GREEN}[INFO]${NC} $1"
}
warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1"
}
info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
# 获取参数
ENVIRONMENT=${1:-production}
ACTION=${2:-up}
log "考培练系统前端部署脚本"
log "环境: $ENVIRONMENT"
log "操作: $ACTION"
# 检查 docker-compose 是否安装
if ! command -v docker-compose &> /dev/null; then
if command -v docker &> /dev/null && docker compose version &> /dev/null; then
DOCKER_COMPOSE="docker compose"
else
error "docker-compose 或 docker compose 未找到"
exit 1
fi
else
DOCKER_COMPOSE="docker-compose"
fi
# 设置配置文件
if [ "$ENVIRONMENT" = "development" ]; then
COMPOSE_FILE="docker-compose.dev.yml"
else
COMPOSE_FILE="docker-compose.yml"
fi
# 检查配置文件是否存在
if [ ! -f "$COMPOSE_FILE" ]; then
error "配置文件 $COMPOSE_FILE 不存在"
exit 1
fi
# 执行操作
case $ACTION in
up)
log "启动服务..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" up -d
;;
down)
log "停止服务..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" down
;;
restart)
log "重启服务..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" down
$DOCKER_COMPOSE -f "$COMPOSE_FILE" up -d
;;
logs)
log "查看日志..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" logs -f
;;
ps)
log "查看服务状态..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" ps
;;
build)
log "构建并启动服务..."
$DOCKER_COMPOSE -f "$COMPOSE_FILE" up -d --build
;;
clean)
log "清理服务和数据..."
warn "这将删除所有容器和数据卷,确定继续吗?(y/N)"
read -r response
if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
$DOCKER_COMPOSE -f "$COMPOSE_FILE" down -v --rmi all
docker system prune -f
else
log "操作已取消"
fi
;;
*)
error "未知操作: $ACTION"
echo "可用操作: up, down, restart, logs, ps, build, clean"
exit 1
;;
esac
# 显示服务状态
if [ "$ACTION" = "up" ] || [ "$ACTION" = "restart" ] || [ "$ACTION" = "build" ]; then
log "等待服务启动..."
sleep 5
log "服务状态:"
$DOCKER_COMPOSE -f "$COMPOSE_FILE" ps
if [ "$ENVIRONMENT" = "development" ]; then
info "开发环境访问地址:"
info "前端: http://localhost:3001"
info "后端: http://localhost:8000"
info "数据库: localhost:3307"
info "Redis: localhost:6380"
info "邮件服务: http://localhost:8025"
else
info "生产环境访问地址:"
info "前端: http://localhost:3001"
info "后端: http://localhost:8000"
info "数据库: localhost:3306"
info "Redis: localhost:6379"
fi
fi
log "部署完成!"