目录
一. 环境准备
二. 制作一个jdk8u202环境的镜像
三. 制作nginx镜像
四. 对项目文件做修改
五. 项目打包
1. 前端打包
2. 后端打包
六. 编写docker-compose.yml
一. 环境准备
主机名 | 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.2009LABEL \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/dnfCOPY ./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-perlLABEL \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# 端口,默认为6379port: 6379# 数据库索引database: 0# 密码password:# 连接超时时间timeout: 10slettuce:
修改密码和域名
[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%2B8username: rootpassword: 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: rediscontainer_name: ruoyi-redis# MySQL 服务ruoyi-db:image: mysql:8.0container_name: ruoyi-dbcommand: >--character-set-server=utf8mb4--collation-server=utf8mb4_general_cienvironment:MYSQL_ROOT_PASSWORD: lzz2578+MYSQL_DATABASE: ry-vuevolumes:- ./RuoYi-Vue/sql:/docker-entrypoint-initdb.d:ro- ./ruoyi-db:/var/lib/mysql:rw# Java 后端服务ruoyi-java:build:context: ./java # 使用 java 目录中的 Dockerfilecontainer_name: ruoyi-javaports:- 8080:8080 # 公开端口,供 Nginx 代理访问links:- ruoyi-redis:redis.server- ruoyi-db:mysql.serverdepends_on:- ruoyi-db- ruoyi-redis# Nginx 服务ruoyi-nginx:build:context: ./nginx # 使用 nginx 目录中的 Dockerfilecontainer_name: ruoyi-nginxports:- 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