Ruoyi-vue前后端分离系统部署
Ruoyi-vue前后端分离系统部署
源码下载链接:https://gitee.com/y_project/RuoYi-Vue
1、构建前端
#下载到本地
#解压
unzip RuoYi-Vue-master.zip
#到前端的目录下
cd /root/RuoYi-Vue-master/ruoyi-ui/
#安装 Node.js 的包管理工具
yum -y install npm
#安装前端项目所需要的依赖(--unsafe-perm:不进行权限检查)
npm install --unsafe-perm --registry=https://registry.npmjs.org/
# 打包(打包完成后会在当前的目录下生成一个dist,需要将目录下的内容复制到nginx网页目录)
#❕ 通过在package.json 文件中的 scripts 中定义不同的脚本,如 build:dev(开发环境打包)、build:test(测试环境打包)和 build:prod(生产环境打包),通过执行对应的脚本,会把项目代码进行压缩、合并、编译等操作,生成可在生产环境部署的静态文件,这些文件通常存于 dist 目录
npm run build:prod
#构建完成后会提示
DONE Build complete. The dist directory is ready to be deployed.
INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html
2、部署前端
#安装nginx
yum -y install nginx
#将打包后的文件复制到网页目录
cp -a /root/RuoYi-Vue-master/ruoyi-ui/dist/* /usr/share/nginx/html/
#启动nginx访问
systemctl start nginx
#通过curl命令访问
[root@fan ruoyi-ui]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.14.1
Date: Mon, 24 Mar 2025 02:35:31 GMT
Content-Type: text/html
Content-Length: 12496
Last-Modified: Mon, 24 Mar 2025 02:07:22 GMT
Connection: keep-alive
ETag: "67e0be5a-30d0"
Accept-Ranges: bytes
#用浏览器访问可以看到正常的登录页面,但是会报错404,验证码也无法显示,这是因为我们后端还没有部署
3、安装数据库和缓存
3.1.安装Docker
yum -y install yum-utils
#下载docker源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装并启动
systemctl enable --now docker.service
#配置镜像加速
cat > /etc/docker/daemon.json << EOF
{
"dns": ["8.8.8.8", "8.8.4.4"],
"insecure-registries":["192.168.200.15"],
"registry-mirrors": [
"https://docker.1ms.run",
"https://hub.mirrorify.net",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
]
}
EOF
#重启docker
systemctl daemon-reload && systemctl restart docker.service
3.2.安装Mysql
#创建mysql配置文件后续映射到容器
vim /etc/my.cnf
[client]
default-character-set=utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
skip-character-set-client-handshake = true
[mysql]
default-character-set = utf8mb4
#通过docker映射
docker run -d --name mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /etc/my.cnf:/etc/my.cnf \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=ruoyi123 \
mysql:8.0
#将项目中的sql文件先复制到容器/tmp
cd /root/RuoYi-Vue-master/sql
docker cp quartz.sql mysql:/tmp/quartz.sql
docker cp ry_20240629.sql mysql:/tmp/ry_20240629.sql
#创建数据库
docker exec -it mysql /bin/bash
mysql -u root -p
CREATE DATABASE `ry-vue`;
exit
#执行sql导入命令并退出容器
mysql -u root -pruoyi123 ry-vue < /tmp/ry_20240629.sql
mysql -u root -pruoyi123 ry-vue < /tmp/quartz.sql
exit
3.3.安装Redis
#首先在宿主机安装redis
yum -y install redis
#修改配置文件
vim /etc/redis.conf
daemonize yes
bind *
protected-mode no
requirepass 123456
- daemonize yes:启用守护进程模式。将 Redis 设置为在后台运行,而不是在前台占用控制台或终端。
- bind * :允许从任意 IP 地址访问 Redis。将 Redis 绑定地址设置为通配符 *,表示可以接受来自任何 IP 地址的连接请求。
- protected-mode no:禁用保护模式。允许 Redis 服务器接受来自任何连接而不需要进行身份验证,这在某些环境下(如内部网络或受控环境)可能是合适的选择
- requirepass 123456:设置连接密码为 123456。强制任何连接到 Redis 的客户端必须提供指定的密码,以增加访问控制和安全性。
#启动redis
docker run -d --name redis -p 6379:6379 -v /etc/redis.conf:/etc/redis/redis.conf --sysctl net.core.somaxconn=511 redis:6.0
#查看是否为up
[root@fan ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b14584bc3ffc redis:6.0 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis
eb1309b865a2 mysql:8.0 "docker-entrypoint.s…" 3 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql
4、后端项目打包
4.1.修改项目Mysql、Redis连接地址
#配置与redis连接
cd /root/RuoYi-Vue-master/ruoyi-admin/src/main/resources
vim application.yml
#在配置文件中修改以下两处
profile: /home/ruoyi/uploadPath
password: 123456 #redis密码
#配置mysql连接地址与密码
vim application-druid.yml
url: jdbc:mysql://localhost:3306/ry-vue
password: ruoyi123
4.2.安装Maven
#安装maven并打包
yum -y install maven
#配置仓库
cp -a settings.xml{,.bak}
vim /etc/maven/settings.xml
159 <mirror>
160 <id>aliyunmaven</id>
161 <mirrorOf>central</mirrorOf>
162 <name>aliyun maven</name>
163 <url>https://maven.aliyun.com/repository/public</url>
164 </mirror>
165 </mirrors>
166 <!-- profiles
4.3.构建
#构建
cd ruoyi-admin/
mvn clean package
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15.590 s
[INFO] Finished at: 2025-03-24T14:19:42+08:00
[INFO] ------------------------------------------------------------------------
。。。。。。。。。。。。
#在当前目录下会生成一个target目录(ruoyi-admin.jar)
[root@fan ruoyi-admin]# ls
pom.xml src target
[root@fan ruoyi-admin]# cd target/
[root@fan target]# ls
classes generated-sources maven-archiver maven-status ruoyi-admin.jar ruoyi-admin.jar.original
#运行jar包
java -jar ruoyi-admin.jar
#修改nginx的配置文件(添加location匹配)
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;
proxy_pass http://localhost:8080/;
}
#用浏览器访问80端口(成功访问)
5、将项目打包成war包在tomcat上运行
将 ruoyi-admin.jar
打成 war
包的方法
默认情况下,RuoYi-Vue
的 ruoyi-admin
是一个 Spring Boot 应用,Maven 的 packaging
类型是 jar
。如果你想要打成 war
包,需要进行以下修改:
5.1. 修改 pom.xml
打开 ruoyi-admin
目录下的 pom.xml
,找到 <packaging>jar</packaging>
,修改为 war
:
<packaging>war</packaging>
5.2. 修改 pom.xml
,调整 Spring Boot 依赖
Spring Boot 项目默认是 可执行 JAR,如果改为 WAR
,需要:
- 去掉
spring-boot-starter-web
依赖中的embedded
Tomcat - 添加
spring-boot-starter-tomcat
为provided
- 继承
SpringBootServletInitializer
以支持外部容器
修改 pom.xml
,找到 dependencies
,做如下修改:
<!-- 定时任务 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
</dependency>
<!-- 代码生成 -->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
</dependency>
<!-- 修改点:排除 Spring Boot 内置 Tomcat,并使用 provided 作用域 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
5.3. 修改 RuoYiApplication
以支持外部 Tomcat
找到 ruoyi-admin
里的 src/main/java/com/ruoyi/RuoYiApplication.java
,修改:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class RuoYiApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(RuoYiApplication.class, args);
}
}
5.4. 重新打包 war
修改完 pom.xml
之后,回到 ruoyi-admin
目录,执行:
mvn clean package
成功后,在 target/
目录下会生成:
ruoyi-admin.war
5.5.安装tomcat
yum -y install tomcat
5.6.将war包放入/webapps/目录下面
cp /root/RuoYi-Vue-master/ruoyi-admin/target/ruoyi-admin.war /usr/share/tomcat/webapps/
5.7.启动tomcat
systemctl start tomcat
5.8.修改nginx的location
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;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080/ruoyi-admin/;
proxy_connect_timeout 90;
proxy_read_timeout 90;
}
重启nginx,然后浏览器访问
#可能会涉及到权限的问题解决方法
rm -f /home/ruoyi/
mkdir -p /home/ruoyi/logs
chown tomcat:tomcat /home/ruoyi/logs
chmod 755 /home/ruoyi/logs
5、全部使用docker运行
#所有容器在这个网络中运行
docker network create ruoyi-net
5.1.重新打包
#修改mysql的连接地址
vim /root/RuoYi-Vue-master/ruoyi-admin/src/main/resources/application-druid.yml
#localhost修改为容器的名称
url: jdbc:mysql://mysql:3306
#修改redis的主机名
vim /root/RuoYi-Vue-master/ruoyi-admin/src/main/resources/application.yml
#修改为redis
host: redis
cd /root/RuoYi-Vue-master/ruoyi-admin/
mvn clean packages
5.2.将jar包制作为镜像
vim Dcoekrfile
FROM openjdk:8-jdk
WORKDIR /app
COPY target/ruoyi-admin.jar /app/ruoyi-admin.jar
CMD ["java", "-jar", "ruoyi-admin.jar"]
docker build -t ruoyi-admin:3.8.9 .
docker run -d --name ruoyi-admin \
--network ruoyi-net \
-p 8080:8080 \
ruoyi-admin
5.3.前端使用nginx容器运行
#需要修改/etc/nginx/nginx.conf将127.0.0.1改为后端容器名称ruoyi-admin
proxy_pass http://ruoyi-admin:8080/
docker run -d --name nginx \
--network ruoyi-net \
-p 80:80 \
-v /root/RuoYi-Vue-master/ruoyi-ui/dist:/usr/share/nginx/html \
-v /etc/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
nginx
5.4.启动mysql
docker run -d --name mysql \
--network ruoyi-net \
-v /usr/local/mysql/data:/usr/local/mysql/data \
-v /etc/my.cnf:/etc/my.cnf \
-e MYSQL_ROOT_PASSWORD=ruoyi123 \
-p 3306:3306 \
mysql:8.0
#将源码中的sql文件导入容器的数据库中
cd /root/RuoYi-Vue-master/sql
[root@fan sql]# ls
quartz.sql ry_20240629.sql
#先复制到容器的/tmp目录下
docker cp quartz.sql mysql:/tmp/quartz.sql
docker cp ry_20240629.sql mysql:/tmp/ry_20240629.sql
#创建数据库
docker exec -it mysql /bin/bash
mysql -u root -p
CREATE DATABASE `ry-vue`;
#确保所有主机可以连接,修改root用户的权限
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ruoyi123';
FLUSH PRIVILEGES;
#执行sql导入命令
mysql -u root -p ry-vue < /tmp/ry_20240629.sql
mysql -u root -p ry-vue < /tmp/quartz.sql
5.5.启动redis
docker run -d --name redis \
--network ruoyi-net \
-p 6379:6379 \
-v /usr/local/redis/redis.conf:/usr/local/redis/redis.conf \
redis:6.0