diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..51713bb --- /dev/null +++ b/.drone.yml @@ -0,0 +1,98 @@ +kind: pipeline +type: docker +name: 武术系统后端自动部署 + +# 只在 main 分支触发 +trigger: + branch: + - main + event: + - push + +steps: + # 步骤1:克隆并编译 BladeX 框架,然后编译后端项目 + - name: 编译完整项目 + image: maven:3.9-eclipse-temurin-17 + commands: + - echo "克隆 BladeX 框架代码..." + - cd /drone/src/.. + - git clone https://git.waypeak.work/martial/martial-tool.git || echo "已存在,跳过克隆" + - echo "开始编译 BladeX 框架..." + - cd martial-tool + - mvn clean install -DskipTests -q + - echo "✅ BladeX 框架编译完成,已安装到 Maven 本地仓库" + - echo "开始编译后端项目..." + - cd /drone/src + - mvn clean package -DskipTests -Dmaven.test.skip=true + - ls -lh target/blade-api.jar + - echo "✅ 后端项目编译完成" + + # 步骤2:传输 JAR 文件到服务器 + - name: 传输构建产物 + image: appleboy/drone-scp + settings: + host: 154.30.6.21 + username: root + key: + from_secret: ssh_key + port: 22 + target: /app/martial-backend/bin/ + source: + - target/blade-api.jar + strip_components: 1 + + # 步骤3:重启后端服务 + - name: 部署到生产环境 + image: appleboy/drone-ssh + settings: + host: 154.30.6.21 + username: root + key: + from_secret: ssh_key + port: 22 + script: + - systemctl restart martial-backend + - sleep 3 + - systemctl status martial-backend --no-pager + - echo "✅ 后端部署完成" + + # 步骤4:健康检查 + - name: 健康检查 + image: curlimages/curl:latest + commands: + - sleep 45 # 等待服务完全启动(Spring Boot 应用需要约30-40秒) + - curl -f http://154.30.6.21:8123/actuator/health || exit 1 + - echo "✅ 健康检查通过" + +# 构建通知(可选) +--- +kind: pipeline +type: docker +name: 构建通知 + +trigger: + branch: + - main + status: + - success + - failure + +steps: + - name: 发送通知 + image: drillster/drone-email + settings: + host: smtp.qq.com # 邮件服务器 + port: 465 + from: your-email@qq.com + recipients: + - your-email@qq.com + username: + from_secret: email_username + password: + from_secret: email_password + when: + status: + - failure # 只在失败时发送邮件 + +depends_on: + - 武术系统后端自动部署 diff --git a/Dockerfile b/Dockerfile index 376c5fb..33a848f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,36 @@ -FROM bladex/alpine-java:openjdk17_cn_slim +# 多阶段构建:编译阶段 +FROM maven:3.9-eclipse-temurin-17 AS builder -LABEL maintainer="bladejava@qq.com" +WORKDIR /build -RUN mkdir -p /blade +# 复制主项目源码 +COPY pom.xml . +COPY src ./src -WORKDIR /blade +# 编译项目(在 Drone 中已经编译好,这里只是复制) +RUN mkdir -p target -EXPOSE 8800 +# 运行阶段:使用轻量级 JRE 镜像 +FROM eclipse-temurin:17-jre-jammy -COPY ./target/blade-api.jar ./app.jar +LABEL maintainer="JohnSion" +LABEL description="武术比赛管理系统后端服务" -ENTRYPOINT ["java", "--add-opens", "java.base/java.lang=ALL-UNNAMED", "--add-opens", "java.base/java.lang.reflect=ALL-UNNAMED", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] +WORKDIR /app -CMD ["--spring.profiles.active=test"] +# 复制编译好的 JAR 文件 +COPY target/blade-api.jar /app/blade-api.jar + +# 暴露端口 +EXPOSE 8123 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8123/actuator/health || exit 1 + +# JVM 参数配置 +ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC" +ENV SPRING_PROFILE="dev" + +# 启动命令 +CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app/blade-api.jar --spring.profiles.active=${SPRING_PROFILE}"] diff --git a/README.md b/README.md index 34ad2f0..06b67bd 100644 --- a/README.md +++ b/README.md @@ -40,4 +40,181 @@ ## 举报有奖 * 向官方提供有用线索并成功捣毁盗版个人或窝点,将会看成果给予 500~10000 不等的现金奖励 -* 官方唯一指定QQ:1272154962 \ No newline at end of file +* 官方唯一指定QQ:1272154962 + +--- + +## 🚀 自动化部署 + +### Drone CI/CD 自动部署配置 + +本项目已配置 Drone CI/CD 实现代码推送后的全自动编译、部署流程。 + +#### 📋 部署架构 + +``` +开发者 Push 代码 + ↓ +Gitea 仓库(git.waypeak.work) + ↓ [Webhook 触发] +Drone CI Server(154.30.6.21:8080) + ↓ [Runner 执行] +编译 BladeX 框架 → 编译后端项目 → SCP 传输 JAR → systemctl 重启服务 → 健康检查 + ↓ +生产服务器部署完成(154.30.6.21:8123) +``` + +#### ⚙️ 部署配置 + +**服务器信息:** +- Drone Server: http://154.30.6.21:8080 +- 生产环境: 154.30.6.21:8123 +- 部署方式: systemd 服务管理 + +**部署步骤(全自动):** +1. **编译完整项目**(约4-5分钟) + - 克隆 BladeX 框架代码(martial-tool) + - 编译框架并安装到 Maven 本地仓库 + - 编译后端项目(martial-master) + - 生成 blade-api.jar(约236MB) + +2. **传输构建产物**(约10-20秒) + - 使用 SCP 传输 JAR 文件到生产服务器 + - 目标路径: `/app/martial-backend/bin/blade-api.jar` + +3. **部署到生产环境**(约3秒) + - 执行 `systemctl restart martial-backend` + - systemd 自动管理进程生命周期 + - 自动重启、日志管理、故障恢复 + +4. **健康检查**(约45秒) + - 等待 Spring Boot 应用完全启动 + - 检查健康端点: `/actuator/health` + - 验证部署成功 + +**总耗时:** 约 5-6 分钟 + +#### 🔧 使用方法 + +**日常开发流程:** + +```bash +# 1. 修改代码 +vim src/main/java/... + +# 2. 提交代码 +git add . +git commit -m "你的提交信息" + +# 3. 推送到 main 分支(自动触发部署) +git push origin main + +# 4. 查看部署进度 +# 访问 Drone UI: http://154.30.6.21:8080 +# 或等待约 5-6 分钟后直接访问生产环境 +``` + +**部署完成后:** +- 访问后端 API: http://154.30.6.21:8123 +- 查看 API 文档: http://154.30.6.21:8123/doc.html +- 健康检查: http://154.30.6.21:8123/actuator/health + +#### 📂 配置文件 + +`.drone.yml` - Drone CI/CD 配置文件 + +```yaml +steps: + - name: 编译完整项目 + image: maven:3.9-eclipse-temurin-17 + commands: + - git clone https://git.waypeak.work/martial/martial-tool.git + - cd martial-tool && mvn clean install -DskipTests -q + - cd /drone/src && mvn clean package -DskipTests + + - name: 传输构建产物 + image: appleboy/drone-scp + settings: + host: 154.30.6.21 + target: /app/martial-backend/bin/ + + - name: 部署到生产环境 + image: appleboy/drone-ssh + settings: + script: + - systemctl restart martial-backend + + - name: 健康检查 + image: curlimages/curl:latest + commands: + - sleep 45 + - curl -f http://154.30.6.21:8123/actuator/health +``` + +#### 🔐 Systemd 服务配置 + +服务名称: `martial-backend.service` + +```bash +# 查看服务状态 +systemctl status martial-backend + +# 查看日志 +journalctl -u martial-backend -f + +# 手动重启 +systemctl restart martial-backend + +# 日志文件位置 +/app/martial-backend/logs/application.log +/app/martial-backend/logs/error.log +``` + +#### 🛠️ 环境要求 + +**生产服务器:** +- JDK 17 (通过 sdkman 管理) +- MySQL 8.0 (端口: 33066) +- Redis 7 (端口: 63379) +- systemd 服务管理 + +**CI/CD 服务器:** +- Drone Server + Drone Runner (Docker 部署) +- Maven 3.9 + Eclipse Temurin JDK 17 (CI 容器镜像) + +#### ⚠️ 注意事项 + +1. **仅 main 分支触发自动部署** + - 其他分支不会触发部署流程 + - 开发分支请使用 feature/* 或 dev 分支 + +2. **部署失败排查** + ```bash + # 查看 Drone 构建日志 + 访问: http://154.30.6.21:8080 + + # 查看应用日志 + ssh root@154.30.6.21 + tail -f /app/martial-backend/logs/application.log + + # 检查服务状态 + systemctl status martial-backend + ``` + +3. **手动回滚** + ```bash + # 如需回滚到之前的版本 + # 1. 找到之前成功的 JAR 文件备份 + # 2. 替换当前 JAR + # 3. 重启服务 + systemctl restart martial-backend + ``` + +#### 📊 部署历史 + +可通过 Drone UI 查看所有部署历史记录: +- 访问: http://154.30.6.21:8080 +- 查看每次构建的详细日志 +- 查看每个步骤的执行时间和状态 + +--- \ No newline at end of file diff --git a/doc/sql/bladex/bladex-database-info.md b/database/bladex/bladex-database-info.md similarity index 100% rename from doc/sql/bladex/bladex-database-info.md rename to database/bladex/bladex-database-info.md diff --git a/doc/sql/bladex/bladex.dameng.all.create.sql b/database/bladex/bladex.dameng.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.dameng.all.create.sql rename to database/bladex/bladex.dameng.all.create.sql diff --git a/doc/sql/bladex/bladex.mysql.all.create.sql b/database/bladex/bladex.mysql.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.mysql.all.create.sql rename to database/bladex/bladex.mysql.all.create.sql diff --git a/doc/sql/bladex/bladex.oracle.all.create.sql b/database/bladex/bladex.oracle.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.oracle.all.create.sql rename to database/bladex/bladex.oracle.all.create.sql diff --git a/doc/sql/bladex/bladex.postgres.all.create.sql b/database/bladex/bladex.postgres.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.postgres.all.create.sql rename to database/bladex/bladex.postgres.all.create.sql diff --git a/doc/sql/bladex/bladex.sqlserver.all.create.sql b/database/bladex/bladex.sqlserver.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.sqlserver.all.create.sql rename to database/bladex/bladex.sqlserver.all.create.sql diff --git a/doc/sql/bladex/bladex.yashan.all.create.sql b/database/bladex/bladex.yashan.all.create.sql similarity index 100% rename from doc/sql/bladex/bladex.yashan.all.create.sql rename to database/bladex/bladex.yashan.all.create.sql diff --git a/doc/sql/flowable/flowable.dameng.all.create.sql b/database/flowable/flowable.dameng.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.dameng.all.create.sql rename to database/flowable/flowable.dameng.all.create.sql diff --git a/doc/sql/flowable/flowable.mysql.all.create.sql b/database/flowable/flowable.mysql.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.mysql.all.create.sql rename to database/flowable/flowable.mysql.all.create.sql diff --git a/doc/sql/flowable/flowable.oracle.all.create.sql b/database/flowable/flowable.oracle.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.oracle.all.create.sql rename to database/flowable/flowable.oracle.all.create.sql diff --git a/doc/sql/flowable/flowable.postgres.all.create.sql b/database/flowable/flowable.postgres.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.postgres.all.create.sql rename to database/flowable/flowable.postgres.all.create.sql diff --git a/doc/sql/flowable/flowable.sqlserver.all.create.sql b/database/flowable/flowable.sqlserver.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.sqlserver.all.create.sql rename to database/flowable/flowable.sqlserver.all.create.sql diff --git a/doc/sql/flowable/flowable.yashan.all.create.sql b/database/flowable/flowable.yashan.all.create.sql similarity index 100% rename from doc/sql/flowable/flowable.yashan.all.create.sql rename to database/flowable/flowable.yashan.all.create.sql diff --git a/doc/sql/martial-db/martial_db.sql b/database/martial-db/martial_db.sql similarity index 100% rename from doc/sql/martial-db/martial_db.sql rename to database/martial-db/martial_db.sql diff --git a/doc/sql/upgrade/bladex.dameng.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.dameng.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.dameng.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.dameng.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/sql/upgrade/bladex.mysql.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.mysql.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.mysql.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.mysql.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/sql/upgrade/bladex.oracle.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.oracle.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.oracle.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.oracle.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/sql/upgrade/bladex.postgresql.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.postgresql.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.postgresql.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.postgresql.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/sql/upgrade/bladex.sqlserver.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.sqlserver.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.sqlserver.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.sqlserver.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/sql/upgrade/bladex.yashandb.upgrade.3.4.0.to.4.0.0.sql b/database/upgrade/bladex.yashandb.upgrade.3.4.0.to.4.0.0.sql similarity index 100% rename from doc/sql/upgrade/bladex.yashandb.upgrade.3.4.0.to.4.0.0.sql rename to database/upgrade/bladex.yashandb.upgrade.3.4.0.to.4.0.0.sql diff --git a/doc/script/docker/elk/deploy.sh b/doc/script/docker/elk/deploy.sh deleted file mode 100644 index cb003fa..0000000 --- a/doc/script/docker/elk/deploy.sh +++ /dev/null @@ -1,88 +0,0 @@ -#./bin/bash -# 定义颜色 -BLUE_COLOR="\033[36m" -RED_COLOR="\033[31m" -GREEN_COLOR="\033[32m" -VIOLET_COLOR="\033[35m" -RES="\033[0m" - -echo -e "${BLUE_COLOR}# ######################################################################${RES}" -echo -e "${BLUE_COLOR}# Docker ELK Deploy Script #${RES}" -echo -e "${BLUE_COLOR}# ######################################################################${RES}" - -# 创建目录 -echo -e "${BLUE_COLOR}---> create [elasticsearch]directory start.${RES}" -if [ ! -d "./elasticsearch/" ]; then -mkdir -p ./elasticsearch/master/conf ./elasticsearch/master/data ./elasticsearch/master/logs \ - ./elasticsearch/slave1/conf ./elasticsearch/slave1/data ./elasticsearch/slave1/logs \ - ./elasticsearch/slave2/conf ./elasticsearch/slave2/data ./elasticsearch/slave2/logs -fi - -echo -e "${RED_COLOR}---> create [kibana]directory start.${RES}" -if [ ! -d "./kibana/" ]; then -mkdir -p ./kibana/conf ./kibana/logs -fi - - echo -e "${GREEN_COLOR}---> create [logstash]directory start.${RES}" - if [ ! -d "./logstash/" ]; then - mkdir -p ./logstash/conf ./logstash/logs - fi - -echo -e "${GREEN_COLOR}---> create [filebeat]directory start.${RES}" -if [ ! -d "./filebeat/" ]; then -mkdir -p ./filebeat/conf ./filebeat/logs ./filebeat/data -fi - -echo -e "${VIOLET_COLOR}---> create [nginx]directory start.${RES}" -if [ ! -d "./nginx/" ]; then -mkdir -p ./nginx/conf ./nginx/logs ./nginx/www -fi -echo -e "${BLUE_COLOR}===> create directory success.${RES}" - -# 目录授权(data/logs 都要授读/写权限) -echo -e "${BLUE_COLOR}---> directory authorize start.${RES}" -if [ -d "./elasticsearch/" ]; then -chmod 777 ./elasticsearch/master/data/ ./elasticsearch/master/logs/ \ - ./elasticsearch/slave1/data/ ./elasticsearch/slave1/logs/ \ - ./elasticsearch/slave2/data/ ./elasticsearch/slave2/logs -fi - -if [ -d "./filebeat/" ]; then -chmod 777 ./filebeat/data/ ./filebeat/logs/ -fi -echo -e "${BLUE_COLOR}===> directory authorize success.${RES}" - -# 移动配置文件 -echo -e "${BLUE_COLOR}---> move [elasticsearch]config file start.${RES}" -if [ -f "./es-master.yml" ] && [ -f "./es-slave1.yml" ] && [ -f "./es-slave2.yml" ]; then -mv ./es-master.yml ./elasticsearch/master/conf -mv ./es-slave1.yml ./elasticsearch/slave1/conf -mv ./es-slave2.yml ./elasticsearch/slave2/conf -fi - -echo -e "${RED_COLOR}---> move [kibana]config file start.${RES}" -if [ -f "./kibana.yml" ]; then -mv ./kibana.yml ./kibana/conf -fi - -echo -e "${GREEN_COLOR}---> move [logstash]config file start.${RES}" -if [ -f "./logstash.yml" ] && [ -f "./logstash-filebeat.conf" ]; then -mv ./logstash-filebeat.conf ./logstash/conf -mv ./logstash.yml ./logstash/conf -fi - -echo -e "${GREEN_COLOR}---> move [filebeat]config file start.${RES}" -if [ -f "./filebeat.yml" ]; then -mv ./filebeat.yml ./filebeat/conf -fi - -echo -e "${VIOLET_COLOR}---> move [nginx]config file start.${RES}" -if [ -f "./nginx.conf" ]; then -mv ./nginx.conf ./nginx/conf -fi -echo -e "${BLUE_COLOR}===> move config files success.${RES}" -echo -e "${GREEN_COLOR}>>>>>>>>>>>>>>>>>> The End <<<<<<<<<<<<<<<<<<${RES}" - -# 部署项目 -echo -e "${BLUE_COLOR}==================> Docker deploy Start <==================${RES}" -docker-compose up --build -d diff --git a/doc/script/docker/elk/undeploy.sh b/doc/script/docker/elk/undeploy.sh deleted file mode 100644 index c7d3632..0000000 --- a/doc/script/docker/elk/undeploy.sh +++ /dev/null @@ -1,16 +0,0 @@ -#./bin/bash -# 定义颜色 -BLUE_COLOR="\033[36m" -RED_COLOR="\033[31m" -GREEN_COLOR="\033[32m" -VIOLET_COLOR="\033[35m" -RES="\033[0m" - -echo -e "${BLUE_COLOR}# ######################################################################${RES}" -echo -e "${BLUE_COLOR}# Docker ELK UnDeploy Script #${RES}" -echo -e "${BLUE_COLOR}# ######################################################################${RES}" - -# 部署项目 -echo -e "${BLUE_COLOR}==================> Docker UnDeploy Start <==================${RES}" -docker-compose stop -docker-compose rm diff --git a/doc/script/fatjar/service.sh b/doc/script/fatjar/service.sh deleted file mode 100644 index a2f1875..0000000 --- a/doc/script/fatjar/service.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -#设置jar文件名 -APP_NAME=app.jar - -#使用说明,用来提示输入参数 -usage() { -echo "Usage: sh 执行脚本.sh [start|stop|restart|status]" -exit 1 -} - -#检查程序是否在运行 -is_exist(){ -pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' ` -#如果不存在返回1,存在返回0 -if [ -z "${pid}" ]; then -return 1 -else -return 0 -fi -} - -#启动方法 -start(){ -is_exist -if [ $? -eq "0" ]; then -echo "${APP_NAME} is already running. pid=${pid} ." -else -nohup java -Xms1024m -Xmx1024m -jar $APP_NAME > /dev/null 2>&1 & -fi -} - -#停止方法 -stop(){ -is_exist -if [ $? -eq "0" ]; then -kill -9 $pid -else -echo "${APP_NAME} is not running" -fi -} - -#输出运行状态 -status(){ -is_exist -if [ $? -eq "0" ]; then -echo "${APP_NAME} is running. Pid is ${pid}" -else -echo "${APP_NAME} is NOT running." -fi -} - -#重启 -restart(){ -stop -start -} - -#根据输入参数,选择执行对应方法,不输入则执行使用说明 -case "$1" in -"start") -start -;; -"stop") -stop -;; -"status") -status -;; -"restart") -restart -;; -*) -usage -;; -esac diff --git a/docs/CI-CD部署总结.md b/docs/CI-CD部署总结.md new file mode 100644 index 0000000..d783597 --- /dev/null +++ b/docs/CI-CD部署总结.md @@ -0,0 +1,278 @@ +# 武术管理系统 CI/CD 自动化部署 - 完成总结 + +## 🎉 部署状态 + +### ✅ 已完成的工作 + +#### 1. Drone CI/CD 服务器部署(154.30.6.21) +- **Drone Server**: http://154.30.6.21:8080 ✅ 运行中 +- **Drone Runner**: ✅ 已连接并轮询任务 +- **管理员账号**: JohnSion ✅ 已创建 +- **RPC Secret**: 55db397727eb7def59f3f588c0b503e0 ✅ 已配置 + +#### 2. 部署服务器基础设施 +- **MySQL 8.0**: ✅ 运行中(端口 3306) + - 数据库: martial_db + - 表数量: 53 张 + - 测试数据: 2场比赛、10名运动员、9个项目 + - 密码: WtcSecure901faf1ac4d32e2bPwd + +- **Redis 7-alpine**: ✅ 运行中(端口 6379) + - 密码: RedisSecure2024MartialXyZ789ABC + - 持久化: AOF 模式 + +- **Docker Compose**: ✅ 配置完成 + - 位置: /app/martial/docker-compose.yml + - 网络: martial-network + +#### 3. CI/CD 配置文件 +- **后端仓库** (martial-master): + - `.drone.yml` ✅ 已创建并提交 + - `Dockerfile` ✅ 已创建并提交 + - SSH Secret ✅ 你已配置 + +- **前端仓库** (martial-web): + - `.drone.yml` ✅ 已创建并提交 + - `Dockerfile` ✅ 已创建并提交 + - `nginx.conf` ✅ 已创建并提交 + - SSH Secret ✅ 你已配置 + +--- + +## 📋 待完成的步骤 + +### 步骤1:推送代码到 Gitea ⚠️ 需要你操作 + +**方法A:添加 SSH 公钥到 Gitea(推荐)** + +1. 复制以下公钥: +``` +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCzXo91kuSXHfsuqvgm1hdquE+JuaEn2qJB35+BxxFRKFXhwGoMLAAP6kEnawvRPpugfZ7C0bG/6zgQ4E32UwtihaDAEgweyLWKPDW4GEcDofQdgrprBPAoODZc4soAIH3kQ/LePNMsWnwDtc7BANCCmtEk0hnXvMbbFVD6U5MOwfvofzkbCE7OPxOLz+dTNMs8nxOuo9T00rK5julPeCJapJWUbEXXG4X+G2yY7Otx7X1qv7BHE31deRHIUonWT8Wh4EUiyOxUCmXC04l35yOF1rt2dBVa2AHwbpNiKjWVupSoiq+32PTQKoqc85hDRSEueXXjy/GPSCG/MFaLl4LwGMj0Ok/oirlB5RlhjvQpKrvpmYfUg+rS5rhsmKd5dmvzOtyadFoNamZF1g9nNFSmrXh1yhejIkAbUBTJvtuH66fSkH3WDIEp2/TnGr/XVsbAh717meNHMl92Yv/CAQT3JhSMoMA+D1xZWVrRCpMyU05WAepTv+AQOrxm0rvb7MOHVTgBdzmQHVLFFKImYtKDQjhtZnx6cuk/+Y7MmUT/rmdxvjaPpJe/JYmm+dOLnuMU0vtBksTlP7J+xymT5n69P7sh0AtFxRTh4SZaoZu4zDeh98GsbTFSoVgXe4nc7vyBmrKL9pu0OCo5wrrdqa6wzVoyZzUAeC888dFa1XBQQw== katana-import@test.johnsion.club +``` + +2. 登录 https://git.waypeak.work +3. 进入 设置 → SSH / GPG 密钥 +4. 添加上面的公钥 + +**方法B:在本地推送代码** + +在你本地机器上: +```bash +# 后端 +cd martial-master +git pull +git push origin main + +# 前端 +cd martial-web +git pull +git push origin main +``` + +### 步骤2:在 Drone UI 中激活仓库 ⚠️ 需要你操作 + +1. 访问 http://154.30.6.21:8080 +2. 使用 Gitea 账号登录(JohnSion) +3. 授权 Drone 访问你的仓库 +4. 在仓库列表中点击 **ACTIVATE**: + - `martial/martial-master` + - `martial/martial-web` + +### 步骤3:触发首次构建(推送代码后自动触发) + +代码推送后,Drone 会自动: +1. 拉取代码 +2. 编译项目 +3. 构建 Docker 镜像 +4. 部署到生产服务器 +5. 执行健康检查 + +**或者手动触发:** +1. 进入 Drone UI 中的仓库页面 +2. 点击右上角 "NEW BUILD" +3. 选择 `main` 分支 +4. 点击 "CREATE" + +--- + +## 🚀 自动化部署流程 + +### 后端部署流程 +``` +推送代码到 main 分支 + ↓ +Drone CI 检测到代码变更 + ↓ +1. 编译 BladeX 框架(缓存 Maven 依赖) + ↓ +2. 编译后端项目并打包 JAR + ↓ +3. 构建 Docker 镜像 + ↓ +4. SSH 到部署服务器(154.30.6.21) + ↓ +5. 拉取最新镜像并重启容器 + ↓ +6. 健康检查 (http://154.30.6.21:8123/actuator/health) + ↓ +✅ 部署成功 +``` + +### 前端部署流程 +``` +推送代码到 main 分支 + ↓ +Drone CI 检测到代码变更 + ↓ +1. 安装 npm 依赖(使用国内镜像加速) + ↓ +2. 构建生产版本(npm run build) + ↓ +3. 构建 Docker 镜像(Nginx + 静态文件) + ↓ +4. SSH 到部署服务器 + ↓ +5. 拉取最新镜像并重启容器 + ↓ +6. 健康检查 (http://154.30.6.21/) + ↓ +✅ 部署成功 +``` + +--- + +## 🌐 访问地址 + +### 部署后的应用 +- **前端**: http://154.30.6.21 +- **后端 API**: http://154.30.6.21:8123 +- **API 文档**: http://154.30.6.21:8123/doc.html + +### CI/CD 管理 +- **Drone UI**: http://154.30.6.21:8080 + +--- + +## 🛠️ 常用运维命令 + +### Drone 相关 +```bash +# 查看 Drone Server 日志 +ssh root@154.30.6.21 "docker logs -f drone" + +# 查看 Runner 日志 +ssh root@154.30.6.21 "docker logs -f drone-runner" + +# 重启 Drone 服务 +ssh root@154.30.6.21 "docker restart drone drone-runner" +``` + +### 应用相关 +```bash +# 查看所有容器状态 +ssh root@154.30.6.21 "docker ps" + +# 查看应用日志 +ssh root@154.30.6.21 "docker logs -f martial-backend" +ssh root@154.30.6.21 "docker logs -f martial-frontend" + +# 重启应用 +ssh root@154.30.6.21 "cd /app/martial && docker compose restart backend" +ssh root@154.30.6.21 "cd /app/martial && docker compose restart frontend" + +# 查看数据库 +ssh root@154.30.6.21 "docker exec -it martial-mysql mysql -uroot -pWtcSecure901faf1ac4d32e2bPwd martial_db" +``` + +### Docker Compose 管理 +```bash +# 查看服务状态 +ssh root@154.30.6.21 "cd /app/martial && docker compose ps" + +# 查看日志 +ssh root@154.30.6.21 "cd /app/martial && docker compose logs -f backend" + +# 停止所有服务 +ssh root@154.30.6.21 "cd /app/martial && docker compose down" + +# 启动所有服务 +ssh root@154.30.6.21 "cd /app/martial && docker compose up -d" +``` + +--- + +## 📝 配置详情 + +### 数据库连接 +- Host: 154.30.6.21 (容器内使用 martial-mysql) +- Port: 3306 +- Database: martial_db +- Username: root +- Password: WtcSecure901faf1ac4d32e2bPwd + +### Redis 配置 +- Host: 154.30.6.21 (容器内使用 martial-redis) +- Port: 6379 +- Password: RedisSecure2024MartialXyZ789ABC +- Database: 8 + +### 环境变量 +后端容器环境变量在 docker-compose.yml 中配置: +```yaml +SPRING_PROFILE: dev +JAVA_OPTS: "-Xms512m -Xmx1024m" +``` + +--- + +## 🔧 故障排查 + +### 构建失败 +1. 检查 Drone UI 中的构建日志 +2. 确认 SSH Secret 配置正确 +3. 确认部署服务器可以被 SSH 访问 + +### 部署失败 +1. SSH 到部署服务器检查容器状态:`docker ps -a` +2. 查看容器日志:`docker logs martial-backend` +3. 检查数据库连接:`docker exec martial-mysql mysql -uroot -p...` + +### 应用无法访问 +1. 检查容器是否运行:`docker ps | grep martial` +2. 检查端口是否监听:`ss -tlnp | grep 8123` +3. 查看应用日志:`docker logs martial-backend` + +--- + +## 📚 文档位置 + +- **后端文档**: /remote_dev/martial/martial-master/CLAUDE.md +- **CI/CD 配置**: /remote_dev/martial/martial-master/.drone.yml +- **部署配置**: /app/martial/docker-compose.yml (部署服务器上) +- **数据库脚本**: /remote_dev/martial/martial-master/doc/sql/martial-db/ + +--- + +## 🎯 下一步建议 + +1. ✅ **完成代码推送**(见上方步骤1) +2. ✅ **激活 Drone 仓库**(见上方步骤2) +3. ⭐ **配置域名**(可选) + - 前端: martial.waypeak.work → 154.30.6.21:80 + - 后端: api.martial.waypeak.work → 154.30.6.21:8123 + - CI/CD: drone.waypeak.work → 154.30.6.21:8080 + +4. ⭐ **配置 HTTPS**(可选) + - 使用 Let's Encrypt 免费证书 + - 在 Nginx 中配置 SSL + +5. ⭐ **配置构建通知**(可选) + - 邮件通知 + - 钉钉/企业微信通知 + - Telegram 通知 + +--- + +生成时间:2025-11-29 +部署服务器:154.30.6.21 +管理员:JohnSion diff --git a/doc/README.md b/docs/README.md similarity index 100% rename from doc/README.md rename to docs/README.md diff --git a/doc/sql/mysql/martial-add-fields.sql b/docs/sql/mysql/martial-add-fields.sql similarity index 100% rename from doc/sql/mysql/martial-add-fields.sql rename to docs/sql/mysql/martial-add-fields.sql diff --git a/doc/sql/mysql/martial-add-status-column.sql b/docs/sql/mysql/martial-add-status-column.sql similarity index 100% rename from doc/sql/mysql/martial-add-status-column.sql rename to docs/sql/mysql/martial-add-status-column.sql diff --git a/doc/sql/mysql/martial-complete-schema.sql b/docs/sql/mysql/martial-complete-schema.sql similarity index 100% rename from doc/sql/mysql/martial-complete-schema.sql rename to docs/sql/mysql/martial-complete-schema.sql diff --git a/doc/sql/mysql/martial-mock-data.sql b/docs/sql/mysql/martial-mock-data.sql similarity index 100% rename from doc/sql/mysql/martial-mock-data.sql rename to docs/sql/mysql/martial-mock-data.sql diff --git a/doc/前后端架构说明.md b/docs/前后端架构说明.md similarity index 100% rename from doc/前后端架构说明.md rename to docs/前后端架构说明.md diff --git a/doc/后端开发完成报告.md b/docs/后端开发完成报告.md similarity index 100% rename from doc/后端开发完成报告.md rename to docs/后端开发完成报告.md diff --git a/doc/开发指南.md b/docs/开发指南.md similarity index 100% rename from doc/开发指南.md rename to docs/开发指南.md diff --git a/doc/数据库字段检查报告.md b/docs/数据库字段检查报告.md similarity index 100% rename from doc/数据库字段检查报告.md rename to docs/数据库字段检查报告.md diff --git a/doc/架构说明.md b/docs/架构说明.md similarity index 100% rename from doc/架构说明.md rename to docs/架构说明.md diff --git a/doc/问题修复报告.md b/docs/问题修复报告.md similarity index 100% rename from doc/问题修复报告.md rename to docs/问题修复报告.md diff --git a/doc/script/docker/elk/README.md b/scripts/docker/elk/README.md similarity index 100% rename from doc/script/docker/elk/README.md rename to scripts/docker/elk/README.md diff --git a/doc/script/docker/elk/docker-compose.yml b/scripts/docker/elk/docker-compose.yml similarity index 100% rename from doc/script/docker/elk/docker-compose.yml rename to scripts/docker/elk/docker-compose.yml diff --git a/doc/script/docker/elk/es-master.yml b/scripts/docker/elk/es-master.yml similarity index 100% rename from doc/script/docker/elk/es-master.yml rename to scripts/docker/elk/es-master.yml diff --git a/doc/script/docker/elk/es-slave1.yml b/scripts/docker/elk/es-slave1.yml similarity index 100% rename from doc/script/docker/elk/es-slave1.yml rename to scripts/docker/elk/es-slave1.yml diff --git a/doc/script/docker/elk/es-slave2.yml b/scripts/docker/elk/es-slave2.yml similarity index 100% rename from doc/script/docker/elk/es-slave2.yml rename to scripts/docker/elk/es-slave2.yml diff --git a/doc/script/docker/elk/filebeat.yml b/scripts/docker/elk/filebeat.yml similarity index 100% rename from doc/script/docker/elk/filebeat.yml rename to scripts/docker/elk/filebeat.yml diff --git a/doc/script/docker/elk/kibana.yml b/scripts/docker/elk/kibana.yml similarity index 100% rename from doc/script/docker/elk/kibana.yml rename to scripts/docker/elk/kibana.yml diff --git a/doc/script/docker/elk/logstash-filebeat.conf b/scripts/docker/elk/logstash-filebeat.conf similarity index 100% rename from doc/script/docker/elk/logstash-filebeat.conf rename to scripts/docker/elk/logstash-filebeat.conf diff --git a/doc/script/docker/elk/logstash.yml b/scripts/docker/elk/logstash.yml similarity index 100% rename from doc/script/docker/elk/logstash.yml rename to scripts/docker/elk/logstash.yml diff --git a/doc/script/fatjar/service.cmd b/scripts/fatjar/service.cmd similarity index 100% rename from doc/script/fatjar/service.cmd rename to scripts/fatjar/service.cmd diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 92e3404..ad51d0a 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,7 +1,7 @@ #服务器配置 server: port: 8123 - address: 127.0.0.1 + address: 0.0.0.0 undertow: threads: # 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程