第一步:准备阿里云服务器环境
1.1 在阿里云服务器上安装必要软件

# 更新系统包
sudo yum update -y
# 安装Java 8(RuoYi需要Java 8)
sudo yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
# 验证Java安装
java -version
javac -version
# 安装MySQL 8.0
sudo yum install -y mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
# 获取MySQL临时密码
sudo grep 'temporary password' /var/log/mysqld.log
# 安装Nginx
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
# 安装Maven(用于构建后端项目)
sudo yum install -y maven
# 安装Node.js和npm(用于构建前端项目)
curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum install -y nodejs
# 验证安装
mvn -version
node -version
npm -version

1.2 配置防火墙

# 开放必要端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

第二步:数据库配置
2.1 配置MySQL数据库

# 安全配置MySQL
sudo mysql_secure_installation
# 登录MySQL(使用上面获取的临时密码)
mysql -u root -p
# 在MySQL中执行以下命令:
-- 创建数据库
CREATE DATABASE `ry-vue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 创建用户(替换your_password为您的密码)
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;

2.2 导入数据库脚本
将项目中的SQL文件上传到服务器并导入:

# 安全配置MySQL
sudo mysql_secure_installation
# 登录MySQL(使用上面获取的临时密码)
mysql -u root -p
# 在MySQL中执行以下命令:

第三步:构建后端项目
3.1 在本地构建后端项目
在您的本地项目根目录执行:

# 清理并打包项目
mvn clean package -Dmaven.test.skip=true
# 构建完成后,在ruoyi-admin/target目录下会生成ruoyi-admin.jar文件

3.2 更新配置文件
在部署前,我们需要更新配置文件以适配服务器环境:
现在重新构建项目:

# 重新打包项目
mvn clean package -Dmaven.test.skip=true

4.1 构建前端项目

# 进入前端目录
cd ruoyi-ui
# 安装依赖
npm install
# 构建生产版本
npm run build:prod
# 构建完成后,dist目录就是前端静态文件

第五步:部署到服务器

# 在服务器上创建部署目录
sudo mkdir -p /home/ruoyi/app
sudo mkdir -p /home/ruoyi/uploadPath
sudo mkdir -p /var/www/ruoyi
# 设置权限
sudo chown -R $USER:$USER /home/ruoyi
sudo chown -R nginx:nginx /var/www/ruoyi

5.2 上传文件到服务器
使用SCP或其他方式将以下文件上传到服务器:

# 上传后端JAR文件
scp ruoyi-admin/target/ruoyi-admin.jar root@your_server_ip:/home/ruoyi/app/
# 上传前端构建文件
scp -r ruoyi-ui/dist/* root@your_server_ip:/var/www/ruoyi/

5.3 创建后端启动脚本
在服务器上创建启动脚本:

# 创建启动脚本
sudo nano /home/ruoyi/app/start.sh
#!/bin/bash
# RuoYi后端启动脚本
# 设置Java环境
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 进入应用目录
cd /home/ruoyi/app
# 停止已运行的实例
pkill -f ruoyi-admin.jar
# 启动应用
nohup java -jar -Xms512m -Xmx1024m ruoyi-admin.jar > ruoyi.log 2>&1 &
echo "RuoYi后端服务已启动"
echo "日志文件: /home/ruoyi/app/ruoyi.log"
echo "进程ID: $!"
# 设置执行权限
chmod +x /home/ruoyi/app/start.sh

5.4 启动后端服务

# 启动后端服务
/home/ruoyi/app/start.sh
# 检查服务状态
ps aux | grep ruoyi-admin
netstat -tlnp | grep 8080

第六步:配置Nginx
6.1 配置Nginx

# 备份原配置
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# 创建RuoYi配置文件
sudo nano /etc/nginx/conf.d/ruoyi.conf
server {
listen 80;
server_name your_domain.com;  # 替换为您的域名或IP
# 前端静态文件
location / {
root /var/www/ruoyi;
index index.html;
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /prod-api/ {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
root /var/www/ruoyi;
expires 1y;
add_header Cache-Control "public, immutable";
}
# 日志配置
access_log /var/log/nginx/ruoyi_access.log;
error_log /var/log/nginx/ruoyi_error.log;
}

6.2 测试并重启Nginx

# 测试Nginx配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
# 检查Nginx状态
sudo systemctl status nginx

第七步:测试部署
7.1 验证服务状态

# 检查后端服务
curl http://localhost:8080/actuator/health
# 检查Nginx
curl http://localhost
# 检查端口占用
netstat -tlnp | grep -E ':(80|8080)'

7.2 访问测试
在浏览器中访问:
前端页面:http://your_server_ip
后端API:http://your_server_ip/prod-api/
数据库监控:http://your_server_ip/prod-api/druid/
默认登录账号:
用户名:admin
密码:admin123

MySQL配置步骤

  1. 首先获取MySQL临时密码
# 获取MySQL临时密码
sudo grep 'temporary password' /var/log/mysqld.log
  1. 安全配置MySQL
# 运行安全配置脚本
sudo mysql_secure_installation

这个命令会引导您:
输入临时密码
设置新密码
删除匿名用户
禁止root远程登录
删除测试数据库
重新加载权限表

  1. 登录MySQL并创建数据库
# 使用root用户登录MySQL
mysql -u root -p
  1. 在MySQL命令行中执行以下SQL命令:
-- 创建数据库
CREATE DATABASE `ry-vue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 创建ruoyi用户(替换your_password为您设置的密码)
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'your_password';
-- 授权给ruoyi用户
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
  1. 导入数据库脚本
# 导入主数据库脚本
mysql -u ruoyi -p ry-vue < /home/ruoyi/sql/ry_20240629.sql
# 导入定时任务脚本
mysql -u ruoyi -p ry-vue < /home/ruoyi/sql/quartz.sql

已经克隆了RuoYi代码到服务器上,在服务器上直接部署RuoYi项目

第一步:检查项目结构并安装环境

# 进入项目目录
cd RuoYi-Vue
# 查看项目结构
ls -la
# 安装必要的环境(如果还没安装)
yum update -y
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel maven mysql-server nginx nodejs npm
# 启动服务
systemctl start mysqld
systemctl start nginx
systemctl enable mysqld
systemctl enable nginx

第二步:配置MySQL数据库

# 获取MySQL临时密码
grep 'temporary password' /var/log/mysqld.log
# 运行安全配置
mysql_secure_installation
# 登录MySQL创建数据库
mysql -u root -p

在MySQL中执行:

CREATE DATABASE `ry-vue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'RuoYi@2024!';
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'%';
FLUSH PRIVILEGES;
EXIT;
# 导入数据库脚本
# 导入数据库脚本(使用正确的文件名)
mysql -u ruoyi -p ry-vue < sql/ry_20250522.sql
mysql -u ruoyi -p ry-vue < sql/quartz.sql

第三步:构建后端项目

# 进入项目根目录
cd RuoYi-Vue
# 修改数据库配置
sed -i 's/username: root/username: ruoyi/g' ruoyi-admin/src/main/resources/application-druid.yml
sed -i 's/password: password/password: RuoYi@2024!/g' ruoyi-admin/src/main/resources/application-druid.yml
sed -i 's|profile: D:/ruoyi/uploadPath|profile: /home/ruoyi/uploadPath|g' ruoyi-admin/src/main/resources/application.yml
# 构建后端项目
mvn clean package -Dmaven.test.skip=true

第四步:构建前端项目

# 进入前端目录
cd ruoyi-ui
# 安装依赖
npm install
# 构建前端项目
npm run build:prod
# 返回上级目录
cd ..

第五步:创建部署目录并复制文件

# 创建部署目录
mkdir -p /home/ruoyi/app
mkdir -p /home/ruoyi/uploadPath
mkdir -p /var/www/ruoyi
# 复制后端JAR文件
cp ruoyi-admin/target/ruoyi-admin.jar /home/ruoyi/app/
# 复制前端文件
cp -r ruoyi-ui/dist/* /var/www/ruoyi/
# 设置权限
chown -R nginx:nginx /var/www/ruoyi
chmod -R 755 /var/www/ruoyi

第六步:创建后端启动脚本

# 创建启动脚本
cat > /home/ruoyi/app/start.sh << 'EOF'
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
cd /home/ruoyi/app
pkill -f ruoyi-admin.jar
nohup java -jar -Xms512m -Xmx1024m ruoyi-admin.jar > ruoyi.log 2>&1 &
echo "RuoYi后端服务已启动"
echo "访问地址: http://182.92.76.58:8080"
EOF
chmod +x /home/ruoyi/app/start.sh

第七步:配置Nginx

# 创建Nginx配置
cat > /etc/nginx/conf.d/ruoyi.conf << 'EOF'
server {
listen 80;
server_name 182.92.76.58;
location / {
root /var/www/ruoyi;
index index.html;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
root /var/www/ruoyi;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
# 测试并重启Nginx
nginx -t
systemctl restart nginx

第八步:启动后端服务

# 启动后端服务
/home/ruoyi/app/start.sh
# 检查服务状态
ps aux | grep ruoyi-admin
netstat -tlnp | grep 8080

第九步:设置开机自启

# 创建系统服务
cat > /etc/systemd/system/ruoyi.service << 'EOF'
[Unit]
Description=RuoYi Management System
After=network.target mysql.service
[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/home/ruoyi/app
ExecStart=/home/ruoyi/app/start.sh
ExecStop=/bin/kill -15 $MAINPID
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
# 启用服务
systemctl daemon-reload
systemctl enable ruoyi.service
systemctl start ruoyi.service

第十步:配置防火墙

# 开放端口
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

常用管理命令

# 查看后端服务状态
systemctl status ruoyi.service
# 查看后端日志
tail -f /home/ruoyi/app/ruoyi.log
# 重启后端服务
systemctl restart ruoyi.service
# 重启Nginx
systemctl restart nginx
# 查看端口占用
netstat -tlnp | grep -E ':(80|8080)'

ruoyi用户还没有创建或者密码不对。让我们先创建ruoyi用户:

# 以root用户登录MySQL
mysql -u root -p
# 在MySQL中执行以下命令
-- 创建ruoyi用户
CREATE USER 'ruoyi'@'%' IDENTIFIED BY 'RuoYi@2024!';
-- 授权给ruoyi用户
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
# 导入数据库脚本
mysql -u ruoyi -p ry-vue < sql/ry_20250522.sql
mysql -u ruoyi -p ry-vue < sql/quartz.sql

ruoyi用户的密码可能不是我们设置的。让我们先重置密码:

# 以root用户登录MySQL
mysql -u root -p
-- 重置ruoyi用户密码
ALTER USER 'ruoyi'@'%' IDENTIFIED BY 'RuoYi@2024!';
FLUSH PRIVILEGES;
-- 退出
EXIT;

然后测试登录:

# 测试ruoyi用户登录(密码:RuoYi@2024!)
mysql -u ruoyi -p ry-vue

先配置npm镜像加速,然后再安装:

# 配置npm淘宝镜像
npm config set registry https://registry.npmmirror.com
# 或者使用cnpm
npm install -g cnpm --registry=https://registry.npmmirror.com
# 然后使用cnpm安装依赖
cnpm install
# 构建前端项目
cnpm run build:prod

构建完成后,继续部署步骤:

# 返回上级目录
cd ..
# 创建部署目录
mkdir -p /home/ruoyi/app
mkdir -p /home/ruoyi/uploadPath
mkdir -p /var/www/ruoyi
# 复制后端JAR文件
cp ruoyi-admin/target/ruoyi-admin.jar /home/ruoyi/app/
# 复制前端文件
cp -r ruoyi-ui/dist/* /var/www/ruoyi/
# 设置权限
chown -R nginx:nginx /var/www/ruoyi
chmod -R 755 /var/www/ruoyi

然后创建后端启动脚本:

# 创建启动脚本
cat > /home/ruoyi/app/start.sh << 'EOF'
#!/bin/bash
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
cd /home/ruoyi/app
pkill -f ruoyi-admin.jar
nohup java -jar -Xms512m -Xmx1024m ruoyi-admin.jar > ruoyi.log 2>&1 &
echo "RuoYi后端服务已启动"
echo "访问地址: http://182.92.76.58:8080"
EOF
chmod +x /home/ruoyi/app/start.sh

后端启动脚本:

# 启动后端服务
/home/ruoyi/app/start.sh

然后检查服务是否启动成功

# 检查Java进程
ps aux | grep ruoyi-admin
# 检查端口占用
netstat -tlnp | grep 8080
# 查看启动日志
tail -f /home/ruoyi/app/ruoyi.log

如果启动成功,继续配置Nginx:

# 创建Nginx配置
cat > /etc/nginx/conf.d/ruoyi.conf << 'EOF'
server {
listen 80;
server_name 182.92.76.58;
location / {
root /var/www/ruoyi;
index index.html;
try_files $uri $uri/ /index.html;
}
location /prod-api/ {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Forwarded-Proto $scheme;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
root /var/www/ruoyi;
expires 1y;
add_header Cache-Control "public, immutable";
}
}
EOF
# 测试并重启Nginx
nginx -t
systemctl restart nginx

如果后端服务正常启动,现在可以测试访问了:

# 测试后端API
curl http://localhost:8080
# 测试前端页面
curl http://localhost

后端服务没有启动成功。让我们检查一下:

# 检查Java进程
ps aux | grep ruoyi-admin
# 查看启动日志
tail -f /home/ruoyi/app/ruoyi.log

如果进程不存在,手动启动后端服务:

# 手动启动后端服务
cd /home/ruoyi/app
java -jar ruoyi-admin.jar

或者使用后台启动:

# 后台启动
cd /home/ruoyi/app
nohup java -jar ruoyi-admin.jar > ruoyi.log 2>&1 &

后端启动失败是因为Redis服务没有运行。RuoYi项目依赖Redis。让我们安装并启动Redis:

# 安装Redis
yum install -y redis
# 启动Redis服务
systemctl start redis
systemctl enable redis
# 检查Redis状态
systemctl status redis
# 检查Redis端口
netstat -tlnp | grep 6379

如果Redis安装成功,重新启动后端服务:

# 重新启动后端服务
cd /home/ruoyi/app
java -jar ruoyi-admin.jar

Nginx主配置文件中有默认的server块在干扰。让我们修复这个问题:

# 备份原配置
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup
# 创建新的Nginx配置,移除默认server块
cat > /etc/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
}
EOF
# 测试配置
nginx -t
# 重启Nginx
systemctl restart nginx
# 测试访问
curl http://localhost

常用管理命令

# 查看后端服务状态
systemctl status ruoyi.service
# 查看后端日志
tail -f /home/ruoyi/app/ruoyi.log
# 重启后端服务
systemctl restart ruoyi.service
# 重启Nginx
systemctl restart nginx
# 查看端口占用
netstat -tlnp | grep -E ':(80|8080)'

外网访问的问题。让我们检查阿里云安全组配置和服务器防火墙:
阿里云安全组配置步骤
请按照以下步骤配置阿里云安全组:

  1. 登录阿里云控制台
    访问 https://ecs.console.aliyun.com/
    使用您的阿里云账号登录
  2. 找到您的ECS实例
    在ECS实例列表中,找到IP为 182.92.76.58 的实例
    点击实例ID进入详情页
  3. 配置安全组
    点击"更多" → “网络和安全组” → “安全组配置”
    或者直接点击"安全组"标签
  4. 添加入方向规则
    点击"配置规则" → “入方向” → “添加安全组规则”:
    规则1 - HTTP访问:
    端口范围:80/80
    授权对象:0.0.0.0/0
    协议类型:TCP
    描述:HTTP访问
    规则2 - 后端API访问:
    端口范围:8080/8080
    授权对象:0.0.0.0/0
    协议类型:TCP
    描述:后端API访问
  5. 保存配置
    点击"确定"保存规则
    等待1-2分钟让配置生效

如何修改代码
方法1:在服务器上直接修改(推荐用于小改动)

# 进入项目目录
cd /root/RuoYi-Vue
# 修改代码文件(使用vim或nano)
vim ruoyi-admin/src/main/java/com/ruoyi/xxx/xxx.java
# 或
nano ruoyi-admin/src/main/java/com/ruoyi/xxx/xxx.java
# 重新构建后端
mvn clean package -Dmaven.test.skip=true
# 停止旧服务
pkill -f ruoyi-admin.jar
# 复制新JAR文件
cp ruoyi-admin/target/ruoyi-admin.jar /home/ruoyi/app/
# 启动新服务
cd /home/ruoyi/app
nohup java -jar ruoyi-admin.jar > ruoyi.log 2>&1 &

方法2:本地修改后重新部署(推荐用于大改动)

# 在本地修改代码
# 然后重新构建
mvn clean package -Dmaven.test.skip=true
cd ruoyi-ui && npm run build:prod
# 上传到服务器
scp ruoyi-admin/target/ruoyi-admin.jar root@182.92.76.58:/home/ruoyi/app/
scp -r ruoyi-ui/dist/* root@182.92.76.58:/var/www/ruoyi/
# 在服务器上重启服务
ssh root@182.92.76.58
pkill -f ruoyi-admin.jar
cd /home/ruoyi/app
nohup java -jar ruoyi-admin.jar > ruoyi.log 2>&1 &