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

7.6 KiB
Raw Blame History

工作日志服务平台 - 部署指南

目录说明

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 创建部署目录

# 创建应用目录
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. 编译打包
cd worklog-api
mvn clean package -DskipTests
  1. 上传 JAR 文件
scp target/worklog-api-1.0.0.jar user@server:/opt/worklog/worklog-api/
  1. 上传部署脚本
scp -r deploy/scripts user@server:/opt/worklog/worklog-api/
  1. 配置 application.yml
# 在服务器上创建配置文件
cd /opt/worklog/worklog-api
vi application.yml

# 复制 application.yml.example 内容并修改为生产环境配置
# 重点修改:
# - 数据库连接信息
# - Redis 连接信息
# - 日志路径
# - 文件上传路径
  1. 启动应用
cd /opt/worklog/worklog-api
./scripts/start.sh
  1. 查看日志
tail -f /opt/worklog/worklog-api/logs/console.log
tail -f /opt/worklog/worklog-api/logs/app.log

2.2 应用管理命令

# 启动应用
./scripts/start.sh

# 停止应用
./scripts/stop.sh

# 重启应用
./scripts/restart.sh

# 查看运行状态
ps aux | grep worklog-api

三、Nginx 配置

3.1 安装 Nginx

# Ubuntu
sudo apt update
sudo apt install nginx

# CentOS
sudo yum install nginx

3.2 配置 Nginx

  1. 复制配置文件
sudo cp deploy/nginx/worklog.conf /etc/nginx/sites-available/
sudo ln -s /etc/nginx/sites-available/worklog.conf /etc/nginx/sites-enabled/
  1. 修改配置

编辑 /etc/nginx/sites-available/worklog.conf,修改以下内容:

  • server_name: 修改为实际域名
  • 静态文件路径: 根据实际部署路径修改
  1. 测试配置
sudo nginx -t
  1. 重启 Nginx
sudo systemctl restart nginx
sudo systemctl enable nginx  # 开机自启

3.3 HTTPS 配置(推荐)

  1. 申请 SSL 证书(使用 Let's Encrypt 免费证书)
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d worklog.example.com
  1. 自动续期
sudo certbot renew --dry-run

四、数据库备份

4.1 配置备份脚本

  1. 修改配置

编辑 scripts/backup.sh,确认以下配置:

  • 数据库连接信息
  • 备份目录路径
  • 保留策略
  1. 测试备份
cd /opt/worklog/worklog-api
./scripts/backup.sh full

4.2 配置定时备份

# 编辑 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 恢复数据库

./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 查看日志

# 实时查看应用日志
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 日志清理

# 清理 7 天前的日志
find /opt/worklog/worklog-api/logs -name "*.log" -mtime +7 -delete

建议配置 logrotate 自动清理日志。

六、性能优化

6.1 JVM 参数调优

编辑 scripts/start.sh 中的 JVM_OPTS

# 根据服务器内存调整堆大小
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 防火墙配置

# 只开放必要端口
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. 备份数据库
./scripts/backup.sh full
  1. 停止应用
./scripts/stop.sh
  1. 备份当前版本
cp worklog-api-1.0.0.jar worklog-api-1.0.0.jar.bak
  1. 上传新版本
scp target/worklog-api-1.1.0.jar user@server:/opt/worklog/worklog-api/
  1. 启动应用
# 修改 start.sh 中的 JAR 文件名
vi scripts/start.sh
./scripts/start.sh
  1. 验证升级
# 检查健康状态
curl http://localhost:8080/api/v1/health

# 查看日志
tail -f logs/app.log

9.2 回滚方案

如果升级失败,执行回滚:

./scripts/stop.sh
cp worklog-api-1.0.0.jar.bak worklog-api-1.0.0.jar
./scripts/start.sh

十、常用命令速查

# 应用管理
./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                             # 系统负载

联系方式

如有问题,请联系运维团队。