在 Ubuntu 22.04 上部署若依(RuoYi)前后端分离版本,核心在于搞定 Nginx(前端静态资源 + 反向XX)和 MySQL(后端数据存储)。若依官方文档通常给的是 Windows 或通用 Linux 流程,但在 Ubuntu 22.04 这种较新的系统上,直接照搬可能会有路径或权限问题。
下面是一份经过实战验证的、去除了废话的配置指南。假设你使用的是 RuoYi-Vue(前后端分离版),这是目前最主流的用法。
一、 前置准备:环境检查
Ubuntu 22.04 默认源里的软件版本比较新,但为了稳定性,我们尽量使用官方推荐的稳定包。
-
更新系统源
sudo apt update && sudo apt upgrade -y -
安装基础工具
sudo apt install -y curl wget git unzip zip -
确认 Java 环境
若依后端需要 JDK 8 或 JDK 17。推荐 JDK 17(Spring Boot 3.x 支持更好,如果用的是旧版 RuoYi 则用 JDK 8)。# 以 JDK 17 为例 sudo apt install openjdk-17-jdk -y java -version
二、 MySQL 配置(后端数据源)
RuoYi 默认使用 MySQL 5.7+ 或 8.0+。Ubuntu 22.04 默认源是 MySQL 8.0。
1. 安装 MySQL
sudo apt install mysql-server -y
2. 安全初始化
sudo mysql_secure_installation
- 提示
VALIDATE PASSWORD COMPONENT时,选No(除非你有强迫症)。 - 设置 root 密码。
- 移除匿名用户、禁止远程 root 登录、删除 test 数据库,全部选
Y。
3. 创建若依专用数据库和用户
登录 MySQL:
sudo mysql -u root -p
执行 SQL(假设你的若依 SQL 文件在 /opt/ruoyi/sql/ 下):
-- 创建数据库,注意字符集必须为 utf8mb4
CREATE DATABASE IF NOT EXISTS ruoyi DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 创建用户 (建议不要用 root,创建一个专用账户)
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'YourStrongPassword123!';
-- 如果是本地部署且只允许 localhost 访问,将 '%' 改为 'localhost'
-- 授权
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
EXIT;
4. 导入数据
# 进入若依项目目录下的 sql 文件夹
cd /path/to/ruoyi/sql
mysql -u ruoyi -p ruoyi < ruoyi_20230801.sql
注意:文件名根据你下载的若依版本日期可能不同。
5. 修改后端配置文件
打开 ruoyi-admin/src/main/resources/application-druid.yml(或 application.yml),修改数据库连接信息:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ruoyi
password: YourStrongPassword123!
关键点:serverTimezone=GMT%2B8 必须加,否则时间会差 8 小时。
三、 Nginx 配置(前端 + 反向XX)
Nginx 在这里扮演两个角色:
- 托管
ruoyi-ui编译后的dist静态文件。 - 将
/prod-api/*的请求反向XX到后端的8080端口。
1. 安装 Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
2. 部署前端静态文件
首先,你需要在前端开发机(Windows/Mac)上执行 npm run build,生成 dist 文件夹。然后将整个 dist 文件夹上传到服务器,例如 /var/www/ruoyi-ui。
sudo mkdir -p /var/www/ruoyi-ui
# 使用 scp 或 sftp 上传 dist 文件夹内容到此目录
sudo chown -R www-data:www-data /var/www/ruoyi-ui
3. 编写 Nginx 配置文件
删除默认配置,新建一个站点配置:
sudo rm /etc/nginx/sites-enabled/default
sudo nano /etc/nginx/sites-available/ruoyi.conf
写入以下内容(关键部分已标注):
server {
listen 80;
server_name your-domain.com; # 替换为你的域名,如果没有域名,可以留空或写 IP
# 前端静态资源
location / {
root /var/www/ruoyi-ui;
index index.html index.htm;
try_files $uri $uri/ /index.html; # 重要:解决 Vue Router history 模式刷新 404 的问题
}
# 静态资源缓存优化(可选)
location ~* .(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 后端 API 反向XX
# 若依前端请求通常以 /prod-api 开头
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 这里指向后端 Spring Boot 服务的地址和端口
proxy_pass http://127.0.0.1:8080/;
}
# 防止大文件上传限制(若依有文件上传功能)
client_max_body_size 100m;
}
解释:
try_files $uri $uri/ /index.html;:这是 Vue SPA 应用的标配,确保刷新页面不会 404。proxy_pass http://127.0.0.1:8080/;:注意末尾的斜杠/。因为前端请求是/prod-api/system/user/getInfo,加上斜杠后,Nginx 会将请求转发为http://127.0.0.1:8080/system/user/getInfo(去掉了/prod-api前缀)。如果你后端配置了 context-path,需相应调整。
4. 启用配置并重启
sudo ln -s /etc/nginx/sites-available/ruoyi.conf /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法是否正确
sudo systemctl reload nginx
四、 启动后端服务
若依后端是一个 Spring Boot 应用,生产环境推荐使用 Jar 包方式运行,而不是直接用 IDE 跑。
-
打包后端
在ruoyi-admin目录下执行:mvn clean package -DskipTests生成的 jar 包位于
target/ruoyi-admin.jar。 -
上传 Jar 包
将ruoyi-admin.jar上传到服务器,例如/opt/ruoyi/。 -
创建 Systemd 服务(推荐)
相比nohup,systemd 能更好地管理进程崩溃重启。sudo nano /etc/systemd/system/ruoyi.service内容如下:
[Unit] Description=RuoYi Admin Service After=syslog.target network.target [Service] User=www-data Group=www-data ExecStart=/usr/bin/java -jar /opt/ruoyi/ruoyi-admin.jar --spring.profiles.active=prod SuccessExitStatus=143 Restart=always RestartSec=10 LimitNOFILE=102400 [Install] WantedBy=multi-user.target注意:
User=www-data:与 Nginx 保持一致,避免权限冲突。如果后端需要读写特定目录,请确保该用户有权限。ExecStart:确保/usr/bin/java路径正确,可以用which java查看。--spring.profiles.active=prod:指定使用生产环境配置(对应application-prod.yml)。
-
启动服务
sudo systemctl daemon-reload sudo systemctl enable ruoyi sudo systemctl start ruoyi sudo systemctl status ruoyi查看日志:
sudo journalctl -u ruoyi -f
五、 常见坑点排查
-
跨域问题(CORS)
- 如果你在 Nginx 层做了反向XX,且前端和后端都在同一个域名下(通过 Nginx 分发),理论上不会有跨域问题。
- 如果前端报 CORS 错误,检查
application.yml中是否配置了自定义的 CORS 过滤器。在生产环境中,通常建议在 Nginx 层面处理,或者在后端代码中放行所有请求(因为 Nginx 已经统一了入口)。
-
Redis 配置
- 若依默认使用 Redis 做缓存。Ubuntu 上安装很简单:
sudo apt install redis-server。 - 确保
application.yml中的 Redis 配置指向127.0.0.1:6379。 - 如果不需要 Redis,可以在配置文件中注释掉相关部分,但建议保留,性能提升明显。
- 若依默认使用 Redis 做缓存。Ubuntu 上安装很简单:
-
防火墙/安全组
- Ubuntu 22.04 默认可能有
ufw防火墙。sudo ufw allow 80/tcp sudo ufw allow 22/tcp sudo ufw enable - 云服务器特别注意:阿里云、腾讯云等控制台的安全组必须开放 80 端口(HTTP)和 443 端口(HTTPS,如果配 SSL)。不要只开 22 和 3306。
- Ubuntu 22.04 默认可能有
-
Nginx 502 Bad Gateway
- 这通常意味着 Nginx 找到了,但连不上后端。
- 检查
ruoyi.service是否正在运行:systemctl status ruoyi。 - 检查后端日志是否有报错。
- 检查 Nginx 配置中的
proxy_pass地址和端口是否正确。
-
前端白屏
- 检查浏览器 Console 是否有网络请求失败。
- 确认
try_files配置是否生效。 - 确认
dist文件夹权限是否为www-data。
六、 进阶:配置 HTTPS(Let’s Encrypt)
生产环境强烈建议上 HTTPS。使用 Certbot 最简单:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
按照提示操作,Certbot 会自动修改 Nginx 配置并重定向 HTTP 到 HTTPS。
总结
- MySQL:建库、建用户、导 SQL、改
application-druid.yml时区。 - Nginx:托管
dist、配置try_files、反向XX/prod-api到8080。 - Java:打包成 Jar,用 Systemd 守护进程启动。
- 网络:开放 80/443 端口,配置好域名解析。
这套流程在 Ubuntu 22.04 上是标准且稳定的。如果遇到具体问题,先看 journalctl -u ruoyi 和 /var/log/nginx/error.log,90% 的问题都能从日志里找到答案。
云技术博客