Merge remote-tracking branch 'origin/main'
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
解决目录重组冲突: - doc/ → docs/ (文档目录重命名) - doc/sql/ → database/ (数据库脚本目录重组) - doc/script/ → scripts/ (脚本目录重组) 保留本地新增的武术比赛系统文件: - docs/sql/mysql/martial-*.sql (4个数据库脚本) - docs/后端开发完成报告.md - docs/数据库字段检查报告.md - docs/问题修复报告.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
98
.drone.yml
Normal file
98
.drone.yml
Normal file
@@ -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:
|
||||
- 武术系统后端自动部署
|
||||
37
Dockerfile
37
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}"]
|
||||
|
||||
177
README.md
177
README.md
@@ -41,3 +41,180 @@
|
||||
## 举报有奖
|
||||
* 向官方提供有用线索并成功捣毁盗版个人或窝点,将会看成果给予 500~10000 不等的现金奖励
|
||||
* 官方唯一指定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
|
||||
- 查看每次构建的详细日志
|
||||
- 查看每个步骤的执行时间和状态
|
||||
|
||||
---
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
278
docs/CI-CD部署总结.md
Normal file
278
docs/CI-CD部署总结.md
Normal file
@@ -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
|
||||
@@ -1,7 +1,7 @@
|
||||
#服务器配置
|
||||
server:
|
||||
port: 8123
|
||||
address: 127.0.0.1
|
||||
address: 0.0.0.0
|
||||
undertow:
|
||||
threads:
|
||||
# 设置IO线程数, 它主要执行非阻塞的任务,它们会负责多个连接, 默认设置每个CPU核心一个线程
|
||||
|
||||
Reference in New Issue
Block a user