worklog/deploy/DEPLOY.md
zhangjf dbcc06edbc feat: 完成后端核心业务模块开发
阶段二:认证授权模块
- User实体类、Mapper、DataService
- Token服务(Redis存储)、密码加密(BCrypt)
- 认证拦截器、UserContext上下文
- 登录/登出接口

阶段三:核心业务模块
- 用户管理:CRUD、状态管理、密码重置
- 模板管理:CRUD、状态管理
- 工作日志:CRUD、权限控制

配置分离架构
- env.properties(环境敏感配置)
- service.properties(服务配置)
- logback-spring.xml更新

部署脚本
- deploy/目录(Nginx配置、启停脚本、备份脚本)

单元测试:29个测试全部通过
2026-02-24 16:10:26 +08:00

412 lines
7.6 KiB
Markdown
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.

# 工作日志服务平台 - 部署指南
## 目录说明
```
deploy/
├── nginx/
│ └── worklog.conf # Nginx 配置文件
└── scripts/
├── backup.sh # 数据库备份脚本
├── start.sh # 应用启动脚本
├── stop.sh # 应用停止脚本
└── restart.sh # 应用重启脚本
```
## 一、服务器环境准备
### 1.1 系统要求
- 操作系统: Linux (Ubuntu 20.04+ / CentOS 7+)
- JDK: 21+
- MySQL: 8.0+
- Redis: 7.x
- Nginx: 1.18+
### 1.2 创建部署目录
```bash
# 创建应用目录
sudo mkdir -p /opt/worklog/worklog-api
sudo mkdir -p /opt/worklog/worklog-admin
sudo mkdir -p /opt/worklog/worklog-mobile
# 创建备份目录
sudo mkdir -p /backup/mysql
# 设置权限
sudo chown -R $USER:$USER /opt/worklog
sudo chown -R $USER:$USER /backup/mysql
```
## 二、应用部署
### 2.1 部署后端应用
1. **编译打包**
```bash
cd worklog-api
mvn clean package -DskipTests
```
2. **上传 JAR 文件**
```bash
scp target/worklog-api-1.0.0.jar user@server:/opt/worklog/worklog-api/
```
3. **上传部署脚本**
```bash
scp -r deploy/scripts user@server:/opt/worklog/worklog-api/
```
4. **配置 application.yml**
```bash
# 在服务器上创建配置文件
cd /opt/worklog/worklog-api
vi application.yml
# 复制 application.yml.example 内容并修改为生产环境配置
# 重点修改:
# - 数据库连接信息
# - Redis 连接信息
# - 日志路径
# - 文件上传路径
```
5. **启动应用**
```bash
cd /opt/worklog/worklog-api
./scripts/start.sh
```
6. **查看日志**
```bash
tail -f /opt/worklog/worklog-api/logs/console.log
tail -f /opt/worklog/worklog-api/logs/app.log
```
### 2.2 应用管理命令
```bash
# 启动应用
./scripts/start.sh
# 停止应用
./scripts/stop.sh
# 重启应用
./scripts/restart.sh
# 查看运行状态
ps aux | grep worklog-api
```
## 三、Nginx 配置
### 3.1 安装 Nginx
```bash
# Ubuntu
sudo apt update
sudo apt install nginx
# CentOS
sudo yum install nginx
```
### 3.2 配置 Nginx
1. **复制配置文件**
```bash
sudo cp deploy/nginx/worklog.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/worklog.conf /etc/nginx/sites-enabled/
```
2. **修改配置**
编辑 `/etc/nginx/sites-available/worklog.conf`,修改以下内容:
- `server_name`: 修改为实际域名
- 静态文件路径: 根据实际部署路径修改
3. **测试配置**
```bash
sudo nginx -t
```
4. **重启 Nginx**
```bash
sudo systemctl restart nginx
sudo systemctl enable nginx # 开机自启
```
### 3.3 HTTPS 配置(推荐)
1. **申请 SSL 证书**(使用 Let's Encrypt 免费证书)
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d worklog.example.com
```
2. **自动续期**
```bash
sudo certbot renew --dry-run
```
## 四、数据库备份
### 4.1 配置备份脚本
1. **修改配置**
编辑 `scripts/backup.sh`,确认以下配置:
- 数据库连接信息
- 备份目录路径
- 保留策略
2. **测试备份**
```bash
cd /opt/worklog/worklog-api
./scripts/backup.sh full
```
### 4.2 配置定时备份
```bash
# 编辑 crontab
crontab -e
# 添加以下内容:
# 每日凌晨 2:00 全量备份
0 2 * * * /opt/worklog/worklog-api/scripts/backup.sh full
# 每周日凌晨 1:00 全量备份(保留更久)
0 1 * * 0 /opt/worklog/worklog-api/scripts/backup.sh full
```
### 4.3 恢复数据库
```bash
./scripts/backup.sh restore /backup/mysql/worklog/full/full_20260224_020000.sql.gz
```
## 五、监控与日志
### 5.1 日志文件位置
```
/opt/worklog/worklog-api/logs/
├── console.log # 控制台输出
├── app.log # 应用日志
├── sql.log # SQL 日志
└── gc.log # GC 日志
```
### 5.2 查看日志
```bash
# 实时查看应用日志
tail -f /opt/worklog/worklog-api/logs/app.log
# 查看 SQL 日志
tail -f /opt/worklog/worklog-api/logs/sql.log
# 查看错误日志
grep ERROR /opt/worklog/worklog-api/logs/app.log
# 查看最近 100 行
tail -n 100 /opt/worklog/worklog-api/logs/app.log
```
### 5.3 日志清理
```bash
# 清理 7 天前的日志
find /opt/worklog/worklog-api/logs -name "*.log" -mtime +7 -delete
```
建议配置 logrotate 自动清理日志。
## 六、性能优化
### 6.1 JVM 参数调优
编辑 `scripts/start.sh` 中的 `JVM_OPTS`
```bash
# 根据服务器内存调整堆大小
JVM_OPTS="-Xms1g -Xmx2g"
# 使用 G1 垃圾回收器
JVM_OPTS="${JVM_OPTS} -XX:+UseG1GC"
# GC 日志
JVM_OPTS="${JVM_OPTS} -Xloggc:${APP_HOME}/logs/gc.log"
```
### 6.2 数据库优化
1. 配置连接池参数application.yml
2. 添加合适的索引
3. 定期分析慢查询日志
### 6.3 Redis 优化
1. 配置持久化策略
2. 设置最大内存限制
3. 配置淘汰策略
## 七、故障排查
### 7.1 应用无法启动
1. 检查 JDK 版本: `java -version`
2. 检查端口占用: `netstat -tuln | grep 8080`
3. 查看启动日志: `tail -f logs/console.log`
4. 检查配置文件: `cat application.yml`
### 7.2 数据库连接失败
1. 检查 MySQL 服务: `systemctl status mysql`
2. 检查防火墙: `sudo ufw status`
3. 测试连接: `mysql -h localhost -u worklog -p`
4. 检查数据库用户权限
### 7.3 Redis 连接失败
1. 检查 Redis 服务: `systemctl status redis`
2. 测试连接: `redis-cli -h localhost -p 6379 -a password`
3. 检查配置文件: `/etc/redis/redis.conf`
### 7.4 Nginx 502 错误
1. 检查后端应用是否运行: `ps aux | grep worklog`
2. 检查端口: `netstat -tuln | grep 8080`
3. 查看 Nginx 错误日志: `tail -f /var/log/nginx/error.log`
## 八、安全加固
### 8.1 防火墙配置
```bash
# 只开放必要端口
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw allow 22/tcp # SSH
sudo ufw enable
```
### 8.2 修改默认密码
1. MySQL root 密码
2. Redis 密码
3. 应用数据库用户密码
4. 管理员默认账号密码
### 8.3 限制 Swagger 访问
在生产环境建议:
1. 关闭 Swagger: `springdoc.swagger-ui.enabled=false`
2. 或通过 Nginx 限制内网访问
## 九、升级部署
### 9.1 升级步骤
1. 备份数据库
```bash
./scripts/backup.sh full
```
2. 停止应用
```bash
./scripts/stop.sh
```
3. 备份当前版本
```bash
cp worklog-api-1.0.0.jar worklog-api-1.0.0.jar.bak
```
4. 上传新版本
```bash
scp target/worklog-api-1.1.0.jar user@server:/opt/worklog/worklog-api/
```
5. 启动应用
```bash
# 修改 start.sh 中的 JAR 文件名
vi scripts/start.sh
./scripts/start.sh
```
6. 验证升级
```bash
# 检查健康状态
curl http://localhost:8080/api/v1/health
# 查看日志
tail -f logs/app.log
```
### 9.2 回滚方案
如果升级失败,执行回滚:
```bash
./scripts/stop.sh
cp worklog-api-1.0.0.jar.bak worklog-api-1.0.0.jar
./scripts/start.sh
```
## 十、常用命令速查
```bash
# 应用管理
./scripts/start.sh # 启动
./scripts/stop.sh # 停止
./scripts/restart.sh # 重启
# 数据库备份
./scripts/backup.sh full # 全量备份
./scripts/backup.sh restore <file> # 恢复
# 日志查看
tail -f logs/app.log # 应用日志
tail -f logs/sql.log # SQL 日志
grep ERROR logs/app.log # 错误日志
# Nginx
sudo nginx -t # 测试配置
sudo systemctl restart nginx # 重启
sudo systemctl status nginx # 状态
# 系统状态
ps aux | grep worklog # 进程状态
netstat -tuln | grep 8080 # 端口监听
df -h # 磁盘空间
free -h # 内存使用
top # 系统负载
```
## 联系方式
如有问题,请联系运维团队。