若依前后端分离系统生产环境部署实战指南
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中配置数据库连接时有几个关键参数需要注意useSSLfalse除非你配置了SSL证书否则一定要设为falseserverTimezoneAsia/ShanghaiMySQL 8.0必须设置时区characterEncodingutf8确保字符编码正确我曾经遇到过因为时区设置不对导致的时间字段值错误的问题调试了很久才发现是这个原因。所以这些细节配置一定要检查再三。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.proxyAPI代理配置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 userserver:/usr/local/project/ruoyi/backend/ scp -r dist/* userserver:/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] DescriptionRuoYi Service Aftersyslog.target network.target [Service] Userwww Groupwww ExecStart/usr/bin/java -jar /usr/local/project/ruoyi/backend/ruoyi-admin.jar SuccessExitStatus143 Restartalways RestartSec30 [Install] WantedBymulti-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后面少了个斜杠。这种细节问题往往最难排查所以一定要仔细检查每个配置项。