惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 尹正杰

6 5 4 3 2 1 sts部署kafka sts部署MySQL主从同步 windows极速部署Openclaw实战篇 K8S的StatefulSet控制器应用案例之MySQL主从同步实战 k8s底层基于不同运行时集成harbor企业级私有仓库实战 二进制K8S集群附加组件部署及CNI网络插件切换实战 二进制部署K8S 1.35.0+最新版实战案例 etcd高可用集群部署及K8S周期性备份数据实战 k8s集群基于Flannel网络插件部署凡人修仙传 k8s集群基于Calico网络插件部署凡人修仙传 ElasticSEearch 9.X环境部署 K8S Vertical Pod Autoscaler(VPA)实战案例 Prometheus监控自定义程序指标
基于Docker实现《若依》服务业务容器化实战篇
尹正杰 · 2025-11-26 · via 博客园 - 尹正杰

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.手动部署若依前后端分离版本

1.若依项目介绍

若依可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。

若依是一套全部开源的快速开发平台,毫无保留给个人及企业免费使用。

RuoYi-Vue 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Security、MyBatis、Jwt、Vue),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、通知公告、代码生成等。在线定时任务配置,支持集群,支持多数据源,支持分布式事务等。

参考链接:
	https://doc.ruoyi.vip/ruoyi-vue/

2.安装MySQL并初始化表结构

	1.克隆代码
[root@elk91 projects]# git clone https://gitee.com/y_project/RuoYi-Vue.git
Cloning into 'RuoYi-Vue'...
remote: Enumerating objects: 21151, done.
remote: Counting objects: 100% (743/743), done.
remote: Compressing objects: 100% (615/615), done.
remote: Total 21151 (delta 318), reused 51 (delta 15), pack-reused 20408 (from 1)
Receiving objects: 100% (21151/21151), 4.60 MiB | 3.55 MiB/s, done.
Resolving deltas: 100% (10763/10763), done.
[root@elk91 projects]# 


	2.部署MySQL
[root@elk91 ~]# docker container run \
  -e MYSQL_ALLOW_EMPTY_PASSWORD="yes" \
  -d \
  --name mysql-server \
  -e MYSQL_DATABASE="ry-vue" \
  -e MYSQL_USER="linux102" \
  -e MYSQL_PASSWORD="oldboyedu" \
  --network host \
  mysql:8.0.36-oracle \
  --character-set-server=utf8mb4 \
  --collation-server=utf8mb4_unicode_ci \
  --default-authentication-plugin=mysql_native_password
	
[root@elk91 projects]# docker ps -l
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS     NAMES
a81583c640b2   mysql:8.0.36-oracle   "docker-entrypoint.s…"   3 seconds ago   Up 2 seconds             mysql-server
[root@elk91 projects]#
[root@elk91 projects]# ss -ntl | grep 3306
LISTEN 0      70                 *:33060            *:*          
LISTEN 0      151                *:3306             *:*          
[root@elk91 projects]# 
	
	3.导入SQL语句
[root@elk91 projects]# find RuoYi-Vue/ -name *.sql
RuoYi-Vue/sql/quartz.sql
RuoYi-Vue/sql/ry_20260320.sql
[root@elk91 projects]# 
[root@elk91 projects]# ll RuoYi-Vue/sql/
total 80
drwxr-xr-x  2 root root  4096 Mar 26 09:07 ./
drwxr-xr-x 14 root root  4096 Mar 26 09:07 ../
-rw-r--r--  1 root root 11985 Mar 26 09:07 quartz.sql
-rw-r--r--  1 root root 61374 Mar 26 09:07 ry_20260320.sql
[root@elk91 projects]# 
[root@elk91 projects]# docker cp RuoYi-Vue/sql mysql-server:/
[root@elk91 projects]# 
[root@elk91 projects]# docker exec -it mysql-server bash
bash-4.4# 
bash-4.4# cat > /etc/my.cnf <<EOF
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
character_set_client=utf8mb4
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci

[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
default-character-set=utf8mb4
EOF

bash-4.4# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 26
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | utf8mb4                        |
| character_set_connection | utf8mb4                        |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | utf8mb4                        |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.00 sec)

mysql> 
bash-4.4# 
bash-4.4# ls /sql/
quartz.sql  ry_20260320.sql
bash-4.4# 
bash-4.4# mysql ry-vue < /sql/quartz.sql 
bash-4.4# 
bash-4.4# mysql ry-vue < /sql/ry_20260320.sql 
bash-4.4# 
bash-4.4# mysql ry-vue
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.36 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> SHOW TABLES;
+--------------------------+
| Tables_in_ry-vue         |
+--------------------------+
| QRTZ_BLOB_TRIGGERS       |
| QRTZ_CALENDARS           |
| QRTZ_CRON_TRIGGERS       |
| QRTZ_FIRED_TRIGGERS      |
| QRTZ_JOB_DETAILS         |
| QRTZ_LOCKS               |
| QRTZ_PAUSED_TRIGGER_GRPS |
| QRTZ_SCHEDULER_STATE     |
| QRTZ_SIMPLE_TRIGGERS     |
| QRTZ_SIMPROP_TRIGGERS    |
| QRTZ_TRIGGERS            |
| gen_table                |
| gen_table_column         |
| sys_config               |
| sys_dept                 |
| sys_dict_data            |
| sys_dict_type            |
| sys_job                  |
| sys_job_log              |
| sys_logininfor           |
| sys_menu                 |
| sys_notice               |
| sys_notice_read          |
| sys_oper_log             |
| sys_post                 |
| sys_role                 |
| sys_role_dept            |
| sys_role_menu            |
| sys_user                 |
| sys_user_post            |
| sys_user_role            |
+--------------------------+
31 rows in set (0.00 sec)

mysql> 

3.maven打包若依

	1.修改配置文件指定数据库信息
[root@elk91 projects]# vim RuoYi-Vue/ruoyi-admin/src/main/resources/application-druid.yml 
...
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: 数据库地址
                username: 数据库账号
                password: 数据库密码
                
                
                
 	2.部署maven
wget https://dlcdn.apache.org/maven/maven-3/3.9.14/binaries/apache-maven-3.9.14-bin.tar.gz

SVIP:
[root@elk91 projects]# wget http://192.168.14.253/Resources/Docker/Projects/RuoYi/apache-maven-3.9.14-bin.tar.gz


[root@elk91 projects]# tar xf apache-maven-3.9.14-bin.tar.gz  -C /usr/local/
[root@elk91 projects]# 
[root@elk91 projects]# cat /etc/profile.d/maven.sh
#!/bin/bash


export MAVEN_HOME=/usr/local/apache-maven-3.9.14
export PATH=$PATH:$MAVEN_HOME/bin
[root@elk91 projects]# 
[root@elk91 projects]# source /etc/profile.d/maven.sh
[root@elk91 projects]# 
[root@elk91 projects]# mvn -v
Apache Maven 3.9.14 (996c630dbc656c76214ce58821dcc58be960875b)
Maven home: /usr/local/apache-maven-3.9.14
Java version: 22.0.2, vendor: Oracle Corporation, runtime: /usr/share/elasticsearch/jdk
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-173-generic", arch: "amd64", family: "unix"
[root@elk91 projects]# 


	3.打包编译
[root@elk91 projects]# cd RuoYi-Vue/
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# mvn clean package -Dmaven.test.skip=true
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ruoyi 3.9.2:
[INFO] 
[INFO] ruoyi .............................................. SUCCESS [  0.621 s]
[INFO] ruoyi-common ....................................... SUCCESS [ 22.057 s]
[INFO] ruoyi-system ....................................... SUCCESS [  0.585 s]
[INFO] ruoyi-framework .................................... SUCCESS [  4.145 s]
[INFO] ruoyi-quartz ....................................... SUCCESS [  0.625 s]
[INFO] ruoyi-generator .................................... SUCCESS [  0.504 s]
[INFO] ruoyi-admin ........................................ SUCCESS [  3.855 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  35.056 s
[INFO] Finished at: 2026-03-26T09:29:57+08:00
[INFO] ------------------------------------------------------------------------
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# ll ruoyi-admin/target/
total 87656
drwxr-xr-x 6 root root     4096 Mar 26 09:29 ./
drwxr-xr-x 4 root root     4096 Mar 26 09:29 ../
drwxr-xr-x 6 root root     4096 Mar 26 09:29 classes/
drwxr-xr-x 3 root root     4096 Mar 26 09:29 generated-sources/
drwxr-xr-x 2 root root     4096 Mar 26 09:29 maven-archiver/
drwxr-xr-x 3 root root     4096 Mar 26 09:29 maven-status/
-rw-r--r-- 1 root root 89657665 Mar 26 09:29 ruoyi-admin.jar
-rw-r--r-- 1 root root    65748 Mar 26 09:29 ruoyi-admin.jar.original
[root@elk91 RuoYi-Vue]# 

4.部署Redis服务

	1.部署redis
[root@elk91 projects]# docker container run -d \
	--name redis-server \
	--network host \
	redis:7.2.8-alpine3.21
	
	
	2.查看redis的监听端口
[root@elk91 projects]# docker ps -l
CONTAINER ID   IMAGE                    COMMAND                  CREATED         STATUS         PORTS     NAMES
b7711cd69de5   redis:7.2.8-alpine3.21   "docker-entrypoint.s…"   4 seconds ago   Up 4 seconds             redis-server
[root@elk91 projects]# 
[root@elk91 projects]# ss -ntl | grep 6379
LISTEN 0      511          0.0.0.0:6379       0.0.0.0:*          
LISTEN 0      511             [::]:6379          [::]:*          
[root@elk91 projects]# 

5.运行若依后台服务

	1.配置JDK环境
[root@elk91 RuoYi-Vue]# cat /etc/profile.d/tomcat.sh 
#!/bin/bash

#export JAVA_HOME=/usr/share/elasticsearch/jdk
#export TOMCAT_HOME=/usr/local/apache-tomcat-11.0.13
#export PATH=$PATH:$JAVA_HOME/bin:$TOMCAT_HOME/bin
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# java --version
openjdk 22.0.2 2024-07-16
OpenJDK Runtime Environment (build 22.0.2+9-70)
OpenJDK 64-Bit Server VM (build 22.0.2+9-70, mixed mode, sharing)
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# 


	2.启动若依服务
[root@elk91 RuoYi-Vue]# java -jar ruoyi-admin/target/ruoyi-admin.jar 
...
(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  
 .-------.       ____     __        
 |  _ _   \      \   \   /  /    
 | ( ' )  |       \  _. /  '       
 |(_ o _) /        _( )_ .'         
 | (_,_).' __  ___(_ o _)'          
 |  |\ \  |  ||   |(_,_)'         
 |  | \ `'   /|   `-'  /           
 |  |  \    /  \      /           
 ''-'   `'-'    `-..-'              

	

6.部署前台服务

img

	1.下载nodejs
wget https://nodejs.org/dist/v24.14.1/node-v24.14.1-linux-x64.tar.xz

SVIP:
[root@elk91 projects]# wget http://192.168.14.253/Resources/Docker/Projects/RuoYi/node-v24.14.1-linux-x64.tar.xz



	2.安装nodejs
[root@elk91 projects]# tar xf node-v24.14.1-linux-x64.tar.xz  -C /usr/local/
[root@elk91 projects]# cat /etc/profile.d/nodejs.sh
#!/bin/bash

export NODEJS_HOME=/usr/local/node-v24.14.1-linux-x64
export PATH=$PATH:$NODEJS_HOME/bin
[root@elk91 projects]# 
[root@elk91 projects]# source /etc/profile.d/nodejs.sh
[root@elk91 projects]# 
[root@elk91 projects]# node -v
v24.14.1
[root@elk91 projects]# 
[root@elk91 projects]# npm -v
11.11.0
[root@elk91 projects]# 


	3.安装依赖并运行服务
[root@elk91 projects]# cd RuoYi-Vue/ruoyi-ui/
[root@elk91 ruoyi-ui]# 
[root@elk91 ruoyi-ui]# npm install --registry=https://registry.npmmirror.com
[root@elk91 ruoyi-ui]# 
[root@elk91 ruoyi-ui]# echo $?
0
[root@elk91 ruoyi-ui]# 


	4.运行项目
[root@elk91 ruoyi-ui]# npm run dev
...
 DONE  Compiled successfully in 20479ms                                                                                      9:45:29 AM


  App running at:
  - Local:   http://localhost:80/ 
  - Network: http://10.0.0.91:80/

  Note that the development build is not optimized.
  To create a production build, run npm run build.


	5.访问webUI(如上图所示)
http://10.0.0.91:80/

二.若依项目容器化

1.后端容器化

	1.修改MySQL的配置文件
[root@elk91 RuoYi-Vue]# vim ruoyi-admin/src/main/resources/application-druid.yml 
...
# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driverClassName: com.mysql.cj.jdbc.Driver
        druid:
            # 主库数据源
            master:
                url: jdbc:mysql://mysql-server:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: admin
                password: yinzhengjie



	2.修改redis的配置文件
[root@elk91 RuoYi-Vue]# vim  ruoyi-admin/src/main/resources/application.yml 
...
# Spring配置
spring:
  ...
  data:
    # redis 配置
    redis:
      # 地址
      host: redis-server
      # 端口,默认为6379
      port: 6379
      # 数据库索引
      database: 0
  
  
  	3.清理环境
[root@elk91 RuoYi-Vue]# mvn clean

	4.打包生成jar包文件
[root@elk91 RuoYi-Vue]# mvn clean package -Dmaven.test.skip=true
[root@elk91 RuoYi-Vue]# ll ruoyi-admin/target/
total 87652
drwxr-xr-x 6 root root     4096 Mar 26 11:54 ./
drwxr-xr-x 4 root root     4096 Mar 26 11:54 ../
drwxr-xr-x 6 root root     4096 Mar 26 11:54 classes/
drwxr-xr-x 3 root root     4096 Mar 26 11:54 generated-sources/
drwxr-xr-x 2 root root     4096 Mar 26 11:54 maven-archiver/
drwxr-xr-x 3 root root     4096 Mar 26 11:54 maven-status/
-rw-r--r-- 1 root root 89657672 Mar 26 11:54 ruoyi-admin.jar
-rw-r--r-- 1 root root    65755 Mar 26 11:54 ruoyi-admin.jar.original
[root@elk91 RuoYi-Vue]# 


	5.编写Dockerfile
[root@elk91 RuoYi-Vue]# cp -r /usr/share/elasticsearch/jdk/  .
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# cat  Dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat:9.0.87-jdk17

MAINTAINER JasonYin

LABEL auther=yinzhengjie \
	blog=https://www.cnblogs.com/yinzhengjie

COPY ruoyi-admin/target/ruoyi-admin.jar /

EXPOSE 8080

CMD ["java" ,"-jar", "/ruoyi-admin.jar" ]
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# docker build -t ruoyi-backend:v0.1 .


	6.启动服务
[root@elk91 RuoYi-Vue]# grep server /etc/hosts
127.0.0.1 localhost  mysql-server  redis-server
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# docker run -d --name ruoyi-server  --network host ruoyi-backend:v0.1 
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# docker ps -l
CONTAINER ID   IMAGE        COMMAND                  CREATED              STATUS          PORTS     NAMES
02b9811bf520   ruoyi-backend:v0.1   "/jdk/bin/java -jar …"   About a minute ago   Up 15 seconds             ruoyi-server
[root@elk91 RuoYi-Vue]# 

	7.查看日志(如上图所示)
[root@elk91 RuoYi-Vue]# docker logs ruoyi-server 
...
 .-------.       ____     __        
 |  _ _   \      \   \   /  /    
 | ( ' )  |       \  _. /  '       
 |(_ o _) /        _( )_ .'         
 | (_,_).' __  ___(_ o _)'          
 |  |\ \  |  ||   |(_,_)'         
 |  | \ `'   /|   `-'  /           
 |  |  \    /  \      /           
 ''-'   `'-'    `-..-'              
[root@elk91 RuoYi-Vue]# 
[root@elk91 RuoYi-Vue]# ss -ntl | grep 8080
LISTEN 0      1000               *:8080             *:*          
[root@elk91 RuoYi-Vue]# 

2.前端容器化

	1.打包前端代码
[root@elk91 ruoyi-ui]# npm run build:prod
[root@elk91 ruoyi-ui]# ll dist/
total 56
drwxr-xr-x 5 root root  4096 Mar 26 16:14 ./
drwxr-xr-x 8 root root  4096 Mar 26 16:14 ../
-rw-r--r-- 1 root root  5663 Mar 26 16:14 favicon.ico
drwxr-xr-x 2 root root  4096 Mar 26 16:14 html/
-rw-r--r-- 1 root root 12759 Mar 26 16:14 index.html
-rw-r--r-- 1 root root  4206 Mar 26 16:14 index.html.gz
-rw-r--r-- 1 root root    26 Mar 26 16:14 robots.txt
drwxr-xr-x 6 root root  4096 Mar 26 16:14 static/
drwxr-xr-x 3 root root  4096 Mar 26 16:14 styles/
[root@elk91 ruoyi-ui]# 

	2.编写nginx的配置文件
[root@elk91 ruoyi-ui]# cat nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;
		charset utf-8;

		location / {
            root   /usr/share/nginx/html;
			try_files $uri $uri/ /index.html;
            index  index.html index.htm;
        }
		
		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/;
			proxy_pass http://ruoyi-server:8080/;			
		}

		# springdoc proxy
		location ~ ^/v3/api-docs/(.*) {
			# proxy_pass http://localhost:8080/v3/api-docs/$1;
			proxy_pass http://ruoyi-server:8080/v3/api-docs/$1;
		}

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}
[root@elk91 ruoyi-ui]# 


	3.编写Dockerfile
[root@elk91 ruoyi-ui]# cat Dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1


MAINTAINER JasonYin

LABEL auther=yinzhengjie \
	blog=https://www.cnblogs.com/yinzhengjie

EXPOSE 80

RUN rm -rf /usr/share/nginx/html/*

WORKDIR /usr/share/nginx/html/

COPY dist/ /usr/share/nginx/html

COPY nginx.conf /etc/nginx/nginx.conf
[root@elk91 ruoyi-ui]# 




	3.编译
[root@elk91 ruoyi-ui]# docker build -t ruoyi-frontend:v0.1  .

	4.启动容器
[root@elk91 ruoyi-ui]# docker run -d --name ruoyi-ui --network host ruoyi-frontend:v0.1 
e7fc33ed5b819b577e64d59404c218ae7c1cfea2d6eb9b83a12814b8393d886c
[root@elk91 ruoyi-ui]# 
[root@elk91 ruoyi-ui]# docker ps -l
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS        PORTS     NAMES
e7fc33ed5b81   ruoyi-frontend:v0.1   "docker-entrypoint.s…"   2 seconds ago   Up 1 second             ruoyi-ui
[root@elk91 ruoyi-ui]# 
[root@elk91 ruoyi-ui]# ss -ntl | grep 80
LISTEN 0      511          0.0.0.0:80         0.0.0.0:*          
LISTEN 0      1000               *:8080             *:*          
[root@elk91 ruoyi-ui]# 
[root@elk91 ruoyi-ui]# docker exec -it ruoyi-ui ps -ef
PID   USER     TIME  COMMAND
    1 root      0:00 nginx: master process nginx -g daemon off;
   31 nginx     0:00 nginx: worker process
   32 root      0:00 ps -ef
[root@elk91 ruoyi-ui]# 


	5.访问webUI
http://10.0.0.91/

3.docker-compose一键启动若依服务

	1.准备MySQL的配置文件
[root@elk91 projects]# cat my.cnf 
[mysqld]
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci

[client]
socket=/var/run/mysqld/mysqld.sock
!includedir /etc/mysql/conf.d/
default-character-set=utf8mb4
[root@elk91 projects]# 

	2.编写docker-compose文件
[root@elk91 projects]# cat docker-compose.yaml 
services:
  mysql-server:
    image: mysql:8.0.36-oracle
    container_name: mysql-server
    healthcheck:
      test: ["CMD", "mysqladmin", "ping"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 30s
      start_interval: 3s
    ports:
      - "3306:3306"
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
      MYSQL_DATABASE: "ry-vue"
      MYSQL_USER: "linux102"
      MYSQL_PASSWORD: "oldboyedu"
    command: ["--character-set-server=utf8", "--collation-server=utf8_bin", "--default-authentication-plugin=mysql_native_password"]
    networks:    
    - ruoyi
    volumes:
    - /oldboyedu/projects/RuoYi-Vue/sql/:/docker-entrypoint-initdb.d
    - /oldboyedu/projects/my.cnf:/etc/my.cnf:ro

  redis-server:
    image: redis:7.2.8-alpine3.21
    container_name: redis-server
    healthcheck:
      test: ["CMD", "redis-benchmark", "-h","127.0.0.1","-p", "6379","-n", "1", "-c","2"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 30s
      start_interval: 3s
    ports:
    - "6379:6379"
    networks:    
    - ruoyi


  ruoyi-server:
    image: ruoyi-backend:v0.1
    container_name: ruoyi-server
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 5s
      start_interval: 1s
    depends_on:
      mysql-server:
        condition: service_healthy
      redis-server:
        condition: service_healthy
    ports:
    - "8080:8080"
    networks:    
    - ruoyi


  ruoyi-ui:
    image: ruoyi-frontend:v0.1
    depends_on:
      - ruoyi-server
    container_name: ruoyi-ui
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 5s
      start_interval: 1s
    ports:
    - "80:80"
    networks:    
    - ruoyi

networks:
  ruoyi:
    name: mysql-net
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          ip_range: 172.28.100.0/24
          gateway: 172.28.100.254
[root@elk91 projects]# 

三.部署过程中可能遇到的错误

1.The JAVA_HOME environment ....

QQ_1767497414250

	报错信息:
[root@master231 ~]# mvn --version
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
[root@master231 ~]# 

	
	错误分析:
缺少JAVA_HOME环境变量。


	解决方案:
安装JDK环境。

2.03:57:38.164 [Druid-ConnectionPool-Create-2005706991] ERROR c.a.d.p.DruidDataSource - [run,2795] - create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01

QQ_1767499115774

	报错信息:
03:57:38.164 [Druid-ConnectionPool-Create-2005706991] ERROR c.a.d.p.DruidDataSource - [run,2795] - create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/ry?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8, errorCode 0, state 08S01
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:175)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825)
	at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:446)
	at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:239)
	at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:188)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:132)
	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:244)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:126)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1695)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1811)
	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:2793)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at jdk.internal.reflect.GeneratedConstructorAccessor41.newInstance(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:62)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
	at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:150)
	at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:166)
	at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)
	at com.mysql.cj.NativeSession.connect(NativeSession.java:121)
	at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:945)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:815)
	... 9 common frames omitted
Caused by: java.net.ConnectException: Connection refused
	at java.base/sun.nio.ch.Net.pollConnect(Native Method)
	at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
	at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542)
	at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
	at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
	at java.base/java.net.Socket.connect(Socket.java:633)
	at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:153)
	at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
	... 12 common frames omitted


	错误分析
链接数据库失败。


	解决方案:
先启动数据库。

3.Error querying database. Cause: java.sql.SQLSyntaxErrorException: Table 'ry.sys_config' doesn't exist

	错误信息:
04:10:16.347 [main] ERROR o.s.b.SpringApplication - [reportFailure,870] - Application run failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilterFactoryBean' defined in class path resource [com/ruoyi/framework/config/ShiroConfig.class]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'authorizationAttributeSourceAdvisor' defined in class path resource [com/ruoyi/framework/config/ShiroConfig.class]: Unsatisfied dependency expressed through method 'authorizationAttributeSourceAdvisor' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'securityManager' defined in class path resource [com/ruoyi/framework/config/ShiroConfig.class]: Unsatisfied dependency expressed through method 'securityManager' parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userRealm': Unsatisfied dependency expressed through field 'loginService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysLoginService': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'sysUserServiceImpl': Unsatisfied dependency expressed through field 'configService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sysConfigServiceImpl': Invocation of init method failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: 
### Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Table 'ry.sys_config' doesn't exist
### The error may exist in URL [jar:file:/root/RuoYi/ruoyi-admin/target/ruoyi-admin.jar!/BOOT-INF/lib/ruoyi-system-4.8.2.jar!/mapper/system/SysConfigMapper.xml]
### The error may involve com.ruoyi.system.mapper.SysConfigMapper.selectConfigList-Inline
### The error occurred while setting parameters
### SQL: select config_id, config_name, config_key, config_value, config_type, create_by, create_time, update_by, update_time, remark    from sys_config
### Cause: java.sql.SQLSyntaxErrorException: Table 'ry.sys_config' doesn't exist
; bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException: Table 'ry.sys_config' doesn't exist
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:537)
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:214)
	at org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:270)
	at org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:773)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:575)
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145)
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:453)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:343)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1370)
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1359)
	at com.ruoyi.RuoYiApplication.main(RuoYiApplication.java:18)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
	...


	错误分析:
缺少表空间信息。

	解决方案:
导入数据库信息。

4.字符编码问题

QQ_1767513161857

	错误信息:
如上图所示。


	解决方案:
检查数据库的字符编码是否存在问题。使用"SHOW VARIABLES LIKE 'character%';"命令查看验证。

5.Web server failed to start. Port 80 was already in use.

QQ_1767517313751

	错误信息
***************************
APPLICATION FAILED TO START
***************************

Description:

Web server failed to start. Port 80 was already in use.

Action:

Identify and stop the process that's listening on port 80 or configure this application to listen on another port.


	错误分析:
由于已经启动过服务,因此无需重复启动。


	解决方案:
检查是否重复启动若依服务。