目录
一. 环境准备
主机名 | IP | 系统 | 软件版本 | 配置信息 |
localhost | 192.168.226.25 | Rocky_linux9.4 | git version 2.43.5 Docker version 27.0.3 |
4核8G,磁盘30G |
准备一台虚拟机,进行时间同步,关闭防火墙和selinux,下载docker和git可参考我的历史博文,这里不在赘述。
项目官方仓库:RuoYi-Vue: 🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
项目官方文档:环境部署 | RuoYi
拉取代码仓库
[root@localhost ~]# git clone https://gitee.com/y_project/RuoYi-Vue.git
二. 制作一个jdk8u202环境的镜像
Java Archive Downloads - Java SE 8 | Oracle 台灣
上传至虚拟机
[root@localhost ~]# mkdir java
[root@localhost ~]# ll ./java
total 174240
-rw-r--r-- 1 root root 178418154 Jul 30 15:49 jdk-8u202-linux-x64.rpm
拉取rockylinux9.3作为基础镜像
[root@localhost ~]# docker pull centos:centos7.9.2009
编写Dockerfile文件,制作java环境的系统镜像
[root@localhost ~]# vim /root/java/Dockerfile
FROM centos:centos7.9.2009
LABEL \
version="1.0" \
description="jdk环境" \
maintainer="zzdict@gmail.com"
WORKDIR /root/
COPY jdk-8u202-linux-x64.rpm /root/
COPY ruoyi-admin.jar /root/
# 安装 JDK
RUN yum install -y \
jdk-8u202-linux-x64.rpm && \
yum clean all && \
rm -rf /var/cache/dnf
COPY ./start.sh /
CMD [ "sh", "/start.sh" ]
[root@localhost ~]# vim /root/java/start.sh
#!/bin/bash
sleep 10 # 等待数据库初始化
ulimit -n 102400 # 解决了内存溢出
java -jar ./ruoyi-admin.jar # 启动java项目,端口是8080
三. 制作nginx镜像
自己配置一个nginx配置文件
[root@localhost ~]# mkdir ./nginx
[root@localhost ~]# vim ./nginx/default.conf
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_pass http://java.host:8080/; #注意这里的写法
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
拉取nginx镜像
[root@localhost ~]# docker pull nginx:1.27.0-perl
重新覆盖编写Dockerfile
[root@localhost ~]# vim ./nginx/Dockerfile
FROM nginx:1.27.0-perl
LABEL \
version="1.0" \
description="nginx环境" \
maintainer="zzdict@gmail.com"
# 将 dist 目录复制到 /usr/share/nginx/ 目录
COPY ./dist /usr/share/nginx/dist
# 将 default.conf 文件复制到 nginx 的配置目录
COPY ./default.conf /etc/nginx/conf.d/default.conf
# 保持 Nginx 前台运行
CMD ["nginx", "-g", "daemon off;"]
四. 对项目文件做修改
修改地址为域名
[root@localhost ~]# cd /root/RuoYi-Vue
[root@localhost RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application.yml
# 修改redis配置信息
redis:
# 地址
host: ruoyi-redis
# 端口,默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password:
# 连接超时时间
timeout: 10s
lettuce:
修改密码和域名
[root@localhost RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application-druid.yml
# 主库数据源
master:
url: jdbc:mysql://ruoyi-db:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: lzz2578+
# 从库数据源
# 解决了项目菜单乱码的问题
[root@localhost RuoYi-Vue]# vim sql/ry_20240629.sql
SET NAMES "utf8";
五. 项目打包
1. 前端打包
[root@localhost ~]# cd /root/RuoYi-Vue/ruoyi-ui
[root@localhost ruoyi-ui]# docker run --rm -v $(pwd):/opt -w /opt node:14 bash -c "npm install --registry=https://registry.npmmirror.com && npm run build:prod"
打包完成后,在当前目录下生成了两个目录,一个文件,同时在挂载的/opt目录生成了package-lock.json文件
[root@localhost ruoyi-ui]# ll
total 720
-rw-r--r-- 1 root root 537 Jul 30 15:00 README.md
-rw-r--r-- 1 root root 474 Jul 30 15:00 babel.config.js
drwxr-xr-x 2 root root 61 Jul 30 15:00 bin
drwxr-xr-x 2 root root 22 Jul 30 15:00 build
drwxr-xr-x 4 root root 108 Jul 30 20:17 dist
drwxr-xr-x 962 root root 28672 Jul 30 20:16 node_modules
-rw-r--r-- 1 root root 666989 Jul 30 20:16 package-lock.json
-rw-r--r-- 1 root root 2222 Jul 30 15:00 package.json
drwxr-xr-x 3 root root 73 Jul 30 15:00 public
drwxr-xr-x 12 root root 4096 Jul 30 15:00 src
-rw-r--r-- 1 root root 4934 Jul 30 15:00 vue.config.js
[root@localhost ruoyi-ui]# ll /opt
total 4
-rw-r--r-- 1 root root 27 Jul 30 20:11 package-lock.json
dist
目录包含了构建后生成的静态文件。node_modules
目录包含了安装的 npm 包。package-lock.json
用于管理项目的依赖项和版本信息。
将前端打包好的目录拷贝到/root/nginx的配置目录中
[root@localhost ~]# cp -r /root/RuoYi-Vue/ruoyi-ui/dist /root/nginx/
2. 后端打包
[root@localhost ruoyi-ui]# cd /root/RuoYi-Vue/
[root@localhost RuoYi-Vue]# docker run --rm -v $(pwd):/opt -v ~/.m2:/root/.m2 -w /opt maven:3.8.6-jdk-8 mvn clean package
#将代码映射到容器的/opt目录里,并指定/opt为工作目录,.m2是将打包所用到的缓存 Maven 下载的依赖项和插件映射出来。
ruoyi-admin.jar就是打好的jar包
[root@localhost RuoYi-Vue]# ll ./ruoyi-admin/target/
total 81636
drwxr-xr-x 6 root root 149 Jul 30 20:43 classes
drwxr-xr-x 3 root root 25 Jul 30 20:43 generated-sources
drwxr-xr-x 2 root root 28 Jul 30 20:43 maven-archiver
drwxr-xr-x 3 root root 35 Jul 30 20:43 maven-status
-rw-r--r-- 1 root root 83531444 Jul 30 20:44 ruoyi-admin.jar
-rw-r--r-- 1 root root 61170 Jul 30 20:43 ruoyi-admin.jar.original
# 将java包拷贝到java的配置目录里
[root@localhost ~]# cp /root/RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar /root/java/
六. 编写docker-compose.yml
[root@localhost ~]# vim ./docker-compose.yml
version: '3.8' # 根据实际需要选择合适的版本
services:
# Redis 服务
ruoyi-redis:
image: redis
container_name: ruoyi-redis
# MySQL 服务
ruoyi-db:
image: mysql:8.0
container_name: ruoyi-db
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
environment:
MYSQL_ROOT_PASSWORD: lzz2578+
MYSQL_DATABASE: ry-vue
volumes:
- ./RuoYi-Vue/sql:/docker-entrypoint-initdb.d:ro
- ./ruoyi-db:/var/lib/mysql:rw
# Java 后端服务
ruoyi-java:
build:
context: ./java # 使用 java 目录中的 Dockerfile
container_name: ruoyi-java
ports:
- 8080:8080 # 公开端口,供 Nginx 代理访问
links:
- ruoyi-redis:redis.server
- ruoyi-db:mysql.server
depends_on:
- ruoyi-db
- ruoyi-redis
# Nginx 服务
ruoyi-nginx:
build:
context: ./nginx # 使用 nginx 目录中的 Dockerfile
container_name: ruoyi-nginx
ports:
- 80:80 # 将宿主机的 80 端口映射到容器的 80 端口
links:
- ruoyi-java:java.host # 配置 Nginx 代理到 Java 服务
depends_on:
- ruoyi-java
运行
[root@localhost ~]# docker compose up --build
浏览器访问当前主机ip地址:http://192.168.226.25/
打开页面默认用户名密码已经自动填充了,如果没有自动填充账户密码的话
官方提供默认用户:admin 默认密码: admin123
以下为在本机环境中,容器实际使用资源情况
[root@localhost ~]# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
a2a268cec6af ruoyi-nginx 0.00% 5.793MiB / 7.474GiB 0.08% 296kB / 8.29MB 16.4kB / 12.3kB 6
eed6619c156c ruoyi-java 0.15% 746.8MiB / 7.474GiB 9.76% 80.7kB / 92kB 0B / 8.22MB 144
d86aeb131284 ruoyi-redis 0.14% 7.898MiB / 7.474GiB 0.10% 25.6kB / 13.8kB 0B / 22.5kB 5
448851bf8125 ruoyi-db 0.29% 391MiB / 7.474GiB 5.11% 29.8kB / 52.1kB 1.15MB / 32.5MB 42