1. 若依系统部署到服务器全流程解析
作为一款基于Spring Boot的快速开发框架,若依(RuoYi)凭借其丰富的功能模块和灵活的权限控制,已成为众多企业级应用开发的首选。但在实际生产环境中,如何将若依系统稳定高效地部署到服务器,往往是开发团队面临的第一个技术挑战。本文将基于我多年部署经验,详细拆解从环境准备到服务上线的完整流程。
提示:本文以若依V4.7.6版本为例,部署环境为CentOS 7.6 + JDK1.8 + MySQL5.7 + Nginx1.18的组合方案,这是目前生产环境验证最稳定的配置组合。
1.1 基础环境准备
服务器环境配置是部署工作的基石。建议选择纯净的CentOS 7.x系统,最小化安装后执行以下初始化操作:
bash复制# 关闭防火墙(生产环境需配置安全组规则替代)
systemctl stop firewalld
systemctl disable firewalld
# 安装常用工具
yum install -y wget vim net-tools lsof unzip
JDK安装建议采用Oracle JDK 1.8u202版本,这个版本与若依框架的兼容性最好。安装后需配置环境变量:
bash复制export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
export PATH=$JAVA_HOME/bin:$PATH
验证安装是否成功:
bash复制java -version
# 应显示:java version "1.8.0_202"
1.2 数据库部署与配置
MySQL建议使用5.7.34版本,这是官方长期支持版本中最稳定的一个。安装后需特别注意以下配置:
ini复制[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
max_connections=1000
innodb_buffer_pool_size=1G
创建若依专用数据库时,务必使用utf8mb4字符集:
sql复制CREATE DATABASE ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
导入SQL文件时常见的报错解决方案:
- 错误1071:检查MySQL是否启用了严格模式(sql_mode中去除STRICT_TRANS_TABLES)
- 错误1709:确认MySQL版本不低于5.7.7(支持utf8mb4的完整特性)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 若依项目打包与配置优化
2.1 源码编译与打包技巧
从GitHub克隆最新代码后,建议先进行以下优化配置:
- 修改application.yml中的数据库连接信息:
yaml复制datasource:
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8
username: root
password: 你的密码
- 生产环境务必关闭Swagger文档:
yaml复制swagger:
enabled: false
- 调整Tomcat参数(在application.yml中):
yaml复制server:
tomcat:
max-threads: 200
min-spare-threads: 20
使用Maven打包时推荐以下命令:
bash复制mvn clean package -Dmaven.test.skip=true -Pprod
注意:-Pprod参数会激活生产环境配置,自动排除开发工具包并启用资源压缩。
2.2 前端项目构建要点
Vue前端项目构建时常见问题处理:
- 解决node-sass安装失败:
bash复制npm install --save-dev node-sass --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/dist --sass-binary-site=http://npm.taobao.org/mirrors/node-sass
- 生产环境构建命令:
bash复制npm run build:prod
构建完成后dist目录应包含:
- static/js:压缩后的JS文件
- static/css:压缩后的CSS文件
- index.html:入口文件
3. 服务部署与性能调优
3.1 后端服务部署
将打包好的ruoyi-admin.jar上传至服务器后,推荐使用systemd管理服务:
创建/etc/systemd/system/ruoyi.service文件:
ini复制[Unit]
Description=RuoYi Admin Service
After=syslog.target network.target
[Service]
Type=simple
ExecStart=/usr/java/jdk1.8.0_202-amd64/bin/java -Xms512m -Xmx1024m -jar /opt/ruoyi/ruoyi-admin.jar
Restart=always
User=root
Group=root
[Install]
WantedBy=multi-user.target
启动服务并设置开机自启:
bash复制systemctl daemon-reload
systemctl start ruoyi
systemctl enable ruoyi
3.2 Nginx配置最佳实践
典型的前后端分离Nginx配置示例:
nginx复制server {
listen 80;
server_name yourdomain.com;
# 前端静态资源
location / {
root /opt/ruoyi/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /prod-api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 防止直接访问后端端口
location ~ ^/(admin|api|common|tool|websocket)/ {
return 403;
}
}
关键优化参数:
nginx复制# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff2)$ {
expires 365d;
add_header Cache-Control "public, no-transform";
}
# 上传文件大小限制
client_max_body_size 20m;
4. 生产环境问题排查指南
4.1 常见启动问题
- 端口冲突:
bash复制netstat -tlnp | grep 8080
# 如果端口被占用,可以修改application.yml中的server.port
- 内存溢出:
- 调整JVM参数:-Xms和-Xmx设置为物理内存的1/4到1/2
- 添加OOM时生成堆转储:-XX:+HeapDumpOnOutOfMemoryError
- 数据库连接失败:
- 检查MySQL用户权限:
GRANT ALL PRIVILEGES ON ruoyi.* TO 'user'@'%' IDENTIFIED BY 'password' - 确认MySQL的bind-address不是127.0.0.1
4.2 性能监控方案
推荐使用Spring Boot Actuator + Prometheus + Grafana监控方案:
- 添加依赖:
xml复制<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
- 配置application.yml:
yaml复制management:
endpoints:
web:
exposure:
include: health,info,prometheus
metrics:
tags:
application: ruoyi-admin
- 访问/metrics端点获取监控数据:
code复制http://your-server:8080/actuator/prometheus
4.3 日志管理策略
推荐日志配置方案:
yaml复制logging:
file:
name: logs/ruoyi-admin.log
max-size: 50MB
max-history: 30
level:
root: info
org.springframework: warn
com.ruoyi: debug
使用logrotate管理日志:
bash复制# /etc/logrotate.d/ruoyi
/opt/ruoyi/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
copytruncate
}
5. 安全加固措施
5.1 基础安全配置
- 修改默认账号密码:
- 管理员账号:admin/admin123 → 改为复杂密码
- 数据库root账号:修改默认密码并限制访问IP
- 禁用不必要接口:
java复制@RestController
@RequestMapping("/danger")
public class DangerController {
// 生产环境应删除此类测试接口
}
- 启用HTTPS:
nginx复制ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
5.2 定期维护建议
- 备份策略:
bash复制# 数据库备份
mysqldump -uroot -p ruoyi > /backup/ruoyi_$(date +%Y%m%d).sql
# 代码备份
tar -czvf /backup/ruoyi_$(date +%Y%m%d).tar.gz /opt/ruoyi
- 升级注意事项:
- 先备份数据库和代码
- 在测试环境验证新版本
- 查看release notes中的破坏性变更
- 逐步灰度发布到生产环境
- 监控关键指标:
- 接口响应时间 > 2s的请求
- JVM内存使用率 > 80%
- 数据库连接数 > 最大值的70%
- 磁盘空间使用率 > 85%
通过以上完整的部署流程和优化方案,若依系统可以在生产环境中稳定运行。在实际操作中,建议先搭建测试环境验证所有配置,再逐步迁移到生产环境。对于高并发场景,还需要考虑集群部署和负载均衡方案。
