若依Vue3前后端分离项目宝塔部署实战:从环境配置到Nginx调优

张开发
2026/4/13 20:05:00 15 分钟阅读

分享文章

若依Vue3前后端分离项目宝塔部署实战:从环境配置到Nginx调优
1. 环境准备与宝塔面板初始化部署若依Vue3前后端分离项目前服务器环境准备是重中之重。我建议选择CentOS 7.6或Ubuntu 20.04这类长期支持版本的操作系统它们与宝塔面板的兼容性最好。记得在购买云服务器时勾选安全组放行80/443端口选项否则后续部署时会遇到无法访问的尴尬情况。安装宝塔面板时有个小技巧使用SSH连接服务器后先执行yum update -y或apt update apt upgrade -y更新系统能避免很多依赖冲突问题。我实测过这个步骤能减少30%的安装报错概率。安装命令推荐用官方的# CentOS yum install -y wget wget -O install.sh http://download.bt.cn/install/install_6.0.sh sh install.sh # Ubuntu wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh sudo bash install.sh安装完成后记得在宝塔面板的安全页面放行后端服务端口比如我习惯用5082和SSH端口。有个坑我踩过部分云厂商需要在控制台和安全组双重放行端口否则外网还是无法访问。2. 后端项目部署实战2.1 数据库配置技巧在宝塔面板创建数据库时建议字符集选择utf8mb4这个编码支持完整的emoji表情存储。导入SQL文件有个隐藏技巧如果文件较大超过50MB先用宝塔的压缩/解压功能把SQL文件上传到服务器再通过命令行导入mysql -u root -p 数据库名 /路径/ruoyi.sql这样比用phpMyAdmin网页导入更稳定我处理过300MB的数据库文件网页导入十次有九次会超时失败。2.2 生产环境配置优化修改application-prod.yml时这几个参数需要特别注意server: port: 5082 # 必须与宝塔Java项目配置一致 tomcat: max-threads: 200 # 生产环境建议200-500 min-spare-threads: 20 spring: datasource: druid: initial-size: 5 # 根据服务器内存调整 max-active: 20 # 小型项目10-20足够 validation-query: SELECT 1 FROM DUAL # MySQL健康检查日志路径配置建议使用绝对路径比如/www/server/ruoyi/logs。我遇到过相对路径导致的权限问题最后发现是systemd服务的工作目录不一致引起的。2.3 打包与部署细节用Maven打包时推荐加上生产环境参数mvn clean package -Dmaven.test.skiptrue -Pprod上传jar包到宝塔后在Java项目添加时要注意项目路径选择包含lib目录的上级文件夹JDK版本选择与开发环境一致的可用java -version确认项目端口必须与yml配置完全一致有个容易忽略的点在项目配置里建议勾选自动重启这样服务器异常重启后服务会自动恢复。去年我们线上服务宕机就是因为没开这个选项半夜爬起来手动重启。3. 前端Vue3项目部署3.1 生产环境构建优化修改.env.production文件时API地址建议用环境变量注入VUE_APP_BASE_API https://api.yourdomain.com构建命令使用--modern参数可以生成现代模式代码yarn build:prod --modern这会产生两个版本的代码新版浏览器加载更小的包兼容性更好。实测首屏加载时间能减少15%左右。3.2 静态资源部署技巧上传dist文件夹时我推荐用宝塔的压缩上传→解压方式本地将dist文件夹压缩为zip宝塔文件管理上传到/www/wwwroot/frontend右键解压并重命名为dist这样比直接上传文件夹快3倍以上特别是node_modules特别大的时候。记得在宝塔添加站点时选择静态网站即使项目是PHP也选这个运行目录指定为/www/wwwroot/frontend/dist关闭防跨站攻击(open_basedir)3.3 Nginx高级配置在站点设置的配置文件里这几个关键配置缺一不可location / { try_files $uri $uri/ /index.html; # 缓存静态资源 expires 30d; add_header Cache-Control public; } location /prod-api/ { proxy_pass http://127.0.0.1:5082/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_read_timeout 300s; # WebSocket需要 # 真实IP传递 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }遇到过403 forbidden错误试试这个location / { # 解决vue-router history模式404 try_files $uri $uri/ /index.html; # 解决403目录浏览问题 autoindex off; }4. HTTPS与性能调优4.1 免费SSL证书配置宝塔的Lets Encrypt证书申请有个隐藏技巧先关闭CDN再申请否则DNS验证经常失败。配置完成后在Nginx配置里加入HSTS增强安全server { listen 443 ssl http2; ssl_stapling on; ssl_stapling_verify on; add_header Strict-Transport-Security max-age63072000; includeSubdomains; preload; }4.2 性能优化参数在宝塔面板的Nginx→性能调整里建议修改worker_processes设为CPU核心数cat /proc/cpuinfo| grep processor | wc -l查看worker_connections建议2048开启Gzip压缩在Nginx配置里已经有默认模板对于高并发场景还需要调整Linux内核参数。在/etc/sysctl.conf末尾添加net.core.somaxconn 65535 net.ipv4.tcp_max_syn_backlog 65535 net.ipv4.tcp_tw_reuse 1执行sysctl -p生效。这些参数让我们的电商项目扛住了双十一流量。5. 常见问题排查指南5.1 404/405错误终极解决方案遇到接口404问题按这个顺序检查Nginx的proxy_pass末尾是否有/有和没有区别很大后端服务是否真的启动ps -ef|grep java宝塔防火墙是否放行端口云服务器安全组规则405错误通常是跨域问题除了Nginx配置外可以在后端添加Configuration public class CorsConfig implements WebMvcConfigurer { Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) .allowedOrigins(*) .allowedMethods(*) .maxAge(3600); } }5.2 静态资源加载异常CSS/JS文件404检查项目打包时的publicPath是否正确Nginx的root目录是否指向dist文件权限建议chown -R www:www /www/wwwroot有个经典坑vue-cli3项目需要设置publicPath: ./否则加载路径会错乱。这个问题我帮三个客户解决过都是同样的情况。6. 高级部署方案6.1 动静分离部署对于高并发项目建议把静态资源放到CDN修改vue.config.jspublicPath: process.env.NODE_ENV production ? https://cdn.yourdomain.com/ : /把dist/static上传到CDNNginx配置添加location /static/ { proxy_pass https://cdn.yourdomain.com/; }6.2 集群化部署当单机性能不足时可以后端部署多实例不同端口Nginx配置负载均衡upstream ruoyi { server 127.0.0.1:5082 weight5; server 127.0.0.1:5083 weight3; server 127.0.0.1:5084 weight2; } location /prod-api/ { proxy_pass http://ruoyi; }记得在宝塔每添加一个Java项目就要新建一个站点目录避免日志文件冲突。

更多文章