宝塔面板+Linux云服务器部署若依前后端分离项目全流程(含Nginx配置避坑指南)

在数字化转型浪潮中,前后端分离架构已成为企业级应用开发的主流选择。若依(RuoYi)作为国内知名的开源权限管理系统,凭借其优雅的代码结构和丰富的功能组件,深受开发者喜爱。但对于不熟悉Linux命令行的开发者而言,在云服务器上部署若依前后端分离项目仍存在一定门槛。本文将基于宝塔面板这一可视化运维工具,手把手带你完成从零开始的部署全流程,特别针对Nginx配置中的高频陷阱提供解决方案。

1. 环境准备与工具配置

部署前的环境准备如同建筑地基,直接影响后续所有环节的稳定性。我们推荐使用CentOS 7.x系统,因其长期支持(LTS)特性可确保系统稳定性。以下是需要提前准备的组件清单:

  • 基础环境

    • 2核4G及以上配置的云服务器(阿里云/腾讯云等)
    • 已安装宝塔面板7.9+版本
    • 支持SSH连接的终端工具(FinalShell/Xshell)
  • 运行环境

    # 通过宝塔面板一键安装以下服务:
    Nginx 1.20+
    MySQL 5.7+(需设置root密码)
    Redis 6.2+
    JDK 1.8(建议使用Oracle JDK)
    

注意:若依系统对MySQL 8.0+的兼容性可能存在字符集问题,推荐使用5.7版本。安装完成后,务必在宝塔面板的「安全」页面放行3306、6379等数据库端口。

2. 项目获取与预处理

从Gitee官方仓库获取最新版若依项目:

git clone https://gitee.com/y_project/RuoYi.git

项目结构解析:

  • ruoyi-ui/:基于Vue的前端项目
  • ruoyi-admin/:Spring Boot后端核心模块
  • sql/:包含初始化数据库脚本

前端预处理关键步骤

  1. 修改ruoyi-ui/.env.production文件中的API基础路径:
    VUE_APP_BASE_API = '/prod-api'
    
  2. 安装依赖时建议使用国内镜像源:
    npm install --registry=https://registry.npmmirror.com
    
  3. 构建生产环境包:
    npm run build:prod
    

构建完成后会在目录下生成dist文件夹,这就是需要部署的前端静态资源。

3. 宝塔面板可视化部署

3.1 前端部署实践

  1. 通过宝塔面板「网站」菜单创建新站点
  2. dist文件夹内容上传至网站根目录(如/www/wwwroot/ruoyi
  3. 配置Nginx反向代理:
server {
    listen       80;
    server_name  your-domain.com;
    
    location / {
        root   /www/wwwroot/ruoyi;
        try_files $uri $uri/ /index.html;
        index  index.html;
    }

    location /prod-api/ {
        proxy_pass http://localhost: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;
    }
}

3.2 后端服务部署

  1. 使用Maven打包项目:
    mvn clean package -DskipTests
    
  2. 将生成的ruoyi-admin.jar上传至服务器
  3. 通过宝塔「Supervisor」配置守护进程:
    [program:ruoyi]
    command=java -jar /www/server/ruoyi-admin.jar
    directory=/www/server/
    autostart=true
    autorestart=true
    user=root
    
  4. 配置项目application.yml中的数据库连接信息

4. Nginx配置深度优化

4.1 高频问题解决方案

问题1:静态资源404错误 解决方案:

location /static/ {
    alias /www/wwwroot/ruoyi/static/;
    expires 30d;
}

问题2:接口跨域报错 在Nginx配置中添加:

add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

4.2 性能调优参数

# 全局配置优化
worker_processes auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;
}

http {
    # 启用gzip压缩
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 4;
    gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript;
    
    # 静态资源缓存
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
}

5. 安全加固措施

  1. MySQL安全配置

    • 修改默认3306端口
    • 创建专属数据库用户(非root)
    • 设置IP白名单访问
  2. Redis防护方案

    # 修改redis.conf
    requirepass yourStrongPassword
    bind 127.0.0.1
    protected-mode yes
    
  3. 服务器层面防护

    • 启用宝塔防火墙
    • 定期更新系统补丁
    • 配置SSH密钥登录

实际部署中遇到过最棘手的问题是Nginx的try_files指令配置不当导致的路由失效。经过多次测试发现,在Vue路由模式下必须确保所有非静态资源请求都重定向到index.html,这个细节在官方文档中往往容易被忽略。

更多推荐