若依前后端分离系统生产环境部署实战指南
1. 环境准备:搭建部署的基石
部署若依前后端分离系统到生产环境,第一步就是做好环境准备。这就像盖房子前要打地基一样,基础不牢后续所有工作都可能白费。我在实际项目中遇到过不少因为环境问题导致的部署失败案例,所以这部分内容我会结合踩坑经验详细说明。
服务器端需要安装四个核心组件:JDK、MySQL、Redis和Nginx。对于JDK版本,强烈建议使用1.8版本,虽然新版本也能运行,但1.8的兼容性最好。安装完成后记得配置JAVA_HOME环境变量,这个经常被新手忽略。MySQL推荐使用8.0版本,安装时要注意设置字符集为utf8mb4,否则中文内容可能会出现乱码。Redis我习惯用5.0.4版本,这个版本稳定性和性能都不错。Nginx建议选择LTS长期支持版本,避免使用太新的测试版。
本地开发环境需要准备两个工具:Node.js和Vue.js插件。Node.js版本建议选择16.x LTS版本,太老的版本可能不支持某些新特性,太新的版本又可能有不兼容问题。在IDEA中安装Vue.js插件时,要注意插件版本与IDEA版本的兼容性,我遇到过因为版本不匹配导致的前端编译问题。
提示:所有软件安装完成后,建议先做个简单的功能测试,确认基本功能正常后再进行后续步骤。
2. 数据库配置与数据导入
数据库是系统的核心,配置不当会导致各种奇怪的问题。首先要在MySQL中创建一个新数据库,字符集一定要选utf8mb4,排序规则用utf8mb4_general_ci。创建数据库用户时,要确保该用户有远程连接权限,这个权限经常被忘记设置。
数据导入有两种方式:SQL文件导入和使用Navicat等工具导入。我更喜欢用命令行导入,虽然看起来复杂但更可靠。具体命令是:
mysql -u用户名 -p密码 数据库名 < ruoyi.sql在application-druid.yml中配置数据库连接时,有几个关键参数需要注意:
- useSSL=false:除非你配置了SSL证书,否则一定要设为false
- serverTimezone=Asia/Shanghai:MySQL 8.0必须设置时区
- characterEncoding=utf8:确保字符编码正确
我曾经遇到过因为时区设置不对导致的时间字段值错误的问题,调试了很久才发现是这个原因。所以这些细节配置一定要检查再三。
3. 前后端配置修改详解
3.1 后端配置调整
后端主要有两个配置文件需要修改:application.yml和application-druid.yml。在application.yml中,除了修改server.port端口号外,还有一些生产环境特有的配置需要注意:
spring: profiles: active: prod # 必须设置为prod servlet: multipart: max-file-size: 10MB max-request-size: 100MB文件上传大小限制要根据实际需求调整。如果系统需要处理大文件上传,这两个值要相应增大。但要注意,Nginx中也有对应的client_max_body_size配置需要同步修改。
3.2 前端配置调整
前端配置主要在vue.config.js文件中。这里需要修改三个关键配置:
- devServer.port:开发服务器端口
- devServer.proxy:API代理配置
- publicPath:静态资源路径
生产环境配置示例:
module.exports = { publicPath: '/', devServer: { port: 9393, proxy: { '/prod-api': { target: 'http://your-server-ip:19393', changeOrigin: true, pathRewrite: { '^/prod-api': '' } } } } }特别注意proxy配置中的target地址要和后端实际地址一致,pathRewrite规则也要正确设置,否则会出现404错误。
4. 项目打包与优化
4.1 后端打包技巧
后端使用Maven打包时,建议先执行clean再package,避免缓存导致的问题:
mvn clean package -DskipTests打包完成后,可以在ruoyi-admin/target目录下找到生成的jar包。我习惯在打包前先运行测试用例,确保没有明显问题。但在生产环境打包时加上-DskipTests参数可以跳过测试,加快打包速度。
4.2 前端打包优化
前端打包有几个优化点可以提高性能:
- 开启Gzip压缩
- 配置CDN加速
- 启用production模式
在vue.config.js中添加如下配置:
configureWebpack: { externals: { 'vue': 'Vue', 'vue-router': 'VueRouter', 'axios': 'axios' } }这样可以将这些常用库从打包文件中排除,通过CDN引入,显著减小打包体积。实测下来,优化后的包体积可以减少30%以上。
5. 服务器部署实战
5.1 文件上传与目录规划
将打包好的文件上传到服务器时,建议建立规范的目录结构。我通常这样组织:
/usr/local/project/ ├── ruoyi │ ├── backend # 存放后端jar包 │ ├── frontend # 存放前端静态文件 │ └── logs # 存放日志文件使用scp命令上传文件:
scp ruoyi-admin.jar user@server:/usr/local/project/ruoyi/backend/ scp -r dist/* user@server:/usr/local/project/ruoyi/frontend/5.2 Nginx配置详解
Nginx配置是前后端分离部署的关键。下面是一个完整的生产环境配置示例:
server { listen 80; server_name your-domain.com; # 前端静态文件 location / { root /usr/local/project/ruoyi/frontend; try_files $uri $uri/ /index.html; expires 30d; } # 后端API代理 location /prod-api/ { proxy_pass http://127.0.0.1:19393/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_connect_timeout 60s; proxy_read_timeout 600s; } # 静态资源缓存 location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires 365d; access_log off; } }这个配置做了几点优化:
- 静态资源长期缓存
- API请求超时时间延长
- 开启gzip压缩
- 禁用静态资源访问日志
6. 系统启动与监控
6.1 后端服务启动
生产环境建议使用systemd管理后端服务。创建/etc/systemd/system/ruoyi.service文件:
[Unit] Description=RuoYi Service After=syslog.target network.target [Service] User=www Group=www ExecStart=/usr/bin/java -jar /usr/local/project/ruoyi/backend/ruoyi-admin.jar SuccessExitStatus=143 Restart=always RestartSec=30 [Install] WantedBy=multi-user.target然后执行:
systemctl daemon-reload systemctl start ruoyi systemctl enable ruoyi这种方式比直接nohup启动更可靠,可以自动重启崩溃的服务,还能方便地查看日志。
6.2 日志监控配置
生产环境必须配置完善的日志监控。在application-prod.yml中添加:
logging: file: name: /usr/local/project/ruoyi/logs/ruoyi.log level: root: info org.springframework: warn com.ruoyi: debug建议使用logrotate管理日志文件,防止日志文件过大。创建/etc/logrotate.d/ruoyi配置文件:
/usr/local/project/ruoyi/logs/*.log { daily missingok rotate 30 compress delaycompress notifempty create 644 www www }7. 常见问题排查
部署过程中难免会遇到各种问题,这里分享几个常见问题的解决方法:
- 端口冲突问题:使用
netstat -tunlp查看端口占用情况 - 数据库连接失败:检查MySQL用户权限和防火墙设置
- 前端资源404:检查Nginx root配置和文件权限
- 跨域问题:确保Nginx代理配置正确
一个实用的排查流程是:
- 查看后端日志:tail -f /usr/local/project/ruoyi/logs/ruoyi.log
- 检查Nginx访问日志:tail -f /var/log/nginx/access.log
- 检查Nginx错误日志:tail -f /var/log/nginx/error.log
- 使用curl测试API接口:curl -v http://localhost:19393/
我在实际部署中遇到过前端能访问但所有API请求都返回404的情况,最后发现是Nginx的proxy_pass后面少了个斜杠。这种细节问题往往最难排查,所以一定要仔细检查每个配置项。
