若依前后端分离项目部署阿里云centos7服务器(超详细,含401无法认证报错解决)
服务器前期配置
为了省事我全部选择yum安装
安装jdk8
步骤 1:更新系统包
首先,确保你的系统包是最新的:
sudo yum update -y
步骤 2:检查 JDK 8 是否在仓库中可用
运行以下命令检查是否有 JDK 8 可用:
sudo yum search java-1.8
你会看到类似以下的结果:
java-1.8.0-openjdk.x86_64 : OpenJDK Runtime Environment 8
java-1.8.0-openjdk-devel.x86_64 : OpenJDK Development Environment 8
java-1.8.0-openjdk:仅包含运行时环境(JRE),适用于运行 Java 程序。
java-1.8.0-openjdk-devel:包含开发工具(如 javac 编译器),适用于开发和运行 Java 应用程序。
步骤 3:安装 JDK 8
安装包含开发工具的 java-1.8.0-openjdk-devel:
sudo yum install -y java-1.8.0-openjdk-devel
如果只需要运行时环境(JRE),可以运行:
sudo yum install -y java-1.8.0-openjdk
步骤 4:验证安装
安装完成后,检查 JDK 版本以确认安装成功:
java -version
输出类似以下内容,表示安装成功:
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
安装mysql5.7
1. 检查系统环境
更新系统软件包:
sudo yum update -y
检查是否已经安装了 MySQL 或 MariaDB:
rpm -qa | grep mysql
rpm -qa | grep mariadb
如果已有 MariaDB 或 MySQL,请先卸载它们:
sudo yum remove mariadb-libs mysql* -y
2. 配置 MySQL 官方 Yum 源
MySQL 的官方 Yum 源提供了 MySQL 5.5、5.6 和 5.7 等版本。
下载并添加 MySQL Yum Repository:
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
安装 Yum Repository:
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm
检查已安装的 Yum 源:
yum repolist enabled | grep mysql
输出类似以下内容:
mysql-connectors-community/x86_64 MySQL Connectors Community
mysql-tools-community/x86_64 MySQL Tools Community
mysql57-community/x86_64 MySQL 5.7 Community Server
禁用 MySQL 5.7 源并启用 MySQL 5.6 或 MySQL 5.5(根据需求选择):
启用 MySQL 5.6:
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql56-community
启用 MySQL 5.5:
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql55-community
验证当前启用的 MySQL 源:
yum repolist enabled | grep mysql
3. 安装 MySQL
安装 MySQL:
sudo yum install mysql-community-server -y
启动 MySQL 服务:
sudo systemctl start mysqld
设置 MySQL 开机自启动:
sudo systemctl enable mysqld
验证 MySQL 是否运行成功:
systemctl status mysqld
输出类似以下内容表示 MySQL 已成功运行:
● mysqld.service - MySQL Community Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since ...
4. 配置 MySQL
4.1 获取初始 root 密码
安装 MySQL 后,默认会生成一个随机的 root 密码,存储在日志文件中。通过以下命令查看:
sudo grep 'temporary password' /var/log/mysqld.log
输出示例:
2025-01-08T07:51:00.123456Z 1 [Note] A temporary password is generated for root@localhost: p@ssword123
这里 p@ssword123 就是初始密码。
4.2 登录 MySQL 并修改 root 密码
登录 MySQL:
mysql -u root -p
输入刚刚获取的初始密码。
修改 root 密码(MySQL 5.7 及以上要求密码至少包含大小写字母、数字和特殊字符):
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
如果 MySQL 提示密码策略限制太严格,可以放宽密码规则:
SET GLOBAL validate_password_policy=LOW;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
5. 验证安装
检查 MySQL 版本:
mysql --version
输出类似以下内容:
mysql Ver 14.14 Distrib 5.6.51, for Linux (x86_64) using EditLine wrapper
登录 MySQL 并运行简单命令:
mysql -u root -p
登录成功后,查看数据库:
SHOW DATABASES;
6. 放开3306端口
云服务器防火墙设置
安装redis
1. 检查系统环境
更新系统软件包 首先,确保系统的所有软件包都是最新的:
sudo yum update -y
检查是否已有 Redis 如果系统上已安装 Redis,先检查 Redis 的版本:
redis-server --version
如果未安装,继续以下步骤。
2. 安装 Redis
使用默认 Yum 源安装(适合快速安装)
通过 CentOS 默认的 EPEL 源安装 Redis:
sudo yum install epel-release -y
sudo yum install redis -y
安装完成后,检查 Redis 版本:
redis-server --version
验证安装 安装完成后,检查 Redis 版本:
redis-server --version
3. 配置 Redis
修改 Redis 配置文件 Redis 的配置文件通常位于 /etc/redis.conf 或 /etc/redis/redis.conf。你可以根据需要进行修改:
sudo vi /etc/redis.conf
常见的修改内容:
允许外部访问: 找到 bind 127.0.0.1,将其改为 bind 0.0.0.0,允许所有 IP 地址访问。
设置 Redis 密码: 找到 # requirepass foobared,取消注释并设置密码,例如:
requirepass your_password
启动 Redis
如果使用 Yum 安装:
sudo systemctl start redis
sudo systemctl enable redis
验证 Redis 是否启动成功 使用 redis-cli 测试 Redis:
redis-cli
输入以下命令:
127.0.0.1:6379> ping
如果返回 PONG,说明 Redis 已成功运行。
5. 设置 Redis 为后台运行
修改 Redis 配置文件:
sudo vi /etc/redis.conf
找到以下行,将 no 改为 yes:
daemonize yes
重启 Redis:
sudo systemctl restart redis
安装并配置nginx
1. 安装 Nginx
步骤 1:更新系统软件包
首先,确保系统的所有软件包都是最新的:
sudo yum update -y
步骤 2:安装 EPEL 源
Nginx 软件包通常在 EPEL 源中提供,安装 EPEL 源:
sudo yum install epel-release -y
步骤 3:安装 Nginx
通过 Yum 安装 Nginx:
sudo yum install nginx -y
步骤 4:启动 Nginx
安装完成后,启动 Nginx 服务:
sudo systemctl start nginx
步骤 5:设置开机自启动
sudo systemctl enable nginx
步骤 6:检查 Nginx 服务状态
确认 Nginx 是否运行成功:
sudo systemctl status nginx
输出类似以下内容表示 Nginx 正在运行:
● nginx.service - The nginx HTTP and reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)
Active: active (running) since ...
步骤 7:验证 Nginx 是否工作
在浏览器中访问你的服务器 IP 地址,确保能看到默认的 Nginx 欢迎页面。
http://<your-server-ip>
****2. 配置 Nginx
Nginx 的配置文件位于 /etc/nginx/ 目录下:
主配置文件:/etc/nginx/nginx.conf
站点配置文件:/etc/nginx/conf.d/*.conf
默认站点配置文件:/etc/nginx/conf.d/default.conf
2.1 配置 Nginx
我直接改主配置文件 /etc/nginx/nginx.conf。
sudo vi /etc/nginx/nginx.conf
insert键输入
server {
listen 80;
server_name localhost;
# 静态文件配置
location / {
root /project/program/ui/device-dist; # 前端静态文件目录
index index.html index.htm; # 默认首页文件
try_files $uri $uri/ /index.html; # 单页应用支持
}
# 后端 API 代理配置
location /prod-api/ {
proxy_pass http://127.0.0.1:8080/; # Spring Boot 服务
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;
# 超时时间配置
proxy_connect_timeout 60s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
gzip on;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
esc键 :wq保存并退出。
2.2 测试 Nginx 配置
在重启 Nginx 之前,测试配置文件是否正确:
sudo nginx -t
输出如下表示配置正确:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
2.3 重启 Nginx
配置文件修改完成后,重新加载 Nginx:
sudo systemctl reload nginx
3. 配置防火墙
如果防火墙开启,需要允许 HTTP 和 HTTPS 流量通过。
开放 HTTP(80端口)和 HTTPS(443端口)依然是通过云服务器开放端口
项目打包
1.前端打包
找到ruoyi-ui 下bin文件夹下的build.bat点击运行
运行完成后ruoyi-ui下生成会生成dist文件夹,将其移动至nginx中配置的静态文件目录
windows上传文件夹
把dist打包成dist.zip
云服务器安装unzip
sudo yum install unzip -y
# 验证是否成功安装:
unzip -v
上传zip后解压命令
unzip xxx.zip -d 目标的文件夹名(不存在会创建)
2.后端配置修改
application.yml:
applicaiton-druid.yml
3.后端打包
先点击IDEA右侧Maven的ruoyi-master(host)文件夹下的Lifecycle文件夹中的clean,再点击ruoyi-admin下的package即可
BUILD SUCCESS即成功
ruoyi-admin下target文件下的ruoyi-admin.jar即为打好的包
部署
1.前端部署
打好的dist包放到与nginx.conf中相同的指定位置即可
2.后端部署
随便放一个非root文件位置
运行命令
java -jar ruoyi-admin.jar
运行成功如下图
将 java -jar ruoyi-admin.jar 运行的 Java 程序设置为 Linux 系统的服务
可以通过 Systemd 服务管理工具实现,这样可以方便地启动、停止和管理服务,并在服务器重启后自动启动。
1. 创建 Systemd 服务文件
使用 vi 或其他编辑器创建一个服务文件:
sudo vi /etc/systemd/system/ruoyi-admin.service
添加以下内容到服务文件中:
[Unit]
Description=RuoYi Admin Service
After=network.target
[Service]
User=root # 或者指定运行服务的用户,建议不要用 root,推荐普通用户
Group=root
WorkingDirectory=/path/to/your/app # 你的 ruoyi-admin.jar 文件所在的目录
ExecStart=/usr/bin/java -jar /path/to/your/app/ruoyi-admin.jar
Restart=always
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=ruoyi-admin
[Install]
WantedBy=multi-user.target
配置项说明:
User 和 Group:指定运行该服务的用户和组。为了安全,推荐创建一个普通用户(例如 ruoyi)来运行服务,而不是使用 root。
WorkingDirectory:指定应用运行的工作目录。
ExecStart:启动命令,这里运行 Java 程序。
Restart:如果服务崩溃,自动重启服务。
SyslogIdentifier:服务的标识符,用于系统日志。
2. 重新加载 Systemd 配置
每次创建或修改服务文件后,都需要让 Systemd 加载新的配置:
sudo systemctl daemon-reload
3. 启动服务
使用以下命令启动服务:在这里插入代码片
sudo systemctl start ruoyi-admin
4. 设置开机自启动
让服务在系统重启时自动启动:
sudo systemctl enable ruoyi-admin
5. 验证服务状态
可以使用以下命令检查服务是否正在运行:
sudo systemctl status ruoyi-admin
输出示例:
● ruoyi-admin.service - RuoYi Admin Service
Loaded: loaded (/etc/systemd/system/ruoyi-admin.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2025-01-08 10:00:00 CST; 1min 30s ago
Main PID: 12345 (java)
CGroup: /system.slice/ruoyi-admin.service
└─12345 /usr/bin/java -jar /path/to/your/app/ruoyi-admin.jar
如果显示 Active: active (running),说明服务正在运行。
6. 日志查看
服务的输出会被记录到系统日志中,可以通过以下命令查看日志:
sudo journalctl -u ruoyi-admin
7. 管理服务
以下是常用的服务管理命令:
启动服务:
sudo systemctl start ruoyi-admin
停止服务:
sudo systemctl stop ruoyi-admin
重启服务:
sudo systemctl restart ruoyi-admin
查看服务状态:
sudo systemctl status ruoyi-admin
禁用开机启动:
sudo systemctl disable ruoyi-admin
可能出现的问题
问题1.访问若依登录页面时循环显示登录过期,请求超时
首先查看nginx有无报错
tail -f /var/log/nginx/error.log
报错类似如下
2025/01/07 13:46:55 [crit] 2176#2176: *140 stat() "/root/program/ui/device-dist/index.html" failed (13: Permission denied), client: 34.140.58.13, server: ip地址, request: "GET / HTTP/1.1", host: "ip地址"
2025/01/07 13:46:55 [error] 2176#2176: *140 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 34.140.58.13, server: ip地址, request: "GET / HTTP/1.1", host: "ip地址"
解决方法:
- 查看云服务器8080端口是否放开
- 给项目部署位置授权
sudo chmod -R 777 前端放置路径(/project/ui/dist)
sudo chmod -R 777 后端放置路径
注意,如果项目位置放置在/root下则需直接换到其他目录下。因为/root 是超级用户(root 用户)的主目录,可能会有nginx无法访问的可能。
# 文件移动命令:
sudo mv 你的文件路径 目标路径
# 放开所有权限
sudo chmod -R 777 文件路径
问题2:认证失败,code:401
描述:本地开发时测试的好好的,部署到云服务器上显示不了验证码图片/无法登录。查看开发者工具返回报错{“msg”:“请求访问:/prod-api/logout,认证失败,无法访问系统资源”,“code”:401}
解决:注意nginx.conf配置文件中proxy_pass在IP地址后加/
问题3:NoSuchMethodError
问题描述:本地运行的很好,打包部署发现出问题{“msg”:“Handler dispatch failed; nested exception is java.lang.NoSuchMethodError: com.ruoyi.device.service.IDeviceLocationService.selectLocationByDeviceId(Ljava/lang/Integer;)Lcom/ruoyi/device/domain/DeviceLocation;”,“code”:500}
缓存问题,导致打包没有添加新的方法,JVM识别不到
第一步,清理idea缓存
第二步,打包依次执行以下步骤 (尤其是maven install)
看看compile报不报错,不报错的话package打包正常部署