Docker Compose方式部署Ruoyi-前后端分离版本

embedded/2024/9/29 5:30:54/

目录

一. 环境准备

二. 制作一个jdk8u202环境的镜像

三. 制作nginx镜像

四. 对项目文件做修改

五. 项目打包

1. 前端打包 

2. 后端打包 

docker-compose.yml-toc" style="margin-left:0px;">六. 编写docker-compose.yml


一. 环境准备

 

主机名IP系统软件版本配置信息
localhost192.168.226.25Rocky_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" style="background-color:transparent;">六. 编写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

 

以下为在本机环境中,容器实际使用资源情况

[root@localhost ~]# docker statsCONTAINER 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

http://www.ppmy.cn/embedded/90844.html

相关文章

JaCoCo - Java Code Coverage Library

概述 JaCoCo(Java Code Coverage)是一个开源的Java代码覆盖率库。它可以帮助开发人员测量单元测试和集成测试中代码的覆盖情况。通过使用JaCoCo,开发人员可以识别哪些代码没有被测试覆盖,从而提高代码的质量和可靠性。 功能 1.…

单片机振荡电路晶振不起振原因分析与解决方法

晶发电子专注17年晶振生产,晶振产品包括石英晶体谐振器、振荡器、贴片晶振、32.768Khz时钟晶振、有源晶振、无源晶振等,产品性能稳定,品质过硬,价格好,交期快.国产晶振品牌您值得信赖的晶振供应商。 晶振在单片机系统中扮演着至关重要的角色,它为单片机提…

Unity3D 外部导入模型与内部自建模型的区别详解

前言 在Unity3D游戏开发过程中,模型是构建游戏世界的基础元素之一。这些模型可以通过Unity3D内部工具自建,也可以从外部3D建模软件导入。两者各有优劣,适用于不同的开发场景和需求。本文将从技术角度详细探讨Unity3D外部导入模型与内部自建模…

PYTHON专题-(6)python基础的一些高级特性

什么是切片? 取一个list或tuple的部分元素。 什么是迭代? 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是通过for ..…

前端:Vue学习 - 智慧商城项目

前端:Vue学习 - 智慧商城项目 1. vue组件库 > vant-ui2. postcss插件 > vw 适配3. 路由配置4. 登录页面静态布局4.1 封装axios实例访问验证码接口4.2 vant 组件 > 轻提示4.3 短信验证倒计时4.4 登录功能4.5 响应拦截器 > 统一处理错误4.6 登录权证信息存…

nginx负载均衡、java、tomcat装包

一、nginx 七层负载均衡 1、七层负载均衡基础配置 2、负载均衡状态 [rootserver]# vim /usr/local/nginx/conf/nginx.confworker_processes 1;event {worker_connections 1024;}http { # 七层负载均衡支持http、ftp协议include mime.types;default_type app…

pytest测试框架之http协议接口测试

1 接口测试 日常测试中接口测试是一项重要的工作,尤其是http协议的接口测试更加普遍,比如一些常用的测试框架或者工具(robotframework框架,testng框架,postman等)都支持http接口的测试,而这节内容主要介绍…

C语言宠物系统

功能有增加宠物信息,显示宠物信息,删除宠物信息,修改功能和排序功能,可以选择姓名排序,年龄排序,价格排序。进阶的功能有文件操作,动态内存开辟。。 test.c源文件 #include "Pet.h"v…