本地部署-单体若依

1. 若依项目介绍

若依是一款开源的后台管理系统,可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。

所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。

性别男,若依是给女儿取的名字(寓意:你若不离不弃,我必生死相依)

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

环境要求:

  • JDK >= 1.8

  • MySQL >= 5.7

  • Maven >= 3.0

官网链接:

https://ruoyi.vip/

gitee地址:

https://gitee.com/y_project/RuoYi

部署文档:

https://doc.ruoyi.vip/ruoyi/

2. 安装jdk环境

	1.下载jdk
[root@harbor250.fanxuxu.com ~]# wget http://192.168.21.253/Resources/Kubernetes/Project/DevOps/Jenkins/jdk-17_linux-x64_bin.tar.gz

	2.解压软件包
[root@harbor250.fanxuxu.com ~]# tar xf jdk-17_linux-x64_bin.tar.gz -C /usr/local/


	3.配置环境变量
[root@harbor250.fanxuxu.com ~]# cat /etc/profile.d/jdk.sh
#!/bin/bash

export JAVA_HOME=/usr/local/jdk-17.0.8
export PATH=$PATH:$JAVA_HOME/bin
[root@harbor250.fanxuxu.com ~]# 


	4.加载环境变量
[root@harbor250.fanxuxu.com ~]# source  /etc/profile.d/jdk.sh
[root@harbor250.fanxuxu.com ~]# 


	5.测试验证
[root@harbor250.fanxuxu.com ~]# java --version
java 17.0.8 2023-07-18 LTS
Java(TM) SE Runtime Environment (build 17.0.8+9-LTS-211)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.8+9-LTS-211, mixed mode, sharing)
[root@harbor250.fanxuxu.com ~]# 

3. 部署MySQL数据库

	1.准备证书文件
[root@harbor250.fanxuxu.com ~]# mkdir -p /etc/docker/certs.d/harbor250.fanxuxu.com/
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# cp /usr/local/harbor/certs/docker-client/* /etc/docker/certs.d/harbor250.fanxuxu.com/
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# ll /etc/docker/certs.d/harbor250.fanxuxu.com/
total 20
drwxr-xr-x 2 root root 4096 Jan 12 16:04 ./
drwxr-xr-x 3 root root 4096 Jan 12 16:04 ../
-rw-r--r-- 1 root root 2049 Jan 12 16:04 ca.crt
-rw-r--r-- 1 root root 2155 Jan 12 16:04 harbor250.fanxuxu.com.cert
-rw------- 1 root root 3272 Jan 12 16:04 harbor250.fanxuxu.com.key
[root@harbor250.fanxuxu.com ~]# 


	2.拉取MySQL镜像
[root@harbor250.fanxuxu.com ~]# docker pull harbor250.fanxuxu.com/fanxuxu-db/mysql:8.0.36-oracle


[root@harbor250.fanxuxu.com ~]# docker image ls harbor250.fanxuxu.com/fanxuxu-db/mysql
REPOSITORY                                   TAG             IMAGE ID       CREATED         SIZE
harbor250.fanxuxu.com/fanxuxu-db/mysql   8.0.36-oracle   f5f171121fa3   21 months ago   603MB
[root@harbor250.fanxuxu.com ~]# 


	3.运行MySQL服务
[root@harbor250.fanxuxu.com ~]# docker run -d \
	--name mysql-server \
	-e MYSQL_DATABASE=ruoyi \
	-e MYSQL_USER=linux101 \
	-e MYSQL_PASSWORD=fanxuxu \
	-e MYSQL_ALLOW_EMPTY_PASSWORD=yes \
	--network host \
	harbor250.fanxuxu.com/fanxuxu-db/mysql:8.0.36-oracle \
    --character-set-server=utf8mb4 \
    --collation-server=utf8mb4_unicode_ci \
    --default-authentication-plugin=mysql_native_password
    
    
    4.查看MySQL容器
[root@harbor250.fanxuxu.com ~]# docker ps -l
CONTAINER ID   IMAGE                                                      COMMAND                  CREATED         STATUS        PORTS     NAMES
4580d03735b7   harbor250.fanxuxu.com/fanxuxu-db/mysql:8.0.36-oracle   "docker-entrypoint.s…"   3 seconds ago   Up 1 second             mysql-server
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# ss -ntl | grep 3306
LISTEN 0      151                *:3306             *:*          
LISTEN 0      70                 *:33060            *:*          
[root@harbor250.fanxuxu.com ~]# 


    5.链接测试
[root@harbor250.fanxuxu.com ~]# docker exec -it mysql-server mysql ruoyi
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
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 DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| ruoyi              |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> 
mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| ruoyi      |
+------------+
1 row in set (0.00 sec)

mysql> 
mysql> SHOW TABLES;
Empty set (0.00 sec)

mysql> 
mysql> SELECT user,host,plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| linux101         | %         | mysql_native_password |
| root             | %         | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

mysql> 


	6.修改MySQL修改客户端链接的字符集
[root@harbor250.fanxuxu.com RuoYi]# docker exec -it mysql-server bash
bash-4.4# 
bash-4.4# mysql
mysql> SHOW VARIABLES LIKE '%character%';  # 查看默认的字符集
+--------------------------+--------------------------------+
| Variable_name            | Value                          |
+--------------------------+--------------------------------+
| character_set_client     | latin1                         |
| character_set_connection | latin1                         |
| character_set_database   | utf8mb4                        |
| character_set_filesystem | binary                         |
| character_set_results    | latin1                         |
| character_set_server     | utf8mb4                        |
| character_set_system     | utf8mb3                        |
| character_sets_dir       | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)

mysql> 
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-server=utf8mb4
collation-server=utf8mb4_unicode_ci

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

bash-4.4# 
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> 

4. 部署Maven软件

	1.下载maven
[root@harbor250.fanxuxu.com ~]# wget https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.tar.gz



	2.解压软件包
[root@harbor250.fanxuxu.com ~]# tar xf apache-maven-3.9.12-bin.tar.gz -C /usr/local/
[root@harbor250.fanxuxu.com ~]# 


	3.配置环境变量
[root@harbor250.fanxuxu.com ~]# cat /etc/profile.d/mvn.sh
#!/bin/bash

export MAVEN_HOME=/usr/local/apache-maven-3.9.12
export PATH=$PATH:$MAVEN_HOME/bin
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# source  /etc/profile.d/mvn.sh
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# mvn --version
Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1)
Maven home: /usr/local/apache-maven-3.9.12
Java version: 17.0.8, vendor: Oracle Corporation, runtime: /usr/local/jdk-17.0.8
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-119-generic", arch: "amd64", family: "unix"
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# 


	4.配置maven加速(可选)
[root@harbor250.fanxuxu.com ~]# vim  /usr/local/apache-maven-3.9.12/conf/settings.xml 
...
<mirrors>
    <mirror>
        <id>alimaven</id>
        <mirrorOf>central</mirrorOf>
        <name>aliyun maven</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>

5.编译若依服务运行测试

	1.拉取代码
[root@harbor250.fanxuxu.com ~]# git clone https://gitee.com/y_project/RuoYi.git


	2.修改数据库连接,编辑resources目录下的application-druid.yml
[root@harbor250.fanxuxu.com ~]# vim RuoYi/ruoyi-admin/src/main/resources/application-druid.yml 
  1 # 数据源配置
  2 spring:
  3     datasource:
  4         type: com.alibaba.druid.pool.DruidDataSource
  5         driverClassName: com.mysql.cj.jdbc.Driver
  6         druid:
  7             # 主库数据源
  8             master:
  9                 url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&us    eSSL=true&serverTimezone=GMT%2B8
 10                 username: linux101
 11                 password: fanxuxu    
 ...
 
 
 	3.修改服务器配置,编辑resources目录下的application.yml
[root@harbor250.fanxuxu.com ~]# vim RuoYi/ruoyi-admin/src/main/resources/application.yml 
...
 17 server:
 18   # 服务器的HTTP端口,默认为80
 19   port: 8080

 	
 	4.编译程序
[root@harbor250.fanxuxu.com ~]# cd RuoYi/
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# mvn clean package -Dmaven.test.skip=true
...
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for ruoyi 4.8.2:
[INFO] 
[INFO] ruoyi .............................................. SUCCESS [  0.810 s]
[INFO] ruoyi-common ....................................... SUCCESS [ 24.712 s]
[INFO] ruoyi-system ....................................... SUCCESS [  0.697 s]
[INFO] ruoyi-framework .................................... SUCCESS [  4.574 s]
[INFO] ruoyi-quartz ....................................... SUCCESS [  0.625 s]
[INFO] ruoyi-generator .................................... SUCCESS [  0.539 s]
[INFO] ruoyi-admin ........................................ SUCCESS [ 11.867 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  46.270 s  # 编译时间较短,46s左右。
[INFO] Finished at: 2026-01-12T16:28:22+08:00
[INFO] ------------------------------------------------------------------------
[root@harbor250.fanxuxu.com RuoYi]# 
 
	5.导入数据库
[root@harbor250.fanxuxu.com RuoYi]# docker cp sql/quartz.sql mysql-server:/
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# docker cp sql/ry_20250416.sql mysql-server:/
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# docker exec -it mysql-server bash
bash-4.4# ls -l /*.sql
-rw-r--r-- 1 root root 11985 Jan 12 08:20 /quartz.sql
-rw-r--r-- 1 root root 60934 Jan 12 08:20 /ry_20250416.sql
bash-4.4# 
bash-4.4# mysql ruoyi < /quartz.sql 
bash-4.4# mysql ruoyi < /ry_20250416.sql 
bash-4.4# 
bash-4.4# mysql ruoyi 
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 17
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_ruoyi          |
+--------------------------+
| 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_oper_log             |
| sys_post                 |
| sys_role                 |
| sys_role_dept            |
| sys_role_menu            |
| sys_user                 |
| sys_user_online          |
| sys_user_post            |
| sys_user_role            |
+--------------------------+
31 rows in set (0.00 sec)

mysql> 

	
	
	6.运行jar包文件
[root@harbor250.fanxuxu.com RuoYi]# java -jar ruoyi-admin/target/ruoyi-admin.jar 
Application Version: 4.8.2
Spring Boot Version: 2.5.15
////////////////////////////////////////////////////////////////////
//                          _ooOoo_                               //
//                         o8888888o                              //
//                         88" . "88                              //
//                         (| ^_^ |)                              //
//                         O\  =  /O                              //
//                      ____/`---'\____                           //
//                    .'  \\|     |//  `.                         //
//                   /  \\|||  :  |||//  \                        //
//                  /  _||||| -:- |||||-  \                       //
//                  |   | \\\  -  /// |   |                       //
//                  | \_|  ''\---/''  |   |                       //
//                  \  .-\__  `-`  ___/-. /                       //
//                ___`. .'  /--.--\  `. . ___                     //
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
//      ========`-.____`-.___\_____/___.-`____.-'========         //
//                           `=---='                              //
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
//             佛祖保佑       永不宕机      永无BUG               //
////////////////////////////////////////////////////////////////////
...
(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  
 .-------.       ____     __        
 |  _ _   \      \   \   /  /    
 | ( ' )  |       \  _. /  '       
 |(_ o _) /        _( )_ .'         
 | (_,_).' __  ___(_ o _)'          
 |  |\ \  |  ||   |(_,_)'         
 |  | \ `'   /|   `-'  /           
 |  |  \    /  \      /           
 ''-'   `'-'    `-..-'              

	7.访问测试【如上图所示】
[root@harbor250.fanxuxu.com ~]# ss -ntl | grep 8080
LISTEN 0      1000               *:8080             *:*          
[root@harbor250.fanxuxu.com ~]# 


温馨提示:
	登录成功后,查看效果如下图所示。

6.修复乱码问题(了解即可)

如上图所示,我们使用MySQL8.0+版本部署若依,发现存在乱码问题。


解决方案有两种:
	- A.降低数据库版本,比如"MySQL 5.7"或者"mariadb 10.6.22"。(在下面)
	- B.修改数据库的配置文件(my.cnf)客户端连接的字符集;

实操案例:
	1.安装mariadb服务
[root@harbor250.fanxuxu.com ~]# apt -y install mariadb-server
[root@harbor250.fanxuxu.com ~]# mariadb -V
mariadb  Ver 15.1 Distrib 10.6.22-MariaDB, for debian-linux-gnu (x86_64) using  EditLine wrapper
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# systemctl restart mariadb

[root@harbor250.fanxuxu.com ~]# ss -ntl | grep 3306
LISTEN 0      80         127.0.0.1:3306      0.0.0.0:*          
[root@harbor250.fanxuxu.com ~]# 


	2.创建用户并授权
[root@harbor250.fanxuxu.com ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 31
Server version: 10.6.22-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]> CREATE DATABASE ruoyi;
Query OK, 1 row affected (0.001 sec)

MariaDB [(none)]> 
MariaDB [(none)]> CREATE USER linux101;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 
MariaDB [(none)]> ALTER USER linux101 IDENTIFIED BY 'fanxuxu';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ruoyi.* TO linux101;
Query OK, 0 rows affected (0.001 sec)

MariaDB [(none)]> 
MariaDB [(none)]> SHOW GRANTS FOR linux101;
+-----------------------------------------------------+
| Grants for linux101@%                               |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `linux101`@`%`                |
| GRANT ALL PRIVILEGES ON `ruoyi`.* TO `linux101`@`%` |
+-----------------------------------------------------+
2 rows in set (0.000 sec)

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

MariaDB [(none)]> 


	3.导入数据库表结构
[root@harbor250.fanxuxu.com ~]# mysql ruoyi < RuoYi/sql/quartz.sql 
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# mysql ruoyi < RuoYi/sql/ry_20250416.sql 
[root@harbor250.fanxuxu.com ~]# 
[root@harbor250.fanxuxu.com ~]# mysql -e "SHOW TABLES FROM ruoyi"
+--------------------------+
| Tables_in_ruoyi          |
+--------------------------+
| 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_oper_log             |
| sys_post                 |
| sys_role                 |
| sys_role_dept            |
| sys_role_menu            |
| sys_user                 |
| sys_user_online          |
| sys_user_post            |
| sys_user_role            |
+--------------------------+
[root@harbor250.fanxuxu.com ~]# 

K8s部署-单体若依

1.重新编译若依服务

	1.修改数据库连接,编辑resources目录下的application-druid.yml
[root@harbor250.fanxuxu.com ~]# vim RuoYi/ruoyi-admin/src/main/resources/application-druid.yml 
  1 # 数据源配置
  2 spring:
  3     datasource:
  4         type: com.alibaba.druid.pool.DruidDataSource
  5         driverClassName: com.mysql.cj.jdbc.Driver
  6         druid:
  7             # 主库数据源
  8             master:
  9                 url: jdbc:mysql://svc-db:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&us    eSSL=true&serverTimezone=GMT%2B8
 10                 username: linux101
 11                 password: fanxuxu    
 ...
 
 
	2.编译程序
[root@harbor250.fanxuxu.com ~]# cd RuoYi/
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# mvn clean package -Dmaven.test.skip=true
...
[INFO] Reactor Summary for ruoyi 4.8.2:
[INFO] 
[INFO] ruoyi .............................................. SUCCESS [  0.146 s]
[INFO] ruoyi-common ....................................... SUCCESS [  4.504 s]
[INFO] ruoyi-system ....................................... SUCCESS [  0.657 s]
[INFO] ruoyi-framework .................................... SUCCESS [  0.910 s]
[INFO] ruoyi-quartz ....................................... SUCCESS [  0.391 s]
[INFO] ruoyi-generator .................................... SUCCESS [  0.354 s]
[INFO] ruoyi-admin ........................................ SUCCESS [  1.953 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.139 s
[INFO] Finished at: 2026-01-12T17:31:03+08:00
[INFO] ------------------------------------------------------------------------
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# ll ruoyi-admin/target/
total 84052
drwxr-xr-x 6 root root     4096 Jan 12 17:31 ./
drwxr-xr-x 4 root root     4096 Jan 12 17:31 ../
drwxr-xr-x 7 root root     4096 Jan 12 17:31 classes/
drwxr-xr-x 3 root root     4096 Jan 12 17:31 generated-sources/
drwxr-xr-x 2 root root     4096 Jan 12 17:31 maven-archiver/
drwxr-xr-x 3 root root     4096 Jan 12 17:31 maven-status/
-rw-r--r-- 1 root root 82624995 Jan 12 17:31 ruoyi-admin.jar
-rw-r--r-- 1 root root  3413500 Jan 12 17:31 ruoyi-admin.jar.original
[root@harbor250.fanxuxu.com RuoYi]# 

2.将若依镜像制作镜像

	1.编写DOckerfile
[root@harbor250.fanxuxu.com RuoYi]# cat  Dockerfile 
FROM registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/tomcat:9.0.87-jdk17

MAINTAINER Jason Yin

LABEL school=fanxuxu \
      class=linux101 \
      auther=JasonYin

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

EXPOSE 8080

CMD ["java","-jar","/ruoyi-admin.jar"]
[root@harbor250.fanxuxu.com RuoYi]# 



	2.编译镜像
[root@harbor250.fanxuxu.com RuoYi]# docker build -t harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single:v0.1 .


	3.推送镜像到harbor仓库【如上图所示】
[root@harbor250.fanxuxu.com RuoYi]# docker image ls harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single
REPOSITORY                                             TAG       IMAGE ID       CREATED              SIZE
harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single   v0.1      70b74cc5058a   About a minute ago   510MB
[root@harbor250.fanxuxu.com RuoYi]# 
[root@harbor250.fanxuxu.com RuoYi]# docker push harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single:v0.1

3.k8s部署若依服务

	1.编写资源清单
[root@master231 homework]# cat 01-ruoyi-single.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: my-cnf
data:
  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
    default-character-set=utf8mb4
    !includedir /etc/mysql/conf.d/

  ry_20250416.sql: |
    -- ----------------------------
    -- 1、部门表
    -- ----------------------------
    drop table if exists sys_dept;
    create table sys_dept (
      dept_id           bigint(20)      not null auto_increment    comment '部门id',
      parent_id         bigint(20)      default 0                  comment '父部门id',
      ancestors         varchar(50)     default ''                 comment '祖级列表',
      dept_name         varchar(30)     default ''                 comment '部门名称',
      order_num         int(4)          default 0                  comment '显示顺序',
      leader            varchar(20)     default null               comment '负责人',
      phone             varchar(11)     default null               comment '联系电话',
      email             varchar(50)     default null               comment '邮箱',
      status            char(1)         default '0'                comment '部门状态(0正常 1停用)',
      del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time 	    datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      primary key (dept_id)
    ) engine=innodb auto_increment=200 comment = '部门表';
    
    -- ----------------------------
    -- 初始化-部门表数据
    -- ----------------------------
    insert into sys_dept values(100,  0,   '0',          '若依科技',   0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(101,  100, '0,100',      '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(102,  100, '0,100',      '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(103,  101, '0,100,101',  '研发部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(104,  101, '0,100,101',  '市场部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(105,  101, '0,100,101',  '测试部门',   3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(106,  101, '0,100,101',  '财务部门',   4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(107,  101, '0,100,101',  '运维部门',   5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(108,  102, '0,100,102',  '市场部门',   1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    insert into sys_dept values(109,  102, '0,100,102',  '财务部门',   2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
    
    
    -- ----------------------------
    -- 2、用户信息表
    -- ----------------------------
    drop table if exists sys_user;
    create table sys_user (
      user_id           bigint(20)      not null auto_increment    comment '用户ID',
      dept_id           bigint(20)      default null               comment '部门ID',
      login_name        varchar(30)     not null                   comment '登录账号',
      user_name         varchar(30)     default ''                 comment '用户昵称',
      user_type         varchar(2)      default '00'               comment '用户类型(00系统用户 01注册用户)',
      email             varchar(50)     default ''                 comment '用户邮箱',
      phonenumber       varchar(11)     default ''                 comment '手机号码',
      sex               char(1)         default '0'                comment '用户性别(0男 1女 2未知)',
      avatar            varchar(100)    default ''                 comment '头像路径',
      password          varchar(50)     default ''                 comment '密码',
      salt              varchar(20)     default ''                 comment '盐加密',
      status            char(1)         default '0'                comment '账号状态(0正常 1停用)',
      del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
      login_ip          varchar(128)    default ''                 comment '最后登录IP',
      login_date        datetime                                   comment '最后登录时间',
      pwd_update_date   datetime                                   comment '密码最后更新时间',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(500)    default null               comment '备注',
      primary key (user_id)
    ) engine=innodb auto_increment=100 comment = '用户信息表';
    
    -- ----------------------------
    -- 初始化-用户信息表数据
    -- ----------------------------
    insert into sys_user values(1,  103, 'admin', '若依', '00', 'ry@163.com', '15888888888', '1', '', '29c67a30398638269fe600f73a054934', '111111', '0', '0', '127.0.0.1', null, null, 'admin', sysdate(), '', null, '管理员');
    insert into sys_user values(2,  105, 'ry',    '若依', '00', 'ry@qq.com',  '15666666666', '1', '', '8e6d98b90472783cc73c17047ddccf36', '222222', '0', '0', '127.0.0.1', null, null, 'admin', sysdate(), '', null, '测试员');
    
    
    -- ----------------------------
    -- 3、岗位信息表
    -- ----------------------------
    drop table if exists sys_post;
    create table sys_post
    (
      post_id       bigint(20)      not null auto_increment    comment '岗位ID',
      post_code     varchar(64)     not null                   comment '岗位编码',
      post_name     varchar(50)     not null                   comment '岗位名称',
      post_sort     int(4)          not null                   comment '显示顺序',
      status        char(1)         not null                   comment '状态(0正常 1停用)',
      create_by     varchar(64)     default ''                 comment '创建者',
      create_time   datetime                                   comment '创建时间',
      update_by     varchar(64)     default ''			       comment '更新者',
      update_time   datetime                                   comment '更新时间',
      remark        varchar(500)    default null               comment '备注',
      primary key (post_id)
    ) engine=innodb comment = '岗位信息表';
    
    -- ----------------------------
    -- 初始化-岗位信息表数据
    -- ----------------------------
    insert into sys_post values(1, 'ceo',  '董事长',    1, '0', 'admin', sysdate(), '', null, '');
    insert into sys_post values(2, 'se',   '项目经理',  2, '0', 'admin', sysdate(), '', null, '');
    insert into sys_post values(3, 'hr',   '人力资源',  3, '0', 'admin', sysdate(), '', null, '');
    insert into sys_post values(4, 'user', '普通员工',  4, '0', 'admin', sysdate(), '', null, '');
    
    
    -- ----------------------------
    -- 4、角色信息表
    -- ----------------------------
    drop table if exists sys_role;
    create table sys_role (
      role_id           bigint(20)      not null auto_increment    comment '角色ID',
      role_name         varchar(30)     not null                   comment '角色名称',
      role_key          varchar(100)    not null                   comment '角色权限字符串',
      role_sort         int(4)          not null                   comment '显示顺序',
      data_scope        char(1)         default '1'                comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)',
      status            char(1)         not null                   comment '角色状态(0正常 1停用)',
      del_flag          char(1)         default '0'                comment '删除标志(0代表存在 2代表删除)',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(500)    default null               comment '备注',
      primary key (role_id)
    ) engine=innodb auto_increment=100 comment = '角色信息表';
    
    -- ----------------------------
    -- 初始化-角色信息表数据
    -- ----------------------------
    insert into sys_role values('1', '超级管理员', 'admin',  1, 1, '0', '0', 'admin', sysdate(), '', null, '超级管理员');
    insert into sys_role values('2', '普通角色',   'common', 2, 2, '0', '0', 'admin', sysdate(), '', null, '普通角色');
    
    
    -- ----------------------------
    -- 5、菜单权限表
    -- ----------------------------
    drop table if exists sys_menu;
    create table sys_menu (
      menu_id           bigint(20)      not null auto_increment    comment '菜单ID',
      menu_name         varchar(50)     not null                   comment '菜单名称',
      parent_id         bigint(20)      default 0                  comment '父菜单ID',
      order_num         int(4)          default 0                  comment '显示顺序',
      url               varchar(200)    default '#'                comment '请求地址',
      target            varchar(20)     default ''                 comment '打开方式(menuItem页签 menuBlank新窗口)',
      menu_type         char(1)         default ''                 comment '菜单类型(M目录 C菜单 F按钮)',
      visible           char(1)         default 0                  comment '菜单状态(0显示 1隐藏)',
      is_refresh        char(1)         default 1                  comment '是否刷新(0刷新 1不刷新)',
      perms             varchar(100)    default null               comment '权限标识',
      icon              varchar(100)    default '#'                comment '菜单图标',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(500)    default ''                 comment '备注',
      primary key (menu_id)
    ) engine=innodb auto_increment=2000 comment = '菜单权限表';
    
    -- ----------------------------
    -- 初始化-菜单信息表数据
    -- ----------------------------
    -- 一级菜单
    insert into sys_menu values('1', '系统管理', '0', '1', '#',                '',          'M', '0', '1', '', 'fa fa-gear',           'admin', sysdate(), '', null, '系统管理目录');
    insert into sys_menu values('2', '系统监控', '0', '2', '#',                '',          'M', '0', '1', '', 'fa fa-video-camera',   'admin', sysdate(), '', null, '系统监控目录');
    insert into sys_menu values('3', '系统工具', '0', '3', '#',                '',          'M', '0', '1', '', 'fa fa-bars',           'admin', sysdate(), '', null, '系统工具目录');
    insert into sys_menu values('4', '若依官网', '0', '4', 'http://ruoyi.vip', 'menuBlank', 'C', '0', '1', '', 'fa fa-location-arrow', 'admin', sysdate(), '', null, '若依官网地址');
    -- 二级菜单
    insert into sys_menu values('100',  '用户管理', '1', '1', '/system/user',          '', 'C', '0', '1', 'system:user:view',         'fa fa-user-o',          'admin', sysdate(), '', null, '用户管理菜单');
    insert into sys_menu values('101',  '角色管理', '1', '2', '/system/role',          '', 'C', '0', '1', 'system:role:view',         'fa fa-user-secret',     'admin', sysdate(), '', null, '角色管理菜单');
    insert into sys_menu values('102',  '菜单管理', '1', '3', '/system/menu',          '', 'C', '0', '1', 'system:menu:view',         'fa fa-th-list',         'admin', sysdate(), '', null, '菜单管理菜单');
    insert into sys_menu values('103',  '部门管理', '1', '4', '/system/dept',          '', 'C', '0', '1', 'system:dept:view',         'fa fa-outdent',         'admin', sysdate(), '', null, '部门管理菜单');
    insert into sys_menu values('104',  '岗位管理', '1', '5', '/system/post',          '', 'C', '0', '1', 'system:post:view',         'fa fa-address-card-o',  'admin', sysdate(), '', null, '岗位管理菜单');
    insert into sys_menu values('105',  '字典管理', '1', '6', '/system/dict',          '', 'C', '0', '1', 'system:dict:view',         'fa fa-bookmark-o',      'admin', sysdate(), '', null, '字典管理菜单');
    insert into sys_menu values('106',  '参数设置', '1', '7', '/system/config',        '', 'C', '0', '1', 'system:config:view',       'fa fa-sun-o',           'admin', sysdate(), '', null, '参数设置菜单');
    insert into sys_menu values('107',  '通知公告', '1', '8', '/system/notice',        '', 'C', '0', '1', 'system:notice:view',       'fa fa-bullhorn',        'admin', sysdate(), '', null, '通知公告菜单');
    insert into sys_menu values('108',  '日志管理', '1', '9', '#',                     '', 'M', '0', '1', '',                         'fa fa-pencil-square-o', 'admin', sysdate(), '', null, '日志管理菜单');
    insert into sys_menu values('109',  '在线用户', '2', '1', '/monitor/online',       '', 'C', '0', '1', 'monitor:online:view',      'fa fa-user-circle',     'admin', sysdate(), '', null, '在线用户菜单');
    insert into sys_menu values('110',  '定时任务', '2', '2', '/monitor/job',          '', 'C', '0', '1', 'monitor:job:view',         'fa fa-tasks',           'admin', sysdate(), '', null, '定时任务菜单');
    insert into sys_menu values('111',  '数据监控', '2', '3', '/monitor/data',         '', 'C', '0', '1', 'monitor:data:view',        'fa fa-bug',             'admin', sysdate(), '', null, '数据监控菜单');
    insert into sys_menu values('112',  '服务监控', '2', '4', '/monitor/server',       '', 'C', '0', '1', 'monitor:server:view',      'fa fa-server',          'admin', sysdate(), '', null, '服务监控菜单');
    insert into sys_menu values('113',  '缓存监控', '2', '5', '/monitor/cache',        '', 'C', '0', '1', 'monitor:cache:view',       'fa fa-cube',            'admin', sysdate(), '', null, '缓存监控菜单');
    insert into sys_menu values('114',  '表单构建', '3', '1', '/tool/build',           '', 'C', '0', '1', 'tool:build:view',          'fa fa-wpforms',         'admin', sysdate(), '', null, '表单构建菜单');
    insert into sys_menu values('115',  '代码生成', '3', '2', '/tool/gen',             '', 'C', '0', '1', 'tool:gen:view',            'fa fa-code',            'admin', sysdate(), '', null, '代码生成菜单');
    insert into sys_menu values('116',  '系统接口', '3', '3', '/tool/swagger',         '', 'C', '0', '1', 'tool:swagger:view',        'fa fa-gg',              'admin', sysdate(), '', null, '系统接口菜单');
    -- 三级菜单
    insert into sys_menu values('500',  '操作日志', '108', '1', '/monitor/operlog',    '', 'C', '0', '1', 'monitor:operlog:view',     'fa fa-address-book',    'admin', sysdate(), '', null, '操作日志菜单');
    insert into sys_menu values('501',  '登录日志', '108', '2', '/monitor/logininfor', '', 'C', '0', '1', 'monitor:logininfor:view',  'fa fa-file-image-o',    'admin', sysdate(), '', null, '登录日志菜单');
    -- 用户管理按钮
    insert into sys_menu values('1000', '用户查询', '100', '1',  '#', '',  'F', '0', '1', 'system:user:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1001', '用户新增', '100', '2',  '#', '',  'F', '0', '1', 'system:user:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1002', '用户修改', '100', '3',  '#', '',  'F', '0', '1', 'system:user:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1003', '用户删除', '100', '4',  '#', '',  'F', '0', '1', 'system:user:remove',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1004', '用户导出', '100', '5',  '#', '',  'F', '0', '1', 'system:user:export',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1005', '用户导入', '100', '6',  '#', '',  'F', '0', '1', 'system:user:import',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1006', '重置密码', '100', '7',  '#', '',  'F', '0', '1', 'system:user:resetPwd',    '#', 'admin', sysdate(), '', null, '');
    -- 角色管理按钮
    insert into sys_menu values('1007', '角色查询', '101', '1',  '#', '',  'F', '0', '1', 'system:role:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1008', '角色新增', '101', '2',  '#', '',  'F', '0', '1', 'system:role:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1009', '角色修改', '101', '3',  '#', '',  'F', '0', '1', 'system:role:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1010', '角色删除', '101', '4',  '#', '',  'F', '0', '1', 'system:role:remove',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1011', '角色导出', '101', '5',  '#', '',  'F', '0', '1', 'system:role:export',      '#', 'admin', sysdate(), '', null, '');
    -- 菜单管理按钮
    insert into sys_menu values('1012', '菜单查询', '102', '1',  '#', '',  'F', '0', '1', 'system:menu:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1013', '菜单新增', '102', '2',  '#', '',  'F', '0', '1', 'system:menu:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1014', '菜单修改', '102', '3',  '#', '',  'F', '0', '1', 'system:menu:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1015', '菜单删除', '102', '4',  '#', '',  'F', '0', '1', 'system:menu:remove',      '#', 'admin', sysdate(), '', null, '');
    -- 部门管理按钮
    insert into sys_menu values('1016', '部门查询', '103', '1',  '#', '',  'F', '0', '1', 'system:dept:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1017', '部门新增', '103', '2',  '#', '',  'F', '0', '1', 'system:dept:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1018', '部门修改', '103', '3',  '#', '',  'F', '0', '1', 'system:dept:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1019', '部门删除', '103', '4',  '#', '',  'F', '0', '1', 'system:dept:remove',      '#', 'admin', sysdate(), '', null, '');
    -- 岗位管理按钮
    insert into sys_menu values('1020', '岗位查询', '104', '1',  '#', '',  'F', '0', '1', 'system:post:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1021', '岗位新增', '104', '2',  '#', '',  'F', '0', '1', 'system:post:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1022', '岗位修改', '104', '3',  '#', '',  'F', '0', '1', 'system:post:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1023', '岗位删除', '104', '4',  '#', '',  'F', '0', '1', 'system:post:remove',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1024', '岗位导出', '104', '5',  '#', '',  'F', '0', '1', 'system:post:export',      '#', 'admin', sysdate(), '', null, '');
    -- 字典管理按钮
    insert into sys_menu values('1025', '字典查询', '105', '1',  '#', '',  'F', '0', '1', 'system:dict:list',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1026', '字典新增', '105', '2',  '#', '',  'F', '0', '1', 'system:dict:add',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1027', '字典修改', '105', '3',  '#', '',  'F', '0', '1', 'system:dict:edit',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1028', '字典删除', '105', '4',  '#', '',  'F', '0', '1', 'system:dict:remove',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1029', '字典导出', '105', '5',  '#', '',  'F', '0', '1', 'system:dict:export',      '#', 'admin', sysdate(), '', null, '');
    -- 参数设置按钮
    insert into sys_menu values('1030', '参数查询', '106', '1',  '#', '',  'F', '0', '1', 'system:config:list',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1031', '参数新增', '106', '2',  '#', '',  'F', '0', '1', 'system:config:add',       '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1032', '参数修改', '106', '3',  '#', '',  'F', '0', '1', 'system:config:edit',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1033', '参数删除', '106', '4',  '#', '',  'F', '0', '1', 'system:config:remove',    '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1034', '参数导出', '106', '5',  '#', '',  'F', '0', '1', 'system:config:export',    '#', 'admin', sysdate(), '', null, '');
    -- 通知公告按钮
    insert into sys_menu values('1035', '公告查询', '107', '1',  '#', '',  'F', '0', '1', 'system:notice:list',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1036', '公告新增', '107', '2',  '#', '',  'F', '0', '1', 'system:notice:add',       '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1037', '公告修改', '107', '3',  '#', '',  'F', '0', '1', 'system:notice:edit',      '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1038', '公告删除', '107', '4',  '#', '',  'F', '0', '1', 'system:notice:remove',    '#', 'admin', sysdate(), '', null, '');
    -- 操作日志按钮
    insert into sys_menu values('1039', '操作查询', '500', '1',  '#', '',  'F', '0', '1', 'monitor:operlog:list',    '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1040', '操作删除', '500', '2',  '#', '',  'F', '0', '1', 'monitor:operlog:remove',  '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1041', '详细信息', '500', '3',  '#', '',  'F', '0', '1', 'monitor:operlog:detail',  '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1042', '日志导出', '500', '4',  '#', '',  'F', '0', '1', 'monitor:operlog:export',  '#', 'admin', sysdate(), '', null, '');
    -- 登录日志按钮
    insert into sys_menu values('1043', '登录查询', '501', '1',  '#', '',  'F', '0', '1', 'monitor:logininfor:list',         '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1044', '登录删除', '501', '2',  '#', '',  'F', '0', '1', 'monitor:logininfor:remove',       '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1045', '日志导出', '501', '3',  '#', '',  'F', '0', '1', 'monitor:logininfor:export',       '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1046', '账户解锁', '501', '4',  '#', '',  'F', '0', '1', 'monitor:logininfor:unlock',       '#', 'admin', sysdate(), '', null, '');
    -- 在线用户按钮
    insert into sys_menu values('1047', '在线查询', '109', '1',  '#', '',  'F', '0', '1', 'monitor:online:list',             '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1048', '批量强退', '109', '2',  '#', '',  'F', '0', '1', 'monitor:online:batchForceLogout', '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1049', '单条强退', '109', '3',  '#', '',  'F', '0', '1', 'monitor:online:forceLogout',      '#', 'admin', sysdate(), '', null, '');
    -- 定时任务按钮
    insert into sys_menu values('1050', '任务查询', '110', '1',  '#', '',  'F', '0', '1', 'monitor:job:list',                '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1051', '任务新增', '110', '2',  '#', '',  'F', '0', '1', 'monitor:job:add',                 '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1052', '任务修改', '110', '3',  '#', '',  'F', '0', '1', 'monitor:job:edit',                '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1053', '任务删除', '110', '4',  '#', '',  'F', '0', '1', 'monitor:job:remove',              '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1054', '状态修改', '110', '5',  '#', '',  'F', '0', '1', 'monitor:job:changeStatus',        '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1055', '任务详细', '110', '6',  '#', '',  'F', '0', '1', 'monitor:job:detail',              '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1056', '任务导出', '110', '7',  '#', '',  'F', '0', '1', 'monitor:job:export',              '#', 'admin', sysdate(), '', null, '');
    -- 代码生成按钮
    insert into sys_menu values('1057', '生成查询', '115', '1',  '#', '',  'F', '0', '1', 'tool:gen:list',     '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1058', '生成修改', '115', '2',  '#', '',  'F', '0', '1', 'tool:gen:edit',     '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1059', '生成删除', '115', '3',  '#', '',  'F', '0', '1', 'tool:gen:remove',   '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1060', '预览代码', '115', '4',  '#', '',  'F', '0', '1', 'tool:gen:preview',  '#', 'admin', sysdate(), '', null, '');
    insert into sys_menu values('1061', '生成代码', '115', '5',  '#', '',  'F', '0', '1', 'tool:gen:code',     '#', 'admin', sysdate(), '', null, '');
    
    
    -- ----------------------------
    -- 6、用户和角色关联表  用户N-1角色
    -- ----------------------------
    drop table if exists sys_user_role;
    create table sys_user_role (
      user_id   bigint(20) not null comment '用户ID',
      role_id   bigint(20) not null comment '角色ID',
      primary key(user_id, role_id)
    ) engine=innodb comment = '用户和角色关联表';
    
    -- ----------------------------
    -- 初始化-用户和角色关联表数据
    -- ----------------------------
    insert into sys_user_role values ('1', '1');
    insert into sys_user_role values ('2', '2');
    
    
    -- ----------------------------
    -- 7、角色和菜单关联表  角色1-N菜单
    -- ----------------------------
    drop table if exists sys_role_menu;
    create table sys_role_menu (
      role_id   bigint(20) not null comment '角色ID',
      menu_id   bigint(20) not null comment '菜单ID',
      primary key(role_id, menu_id)
    ) engine=innodb comment = '角色和菜单关联表';
    
    -- ----------------------------
    -- 初始化-角色和菜单关联表数据
    -- ----------------------------
    insert into sys_role_menu values ('2', '1');
    insert into sys_role_menu values ('2', '2');
    insert into sys_role_menu values ('2', '3');
    insert into sys_role_menu values ('2', '4');
    insert into sys_role_menu values ('2', '100');
    insert into sys_role_menu values ('2', '101');
    insert into sys_role_menu values ('2', '102');
    insert into sys_role_menu values ('2', '103');
    insert into sys_role_menu values ('2', '104');
    insert into sys_role_menu values ('2', '105');
    insert into sys_role_menu values ('2', '106');
    insert into sys_role_menu values ('2', '107');
    insert into sys_role_menu values ('2', '108');
    insert into sys_role_menu values ('2', '109');
    insert into sys_role_menu values ('2', '110');
    insert into sys_role_menu values ('2', '111');
    insert into sys_role_menu values ('2', '112');
    insert into sys_role_menu values ('2', '113');
    insert into sys_role_menu values ('2', '114');
    insert into sys_role_menu values ('2', '115');
    insert into sys_role_menu values ('2', '116');
    insert into sys_role_menu values ('2', '500');
    insert into sys_role_menu values ('2', '501');
    insert into sys_role_menu values ('2', '1000');
    insert into sys_role_menu values ('2', '1001');
    insert into sys_role_menu values ('2', '1002');
    insert into sys_role_menu values ('2', '1003');
    insert into sys_role_menu values ('2', '1004');
    insert into sys_role_menu values ('2', '1005');
    insert into sys_role_menu values ('2', '1006');
    insert into sys_role_menu values ('2', '1007');
    insert into sys_role_menu values ('2', '1008');
    insert into sys_role_menu values ('2', '1009');
    insert into sys_role_menu values ('2', '1010');
    insert into sys_role_menu values ('2', '1011');
    insert into sys_role_menu values ('2', '1012');
    insert into sys_role_menu values ('2', '1013');
    insert into sys_role_menu values ('2', '1014');
    insert into sys_role_menu values ('2', '1015');
    insert into sys_role_menu values ('2', '1016');
    insert into sys_role_menu values ('2', '1017');
    insert into sys_role_menu values ('2', '1018');
    insert into sys_role_menu values ('2', '1019');
    insert into sys_role_menu values ('2', '1020');
    insert into sys_role_menu values ('2', '1021');
    insert into sys_role_menu values ('2', '1022');
    insert into sys_role_menu values ('2', '1023');
    insert into sys_role_menu values ('2', '1024');
    insert into sys_role_menu values ('2', '1025');
    insert into sys_role_menu values ('2', '1026');
    insert into sys_role_menu values ('2', '1027');
    insert into sys_role_menu values ('2', '1028');
    insert into sys_role_menu values ('2', '1029');
    insert into sys_role_menu values ('2', '1030');
    insert into sys_role_menu values ('2', '1031');
    insert into sys_role_menu values ('2', '1032');
    insert into sys_role_menu values ('2', '1033');
    insert into sys_role_menu values ('2', '1034');
    insert into sys_role_menu values ('2', '1035');
    insert into sys_role_menu values ('2', '1036');
    insert into sys_role_menu values ('2', '1037');
    insert into sys_role_menu values ('2', '1038');
    insert into sys_role_menu values ('2', '1039');
    insert into sys_role_menu values ('2', '1040');
    insert into sys_role_menu values ('2', '1041');
    insert into sys_role_menu values ('2', '1042');
    insert into sys_role_menu values ('2', '1043');
    insert into sys_role_menu values ('2', '1044');
    insert into sys_role_menu values ('2', '1045');
    insert into sys_role_menu values ('2', '1046');
    insert into sys_role_menu values ('2', '1047');
    insert into sys_role_menu values ('2', '1048');
    insert into sys_role_menu values ('2', '1049');
    insert into sys_role_menu values ('2', '1050');
    insert into sys_role_menu values ('2', '1051');
    insert into sys_role_menu values ('2', '1052');
    insert into sys_role_menu values ('2', '1053');
    insert into sys_role_menu values ('2', '1054');
    insert into sys_role_menu values ('2', '1055');
    insert into sys_role_menu values ('2', '1056');
    insert into sys_role_menu values ('2', '1057');
    insert into sys_role_menu values ('2', '1058');
    insert into sys_role_menu values ('2', '1059');
    insert into sys_role_menu values ('2', '1060');
    insert into sys_role_menu values ('2', '1061');
    
    -- ----------------------------
    -- 8、角色和部门关联表  角色1-N部门
    -- ----------------------------
    drop table if exists sys_role_dept;
    create table sys_role_dept (
      role_id   bigint(20) not null comment '角色ID',
      dept_id   bigint(20) not null comment '部门ID',
      primary key(role_id, dept_id)
    ) engine=innodb comment = '角色和部门关联表';
    
    -- ----------------------------
    -- 初始化-角色和部门关联表数据
    -- ----------------------------
    insert into sys_role_dept values ('2', '100');
    insert into sys_role_dept values ('2', '101');
    insert into sys_role_dept values ('2', '105');
    
    -- ----------------------------
    -- 9、用户与岗位关联表  用户1-N岗位
    -- ----------------------------
    drop table if exists sys_user_post;
    create table sys_user_post
    (
      user_id   bigint(20) not null comment '用户ID',
      post_id   bigint(20) not null comment '岗位ID',
      primary key (user_id, post_id)
    ) engine=innodb comment = '用户与岗位关联表';
    
    -- ----------------------------
    -- 初始化-用户与岗位关联表数据
    -- ----------------------------
    insert into sys_user_post values ('1', '1');
    insert into sys_user_post values ('2', '2');
    
    
    -- ----------------------------
    -- 10、操作日志记录
    -- ----------------------------
    drop table if exists sys_oper_log;
    create table sys_oper_log (
      oper_id           bigint(20)      not null auto_increment    comment '日志主键',
      title             varchar(50)     default ''                 comment '模块标题',
      business_type     int(2)          default 0                  comment '业务类型(0其它 1新增 2修改 3删除)',
      method            varchar(200)    default ''                 comment '方法名称',
      request_method    varchar(10)     default ''                 comment '请求方式',
      operator_type     int(1)          default 0                  comment '操作类别(0其它 1后台用户 2手机端用户)',
      oper_name         varchar(50)     default ''                 comment '操作人员',
      dept_name         varchar(50)     default ''                 comment '部门名称',
      oper_url          varchar(255)    default ''                 comment '请求URL',
      oper_ip           varchar(128)    default ''                 comment '主机地址',
      oper_location     varchar(255)    default ''                 comment '操作地点',
      oper_param        varchar(2000)   default ''                 comment '请求参数',
      json_result       varchar(2000)   default ''                 comment '返回参数',
      status            int(1)          default 0                  comment '操作状态(0正常 1异常)',
      error_msg         varchar(2000)   default ''                 comment '错误消息',
      oper_time         datetime                                   comment '操作时间',
      cost_time         bigint(20)      default 0                  comment '消耗时间',
      primary key (oper_id),
      key idx_sys_oper_log_bt (business_type),
      key idx_sys_oper_log_s  (status),
      key idx_sys_oper_log_ot (oper_time)
    ) engine=innodb auto_increment=100 comment = '操作日志记录';
    
    
    -- ----------------------------
    -- 11、字典类型表
    -- ----------------------------
    drop table if exists sys_dict_type;
    create table sys_dict_type
    (
      dict_id          bigint(20)      not null auto_increment    comment '字典主键',
      dict_name        varchar(100)    default ''                 comment '字典名称',
      dict_type        varchar(100)    default ''                 comment '字典类型',
      status           char(1)         default '0'                comment '状态(0正常 1停用)',
      create_by        varchar(64)     default ''                 comment '创建者',
      create_time      datetime                                   comment '创建时间',
      update_by        varchar(64)     default ''                 comment '更新者',
      update_time      datetime                                   comment '更新时间',
      remark           varchar(500)    default null               comment '备注',
      primary key (dict_id),
      unique (dict_type)
    ) engine=innodb auto_increment=100 comment = '字典类型表';
    
    insert into sys_dict_type values(1,  '用户性别', 'sys_user_sex',        '0', 'admin', sysdate(), '', null, '用户性别列表');
    insert into sys_dict_type values(2,  '菜单状态', 'sys_show_hide',       '0', 'admin', sysdate(), '', null, '菜单状态列表');
    insert into sys_dict_type values(3,  '系统开关', 'sys_normal_disable',  '0', 'admin', sysdate(), '', null, '系统开关列表');
    insert into sys_dict_type values(4,  '任务状态', 'sys_job_status',      '0', 'admin', sysdate(), '', null, '任务状态列表');
    insert into sys_dict_type values(5,  '任务分组', 'sys_job_group',       '0', 'admin', sysdate(), '', null, '任务分组列表');
    insert into sys_dict_type values(6,  '系统是否', 'sys_yes_no',          '0', 'admin', sysdate(), '', null, '系统是否列表');
    insert into sys_dict_type values(7,  '通知类型', 'sys_notice_type',     '0', 'admin', sysdate(), '', null, '通知类型列表');
    insert into sys_dict_type values(8,  '通知状态', 'sys_notice_status',   '0', 'admin', sysdate(), '', null, '通知状态列表');
    insert into sys_dict_type values(9,  '操作类型', 'sys_oper_type',       '0', 'admin', sysdate(), '', null, '操作类型列表');
    insert into sys_dict_type values(10, '系统状态', 'sys_common_status',   '0', 'admin', sysdate(), '', null, '登录状态列表');
    
    
    -- ----------------------------
    -- 12、字典数据表
    -- ----------------------------
    drop table if exists sys_dict_data;
    create table sys_dict_data
    (
      dict_code        bigint(20)      not null auto_increment    comment '字典编码',
      dict_sort        int(4)          default 0                  comment '字典排序',
      dict_label       varchar(100)    default ''                 comment '字典标签',
      dict_value       varchar(100)    default ''                 comment '字典键值',
      dict_type        varchar(100)    default ''                 comment '字典类型',
      css_class        varchar(100)    default null               comment '样式属性(其他样式扩展)',
      list_class       varchar(100)    default null               comment '表格回显样式',
      is_default       char(1)         default 'N'                comment '是否默认(Y是 N否)',
      status           char(1)         default '0'                comment '状态(0正常 1停用)',
      create_by        varchar(64)     default ''                 comment '创建者',
      create_time      datetime                                   comment '创建时间',
      update_by        varchar(64)     default ''                 comment '更新者',
      update_time      datetime                                   comment '更新时间',
      remark           varchar(500)    default null               comment '备注',
      primary key (dict_code)
    ) engine=innodb auto_increment=100 comment = '字典数据表';
    
    insert into sys_dict_data values(1,  1,  '男',       '0',       'sys_user_sex',        '',   '',        'Y', '0', 'admin', sysdate(), '', null, '性别男');
    insert into sys_dict_data values(2,  2,  '女',       '1',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别女');
    insert into sys_dict_data values(3,  3,  '未知',     '2',       'sys_user_sex',        '',   '',        'N', '0', 'admin', sysdate(), '', null, '性别未知');
    insert into sys_dict_data values(4,  1,  '显示',     '0',       'sys_show_hide',       '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '显示菜单');
    insert into sys_dict_data values(5,  2,  '隐藏',     '1',       'sys_show_hide',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '隐藏菜单');
    insert into sys_dict_data values(6,  1,  '正常',     '0',       'sys_normal_disable',  '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
    insert into sys_dict_data values(7,  2,  '停用',     '1',       'sys_normal_disable',  '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
    insert into sys_dict_data values(8,  1,  '正常',     '0',       'sys_job_status',      '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
    insert into sys_dict_data values(9,  2,  '暂停',     '1',       'sys_job_status',      '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
    insert into sys_dict_data values(10, 1,  '默认',     'DEFAULT', 'sys_job_group',       '',   '',        'Y', '0', 'admin', sysdate(), '', null, '默认分组');
    insert into sys_dict_data values(11, 2,  '系统',     'SYSTEM',  'sys_job_group',       '',   '',        'N', '0', 'admin', sysdate(), '', null, '系统分组');
    insert into sys_dict_data values(12, 1,  '是',       'Y',       'sys_yes_no',          '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '系统默认是');
    insert into sys_dict_data values(13, 2,  '否',       'N',       'sys_yes_no',          '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '系统默认否');
    insert into sys_dict_data values(14, 1,  '通知',     '1',       'sys_notice_type',     '',   'warning', 'Y', '0', 'admin', sysdate(), '', null, '通知');
    insert into sys_dict_data values(15, 2,  '公告',     '2',       'sys_notice_type',     '',   'success', 'N', '0', 'admin', sysdate(), '', null, '公告');
    insert into sys_dict_data values(16, 1,  '正常',     '0',       'sys_notice_status',   '',   'primary', 'Y', '0', 'admin', sysdate(), '', null, '正常状态');
    insert into sys_dict_data values(17, 2,  '关闭',     '1',       'sys_notice_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '关闭状态');
    insert into sys_dict_data values(18, 99, '其他',     '0',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '其他操作');
    insert into sys_dict_data values(19, 1,  '新增',     '1',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '新增操作');
    insert into sys_dict_data values(20, 2,  '修改',     '2',       'sys_oper_type',       '',   'info',    'N', '0', 'admin', sysdate(), '', null, '修改操作');
    insert into sys_dict_data values(21, 3,  '删除',     '3',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '删除操作');
    insert into sys_dict_data values(22, 4,  '授权',     '4',       'sys_oper_type',       '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '授权操作');
    insert into sys_dict_data values(23, 5,  '导出',     '5',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导出操作');
    insert into sys_dict_data values(24, 6,  '导入',     '6',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '导入操作');
    insert into sys_dict_data values(25, 7,  '强退',     '7',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '强退操作');
    insert into sys_dict_data values(26, 8,  '生成代码', '8',       'sys_oper_type',       '',   'warning', 'N', '0', 'admin', sysdate(), '', null, '生成操作');
    insert into sys_dict_data values(27, 9,  '清空数据', '9',       'sys_oper_type',       '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '清空操作');
    insert into sys_dict_data values(28, 1,  '成功',     '0',       'sys_common_status',   '',   'primary', 'N', '0', 'admin', sysdate(), '', null, '正常状态');
    insert into sys_dict_data values(29, 2,  '失败',     '1',       'sys_common_status',   '',   'danger',  'N', '0', 'admin', sysdate(), '', null, '停用状态');
    
    
    -- ----------------------------
    -- 13、参数配置表
    -- ----------------------------
    drop table if exists sys_config;
    create table sys_config (
      config_id         int(5)          not null auto_increment    comment '参数主键',
      config_name       varchar(100)    default ''                 comment '参数名称',
      config_key        varchar(100)    default ''                 comment '参数键名',
      config_value      varchar(500)    default ''                 comment '参数键值',
      config_type       char(1)         default 'N'                comment '系统内置(Y是 N否)',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(500)    default null               comment '备注',
      primary key (config_id)
    ) engine=innodb auto_increment=100 comment = '参数配置表';
    
    insert into sys_config values(1,  '主框架页-默认皮肤样式名称',     'sys.index.skinName',               'skin-blue',     'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow');
    insert into sys_config values(2,  '用户管理-账号初始密码',         'sys.user.initPassword',            '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码 123456');
    insert into sys_config values(3,  '主框架页-侧边栏主题',           'sys.index.sideTheme',              'theme-dark',    'Y', 'admin', sysdate(), '', null, '深黑主题theme-dark,浅色主题theme-light,深蓝主题theme-blue');
    insert into sys_config values(4,  '账号自助-是否开启用户注册功能', 'sys.account.registerUser',         'false',         'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
    insert into sys_config values(5,  '用户管理-密码字符范围',         'sys.account.chrtype',              '0',             'Y', 'admin', sysdate(), '', null, '默认任意字符范围,0任意(密码可以输入任意字符),1数字(密码只能为0-9数字),2英文字母(密码只能为a-z和A-Z字母),3字母和数字(密码必须包含字母,数字),4字母数字和特殊字符(目前支持的特殊字符包括:~!@#$%^&*()-=_+)');
    insert into sys_config values(6,  '用户管理-初始密码修改策略',     'sys.account.initPasswordModify',   '1',             'Y', 'admin', sysdate(), '', null, '0:初始密码修改策略关闭,没有任何提示,1:提醒用户,如果未修改初始密码,则在登录时就会提醒修改密码对话框');
    insert into sys_config values(7,  '用户管理-账号密码更新周期',     'sys.account.passwordValidateDays', '0',             'Y', 'admin', sysdate(), '', null, '密码更新周期(填写数字,数据初始化值为0不限制,若修改必须为大于0小于365的正整数),如果超过这个周期登录系统时,则在登录时就会提醒修改密码对话框');
    insert into sys_config values(8,  '主框架页-菜单导航显示风格',     'sys.index.menuStyle',              'default',       'Y', 'admin', sysdate(), '', null, '菜单导航显示风格(default为左侧导航菜单,topnav为顶部导航菜单)');
    insert into sys_config values(9,  '主框架页-是否开启页脚',         'sys.index.footer',                 'true',          'Y', 'admin', sysdate(), '', null, '是否开启底部页脚显示(true显示,false隐藏)');
    insert into sys_config values(10, '主框架页-是否开启页签',         'sys.index.tagsView',               'true',          'Y', 'admin', sysdate(), '', null, '是否开启菜单多页签显示(true显示,false隐藏)');
    insert into sys_config values(11, '用户登录-黑名单列表',           'sys.login.blackIPList',            '',              'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
    
    
    -- ----------------------------
    -- 14、系统访问记录
    -- ----------------------------
    drop table if exists sys_logininfor;
    create table sys_logininfor (
      info_id        bigint(20)     not null auto_increment   comment '访问ID',
      login_name     varchar(50)    default ''                comment '登录账号',
      ipaddr         varchar(128)   default ''                comment '登录IP地址',
      login_location varchar(255)   default ''                comment '登录地点',
      browser        varchar(50)    default ''                comment '浏览器类型',
      os             varchar(50)    default ''                comment '操作系统',
      status         char(1)        default '0'               comment '登录状态(0成功 1失败)',
      msg            varchar(255)   default ''                comment '提示消息',
      login_time     datetime                                 comment '访问时间',
      primary key (info_id),
      key idx_sys_logininfor_s  (status),
      key idx_sys_logininfor_lt (login_time)
    ) engine=innodb auto_increment=100 comment = '系统访问记录';
    
    
    -- ----------------------------
    -- 15、在线用户记录
    -- ----------------------------
    drop table if exists sys_user_online;
    create table sys_user_online (
      sessionId         varchar(50)   default ''                comment '用户会话id',
      login_name        varchar(50)   default ''                comment '登录账号',
      dept_name         varchar(50)   default ''                comment '部门名称',
      ipaddr            varchar(128)  default ''                comment '登录IP地址',
      login_location    varchar(255)  default ''                comment '登录地点',
      browser           varchar(50)   default ''                comment '浏览器类型',
      os                varchar(50)   default ''                comment '操作系统',
      status            varchar(10)   default ''                comment '在线状态on_line在线off_line离线',
      start_timestamp   datetime                                comment 'session创建时间',
      last_access_time  datetime                                comment 'session最后访问时间',
      expire_time       int(5)        default 0                 comment '超时时间,单位为分钟',
      primary key (sessionId)
    ) engine=innodb comment = '在线用户记录';
    
    
    -- ----------------------------
    -- 16、定时任务调度表
    -- ----------------------------
    drop table if exists sys_job;
    create table sys_job (
      job_id              bigint(20)    not null auto_increment    comment '任务ID',
      job_name            varchar(64)   default ''                 comment '任务名称',
      job_group           varchar(64)   default 'DEFAULT'          comment '任务组名',
      invoke_target       varchar(500)  not null                   comment '调用目标字符串',
      cron_expression     varchar(255)  default ''                 comment 'cron执行表达式',
      misfire_policy      varchar(20)   default '3'                comment '计划执行错误策略(1立即执行 2执行一次 3放弃执行)',
      concurrent          char(1)       default '1'                comment '是否并发执行(0允许 1禁止)',
      status              char(1)       default '0'                comment '状态(0正常 1暂停)',
      create_by           varchar(64)   default ''                 comment '创建者',
      create_time         datetime                                 comment '创建时间',
      update_by           varchar(64)   default ''                 comment '更新者',
      update_time         datetime                                 comment '更新时间',
      remark              varchar(500)  default ''                 comment '备注信息',
      primary key (job_id, job_name, job_group)
    ) engine=innodb auto_increment=100 comment = '定时任务调度表';
    
    insert into sys_job values(1, '系统默认(无参)', 'DEFAULT', 'ryTask.ryNoParams',        '0/10 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
    insert into sys_job values(2, '系统默认(有参)', 'DEFAULT', 'ryTask.ryParams(\'ry\')',  '0/15 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
    insert into sys_job values(3, '系统默认(多参)', 'DEFAULT', 'ryTask.ryMultipleParams(\'ry\', true, 2000L, 316.50D, 100)',  '0/20 * * * * ?', '3', '1', '1', 'admin', sysdate(), '', null, '');
    
    
    -- ----------------------------
    -- 17、定时任务调度日志表
    -- ----------------------------
    drop table if exists sys_job_log;
    create table sys_job_log (
      job_log_id          bigint(20)     not null auto_increment    comment '任务日志ID',
      job_name            varchar(64)    not null                   comment '任务名称',
      job_group           varchar(64)    not null                   comment '任务组名',
      invoke_target       varchar(500)   not null                   comment '调用目标字符串',
      job_message         varchar(500)                              comment '日志信息',
      status              char(1)        default '0'                comment '执行状态(0正常 1失败)',
      exception_info      varchar(2000)  default ''                 comment '异常信息',
      create_time         datetime                                  comment '创建时间',
      primary key (job_log_id)
    ) engine=innodb comment = '定时任务调度日志表';
    
    
    -- ----------------------------
    -- 18、通知公告表
    -- ----------------------------
    drop table if exists sys_notice;
    create table sys_notice (
      notice_id         int(4)          not null auto_increment    comment '公告ID',
      notice_title      varchar(50)     not null                   comment '公告标题',
      notice_type       char(1)         not null                   comment '公告类型(1通知 2公告)',
      notice_content    longblob        default null               comment '公告内容',
      status            char(1)         default '0'                comment '公告状态(0正常 1关闭)',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(255)    default null               comment '备注',
      primary key (notice_id)
    ) engine=innodb auto_increment=10 comment = '通知公告表';
    
    -- ----------------------------
    -- 初始化-公告信息表数据
    -- ----------------------------
    insert into sys_notice values('1', '温馨提醒:2018-07-01 若依新版本发布啦', '2', '新版本内容', '0', 'admin', sysdate(), '', null, '管理员');
    insert into sys_notice values('2', '维护通知:2018-07-01 若依系统凌晨维护', '1', '维护内容',   '0', 'admin', sysdate(), '', null, '管理员');
    insert into sys_notice values('3', '若依开源框架介绍', '1', '<p><span style=\"color: rgb(230, 0, 0);\">项目介绍</span></p><p><font color=\"#333333\">RuoYi开源项目是为企业用户定制的后台脚手架框架,为企业打造的一站式解决方案,降低企业开发成本,提升开发效率。主要包括用户管理、角色管理、部门管理、菜单管理、参数管理、字典管理、</font><span style=\"color: rgb(51, 51, 51);\">岗位管理</span><span style=\"color: rgb(51, 51, 51);\">、定时任务</span><span style=\"color: rgb(51, 51, 51);\">、</span><span style=\"color: rgb(51, 51, 51);\">服务监控、登录日志、操作日志、代码生成等功能。其中,还支持多数据源、数据权限、国际化、Redis缓存、Docker部署、滑动验证码、第三方认证登录、分布式事务、</span><font color=\"#333333\">分布式文件存储</font><span style=\"color: rgb(51, 51, 51);\">、分库分表处理等技术特点。</span></p><p><img src=\"https://foruda.gitee.com/images/1705030583977401651/5ed5db6a_1151004.png\" style=\"width: 64px;\"><br></p><p><span style=\"color: rgb(230, 0, 0);\">官网及演示</span></p><p><span style=\"color: rgb(51, 51, 51);\">若依官网地址:&nbsp;</span><a href=\"http://ruoyi.vip\" target=\"_blank\">http://ruoyi.vip</a><a href=\"http://ruoyi.vip\" target=\"_blank\"></a></p><p><span style=\"color: rgb(51, 51, 51);\">若依文档地址:&nbsp;</span><a href=\"http://doc.ruoyi.vip\" target=\"_blank\">http://doc.ruoyi.vip</a><br></p><p><span style=\"color: rgb(51, 51, 51);\">演示地址【不分离版】:&nbsp;</span><a href=\"http://demo.ruoyi.vip\" target=\"_blank\">http://demo.ruoyi.vip</a></p><p><span style=\"color: rgb(51, 51, 51);\">演示地址【分离版本】:&nbsp;</span><a href=\"http://vue.ruoyi.vip\" target=\"_blank\">http://vue.ruoyi.vip</a></p><p><span style=\"color: rgb(51, 51, 51);\">演示地址【微服务版】:&nbsp;</span><a href=\"http://cloud.ruoyi.vip\" target=\"_blank\">http://cloud.ruoyi.vip</a></p><p><span style=\"color: rgb(51, 51, 51);\">演示地址【移动端版】:&nbsp;</span><a href=\"http://h5.ruoyi.vip\" target=\"_blank\">http://h5.ruoyi.vip</a></p><p><br style=\"color: rgb(48, 49, 51); font-family: &quot;Helvetica Neue&quot;, Helvetica, Arial, sans-serif; font-size: 12px;\"></p>', '0', 'admin', sysdate(), '', null, '管理员');
    
    
    -- ----------------------------
    -- 19、代码生成业务表
    -- ----------------------------
    drop table if exists gen_table;
    create table gen_table (
      table_id             bigint(20)      not null auto_increment    comment '编号',
      table_name           varchar(200)    default ''                 comment '表名称',
      table_comment        varchar(500)    default ''                 comment '表描述',
      sub_table_name       varchar(64)     default null               comment '关联子表的表名',
      sub_table_fk_name    varchar(64)     default null               comment '子表关联的外键名',
      class_name           varchar(100)    default ''                 comment '实体类名称',
      tpl_category         varchar(200)    default 'crud'             comment '使用的模板(crud单表操作 tree树表操作 sub主子表操作)',
      package_name         varchar(100)                               comment '生成包路径',
      module_name          varchar(30)                                comment '生成模块名',
      business_name        varchar(30)                                comment '生成业务名',
      function_name        varchar(50)                                comment '生成功能名',
      function_author      varchar(50)                                comment '生成功能作者',
      form_col_num         int(1)          default 1                  comment '表单布局(单列 双列 三列)',
      gen_type             char(1)         default '0'                comment '生成代码方式(0zip压缩包 1自定义路径)',
      gen_path             varchar(200)    default '/'                comment '生成路径(不填默认项目路径)',
      options              varchar(1000)                              comment '其它生成选项',
      create_by            varchar(64)     default ''                 comment '创建者',
      create_time 	       datetime                                   comment '创建时间',
      update_by            varchar(64)     default ''                 comment '更新者',
      update_time          datetime                                   comment '更新时间',
      remark               varchar(500)    default null               comment '备注',
      primary key (table_id)
    ) engine=innodb auto_increment=1 comment = '代码生成业务表';
    
    
    -- ----------------------------
    -- 20、代码生成业务表字段
    -- ----------------------------
    drop table if exists gen_table_column;
    create table gen_table_column (
      column_id         bigint(20)      not null auto_increment    comment '编号',
      table_id          bigint(20)                                 comment '归属表编号',
      column_name       varchar(200)                               comment '列名称',
      column_comment    varchar(500)                               comment '列描述',
      column_type       varchar(100)                               comment '列类型',
      java_type         varchar(500)                               comment 'JAVA类型',
      java_field        varchar(200)                               comment 'JAVA字段名',
      is_pk             char(1)                                    comment '是否主键(1是)',
      is_increment      char(1)                                    comment '是否自增(1是)',
      is_required       char(1)                                    comment '是否必填(1是)',
      is_insert         char(1)                                    comment '是否为插入字段(1是)',
      is_edit           char(1)                                    comment '是否编辑字段(1是)',
      is_list           char(1)                                    comment '是否列表字段(1是)',
      is_query          char(1)                                    comment '是否查询字段(1是)',
      query_type        varchar(200)    default 'EQ'               comment '查询方式(等于、不等于、大于、小于、范围)',
      html_type         varchar(200)                               comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)',
      dict_type         varchar(200)    default ''                 comment '字典类型',
      sort              int                                        comment '排序',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time 	    datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      primary key (column_id)
    ) engine=innodb auto_increment=1 comment = '代码生成业务表字段';



  quartz.sql: |
    DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
    DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
    DROP TABLE IF EXISTS QRTZ_LOCKS;
    DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_TRIGGERS;
    DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
    DROP TABLE IF EXISTS QRTZ_CALENDARS;
    
    -- ----------------------------
    -- 1、存储每一个已配置的 jobDetail 的详细信息
    -- ----------------------------
    create table QRTZ_JOB_DETAILS (
        sched_name           varchar(120)    not null            comment '调度名称',
        job_name             varchar(200)    not null            comment '任务名称',
        job_group            varchar(200)    not null            comment '任务组名',
        description          varchar(250)    null                comment '相关介绍',
        job_class_name       varchar(250)    not null            comment '执行任务类名称',
        is_durable           varchar(1)      not null            comment '是否持久化',
        is_nonconcurrent     varchar(1)      not null            comment '是否并发',
        is_update_data       varchar(1)      not null            comment '是否更新数据',
        requests_recovery    varchar(1)      not null            comment '是否接受恢复执行',
        job_data             blob            null                comment '存放持久化job对象',
        primary key (sched_name, job_name, job_group)
    ) engine=innodb comment = '任务详细信息表';
    
    -- ----------------------------
    -- 2、 存储已配置的 Trigger 的信息
    -- ----------------------------
    create table QRTZ_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_name         varchar(200)    not null            comment '触发器的名字',
        trigger_group        varchar(200)    not null            comment '触发器所属组的名字',
        job_name             varchar(200)    not null            comment 'qrtz_job_details表job_name的外键',
        job_group            varchar(200)    not null            comment 'qrtz_job_details表job_group的外键',
        description          varchar(250)    null                comment '相关介绍',
        next_fire_time       bigint(13)      null                comment '上一次触发时间(毫秒)',
        prev_fire_time       bigint(13)      null                comment '下一次触发时间(默认为-1表示不触发)',
        priority             integer         null                comment '优先级',
        trigger_state        varchar(16)     not null            comment '触发器状态',
        trigger_type         varchar(8)      not null            comment '触发器的类型',
        start_time           bigint(13)      not null            comment '开始时间',
        end_time             bigint(13)      null                comment '结束时间',
        calendar_name        varchar(200)    null                comment '日程表名称',
        misfire_instr        smallint(2)     null                comment '补偿执行的策略',
        job_data             blob            null                comment '存放持久化job对象',
        primary key (sched_name, trigger_name, trigger_group),
        foreign key (sched_name, job_name, job_group) references QRTZ_JOB_DETAILS(sched_name, job_name, job_group)
    ) engine=innodb comment = '触发器详细信息表';
    
    -- ----------------------------
    -- 3、 存储简单的 Trigger,包括重复次数,间隔,以及已触发的次数
    -- ----------------------------
    create table QRTZ_SIMPLE_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        repeat_count         bigint(7)       not null            comment '重复的次数统计',
        repeat_interval      bigint(12)      not null            comment '重复的间隔时间',
        times_triggered      bigint(10)      not null            comment '已经触发的次数',
        primary key (sched_name, trigger_name, trigger_group),
        foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
    ) engine=innodb comment = '简单触发器的信息表';
    
    -- ----------------------------
    -- 4、 存储 Cron Trigger,包括 Cron 表达式和时区信息
    -- ---------------------------- 
    create table QRTZ_CRON_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        cron_expression      varchar(200)    not null            comment 'cron表达式',
        time_zone_id         varchar(80)                         comment '时区',
        primary key (sched_name, trigger_name, trigger_group),
        foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
    ) engine=innodb comment = 'Cron类型的触发器表';
    
    -- ----------------------------
    -- 5、 Trigger 作为 Blob 类型存储(用于 Quartz 用户用 JDBC 创建他们自己定制的 Trigger 类型,JobStore 并不知道如何存储实例的时候)
    -- ---------------------------- 
    create table QRTZ_BLOB_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        blob_data            blob            null                comment '存放持久化Trigger对象',
        primary key (sched_name, trigger_name, trigger_group),
        foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
    ) engine=innodb comment = 'Blob类型的触发器表';
    
    -- ----------------------------
    -- 6、 以 Blob 类型存储存放日历信息, quartz可配置一个日历来指定一个时间范围
    -- ---------------------------- 
    create table QRTZ_CALENDARS (
        sched_name           varchar(120)    not null            comment '调度名称',
        calendar_name        varchar(200)    not null            comment '日历名称',
        calendar             blob            not null            comment '存放持久化calendar对象',
        primary key (sched_name, calendar_name)
    ) engine=innodb comment = '日历信息表';
    
    -- ----------------------------
    -- 7、 存储已暂停的 Trigger 组的信息
    -- ---------------------------- 
    create table QRTZ_PAUSED_TRIGGER_GRPS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        primary key (sched_name, trigger_group)
    ) engine=innodb comment = '暂停的触发器表';
    
    -- ----------------------------
    -- 8、 存储与已触发的 Trigger 相关的状态信息,以及相联 Job 的执行信息
    -- ---------------------------- 
    create table QRTZ_FIRED_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        entry_id             varchar(95)     not null            comment '调度器实例id',
        trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        instance_name        varchar(200)    not null            comment '调度器实例名',
        fired_time           bigint(13)      not null            comment '触发的时间',
        sched_time           bigint(13)      not null            comment '定时器制定的时间',
        priority             integer         not null            comment '优先级',
        state                varchar(16)     not null            comment '状态',
        job_name             varchar(200)    null                comment '任务名称',
        job_group            varchar(200)    null                comment '任务组名',
        is_nonconcurrent     varchar(1)      null                comment '是否并发',
        requests_recovery    varchar(1)      null                comment '是否接受恢复执行',
        primary key (sched_name, entry_id)
    ) engine=innodb comment = '已触发的触发器表';
    
    -- ----------------------------
    -- 9、 存储少量的有关 Scheduler 的状态信息,假如是用于集群中,可以看到其他的 Scheduler 实例
    -- ---------------------------- 
    create table QRTZ_SCHEDULER_STATE (
        sched_name           varchar(120)    not null            comment '调度名称',
        instance_name        varchar(200)    not null            comment '实例名称',
        last_checkin_time    bigint(13)      not null            comment '上次检查时间',
        checkin_interval     bigint(13)      not null            comment '检查间隔时间',
        primary key (sched_name, instance_name)
    ) engine=innodb comment = '调度器状态表';
    
    -- ----------------------------
    -- 10、 存储程序的悲观锁的信息(假如使用了悲观锁)
    -- ---------------------------- 
    create table QRTZ_LOCKS (
        sched_name           varchar(120)    not null            comment '调度名称',
        lock_name            varchar(40)     not null            comment '悲观锁名称',
        primary key (sched_name, lock_name)
    ) engine=innodb comment = '存储的悲观锁信息表';
    
    -- ----------------------------
    -- 11、 Quartz集群实现同步机制的行锁表
    -- ---------------------------- 
    create table QRTZ_SIMPROP_TRIGGERS (
        sched_name           varchar(120)    not null            comment '调度名称',
        trigger_name         varchar(200)    not null            comment 'qrtz_triggers表trigger_name的外键',
        trigger_group        varchar(200)    not null            comment 'qrtz_triggers表trigger_group的外键',
        str_prop_1           varchar(512)    null                comment 'String类型的trigger的第一个参数',
        str_prop_2           varchar(512)    null                comment 'String类型的trigger的第二个参数',
        str_prop_3           varchar(512)    null                comment 'String类型的trigger的第三个参数',
        int_prop_1           int             null                comment 'int类型的trigger的第一个参数',
        int_prop_2           int             null                comment 'int类型的trigger的第二个参数',
        long_prop_1          bigint          null                comment 'long类型的trigger的第一个参数',
        long_prop_2          bigint          null                comment 'long类型的trigger的第二个参数',
        dec_prop_1           numeric(13,4)   null                comment 'decimal类型的trigger的第一个参数',
        dec_prop_2           numeric(13,4)   null                comment 'decimal类型的trigger的第二个参数',
        bool_prop_1          varchar(1)      null                comment 'Boolean类型的trigger的第一个参数',
        bool_prop_2          varchar(1)      null                comment 'Boolean类型的trigger的第二个参数',
        primary key (sched_name, trigger_name, trigger_group),
        foreign key (sched_name, trigger_name, trigger_group) references QRTZ_TRIGGERS(sched_name, trigger_name, trigger_group)
    ) engine=innodb comment = '同步机制的行锁表';
    
    commit;

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-mysql-server
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: db
  template: 
    metadata:
      labels:
         apps: db
    spec:
      volumes:
      - name: datetime
        hostPath:
          path: /etc/localtime
      - name: mycnf
        configMap:
          name: my-cnf
          items:
          - key: my.cnf
            path: my.cnf
          - key: quartz.sql
            path: quartz.sql
          - key: ry_20250416.sql
            path: ry_20250416.sql
      containers:
      - name: db
        image: harbor250.fanxuxu.com/fanxuxu-db/mysql:8.0.36-oracle
        volumeMounts:
        - name: datetime
          mountPath: /etc/localtime
        - name: mycnf
          subPath: my.cnf
          mountPath: /etc/my.cnf
        - name: mycnf
          subPath: quartz.sql
          mountPath: /docker-entrypoint-initdb.d/quartz.sql
        - name: mycnf
          subPath: ry_20250416.sql
          mountPath: /docker-entrypoint-initdb.d/ry_20250416.sql
        env:
        - name: MYSQL_DATABASE
          value: ruoyi
        - name: MYSQL_USER
          value: linux101
        - name: MYSQL_PASSWORD
          value: fanxuxu
        - name: MYSQL_ALLOW_EMPTY_PASSWORD
          value: "yes"
        args:
        - --character-set-server=utf8mb4
        - --collation-server=utf8mb4_unicode_ci
        - --default-authentication-plugin=mysql_native_password


---

apiVersion: v1
kind: Service
metadata:
  name: svc-db
spec:
  selector:
    apps: db
  ports:
  - port: 3306

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-ruoyi
spec:
  replicas: 1
  selector:
    matchLabels:
      apps: ruoyi
  template: 
    metadata:
      labels:
         apps: ruoyi
    spec:
      containers:
      - name: ry
        image: harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single:v0.1

---

apiVersion: v1
kind: Service
metadata:
  name: svc-ruoyi
spec:
  type: LoadBalancer
  selector:
    apps: ruoyi
  ports:
  - port: 8080
[root@master231 homework]# 


	
	2.创建资源
root@master231 homework]# kubectl apply -f 01-ruoyi-single.yaml 
configmap/my-cnf created
deployment.apps/deploy-mysql-server created
service/svc-db created
deployment.apps/deploy-ruoyi created
service/svc-ruoyi created
[root@master231 homework]# 

	
	3.访问测试
[root@master231 homework]# kubectl get deploy,svc,po -o wide
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                                                      SELECTOR
deployment.apps/deploy-mysql-server   1/1     1            1           46s   db           harbor250.fanxuxu.com/fanxuxu-db/mysql:8.0.36-oracle    apps=db
deployment.apps/deploy-ruoyi          1/1     1            1           46s   ry           harbor250.fanxuxu.com/fanxuxu-ruoyi/ruoyi-single:v0.1   apps=ruoyi

NAME                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE    SELECTOR
service/kubernetes   ClusterIP      10.200.0.1       <none>        443/TCP          6d6h   <none>
service/svc-db       ClusterIP      10.200.106.23    <none>        3306/TCP         46s    apps=db
service/svc-ruoyi    LoadBalancer   10.200.205.133   10.0.0.151    8080:11243/TCP   46s    apps=xiuxian,version=v1

NAME                                       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
pod/deploy-mysql-server-5b4d44b997-lql9f   1/1     Running   0          46s   10.100.1.115   worker232   <none>           <none>
pod/deploy-ruoyi-85b477645c-mgv5c          1/1     Running   0          46s   10.100.2.156   worker233   <none>           <none>
[root@master231 homework]# 
[root@master231 homework]# 

结果图:

本地部署-前后端分离

[root@docker01 RuoYi-Vue-master]# ll
总用量 2472
drwxr-xr-x 2 root root      57  1月  9 11:13 bin
drwxr-xr-x 2 root root      43  1月  9 11:13 doc
-rw-r--r-- 1 root root    1071  1月  9 11:13 LICENSE
-rw-r--r-- 1 root root   10186  1月  9 11:13 pom.xml
-rw-r--r-- 1 root root   10156  1月  9 11:13 README.md
drwxr-xr-x 4 root root      46  1月 10 02:44 ruoyi-admin    # 后端主模块
drwxr-xr-x 4 root root      46  1月 10 02:42 ruoyi-common     # 通用模块
drwxr-xr-x 4 root root      46  1月 10 02:44 ruoyi-framework   # 核心框架
drwxr-xr-x 4 root root      46  1月 10 02:44 ruoyi-generator
drwxr-xr-x 4 root root      46  1月 10 02:44 ruoyi-quartz  #
drwxr-xr-x 4 root root      46  1月 10 02:43 ruoyi-system    # 系统模块
drwxr-xr-x 8 root root     299  1月 10 15:30 ruoyi-ui   #前端
-rw-r--r-- 1 root root    1635  1月  9 11:13 ry.bat
-rw-r--r-- 1 root root    1681  1月  9 11:13 ry.sh
drwxr-xr-x 2 root root      47  1月  9 11:13 sql   # 数据库脚本

后端

配置中红色为需要修改的地方

若依需要依赖数据库和redis

数据库创建若依专用用户:
CREATE USER 'ruoyi'@'10.0.0.%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON `ry-vue`.* TO 'ruoyi'@'10.0.0.%';
FLUSH PRIVILEGES;

--------------------------
#数据库后端乱码解决:
[root@db53 local]# cat /data/3306/my.cnf 
[mysqld]
user=mysql 
port=3306
datadir=/data/3306/data 
basedir=/usr/local/mysql 
socket=/tmp/mysql3306.sock
general_log = ON
general_log_file =/var/log/mysql3306/master_general.log

character-set-server = utf8mb4     #定义客户端字符集,防止客户端乱码
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'

server_id=53   
gtid-mode=on
enforce-gtid-consistency=true
log-slave-updates=1


redis部署与密码权限设置:
1.安装redis依赖
红帽:yum install -y gcc gcc-c++ automake autoconf libtool make tcl libssl-devel glibc-devel libatomic
Debian:apt install -y gcc g++ automake autoconf libtool make tcl8.6 libssl-dev libc6-dev libatomic1
2. 安装部署 Redis:
wget https://download.redis.io/releases/redis-6.2.12.tar.gz
tar xf redis-6.2.12.tar.gz -C /usr/local/
cd /usr/local/
ln -s redis-6.2.12 redis
cd redis
make && make install
vim /etc/profile
export PATH="/usr/local/redis/src:$PATH"
source /etc/profile
3. 启动 redis
redis-server &

#Redis基础配置与管理
mkdir -p /data/6379
#编写配置文件(记得把注释去掉)
cat >/data/6379/redis.conf<<EOF   
daemonize yes
bind 10.0.0.53 127.0.0.1 #白名单
requirepass 123456
protected-mode no
port 6379
logfile /data/6379/redis.log
dir /data/6379
dbfilename dump.rdb
EOF
redis-server /data/6379/redis.conf 
#远程连接测试
[root@db53 ~]# redis-cli -h 10.0.0.53

如果加载不到配置文件,可以进入redis内部设置
redis-cli
CONFIG SET requirepass 123456
CONFIG SETprotected-mode no
数据库连接
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://10.0.0.53:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: ruoyi
                password: 123456
            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                enabled: false
                url: 
                username: 
                password: 
            # 初始连接数
            initialSize: 5
            # 最小连接池数量
            minIdle: 10
            # 最大连接池数量
            maxActive: 20
            # 配置获取连接等待超时的时间
            maxWait: 60000
            # 配置连接超时时间
            connectTimeout: 30000
            # 配置网络超时时间
            socketTimeout: 60000
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
            timeBetweenEvictionRunsMillis: 60000
            # 配置一个连接在池中最小生存的时间,单位是毫秒
            minEvictableIdleTimeMillis: 300000
            # 配置一个连接在池中最大生存的时间,单位是毫秒
            maxEvictableIdleTimeMillis: 900000
            # 配置检测连接是否有效
            validationQuery: SELECT 1 FROM DUAL
            testWhileIdle: true
            testOnBorrow: false
            testOnReturn: false
            webStatFilter: 
                enabled: true
            statViewServlet:
                enabled: true
                # 设置白名单,不填则允许所有访问
                allow:
                url-pattern: /druid/*
                # 控制台管理用户名和密码
                login-username: ruoyi
                login-password: 123456
            filter:
                stat:
                    enabled: true
                    # 慢SQL记录
                    log-slow-sql: true
                    slow-sql-millis: 1000
                    merge-sql: true
                wall:
                    config:
                        multi-statement-allow: true

redis连接配置
vim ruoyi-admin/src/main/resources/application.yml
# 项目相关配置
ruoyi:
  # 名称
  name: RuoYi
  # 版本
  version: 3.9.1
  # 版权年份
  copyrightYear: 2026
  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
  profile: D:/ruoyi/uploadPath
  # 获取ip地址开关
  addressEnabled: false
  # 验证码类型 math 数字计算 char 字符验证
  captchaType: math

# 开发环境配置
server:
  # 服务器的HTTP端口,默认为8080
  port: 8080   #后端连接端口
  servlet:
    # 应用的访问路径
    context-path: /
  tomcat:
    # tomcat的URI编码
    uri-encoding: UTF-8
    # 连接数满后的排队数,默认为100
    accept-count: 1000
    threads:
      # tomcat最大线程数,默认为200
      max: 800
      # Tomcat启动初始化的线程数,默认值10
      min-spare: 100

# 日志配置
logging:
  level:
    com.ruoyi: debug
    org.springframework: warn

# 用户配置
user:
  password:
    # 密码最大错误次数
    maxRetryCount: 5
    # 密码锁定时间(默认10分钟)
    lockTime: 10

# Spring配置
spring:
  # 资源信息
  messages:
    # 国际化资源文件路径
    basename: i18n/messages
  profiles:
    active: druid
  # 文件上传
  servlet:
    multipart:
      # 单个文件大小
      max-file-size: 10MB
      # 设置总上传的文件大小
      max-request-size: 20MB
  # 服务模块
  devtools:
    restart:
      # 热部署开关
      enabled: true
  # redis 配置
  redis:
    # 地址
    host: 10.0.0.53   #redis服务器ip
    # 端口,默认为6379
    port: 6379     
    # 数据库索引
    database: 1
    # 密码
    password: 123456
    # 连接超时时间
    timeout: 200s
    lettuce:
      pool:
        # 连接池中的最小空闲连接
        min-idle: 2
        # 连接池中的最大空闲连接
        max-idle: 8
        # 连接池的最大数据库连接数
        max-active: 8 
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
        max-wait: -1ms

# token配置
token:
  # 令牌自定义标识
  header: Authorization
  # 令牌密钥
  secret: abcdefghijklmnopqrstuvwxyz
  # 令牌有效期(默认30分钟)
  expireTime: 30

# MyBatis配置
mybatis:
  # 搜索指定包别名
  typeAliasesPackage: com.ruoyi.**.domain
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/**/*Mapper.xml
  # 加载全局的配置文件
  configLocation: classpath:mybatis/mybatis-config.xml

# PageHelper分页插件
pagehelper:
  helperDialect: mysql
  supportMethodsArguments: true
  params: count=countSql

# Swagger配置
swagger:
  # 是否开启swagger
  enabled: true
  # 请求前缀
  pathMapping: /dev-api

# 防盗链配置
referer:
  # 防盗链开关
  enabled: false
  # 允许的域名列表
  allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip

# 防止XSS攻击
xss:
  # 过滤开关
  enabled: true
  # 排除链接(多个用逗号分隔)
  excludes: /system/notice
  # 匹配链接
  urlPatterns: /system/*,/monitor/*,/tool/*


-----------------------------------------------------------

java -jar ruoyi-admin/target/ruoyi-admin.jar
nohup java -jar ruoyi-admin/target/ruoyi-admin.jar > nohup.out 2>&1 &

前端

配置中红色为需要修改的地方

#进入前端目录
cd ruoyi-ui

#编辑连接后端的配置文件
[root@docker01 ruoyi-ui]# vim vue.config.js
'use strict'
const path = require('path')

function resolve(dir) {
  return path.join(__dirname, dir)
}

const CompressionPlugin = require('compression-webpack-plugin')

const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题

const baseUrl = 'http://localhost:8080' // 后端接口

const port = process.env.port || process.env.npm_config_port || 80 // 端口

// vue.config.js 配置说明
//官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions
// 这里只列一部分,具体配置参考文档
module.exports = {
  // 部署生产环境和开发环境下的URL。
  // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上
  // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
  publicPath: process.env.NODE_ENV === "production" ? "/" : "/",
  // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist)
  outputDir: 'dist',
  // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下)
  assetsDir: 'static',
  // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。
  productionSourceMap: false,
  transpileDependencies: ['quill'],
  // webpack-dev-server 相关配置
  devServer: {
    host: '0.0.0.0',
    port: 80,  #这是本地测试端口
    open: true,
    proxy: {
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: 'http://10.0.0.81:8080',
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: '/ruoyi'
        }
      },
......


# 安装依赖
npm install --registry=https://registry.npmmirror.com
# 本地开发 启动项目测试
npm run dev
# 项目开发完毕,只需要运行一行命令就可以打包你的应用
npm run build:prod
--------------------------------------------------------------

生成一个dist的目录,前端在nginx上部署
yum install -y nginx   #如果有则跳过此步骤
systemctl start nginx.service 
systemctl status nginx.service 

# 备份 Nginx 原有静态文件
mv /usr/share/nginx/html /usr/share/nginx/html.bak

# 复制最新的 dist 目录到 Nginx 目录,并重命名为 html
cp -r ruoyi-ui/dist /usr/share/nginx/html

vim /etc/nginx/conf.d/ruoyi.conf
server {
    listen       80; # 前端访问端口
    server_name  localhost;

    # 前端静态文件根目录
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    # 解决 Vue 路由刷新 404 问题
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 反向代理:将 /prod-api 请求转发到后端服务器
    location /prod-api/ {
        proxy_pass http://10.0.0.81:8080/; # 后端 IP+端口,末尾的 / 必须加
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

[root@docker01 ruoyi-ui]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@docker01 ruoyi-ui]# systemctl restart nginx.service 

访问:http://你服务器IP

结果图

K8s部署前后端分离

思路:

1.将本地部署的前后端分离若依项目打包成镜像,需要思考一个问题,打包的镜像是本地部署的配置,放到 K8s 上要怎么修改?

a.本地的配置文件直接修改,用 svc 名字,修改后重新编译,再写 Dockerfile 打包成镜像

b.直接编写 Dockerfile 打包本地镜像,通过 cm 修改容器中配置

2.将镜像上传到镜像仓库

构建镜像,推送至 harbor 镜像仓库

登录镜像仓库docker login harbor.xxx.com

推送镜像到仓库 docker push harbor.xxx.com/ruoyi/ruoyi-backend:v3.9.1 ........

3.编写资源清单

  • 先编写数据库与 Redis 资源清单

a.做了数据持久化(nfs),本地:/yinzhengjie/data/nfs-server/mysql

b.将数据库数据也做了挂载,方便到容器中导入,本地:/yinzhengjie/data/nfs-server/mysql-sql

root@master231:~/ruoyi-fb-项目# ll /yinzhengjie/data/nfs-server/mysql-sql/

-rw-r--r-- 1 lxd root 11985 1月 9 11:13 quartz.sql

-rw-r--r-- 1 lxd root 58075 1月 9 11:13 ry_20250522.sql

c.最后是若依乱码问题,一定要在 my.cnf 这个配置文件中定义客户端字符集,并挂载到容器的/etc/mysql/conf.d/下

  • 再编写前后端资源清单

a.需要修改所有配置文件,访问改为 svc 的名字

b.将配置文件可以以 cm 的形式,替换容器中配置文件

c.另外配置文件除了修改 svc 还有一些地方需要修改,不然会有小坑

【 在 JDBC URL 末尾添加 &allowPublicKeyRetrieval=true 参数,完整 URL 示例如下:

url: jdbc:mysql://svc-mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true

d.apply 启动后需要 exec 进入容器删除 nginx 默认配置文件,并重新加载

Dockerfile编写(打包成镜像)

[root@docker01 RuoYi-Vue-master]# cat Dockerfile-rouyi-f 
FROM nginx:1.24-alpine

MAINTAINER name <123@qq.com>

COPY ./ruoyi-ui/dist/ /usr/share/nginx/html/

COPY ./ruoyi.conf /etc/nginx/conf.d/

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

[root@docker01 RuoYi-Vue-master]# cat Dockerfile-rouyi-b 
FROM openjdk:11

MAINTAINER fanxuxu <549202119@qq.com>

WORKDIR /app

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

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "/app/ruoyi-admin.jar"]

构建镜像:
[root@docker01 RuoYi-Vue-master]# docker build -t harbor250.fanxuxu.com/web/ruoyi-frontend:v1.0 .

登录仓库
[root@docker01 RuoYi-Vue-master]# docker push harbor250.fanxuxu.com/web/ruoyi-frontend:v1.0

上传到镜像仓库
[root@docker01 RuoYi-Vue-master]# docker push harbor250.fanxuxu.com/web/ruoyi-frontend:v1.0

数据库与Redis 资源清单

用户:root,密码:123456

用户:ruoyi,密码:123456

数据库:ry-vue

我将 sql 中两个数据库以挂载的方式传入到容器中/tmp/sql/

apply 启动数据库后要 exec 进入到数据库中,将两个数据库导入 ry-vye 库中

本地需要创建两个目录(如果用我的资源清单)

本地:/yinzhengjie/data/nfs-server/mysql

本地:/yinzhengjie/data/nfs-server/mysql-sql

root@master231:~/ruoyi-fb-项目# cat ruoyi-mysql-redis.yaml 
# cm-mysql
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-mycnf
data:
  my.cnf: |
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    init_connect = 'SET NAMES utf8mb4'  # 普通用户会话自动设为utf8mb4
    
    [client]
    default-character-set = utf8mb4  # 客户端默认编码
    
    [mysql]
    default-character-set = utf8mb4  # mysql终端默认编码
---
# deploy-mysql(挂载ConfigMap配置,实现编码统一)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      nodeSelector:
        kubernetes.io/hostname: worker232
      securityContext:
        fsGroup: 999
      containers:
      - name: ruoyi-mysql
        image: harbor250.fanxuxu.com/web/mysql:8.0.36-oracle
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_DATABASE
          value: "ry-vue"
        - name: MYSQL_USER
          value: "ruoyi"
        - name: MYSQL_PASSWORD
          value: "123456"
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        args:
        # 仅保留认证插件参数(字符集已由ConfigMap配置)
        - --default-authentication-plugin=caching_sha2_password
        volumeMounts:
        # 挂载MySQL数据持久化目录
        - name: mysql-data
          mountPath: /var/lib/mysql
        # 挂载SQL文件目录(用于手动导入)
        - name: mysql-sql-nfs
          mountPath: /tmp/sql
        # 挂载ConfigMap中的字符集配置(覆盖默认编码)
        - name: mysql-conf
          mountPath: /etc/mysql/conf.d/my.cnf
          subPath: my.cnf  # 只挂载ConfigMap中的my.cnf文件
      volumes:
      # MySQL数据持久化(NFS)
      - name: mysql-data
        nfs:
          server: 10.0.0.231
          path: /yinzhengjie/data/nfs-server/mysql
      # SQL文件目录(NFS)
      - name: mysql-sql-nfs
        nfs:
          server: 10.0.0.231
          path: /yinzhengjie/data/nfs-server/mysql-sql
      # 挂载字符集ConfigMap
      - name: mysql-conf
        configMap:
          name: mysql-mycnf 

---
# svc-mysql
apiVersion: v1
kind: Service
metadata:
  name: svc-mysql
spec:
  ports:
  - port: 3306
    targetPort: 3306
  selector:
    app: mysql

---
# redis Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      nodeSelector:
        kubernetes.io/hostname: worker232  # 和MySQL同节点
      securityContext:
        fsGroup: 1000 
      containers:
      - name: ruoyi-redis
        image: harbor250.fanxuxu.com/web/redis:6.0.6  # 你的Harbor镜像地址
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 6379
        args:  
        - --requirepass "123456"
        - --appendonly yes 
        volumeMounts:
        - name: redis-data
          mountPath: /data 
      volumes:
      - name: redis-data
        nfs:
          server: 10.0.0.231
          path: /yinzhengjie/data/nfs-server/redis 


---
# svc-redis
apiVersion: v1
kind: Service
metadata:
  name: svc-redis
spec:
  ports:
  - port: 6379
    targetPort: 6379
  selector:
    app: redis
root@master231:~/ruoyi-fb-项目# kubectl exec -it mysql-7785f48d44-2cp7n -- sh

sh-4.4# mysql -uroot -p123456 ry-vue </tmp/sql/quartz.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

sh-4.4# mysql -uroot -p123456 ry-vue </tmp/sql/ry_20250522.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

sh-4.4# mysql -uroot -p123456                                  
mysql> show variables  like '%char%';    #查看字符集一定都是utf8mb4    
+--------------------------+--------------------------------+
| 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)

前后端 资源清单

运行后需要进入前端容器删除默认 nginx 子配置文件

root@master231:~/ruoyi-fb-项目# cat ruoyi-frontend-backend.yaml 
# 第一部分:若依后端配置ConfigMap(先创建,供后端Pod挂载)
apiVersion: v1
kind: ConfigMap
metadata:
  name: ruoyi-backend-config  
data:
  application-druid.yml: |
    # 数据源配置
    spring:
        datasource:
            type: com.alibaba.druid.pool.DruidDataSource
            driverClassName: com.mysql.cj.jdbc.Driver
            druid:
                # 主库数据源
                master:
                    url: jdbc:mysql://svc-mysql:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
                    username: ruoyi
                    password: 123456
                # 从库数据源
                slave:
                    # 从数据源开关/默认关闭
                    enabled: false
                    url: 
                    username: 
                    password: 
                # 初始连接数
                initialSize: 5
                # 最小连接池数量
                minIdle: 10
                # 最大连接池数量
                maxActive: 20
                # 配置获取连接等待超时的时间
                maxWait: 60000
                # 配置连接超时时间
                connectTimeout: 30000
                # 配置网络超时时间
                socketTimeout: 60000
                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
                timeBetweenEvictionRunsMillis: 60000
                # 配置一个连接在池中最小生存的时间,单位是毫秒
                minEvictableIdleTimeMillis: 300000
                # 配置一个连接在池中最大生存的时间,单位是毫秒
                maxEvictableIdleTimeMillis: 900000
                # 配置检测连接是否有效
                validationQuery: SELECT 1 FROM DUAL
                testWhileIdle: true
                testOnBorrow: false
                testOnReturn: false
                webStatFilter: 
                    enabled: true
                statViewServlet:
                    enabled: true
                    # 设置白名单,不填则允许所有访问
                    allow:
                    url-pattern: /druid/*
                    # 控制台管理用户名和密码
                    login-username: ruoyi
                    login-password: 123456
                filter:
                    stat:
                        enabled: true
                        # 慢SQL记录
                        log-slow-sql: true
                        slow-sql-millis: 1000
                        merge-sql: true
                    wall:
                        config:
                            multi-statement-allow: true
  application.yml: |
    # 项目相关配置
    ruoyi:
      # 名称
      name: RuoYi
      # 版本
      version: 3.9.1
      # 版权年份
      copyrightYear: 2026
      profile: D:/ruoyi/uploadPath
      # 获取ip地址开关
      addressEnabled: false
      # 验证码类型 math 数字计算 char 字符验证
      captchaType: math

    # 开发环境配置
    server:
      # 服务器的HTTP端口,默认为8080
      port: 8080
      servlet:
        # 应用的访问路径
        context-path: /
      tomcat:
        # tomcat的URI编码
        uri-encoding: UTF-8
        # 连接数满后的排队数,默认为100
        accept-count: 1000
        threads:
          # tomcat最大线程数,默认为200
          max: 800
          # Tomcat启动初始化的线程数,默认值10
          min-spare: 100

    # 日志配置
    logging:
      level:
        com.ruoyi: debug
        org.springframework: warn

    # 用户配置
    user:
      password:
        # 密码最大错误次数
        maxRetryCount: 5
        # 密码锁定时间(默认10分钟)
        lockTime: 10

    # Spring配置
    spring:
      # 资源信息
      messages:
        # 国际化资源文件路径
        basename: i18n/messages
      profiles:
        active: druid
      # 文件上传
      servlet:
        multipart:
          # 单个文件大小
          max-file-size: 10MB
          # 设置总上传的文件大小
          max-request-size: 20MB
      # 服务模块
      devtools:
        restart:
          # 热部署开关
          enabled: true
      # redis 配置
      redis:
        # 地址
        host: svc-redis 
        # 端口,默认为6379
        port: 6379
        # 数据库索引
        database: 1
        # 密码
        password: 123456
        # 连接超时时间
        timeout: 200s
        lettuce:
          pool:
            # 连接池中的最小空闲连接
            min-idle: 2
            # 连接池中的最大空闲连接
            max-idle: 8
            # 连接池的最大数据库连接数
            max-active: 8 
            # 连接池最大阻塞等待时间(使用负值表示没有限制)
            max-wait: -1ms

    # token配置
    token:
      # 令牌自定义标识
      header: Authorization
      # 令牌密钥
      secret: abcdefghijklmnopqrstuvwxyz
      # 令牌有效期(默认30分钟)
      expireTime: 30

    # MyBatis配置
    mybatis:
      # 搜索指定包别名
      typeAliasesPackage: com.ruoyi.**.domain
      # 配置mapper的扫描,找到所有的mapper.xml映射文件
      mapperLocations: classpath*:mapper/**/*Mapper.xml
      # 加载全局的配置文件
      configLocation: classpath:mybatis/mybatis-config.xml

    # PageHelper分页插件
    pagehelper:
      helperDialect: mysql
      supportMethodsArguments: true
      params: count=countSql

    # Swagger配置
    swagger:
      # 是否开启swagger
      enabled: true
      # 请求前缀
      pathMapping: /dev-api

    # 防盗链配置
    referer:
      # 防盗链开关
      enabled: false
      # 允许的域名列表
      allowed-domains: localhost,127.0.0.1,ruoyi.vip,www.ruoyi.vip

    # 防止XSS攻击
    xss:
      # 过滤开关
      enabled: true
      # 排除链接(多个用逗号分隔)
      excludes: /system/notice
      # 匹配链接
      urlPatterns: /system/*,/monitor/*,/tool/*

---
# 第二部分:若依前端Nginx配置ConfigMap(先创建,供前端Pod挂载)
apiVersion: v1
kind: ConfigMap
metadata:
  name: ruoyi-nginx-config  # 与后续前端Deployment引用的CM名称一致
data:
  ruoyi.conf: |
      server {
          listen 80;
          server_name _;
          charset utf-8;
          
          location / {
              root /usr/share/nginx/html;
              try_files $uri $uri/ /index.html;
              index index.html index.htm;
          }
          
          location /prod-api/ {
              proxy_pass http://svc-ruoyi-backend:8080/;
              
              proxy_set_header Host $host;
              proxy_set_header X-Real-IP $remote_addr;
              proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
              proxy_set_header X-Forwarded-Proto $scheme;
              
              proxy_connect_timeout 60s;
              proxy_read_timeout 60s;
              proxy_send_timeout 60s;
          }
      }    
    
---
# 第三部分:若依后端(ruoyi-admin)Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-backend
  template:
    metadata:
      labels:
        app: ruoyi-backend
    spec:
      nodeSelector:
        kubernetes.io/hostname: worker232  # 指定worker232节点
      containers:
      - name: ruoyi-backend
        # 替换为你推送到Harbor的若依后端镜像(v1.0版本)
        image: harbor250.fanxuxu.com/web/ruoyi-backend:v1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080  # 若依后端默认端口
        volumeMounts:
        # 挂载后端CM到容器内Spring Boot优先加载的conf目录
        - name: ruoyi-backend-cm-volume
          mountPath: /app/conf  # 需与镜像内jar包所在目录同级
        # 启动命令:明确指定加载外部conf目录配置,确保CM配置生效
        command: ["java", "-jar", "/app/ruoyi-admin.jar", "--spring.config.location=file:/app/conf/"]
      volumes:
      # 引用后端ConfigMap创建数据卷
      - name: ruoyi-backend-cm-volume
        configMap:
          name: ruoyi-backend-config  # 对应上方创建的后端CM名称
          items:
          - key: application-druid.yml
            path: application-druid.yml
          - key: application.yml
            path: application.yml

---
# 第四部分:若依后端Service(ClusterIP,集群内部访问)
apiVersion: v1
kind: Service
metadata:
  name: svc-ruoyi-backend
spec:
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: ruoyi-backend
  type: ClusterIP

---
# 第五部分:若依前端(Nginx)Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ruoyi-frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ruoyi-frontend
  template:
    metadata:
      labels:
        app: ruoyi-frontend
    spec:
      nodeSelector:
        kubernetes.io/hostname: worker232
      containers:
      - name: ruoyi-frontend
        image: harbor250.fanxuxu.com/web/ruoyi-frontend:v1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80  
        volumeMounts:
        - name: ruoyi-nginx-cm-volume
          mountPath: /etc/nginx/conf.d/ruoyi.conf
          subPath: ruoyi.conf
      volumes:
      - name: ruoyi-nginx-cm-volume
        configMap:
          name: ruoyi-nginx-config  
          defaultMode: 0644 


---
# 第六部分:若依前端Service(NodePort,外部访问)
apiVersion: v1
kind: Service
metadata:
  name: svc-ruoyi-frontend
spec:
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30080  # 外部访问端口,写了固定的
  selector:
    app: ruoyi-frontend
  type: NodePort
root@master231:~/ruoyi-fb-项目# kubectl exec -it ruoyi-frontend-6cf6f89d44-8gpg9 -- sh
/ # rm -rf /etc/nginx/conf.d/default.conf 
/ # nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
/ # nginx -s reload
2026/01/11 12:07:48 [notice] 40#40: signal process started
/ #