diff --git a/.drone.yml b/.drone.yml index f3869f5..a16016b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,138 +1,236 @@ -kind: pipeline -type: docker -name: deploy-test - -# 测试环境:test 分支触发,部署到生产服务器的开发环境 -trigger: - branch: - - test - event: - - push - -steps: - - name: sync-code - image: appleboy/drone-ssh - settings: - host: 120.79.247.16 - username: root - password: - from_secret: prod_ssh_password - port: 22 - command_timeout: 5m - script: - - echo "=== 同步代码到测试环境 ===" - - cd /root/aiedu - - git fetch origin - - git checkout test 2>/dev/null || git checkout -b test origin/test - - git reset --hard origin/test - - echo "代码同步完成" - - - name: rebuild-dev - image: appleboy/drone-ssh - settings: - host: 120.79.247.16 - username: root - password: - from_secret: prod_ssh_password - port: 22 - command_timeout: 10m - script: - - echo "=== 重建测试环境 ===" - - cd /root/aiedu - - docker-compose -f docker-compose.dev.yml up -d --build - - sleep 5 - - docker ps | grep kpl- - - echo "=== 测试环境部署完成: https://kpl.ireborn.com.cn ===" - ---- -kind: pipeline -type: docker -name: deploy-prod - -# 生产环境:main 分支触发,批量更新所有租户 -trigger: - branch: - - main - event: - - push - -steps: - - name: sync-code-to-server - image: appleboy/drone-ssh - settings: - host: 120.79.247.16 - username: root - password: - from_secret: prod_ssh_password - port: 22 - command_timeout: 10m - script: - - echo "=== 同步代码到生产服务器 ===" - - cd /root/aiedu - - git fetch origin - - git reset --hard origin/main - - echo "代码同步完成" - - - name: build-frontend - image: appleboy/drone-ssh - settings: - host: 120.79.247.16 - username: root - password: - from_secret: prod_ssh_password - port: 22 - command_timeout: 10m - script: - - echo "=== 编译前端(所有租户共享)===" - - cd /root/aiedu/kaopeilian-frontend - - npm install --silent - - npm run build - - echo "前端编译完成,所有租户已更新" - - - name: rebuild-backends - image: appleboy/drone-ssh - settings: - host: 120.79.247.16 - username: root - password: - from_secret: prod_ssh_password - port: 22 - command_timeout: 15m - script: - - echo "=== 重建所有后端服务 ===" - - cd /root/aiedu - - docker-compose -f docker-compose.prod-multi.yml up -d --build --no-deps hua-backend yy-backend hl-backend xy-backend fw-backend ex-backend cxw-backend - - sleep 10 - - docker ps | grep backend - - echo "=== 生产环境批量更新完成 ===" - - echo "租户列表: hua, yy, hl, xy, fw, ex, cxw" - -volumes: - - name: docker-sock - host: - path: /var/run/docker.sock - ---- -kind: pipeline -type: docker -name: code-check - -trigger: - event: - - push - - pull_request - -steps: - - name: python-lint - image: python:3.9-slim - commands: - - cd backend - - pip install flake8 -q - - flake8 app --count --select=E9,F63,F7,F82 --show-source --statistics || true - - echo "Python lint completed" - - - name: frontend-check - image: node:18-alpine - commands: - - cd frontend - - echo "Frontend check completed" +kind: pipeline +type: docker +name: deploy-dev1 + +# 开发环境1:test 分支触发,部署到 kpl-dev +trigger: + branch: + - test + event: + - push + +steps: + - name: sync-code + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 5m + script: + - echo "=== [开发1] 同步代码到 kpl-dev ===" + - cd /root/aiedu + - git fetch origin + - git checkout test 2>/dev/null || git checkout -b test origin/test + - git reset --hard origin/test + - echo "代码同步完成" + + - name: rebuild-dev1 + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 10m + script: + - echo "=== [开发1] 重建 kpl-dev 环境 ===" + - cd /root/aiedu + - docker-compose -f docker-compose.dev.yml up -d --build + - sleep 5 + - docker ps | grep kpl- + - echo "=== [开发1] 部署完成: https://kpl.ireborn.com.cn ===" + +--- +kind: pipeline +type: docker +name: deploy-dev2 + +# 开发环境2:dev2 分支触发,部署到 kaopeilian 主站 +trigger: + branch: + - dev2 + event: + - push + +steps: + - name: sync-code + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 5m + script: + - echo "=== [开发2] 同步代码到 kaopeilian 主站 ===" + - cd /root/aiedu + - git fetch origin + - git checkout dev2 2>/dev/null || git checkout -b dev2 origin/dev2 + - git reset --hard origin/dev2 + - echo "代码同步完成" + + - name: build-frontend + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 10m + script: + - echo "=== [开发2] 编译前端 ===" + - cd /root/aiedu/kaopeilian-frontend + - npm install --silent + - npm run build + - echo "前端编译完成" + + - name: rebuild-backend + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 10m + script: + - echo "=== [开发2] 重建 kaopeilian 后端 ===" + - cd /root/aiedu + - docker restart kaopeilian-backend + - sleep 5 + - docker ps | grep kaopeilian-backend + - echo "=== [开发2] 部署完成: https://aiedu.ireborn.com.cn ===" + +--- +kind: pipeline +type: docker +name: deploy-prod + +# 生产环境:main 分支触发,支持选择性部署租户 +# +# 使用方法: +# git commit -m "feat: xxx [all]" - 部署所有租户 +# git commit -m "feat: xxx [hua]" - 仅部署 hua +# git commit -m "feat: xxx [cxw,yy,hl]" - 部署指定多个租户 +# git commit -m "feat: xxx" - 默认部署所有租户 +# +trigger: + branch: + - main + event: + - push + +steps: + - name: sync-code-to-server + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 10m + script: + - echo "=== [生产] 同步代码到生产服务器 ===" + - cd /root/aiedu + - git fetch origin + - git reset --hard origin/main + - echo "代码同步完成" + + - name: build-frontend + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 10m + script: + - echo "=== [生产] 编译前端(所有租户共享)===" + - cd /root/aiedu/kaopeilian-frontend + - npm install --silent + - npm run build + - echo "前端编译完成,所有租户已更新" + + - name: deploy-tenants + image: appleboy/drone-ssh + settings: + host: 120.79.247.16 + username: root + password: + from_secret: prod_ssh_password + port: 22 + command_timeout: 15m + script: + - echo "=== [生产] 部署租户后端 ===" + - cd /root/aiedu + - | + # 获取 commit message + COMMIT_MSG="${DRONE_COMMIT_MESSAGE}" + echo "Commit: $COMMIT_MSG" + + # 所有可用租户 + ALL_TENANTS="hua yy hl xy fw ex cxw" + + # 解析要部署的租户 + if echo "$COMMIT_MSG" | grep -q '\[all\]'; then + TENANTS="$ALL_TENANTS" + echo "部署所有租户: $TENANTS" + elif echo "$COMMIT_MSG" | grep -oP '\[\K[a-z,]+(?=\])' > /tmp/tenants.txt 2>/dev/null; then + TENANTS=$(cat /tmp/tenants.txt | tr ',' ' ') + echo "部署指定租户: $TENANTS" + else + TENANTS="$ALL_TENANTS" + echo "默认部署所有租户: $TENANTS" + fi + + # 构建 docker-compose 命令 + BACKEND_SERVICES="" + for t in $TENANTS; do + BACKEND_SERVICES="$BACKEND_SERVICES ${t}-backend" + done + + echo "重建后端服务: $BACKEND_SERVICES" + docker-compose -f docker-compose.prod-multi.yml up -d --build --no-deps $BACKEND_SERVICES + + sleep 10 + docker ps | grep backend + echo "=== [生产] 部署完成 ===" + echo "已更新租户: $TENANTS" + +volumes: + - name: docker-sock + host: + path: /var/run/docker.sock + +--- +kind: pipeline +type: docker +name: code-check + +trigger: + event: + - push + - pull_request + +steps: + - name: python-lint + image: python:3.9-slim + commands: + - cd backend + - pip install flake8 -q + - flake8 app --count --select=E9,F63,F7,F82 --show-source --statistics || true + - echo "Python lint completed" + + - name: frontend-check + image: node:18-alpine + commands: + - cd frontend + - echo "Frontend check completed" diff --git a/docs/测试环境配置.md b/docs/测试环境配置.md new file mode 100644 index 0000000..defe1eb --- /dev/null +++ b/docs/测试环境配置.md @@ -0,0 +1,217 @@ +# 考培练系统 - 环境配置与部署指南 + +> 最后更新:2026-01-28 + +## 一、环境总览 + +| 环境 | 分支 | 域名 | 用途 | +|------|------|------|------| +| **开发1 (kpl-dev)** | `test` | https://kpl.ireborn.com.cn | 功能开发测试 | +| **开发2 (主站)** | `dev2` | https://aiedu.ireborn.com.cn | 集成测试/预发布 | +| **生产环境** | `main` | 各租户域名 | 正式生产 | +| **超级管理后台** | - | https://admin.kpl.ireborn.com.cn | SaaS管理 | + +--- + +## 二、租户列表 + +| 租户代码 | 名称 | 域名 | 前端端口 | 后端端口 | +|----------|------|------|----------|----------| +| hua | 华尔倍丽 | https://hua.ireborn.com.cn | 3010 | 8010 | +| yy | 杨扬宠物 | https://yy.ireborn.com.cn | 3011 | 8011 | +| hl | 武汉禾丽 | https://hl.ireborn.com.cn | 3012 | 8012 | +| xy | 芯颜定制 | https://xy.ireborn.com.cn | 3013 | 8013 | +| fw | 飞沃 | https://fw.ireborn.com.cn | 3014 | 8014 | +| ex | 恩喜成都总院 | https://ex.ireborn.com.cn | 3015 | 8015 | +| cxw | 崔曦文 | https://cxw.kpl.ireborn.com.cn | 3016 | 8016 | + +--- + +## 三、CI/CD 部署方式 + +### 3.1 开发1环境 (kpl-dev) + +```bash +# 推送到 test 分支自动部署 +git push cicd test +``` + +- **触发条件**:`test` 分支 push +- **部署目标**:kpl-dev 容器组 +- **访问地址**:https://kpl.ireborn.com.cn + +--- + +### 3.2 开发2环境 (主站) + +```bash +# 推送到 dev2 分支自动部署 +git push cicd dev2 +``` + +- **触发条件**:`dev2` 分支 push +- **部署目标**:kaopeilian 主站容器 +- **访问地址**:https://aiedu.ireborn.com.cn + +--- + +### 3.3 生产环境 (租户) + +```bash +# 推送到 main 分支,通过 commit message 控制部署范围 +git push cicd main +``` + +#### 部署所有租户 + +```bash +git commit -m "feat: 新功能上线 [all]" +git push cicd main +``` + +#### 部署单个租户 + +```bash +git commit -m "fix: 修复问题 [hua]" +git push cicd main +``` + +#### 部署多个租户 + +```bash +git commit -m "feat: 功能更新 [cxw,yy,hl]" +git push cicd main +``` + +#### 默认行为 + +```bash +# 不带标签默认部署所有租户 +git commit -m "feat: 常规更新" +git push cicd main +``` + +--- + +## 四、手动部署命令 + +### 4.1 SSH 登录服务器 + +```bash +ssh root@120.79.247.16 +# 密码: Rxm88808 +``` + +### 4.2 重启单个租户后端 + +```bash +cd /root/aiedu +docker restart cxw-backend +``` + +### 4.3 重建单个租户后端 + +```bash +cd /root/aiedu +docker-compose -f docker-compose.prod-multi.yml up -d --build --no-deps cxw-backend +``` + +### 4.4 查看日志 + +```bash +docker logs -f cxw-backend --tail 100 +``` + +### 4.5 重新编译前端(所有租户共享) + +```bash +cd /root/aiedu/kaopeilian-frontend +npm run build +``` + +--- + +## 五、数据库连接 + +### 5.1 生产共享 MySQL (prod-mysql) + +- **端口**:3309 +- **用户**:root +- **密码**:ProdMySQL2025!@# +- **数据库**:kaopeilian_hua, kaopeilian_yy, kaopeilian_hl, kaopeilian_xy, kaopeilian_fw, kaopeilian_ex, kaopeilian_cxw + +### 5.2 开发测试 MySQL (kpl-mysql-dev) + +- **端口**:3308 +- **用户**:root +- **密码**:nj861021 +- **数据库**:kaopeilian + +### 5.3 主站 MySQL (kaopeilian-mysql) + +- **端口**:3307 +- **用户**:root +- **密码**:nj861021 +- **数据库**:kaopeilian + +--- + +## 六、容器管理 + +### 当前运行容器统计 + +| 类型 | 数量 | +|------|------| +| 前端容器 | 11 | +| 后端容器 | 11 | +| Redis | 10 | +| MySQL | 4 | +| Nginx | 1 | +| **总计** | **37** | + +### 查看所有容器 + +```bash +docker ps --format 'table {{.Names}}\t{{.Status}}' +``` + +--- + +## 七、测试账户 + +| 角色 | 用户名 | 密码 | +|------|--------|------| +| 系统管理员 | admin | Admin123! | +| 培训经理 | manager | Admin123! | +| 测试学员 | testuser | Admin123! | + +--- + +## 八、注意事项 + +1. **前端共享**:所有生产租户共享同一套前端代码,编译一次全部更新 +2. **后端独立**:每个租户有独立的后端容器和数据库 +3. **域名解析**: + - `*.ireborn.com.cn` 解析到 120.79.242.43(SCRM服务器) + - `*.kpl.ireborn.com.cn` 解析到 120.79.247.16(考培练服务器) +4. **SSL证书**:使用 Let's Encrypt,自动续期 + +--- + +## 九、Git 仓库配置 + +```bash +# 查看远程仓库 +git remote -v + +# origin: GitHub 源代码仓库 +# cicd: Gitea CI/CD 触发仓库 + +# 常规开发 +git push origin main + +# 触发部署 +git push cicd test # 部署开发1 +git push cicd dev2 # 部署开发2 +git push cicd main # 部署生产 +```