若依微服务部署,裸服务部署、docker部署、k8s部署
目录
- 前言
- windows 部署若依-微服务版本
- 浏览器验证
- docker部署若依-微服务版本
- 浏览器验证
- k8s部署若依-微服务版本
- 浏览器验证
- 总结
前言
环境:centos7、Win10
若依是一个合适新手部署练习的开源的微服务项目,本篇讲解Windows部署若依微服务、docker部署若依微服务、k8s部署若依微服务等3种方式。
若依是一个基于SpringBoot2.0的权限管理系统,同时使用到了mysql、redis、nacos等技术,这里更好理解一下java程序是如何使用nacos的。
windows 部署若依-微服务版本
下载若依的源代码:https://gitee.com/y_project/RuoYi-Cloud
,克隆/下载,下载ZIP即可。下载后解压到D:\ruoyi-cloud
文件夹即可。
按照官网,我们部署若依微服务版本:https://doc.ruoyi.vip/ruoyi-cloud/
#官网写的部署环境要求,所以选择的版本要满足要求
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 12
nacos >= 2.0.4 (ruoyi-cloud < 3.0 需要下载nacos >= 1.4.x版本)
sentinel >= 1.6.0
#windows安装jdk1.8
下载地址:https://javadl.oracle.com/webapps/download/GetFile/1.8.0_301-b09/d3c52aa6bfa54d3ca74e617f18309292/windows-i586/jdk-8u301-windows-x64.exe
1. 打开环境变量配置。计算机→属性→高级系统设置→高级→环境变量,在系统变量中配置。
2. 配置JAVA_HOME。新建,变量名JAVA_HOME,变量值=jdk路径,我的路径是C:\Program Files\Java\jdk1.8.0_301 ( 最后的路径不要写斜杠)保存。
3. 配置CLASSPATH。新建,变量名CLASSPATH,变量值等于.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(第一个分号前面有一个点)。
4. 配置Path。选中Path变量,点编辑按钮,在变量值最前加入%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
5. 运行cmd,输入java -version,显示java版本则成功。
#windows安装 apache-maven-3.8.8
下载Windows的zip包:https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.zip
解压即可。
配置环境变量,变量名和值对应如下:
M2_HOME D:\apache-maven-3.8.8\bin
MAVEN_HOME D:\apache-maven-3.8.8
PATH 前面追加 %MAVEN_HOME%\bin;
#cmd验证是否正常
mvn -version
#Windows安装安装node和npm命令
#npm命令用于生成前端制品,即给前端生成dist目录
https://nodejs.org/dist/v14.4.0/node-v14.4.0-win-x64.zip
解压到 D:/node-v14.4.0-win-x64
#配置环境变量
NODE_HOME D:\node-v14.4.0-win-x64
PATH 前面追加 %NODE_HOME%;
#cmd验证是否正常
npm -v
node -v
#这里为了方便,使用Linux部署mysql,当然使用Windows安装也是可以的,Windows安装也很简单。
#linux部署mysql5.7
mkdir mysql
cd mysql/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar
tar xf mysql-5.7.38-1.el7.x86_64.rpm-bundle.tar
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
ls /etc/my*
rpm -ivh mysql-community-common-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-compat-5.7.38-1.el7.x86_64.rpm
rpm -ivh mysql-community-embedded-devel-5.7.38-1.el7.x86_64.rpm
which mysqld
id mysql
#开始初始化mysql
mysqld --initialize --user=mysql
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
grep "password" /var/log/mysqld.log
which mysql
mysql -uroot -p#%b9oE67kaj4
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Aa123456'; #修改mysql root账号密码,记住这个密码
use mysql;
update user set host='%' where user='root';
FLUSH PRIVILEGES;
exit;
systemctl restart mysqld#mysql导入数据,初始化库和表
先执行源码包里的RuoYi-Cloud-master\sql目录下的ry_config_20220929.sql文件,该文件里面有创建ry_config库和表的语句;
windows使用Navicat Premium链接mysql数据库,选择运行SQL文件导入即可。
由于ry_20230706.sql文件没有创建库的语句,根据官网得知是要创建一个名称叫做ry-cloud的库,所以参照ry_config_20220929.sql文件里面的建
库语句,复制粘贴并添加到ry_20230706.sql文件开头即可,注意修改库名为ry-cloud:
DROP DATABASE IF EXISTS `ry-cloud`;
CREATE DATABASE `ry-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `ry-cloud`;最后执行ry_20230706.sql文件即可。
这样两个必要的ry-cloud库和ry_config库都准备好了。
ry-cloud库是若依系统使用的库,ry_config库是nacos的库。
quartz.sql也可以导入ry-cloud库(可选)。
#这里为了方便,使用Linux部署redis,当然使用Windows安装也是可以的,Windows安装也很简单。
#Linux安装redis3.2
yum install redis -y
vim /etc/redis.conf
bind 192.168.244.150 #设置监听IP为本机IP
systemctl enable --now redis
redis服务器启动成功之后,在Windows使用Redis Desktop Manager 链接成功即可。这里默认redis没有配置密码。
#这里为了方便,使用Linux部署nacos,当然使用Windows安装也是可以的,Windows安装也很简单。
#Linux部署nacos
nacos需要jdk环境,所以linux服务器也要安装jdk。
#linux安装jdk1.8
#去https://www.oracle.com/java/technologies/downloads/下载对应版本的tar.gz包
tar -zxvf jdk1.8.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_211 java
cat >> /etc/profile <<'EOF'
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
EOF
source /etc/profile
java -version#安装nacos-2.2.1
#官网显示nacos >= 2.0.4,所以选择安装nacos-2.2.1
#nacos-2.2.2版本及之后的版本对登录验证有改变,需要自己配置,所以这里安装nacos-2.2.1版本
mkdir nacos-server
wget -c https://github.com/alibaba/nacos/releases/download/2.2.1/nacos-server-2.2.1.tar.gz
tar xvf nacos-server-2.2.1.tar.gz
cd nacos
vim conf/application.properties #添加下面的链接mysql的语句,注意修改mysql的IP和root密码
# db mysql
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.244.150:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=Aa123456#发现启动报错,显示登录鉴权相关的报错,官网说2.2.2之后才需要自己配置登录信息,不知道2.2.1为什么也要配置,所以就配置:
#修改下面这个几个参数的值
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=nacos
nacos.core.auth.server.identity.value=nacos
nacos.core.auth.plugin.nacos.token.secret.key=VkdocGMwbHpUWGxEZFhOMGIyMVRaV055WlhSTFpYa3dNVElocGMwbHpUWGxEZFhOMGIyMVRaV055WlhSTFpYa3dhZmR6TkRVMk56Zz0K#单机模式启动nacos
cd bin/
./startup.sh -m standalone
tail -222f /root/nacos-server/nacos/logs/start.out
#windows登录nacos
http://192.168.244.150:8848/nacos/#/login 账号密码:nacos/nacos
登录之后,一定要编辑修改每一个yml文件里面的全部的redis和mysql的相关配置,比如redis的IP,端口密码(这里我没有配置redis的密码),
mysql的IP端口root账号密码等信息,修改之后点击发布即可。
#后端项目打包,即后端项目打jar包
将若依项目导入到Eclipse,打开Eclipse,菜单 File -> Import,然后选择 Maven -> Existing Maven Projects,点击 Next> 按钮,选择工作目录,然后点击 Finish 按钮,即可成功导入。
Eclipse会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定)
注意修改全部的bootstrap.yml文件的redis地址,nacos地址等信息,bootstrap.yml文件基本在下面这样的路径:
./ruoyi-auth/src/main/resources/bootstrap.yml
./ruoyi-gateway/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
./ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml
同时bootstrap.yml文件还要添加nacos的账号密码,如下:
.........profiles:# 环境配置active: dev #这里保持默认是dev环境cloud:nacos:discovery:# 服务注册地址server-addr: 192.168.244.150:8848username: nacos #添加nacos的登录账号密码password: nacos #添加nacos的登录账号密码 config:# 配置中心地址server-addr: 192.168.244.150:8848username: nacos #添加nacos的登录账号密码password: nacos #添加nacos的登录账号密码 #这里nacos没有配置命名空间,默认是public命名空间
#修改完bootstrap.yml文件后注意保存在ruoyi项目的bin目录下执行package.bat打包Web工程,默认是生成jar包可执行文件。
打包完成之后会在对应的子项目下target目录下生成jar包。
clean.bat可以清除jar包,就是清除target目录下的文件。
jar包全都打包成功之后,可以启动jar包了,点击运行run-auth.bat文件运行启动auth即可,启动没报错显示启动正常即可,
由官网得知,只需启动下面这3个必须启动的模块即可:
(启动没有先后顺序)
RuoYiGatewayApplication (网关模块 必须)
RuoYiAuthApplication (认证模块 必须)
RuoYiSystemApplication (系统模块 必须)
RuoYiMonitorApplication (监控中心 可选)
RuoYiGenApplication (代码生成 可选)
RuoYiJobApplication (定时任务 可选)
RuoYFileApplication (文件服务 可选)#最后,auth、Gateway、System均启动正常。
#前端项目打包,即前端项目打制品包,默认是dist目录
#先修改前端配置文件
展开Eclipse里的若依项目下的rouyi-ui工程,打开vue.config.js文件,修改网关IP地址:proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8080`, #这个配置为gateway网关的IP和端口changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}#开始打包前端,生成制品
# cmd窗口进入若依项目目录,然后切换到ruoyi-ui目录
cd ruoyi-ui
# 安装依赖
#npm install #执行下面这条吧
# 强烈建议不要用直接使用 cnpm 安装,会有各种诡异的 bug,可以通过重新指定 registry 来解决 npm 安装速度慢的问题。
npm install --registry=https://registry.npmmirror.com# 本地开发 启动项目
npm run dev #此命令是本地开发环境下直接启动前端,执行后会在cmd查看打印登录url,复制粘贴到浏览器打开若依登录页面即可,账号密码默认自动回显了
#ruoyi-ui下的README.md文件说明了如何启动构建前端制品。
浏览器验证
cmd窗口执行启动:npm run dev
登录若依:
成功添加了用户:
docker部署若依-微服务版本
上面windows演示的是dev开发环境,这次我们使用docker部署prod生产环境。
#官网写的部署环境要求,所以选择的版本要满足要求
JDK >= 1.8 (推荐1.8版本)
Mysql >= 5.7.0 (推荐5.7版本)
Redis >= 3.0
Maven >= 3.0
Node >= 12
nacos >= 2.0.4 (ruoyi-cloud < 3.0 需要下载nacos >= 1.4.x版本)
sentinel >= 1.6.0
#准备一台centos7服务器
#安装好docker,可参考https://blog.csdn.net/MssGuo/article/details/122694156,同时要安装docker-compose
mkdir RuoYi-Cloud
cd RuoYi-Cloud
下载若依的源代码:https://gitee.com/y_project/RuoYi-Cloud,克隆/下载,下载ZIP即可。下载后上传到RuoYi-Cloud目录即可。
#安装jdk1.8
#去https://www.oracle.com/java/technologies/downloads/下载对应版本的tar.gz包
tar -zxvf jdk1.8.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_211 java
cat >> /etc/profile <<'EOF'
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
EOF
source /etc/profile
java -version
#安装maven,maven用于给java程序打jar包
wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
tar xf apache-maven-3.9.5-bin.tar.gz
mv apache-maven-3.9.5 /opt/maven
cat >> /etc/profile <<'EOF'
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
EOF
source /etc/profile
mvn -v
#安装npm,npm用于生成前端制品,即给前端生成dist目录
wget https://nodejs.org/dist/v14.4.0/node-v14.4.0-linux-x64.tar.xz
tar -xvf node-v14.4.0-linux-x64.tar.xz
mv node-v14.4.0-linux-x64 /usr/local/node
cat >> /etc/profile<<'EOF'
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
EOF
source /etc/profile
npm -v
node -v
#解压源码包
unzip RuoYi-Cloud-master.zip
cd RuoYi-Cloud-master/
[root@rancher RuoYi-Cloud-master]# ll docker/ #可以看到源码包里面已经有docker相关的脚本了
total 12
-rw-r--r--. 1 root root 1155 Oct 2 12:46 copy.sh #复制项目的jar文件到对应docker路径,便于一键生成镜像
-rw-r--r--. 1 root root 1335 Oct 2 12:46 deploy.sh #部署脚本
-rw-r--r--. 1 root root 3416 Oct 2 12:46 docker-compose.yml #docker-compose文件,可以看到每个容器暴露的宿主机端口
drwxr-xr-x. 3 root root 34 Oct 2 12:46 mysql #构建mysql镜像
drwxr-xr-x. 3 root root 36 Oct 2 12:46 nacos #构建nacos镜像
drwxr-xr-x. 4 root root 48 Oct 2 12:46 nginx #构建nginx镜像
drwxr-xr-x. 3 root root 36 Oct 2 12:46 redis #构建redis镜像
drwxr-xr-x. 6 root root 62 Oct 2 12:46 ruoyi #各个若依项目的Dockerfile构建镜像
[root@rancher RuoYi-Cloud-master]#
#先修改后端各个子项目的bootstrap.yml配置文件
[root@rancher RuoYi-Cloud-master]# find ./ -name bootstrap.yml
./ruoyi-auth/src/main/resources/bootstrap.yml
./ruoyi-gateway/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
./ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml
[root@rancher RuoYi-Cloud-master]#
#修改bootstrap.yml文件中的环境配置为prod,nacos IP端口,添加nacos账号密码,命名空间等配置,示例如下:
vim ./ruoyi-auth/src/main/resources/bootstrap.yml
..............profiles:# 环境配置active: prod #修改为prod,原来默认是devcloud:nacos:discovery:# 服务注册地址server-addr: 192.168.244.150:8848 #nacos的IP地址,因为等下nacos使用容器启动暴露的就是宿主机8848端口username: nacos #添加nacos的账号密码password: nacos #添加nacos的账号密码config:# 配置中心地址server-addr: 192.168.244.150:8848 #nacos的IP地址,因为等下nacos使用容器启动暴露的就是宿主机8848端口username: nacos #添加nacos的账号密码password: nacos #添加nacos的账号密码namespace: prod #指定nacos的命名空间是prod# 配置文件格式file-extension: yml# 共享配置shared-configs:- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}#再修改前端vue.config.js配置文件
vim ruoyi-ui/vue.config.js
.......
devServer: {host: '0.0.0.0',port: port,open: true,proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://192.168.244.150:8080`, #修改为gateway的IP和端口,等下docker启动的网关容器就是暴露8080端口changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}},disableHostCheck: true},.......
#后端项目打包,即后端项目打jar包
[root@rancher RuoYi-Cloud-master]# ls
bin docker LICENSE pom.xml README.md ruoyi-api ruoyi-auth ruoyi-common ruoyi-gateway ruoyi-modules ruoyi-ui ruoyi-visual sql
[root@rancher RuoYi-Cloud-master]# mvn clean package -Dmaven.test.skip=true #在项目的根路径执行打包
#以上打包命令执行完成会在每个子项目里面生成target命令,该target命令就存放有jar包#前端项目打包
cd ruoyi-ui/ #进入前端项目目录
npm install --registry=https://registry.npmmirror.com
# 打包正式环境
npm run build:prod #执行这个,因为我们就是要模拟prod环境
构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。#下面两个了解即可
npm run dev # 本地开发 启动项目
npm run build:stage # 打包预发布环境
#到底都有哪些环境?在前端目录下的package.json文件中定义了好几种配置环境,如下:
vim ruoyi-ui/package.json"scripts": {"dev": "vue-cli-service serve","build:prod": "vue-cli-service build","build:stage": "vue-cli-service build --mode staging","preview": "node build/index.js --preview","lint": "eslint --ext .js,.vue src"}
#拷贝文件
#先修改mysql的建库建表语句,不然mysql容器没有创建若依的数据库
[root@rancher ]# cd RuoYi-Cloud-master
[root@rancher RuoYi-Cloud-master]# ls sql/
quartz.sql ry_20230706.sql ry_config_20220929.sql ry_seata_20210128.sql
#ry_20230706.sql是若依系统表,ry_config_20220929.sql是nacos的库和表
#因为ry_20230706.sql文件里没有写创建库的语句,所以这里手动添加创建ry-cloud库的语句,库名是官网规定的。
#如下,在ry_20230706.sql文件开头添加即可:
DROP DATABASE IF EXISTS `ry-cloud`;
CREATE DATABASE `ry-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `ry-cloud`;#nacos配置的数据库源在application.properties文件
#检查确认即可,一般不用修改
[root@rancher docker]# ls nacos/conf/application.properties
[root@rancher ]# cd docker/ #进入docker目录
[root@rancher docker]# sh copy.sh #执行脚本,脚本作用是拷贝前端、后端,SQL文件到当前docker目录对应的目录下
#启动、创建mysql、nacos、redis容器
cd RuoYi-Cloud-master/docker
cat deploy.sh #查看脚本内容
[root@rancher docker]# sh deploy.sh -h
Usage: sh 执行脚本.sh [port|base|modules|stop|rm]
[root@rancher docker]# sh deploy.sh base #构建mysql、redis、nacos镜像并启动容器
[root@rancher docker]# docker ps -a #查看启动的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e2a889d611e2 nacos/nacos-server "bin/docker-startup.…" About a minute ago Up About a minute 0.0.0.0:8848->8848/tcp, :::8848->8848/tcp, 0.0.0.0:9848-9849->9848-9849/tcp, :::9848-9849->9848-9849/tcp ruoyi-nacos
7bb841dc0b2e mysql:5.7 "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp ruoyi-mysql
220a10a7cae2 redis "docker-entrypoint.s…" About a minute ago Up About a minute 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp ruoyi-redis
#检查redis容器的日志输出,正常,在windows使用Redis Desktop Manager 正常链接redis
#检查mysql容器的日志,显示异常
2023-10-09T15:26:31.877145Z 2 [Note] Unknown database 'ry-config'
2023-10-09T15:26:34.922364Z 3 [Note] Unknown database 'ry-config'
2023-10-09T15:26:34.923423Z 4 [Note] Unknown database 'ry-config'
2023-10-09T15:26:36.925682Z 5 [Note] Unknown database 'ry-config'
#登录mysql 容器检查
[root@rancher docker]# docker exec -it ruoyi-mysql bash
root@43f59febb6b2:/# mysql -ppassword #默认的root密码在docker-compose.yml中写有
mysql> show databases; #发现没有创建ry-config库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| ry-cloud |
| sys |
+--------------------+
mysql> use ry-cloud;
mysql> show tables; #ry-cloud也没有创建表
Empty set (0.00 sec)
mysql> exit
root@43f59febb6b2:/# ls /docker-entrypoint-initdb.d/ #发现这里面没有我们的建库建表文件
root@43f59febb6b2:/# exit
[root@rancher mysql]# pwd
/root/RuoYi-Cloud/RuoYi-Cloud-master/docker/mysql
[root@rancher mysql]# ls
conf data db dockerfile logs
[root@rancher mysql]# cat dockerfile #查看dockerfile文件是怎么构建mysql镜像的
# 基础镜像
FROM mysql:5.7
# author
MAINTAINER ruoyi
# 执行sql脚本
ADD ./db/*.sql /docker-entrypoint-initdb.d/
[root@rancher mysql]#
#这说明构建后的镜像里面根本没有建库建表的文件,而ry-cloud库是docker-compose.yml文件指定的创建库名而已
#所以说根本没有执行建库建表初始化操作
#手动执行初始化
docker cp mysql/db/ry_20230706.sql ruoyi-mysql:/docker-entrypoint-initdb.d/
docker cp mysql/db/ry_config_20220929.sql ruoyi-mysql:/docker-entrypoint-initdb.d/
docker exec -it ruoyi-mysql bash
mysql -ppassword
mysql> source /docker-entrypoint-initdb.d/ry_20230706.sql;
mysql> source /docker-entrypoint-initdb.d/ry_config_20220929.sql;
mysql> use mysql; #授权让mysql可以在windows链接
mysql> update user set host='%' where user='root';
mysql> FLUSH PRIVILEGES;
mysql> exit;
docker restart ruoyi-mysql
docker logs -f ruoyi-mysql
#windows使用Navicat Premium链接mysql数据库正常。#重启nacos,因为mysql仓库刚刚创建好,所需要重启nacos容器
#nacos容器正常,浏览器登录nacos
http://192.168.244.150:8848/nacos/index.html 登录账号密码:nacos/nacos
#由于前面我们java项目的bootstrap.yml配置文件定义的nacos命名空间是prod,所以在nacos上需要创建一个名称叫做prod的命名空间
权限控制-->命名空间-->新建命名空间 --> 命名空间名称填写:prod -->描述写生产环境即可-->确定
#克隆public命名空间的yml文件到prod 命名空间
配置管理--> 配置列表 --> 选择public命名空间 -->勾选全部的yml文件 -->底部点击克隆按钮 -->目标空间选择prod -->把每一个文件名中的dev改成prod,如ruoyi-gateway-prod.yml--> 点击克隆按钮完成克隆即可前面后端项目中的bootstrap.yml配置文件中的环境配置是prod,所以nacos中要存在"应用名称-环境配置.配置文件格式"拼接起来的文件,如ruoyi-gateway-prod.yml,所以上面克隆的时候我们修改了文件的名称。
最后,修改prod命名空间下的每个yml文件中的redis,mysql相关的配置,最后发布即可。
#启动、创建前端和后端容器
#从该文件可以看到前端使用nginx配置,nginx配置文件中配置了代理的网关IP地址,默认不用修改该文件
[root@rancher docker]# cat nginx/conf/nginx.conf
[root@rancher docker]# grep -B 2 deploy.sh #查看启动服务
modules(){docker-compose up -d ruoyi-nginx ruoyi-gateway ruoyi-auth ruoyi-modules-system
}[root@rancher docker]# sh deploy.sh modules #部署前端后端容器
[root@rancher docker]# docker logs -f ruoyi-modules-system #日志正常
[root@rancher docker]# docker logs -f ruoyi-gateway #日志正常
[root@rancher docker]# docker logs -f ruoyi-auth #日志正常
[root@rancher docker]# docker logs -f ruoyi-nginx #日志正常
[root@rancher docker]# docker port ruoyi-nginx #前端暴露的80端口
80/tcp -> 0.0.0.0:80
80/tcp -> :::80
浏览器验证
浏览器验证:宿主机IP:80
添加用户正常:
k8s部署若依-微服务版本
1、首先需要一个k8s集群,默认你已经安装好了k8s集群并且有动态存储供给。
2、下载若依的源码包并上传到服务器master节点上,也可以放到一台单独的服务。
#创建mysql pod
cat >>mysql.yaml<<'EOF'
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: mysqlname: mysqlnamespace: default
spec:replicas: 1selector:matchLabels:app: mysqlserviceName: mysql-svctemplate:metadata:annotations:labels:app: mysqlspec:containers:- env:- name: MYSQL_ROOT_PASSWORDvalue: Aa123456image: mysql:5.7.35imagePullPolicy: IfNotPresentname: mysqlports:- containerPort: 3306name: tcp-3306protocol: TCP- containerPort: 33060name: tcp-33060protocol: TCPsecurityContext:privileged: truevolumeMounts:- mountPath: /etc/localtimename: host-time- mountPath: /var/lib/mysqlname: mysqlrestartPolicy: Alwaysvolumes:- hostPath:path: /etc/localtimetype: ""name: host-timeupdateStrategy:rollingUpdate:partition: 0type: RollingUpdatevolumeClaimTemplates:- apiVersion: v1kind: PersistentVolumeClaimmetadata:name: mysqlspec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: nfs-storageclassvolumeMode: Filesystem
---
apiVersion: v1
kind: Service
metadata:labels:app: mysql-svcname: mysql-svcnamespace: default
spec:clusterIP: Noneports:- name: tcp-3306port: 3306protocol: TCPtargetPort: 3306- name: tcp-33060port: 33060protocol: TCPtargetPort: 33060selector:app: mysqlsessionAffinity: Nonetype: ClusterIP
EOF
kubectl apply -f mysql.yml
#mysql导入数据
[root@master01 ~]# cd RuoYi-Cloud-master/sql/
[root@master01 sql]# ls
quartz.sql ry_20230706.sql ry_config_20220929.sql ry_seata_20210128.sql
#ry_20230706.sql是若依系统表,ry_config_20220929.sql是nacos的库和表
#因为ry_20230706.sql文件里没有写创建库的语句,所以这里手动添加创建ry-cloud库的语句,库名是官网规定的。
#如下,在ry_20230706.sql文件开头添加即可:
DROP DATABASE IF EXISTS `ry-cloud`;
CREATE DATABASE `ry-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `ry-cloud`;[root@master01 sql]# kubectl cp ry_20230706.sql mysql-0:/
[root@master01 sql]# kubectl cp ry_config_20220929.sql mysql-0:/
[root@master01 sql]# kubectl exec -it mysql-0 -- bash
root@mysql-0:/# mysql -uroot -pAa123456
mysql> source /ry_20230706.sql;
mysql> source /ry_config_20220929.sql;
mysql> exit;
#创建redis
cat >>redis.yaml <<'EOF'
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: redisname: redisnamespace: default
spec:replicas: 1selector:matchLabels:app: redisserviceName: redis-svctemplate:metadata:labels:app: redisspec:containers:- args:- /etc/redis/redis.confcommand:- redis-serverimage: redis:7.0.7imagePullPolicy: IfNotPresentname: redisports:- containerPort: 6379name: tcp-6379protocol: TCPvolumeMounts:- mountPath: /etc/localtimename: host-time- mountPath: /dataname: reids-pvc- mountPath: /etc/redisname: redis-confreadOnly: truerestartPolicy: Alwaysvolumes:- hostPath:path: /etc/localtimetype: ""name: host-time- configMap:defaultMode: 420name: redis-configname: redis-confvolumeClaimTemplates:- apiVersion: v1kind: PersistentVolumeClaimmetadata:name: reids-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 1GistorageClassName: nfs-storageclassvolumeMode: Filesystem
---
apiVersion: v1
kind: Service
metadata:labels:app: redis-svcname: redis-svcnamespace: default
spec:clusterIP: Noneports:- name: tcp-6379port: 6379protocol: TCPtargetPort: 6379selector:app: redissessionAffinity: Nonetype: ClusterIP
---
apiVersion: v1
data:redis.conf: |-appendonly yesport 6379bind 0.0.0.0requirepass Aa123456 #redis 设置了密码
kind: ConfigMap
metadata:name: redis-confignamespace: default
EOF
kubectl apply -f redis.yml
#部署nacos
cat >> nacos.yml <<'EOF'
---
apiVersion: v1
kind: Service
metadata:name: nacos-svcnamespace: defaultlabels:app: nacos
spec:ports:- port: 8848name: servertargetPort: 8848nodePort: 30848type: NodePortselector:app: nacos
---
apiVersion: v1
kind: Service
metadata:name: nacos-headlessnamespace: defaultlabels:app: nacos
spec:publishNotReadyAddresses: true ports:- port: 8848name: servertargetPort: 8848clusterIP: Noneselector:app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:name: nacos-cmnamespace: default
data:mysql.host: "mysql-svc.default"mysql.db.name: "ry-config" #nacos要连接ry-config数据库mysql.port: "3306"mysql.user: "root"mysql.password: "Aa123456"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: nacosnamespace: default
spec:serviceName: nacos-headlessreplicas: 1 template:metadata:labels:app: nacosannotations:pod.alpha.kubernetes.io/initialized: "true"spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- nacostopologyKey: "kubernetes.io/hostname"containers:- name: nacosimagePullPolicy: Alwaysimage: nacos/nacos-server:latestresources:requests:memory: "1Gi"cpu: "800m"ports:- containerPort: 8848name: client-portenv: - name: NACOS_AUTH_TOKEN value: "Ym1GamIzTWdhWE1nZG1WeWVTQm5iMjlrSUhOdlpuUjNZWEpsQ2c9PQo="- name: NACOS_AUTH_IDENTITY_KEYvalue: "nacos"- name: NACOS_AUTH_IDENTITY_VALUEvalue: "nacos" - name: MODE value: "standalone" - name: NACOS_REPLICASvalue: "1"- name: SERVICE_NAMEvalue: "nacos-headless"- name: DOMAIN_NAMEvalue: "cluster.local"- name: POD_NAMESPACEvalueFrom:fieldRef:apiVersion: v1fieldPath: metadata.namespace- name: MYSQL_SERVICE_HOSTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.host- name: MYSQL_SERVICE_DB_NAMEvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.db.name- name: MYSQL_SERVICE_PORTvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.port- name: MYSQL_SERVICE_USERvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.user- name: MYSQL_SERVICE_PASSWORDvalueFrom:configMapKeyRef:name: nacos-cmkey: mysql.password- name: SPRING_DATASOURCE_PLATFORMvalue: "mysql"- name: NACOS_SERVER_PORTvalue: "8848"- name: NACOS_APPLICATION_PORTvalue: "8848"volumeMounts:- name: datamountPath: /home/nacos/datasubPath: data- name: datamountPath: /home/nacos/logssubPath: logsvolumeClaimTemplates:- metadata:name: dataannotations:volume.beta.kubernetes.io/storage-class: "nfs-storageclass"spec:accessModes: [ "ReadWriteMany" ]resources:requests:storage: 1Giselector: matchLabels:app: nacos
EOF
kubectl apply -f nacos.yml
#浏览器登录nacos: http://192.168.244.151:30848/nacos 账号密码:nacos/nacos
#在若依源码包服务器上配置服务器环境,这里是master01节点
#安装jdk1.8
#去https://www.oracle.com/java/technologies/downloads/下载对应版本的tar.gz包
tar -zxvf jdk1.8.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_211 java
cat >> /etc/profile <<'EOF'
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
EOF
source /etc/profile
java -version#安装maven,maven用于给java程序打jar包
wget https://dlcdn.apache.org/maven/maven-3/3.9.5/binaries/apache-maven-3.9.5-bin.tar.gz
tar xf apache-maven-3.9.5-bin.tar.gz
mv apache-maven-3.9.5 /opt/maven
cat >> /etc/profile <<'EOF'
export M2_HOME=/opt/maven
export MAVEN_HOME=/opt/maven
export PATH=${M2_HOME}/bin:${PATH}
EOF
source /etc/profile
mvn -v#安装npm,npm用于生成前端制品,即给前端生成dist目录
wget https://nodejs.org/dist/v14.4.0/node-v14.4.0-linux-x64.tar.xz
tar -xvf node-v14.4.0-linux-x64.tar.xz
mv node-v14.4.0-linux-x64 /usr/local/node
cat >> /etc/profile<<'EOF'
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH
EOF
source /etc/profile
npm -v
node -v
#先修改后端各个子项目的bootstrap.yml配置文件
[root@rancher RuoYi-Cloud-master]# find ./ -name bootstrap.yml
./ruoyi-auth/src/main/resources/bootstrap.yml
./ruoyi-gateway/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-gen/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-job/src/main/resources/bootstrap.yml
./ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
./ruoyi-visual/ruoyi-monitor/src/main/resources/bootstrap.yml
[root@rancher RuoYi-Cloud-master]#
#修改bootstrap.yml文件中的环境配置为prod,nacos IP端口,添加nacos账号密码,命名空间等配置,示例如下:
vim ./ruoyi-auth/src/main/resources/bootstrap.yml
..............profiles:# 环境配置active: prod #修改为prod,原来默认是devcloud:nacos:discovery:# 服务注册地址server-addr: nacos-headless.default:8848 #nacos的svc地址username: nacos #添加nacos的账号密码password: nacos #添加nacos的账号密码config:# 配置中心地址server-addr: nacos-headless.default:8848 #nacos的svc地址username: nacos #添加nacos的账号密码password: nacos #添加nacos的账号密码namespace: prod #指定nacos的命名空间是prod# 配置文件格式file-extension: yml# 共享配置shared-configs:- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}#再修改前端vue.config.js配置文件
vim ruoyi-ui/vue.config.js
.......proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://gateway-svc.default:8080`, #修改为gateway的svc地址和端口,后面会创建gateway-svc这个servicechangeOrigin: true,
.......
#后端项目打包,即后端项目打jar包
[root@rancher RuoYi-Cloud-master]# mvn clean package -Dmaven.test.skip=true #在项目的根路径执行打包
#以上打包命令执行完成会在每个子项目里面生成target命令,该target命令就存放有jar包#前端项目打包
cd ruoyi-ui/ #进入ruoyi-ui前端项目目录
npm install --registry=https://registry.npmmirror.com
# 打包正式环境
npm run build:prod #执行这个,因为我们就是要上限prod环境,bootstrap.yml配置的环境也是prod
构建打包成功之后,会在根目录生成 dist 文件夹,里面就是构建打包好的前端文件,通常是 ***.js 、***.css、index.html 等静态文件。
#浏览器登录nacos,创建prod命名空间
浏览器登录nacos: http://192.168.244.151:30848/nacos 账号密码:nacos/nacos
#由于前面我们java项目的bootstrap.yml配置文件定义的nacos命名空间是prod,所以在nacos上需要创建一个名称叫做prod的命名空间
权限控制-->命名空间-->新建命名空间 --> 命名空间名称填写:prod -->描述写生产环境即可-->确定
#克隆public命名空间的yml文件到prod 命名空间
配置管理--> 配置列表 --> 选择public命名空间 -->勾选全部的yml文件 -->底部点击克隆按钮 -->目标空间选择prod -->把每一个文件名中的dev改成prod,如ruoyi-gateway-prod.yml--> 点击克隆按钮完成克隆即可前面后端项目中的bootstrap.yml配置文件中的环境配置是prod,所以nacos中要存在"应用名称-环境配置.配置文件格式"拼接起来的文件,如ruoyi-gateway-prod.yml,所以上面克隆的时候我们修改了文件的名称。
最后,修改prod命名空间下的每个yml文件中的redis,mysql相关的配置,相关的IP需要配置为svc域名,如:redis:host: redis-svc.default #redis的域名port: 6379 password: Aa123456 #redis的密码
datasource: #mysql的域名nacos-headless.defaultdriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://mysql-svc.default:3306/ry-cloud?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8username: rootpassword: Aa123456 #mysql的密码
最后点击发布即可。
#制作后端镜像
[root@master01 RuoYi-Cloud-master]# cd docker/
[root@master01 docker]# sh copy.sh #执行脚本复制子项目的jar到当前docker目录下的对应目录
#构建auth镜像
[root@master01 docker]# cd ruoyi/auth
[root@master01 auth]# docker build -t docker-ruoyi-auth:latest .
#构建gateway镜像
[root@master01 docker]# cd ruoyi/gateway/
[root@master01 gateway]# docker build -t docker-ruoyi-gateway:latest .
#构建model-system镜像
[root@master01 docker]# cd ruoyi/modules/system/
[root@master01 system]# docker build -t docker-ruoyi-system:latest .
#制作前端镜像
[root@master01 docker]# cd nginx/
[root@master01 nginx]# vim conf/nginx.conf #编辑配置文件location /prod-api/{.......proxy_pass http://gateway-svc.default:8080/; #修改proxy_pass参数的gateway域名}
[root@master01 nginx]# docker build -t nginx:v1 . #注意前端镜像tag不要写latest,否则构建出来的镜像会有问题,因为dockerfile中FROM就是nginx
#创建auth的k8s资源
cat >>ruoyi-auth.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-authnamespace: default
spec:replicas: 1selector:matchLabels:app: authtemplate:metadata:labels:app: authspec:nodeName: master01containers:- image: docker-ruoyi-authimagePullPolicy: IfNotPresentname: ruoyi-authports:- containerPort: 9200name: auth-9200protocol: TCPrestartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:labels:app: auth-svcname: auth-svcnamespace: default
spec:ports:- name: auth-svcport: 9200protocol: TCPtargetPort: 9200selector:app: auth sessionAffinity: Nonetype: ClusterIP
EOF
kubectl apply -f ruoyi-auth.yaml
kubectl logs -f ruoyi-auth-7f9f89c4cb-c6wm5 #创建gateway相关的k8s资源
cat >>ruoyi-gateway.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-gatewaynamespace: default
spec:replicas: 1selector:matchLabels:app: gateway template:metadata:labels:app: gatewayspec:nodeName: master01containers:- image: docker-ruoyi-gatewayimagePullPolicy: IfNotPresentname: ruoyi-gatewayports:- containerPort: 8080name: gateway-8080protocol: TCPrestartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:labels:app: gateway-svcname: gateway-svcnamespace: default
spec:ports:- name: gateway-svc #这个svc在前端的配置文件中引用了port: 8080protocol: TCPtargetPort: 8080selector:app: gateway sessionAffinity: Nonetype: ClusterIP
EOF
kubectl apply -f ruoyi-gateway.yaml
kubectl logs -f ruoyi-gateway-6f6497d6fb-5bl7h
#创建gateway相关的k8s资源
cat >>ruoyi-system.yaml<<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:name: ruoyi-systemnamespace: default
spec:replicas: 1selector:matchLabels:app: systemtemplate:metadata:labels:app: systemspec:nodeName: master01containers:- image: docker-ruoyi-systemimagePullPolicy: IfNotPresentname: ruoyi-systemports:- containerPort: 9201name: system-9201protocol: TCPrestartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:labels:app: system-svcname: system-svcnamespace: default
spec:ports:- name: system-svcport: 9201protocol: TCPtargetPort: 9201selector:app: systemsessionAffinity: Nonetype: ClusterIP
EOF
kubectl apply -f ruoyi-system.yaml
kubectl logs -f ruoyi-system-7d5858d47d-fr7wc
#创建前端nginx的k8s资源
cat >>ruoyi-nginx.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: ruoyi-nginxname: ruoyi-nginxnamespace: default
spec:replicas: 1selector:matchLabels:app: ruoyi-nginxtemplate:metadata:labels:app: ruoyi-nginxspec:nodeName: master01containers:- image: nginx:v1imagePullPolicy: IfNotPresentname: ruoyi-nginxports:- containerPort: 80name: tcp-80protocol: TCPrestartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:labels:app: ruoyi-nginx-svcname: ruoyi-nginx-svc namespace: default
spec:ports:- nodePort: 30888port: 80protocol: TCPtargetPort: 80selector:app: ruoyi-nginxtype: NodePort
EOF
kubectl appl -f ruoyi-nginx.yaml
[root@master01 docker]# kubectl get -f ruoyi-nginx.yaml
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ruoyi-nginx 1/1 1 1 3h28mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ruoyi-nginx-svc NodePort 10.106.135.173 <none> 80:30888/TCP 3h28m
#nginx 访问端口就是30888
浏览器验证
登录:
url为master节点IP+ruoyi-nginx-svc的外部端口30888。
创建用户正常:
总结
1、关于nacos的配置
以上我们熟悉了在java程序中nacos是如何配置的,即在每一个子项目中都会有一个bootstrap.yml文件,我们来仔细解读一下该文件:
cat ./ruoyi-auth/src/main/resources/bootstrap.yml
# Tomcat
server: port: 9200 #程序的端口
# Spring
spring: application:# 应用名称name: ruoyi-auth #应用名称,nacos中配置文件一般也与应用名称对应profiles:# 环境配置active: prod #指定环境配置,程序启动时会激活对应的环境,nacos会根据这个环境来读取对应的文件,
#现在环境配置是prod,那么nacos中会存在"应用名称-环境配置.配置文件格式"拼接起来的文件,如ruoyi-auth-prod.yml,程序启动时就会读该文件cloud:nacos:discovery:# 服务注册地址server-addr: 192.168.244.150:8848 #nacos的IP地址username: nacos #nacos的账号密码password: nacos #nacos的账号密码config:# 配置中心地址server-addr: 192.168.244.150:8848 #nacos的IP地址,因为等下nacos使用容器启动暴露的就是宿主机8848端口username: nacos #nacos的账号密码password: nacos #nacos的账号密码namespace: prod #指定nacos的命名空间,默不写该参数默认是public命名空间# 配置文件格式file-extension: yml #一般与nacos的配置文件对应# 共享配置shared-configs: #可以看到这个参数拼接起来就是application-prod.yml文件,而这个文件是nacos上面有的- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
#下面是一段ruoyi-auth启动日志
#可以看的出来,激活的是prod环境,读取的配置文件是ruoyi-auth.yml
16:28:03.574 [main] WARN c.a.c.n.c.NacosPropertySourceBuilder - [loadNacosData,87] - Ignore the empty nacos configuration and get it based on dataId[ruoyi-auth] & group[DEFAULT_GROUP]
16:28:03.581 [main] WARN c.a.c.n.c.NacosPropertySourceBuilder - [loadNacosData,87] - Ignore the empty nacos configuration and get it based on dataId[ruoyi-auth.yml] & group[DEFAULT_GROUP]
16:28:03.607 [main] INFO c.r.a.RuoYiAuthApplication - [logStartupProfileInfo,637] - The following 1 profile is active: "prod"
16:28:05.975 [main] INFO o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-9200"]
16:28:05.988 [main] INFO o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]#前端链接后端是如何配置的,答案是在前端的配置文件里面配置了网关的IP和端口
#前端vue.config.js配置文件
vim ruoyi-ui/vue.config.js
.......
devServer: {host: '0.0.0.0',port: port,open: true,proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://192.168.244.150:8080`, #gateway网关的IP和端口,表示前端的请求要转发给这个网关changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: ''}}},disableHostCheck: true},
#前端打包时到底都有哪些环境?在前端目录下的package.json文件中定义了好几种配置环境,如下:
vim ruoyi-ui/package.json"scripts": {"dev": "vue-cli-service serve","build:prod": "vue-cli-service build","build:stage": "vue-cli-service build --mode staging","preview": "node build/index.js --preview","lint": "eslint --ext .js,.vue src"}
所以进入前端项目目录
cd ruoyi-ui/
npm install --registry=https://registry.npmmirror.com
npm run build:prod # 打包正式环境
npm run dev # 本地开发 启动项目
npm run build:stage # 打包预发布环境
构建打包成功之后,会在根目录生成dist目录,里面就是构建打包好的文件,通常是 ***.js 、***.css、index.html 等静态文件。
然后将dist目录的静态文件发布nginx服务器即可启动前端。这个dist目录也是可以配置的,在ruoyi-ui/vue.config.js配置文件中的outputDir参数配置。
#settings.js配置文件
vim ruoyi-ui/src/settings.js #settings.js配置文件可以定义前端显示的布局
2、前端使用nginx启动
前端使用nginx启动,在nginx.conf文件配置了反向代理到网关地址。
3、下面是auth程序启动日志
可以看到,程序启动时区注册nacos,并且激活的是prod环境,链接的配置文件是ruoyi-auth.yml文件。
jar包中bootstrap.yml文件:
vim ruoyi-auth.jar
相关文章:

若依微服务部署,裸服务部署、docker部署、k8s部署
目录 前言windows 部署若依-微服务版本浏览器验证docker部署若依-微服务版本浏览器验证k8s部署若依-微服务版本浏览器验证总结 前言 环境:centos7、Win10 若依是一个合适新手部署练习的开源的微服务项目,本篇讲解Windows部署若依微服务、docker部署若依…...

【置顶】关于博客的一些公告
所谓 万事开头难,最开始的两个专栏 《微机》 和 《骨骼动作识别》 定价 29.9 ,因为: 刚开始确实比较困难,要把自己学的知识彻底搞懂讲给别人,还要 码字排版,从 Markdown 语法开始学起(这都是 花…...

Fastadmin后端表格动态展示列
前言 后端有多角色时, 往往有些表格中的列需要根据条件来根据角色身份决定是不是需要该角色查看, 为此就衍生出一个需要动态控制展示某列的需求fastadmin框架内调用的table实际上在初始化时, 可以修改columns中的visible属性来控制是否显示, 但是这个参数只能传入bool, 不能像…...

如何在ubnutu上安装docker
卸载旧版本 sudo apt-get remove docker docker-engine docker.io添加HTTPS传输软件包以及CA证书 sudo apt-get update sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg \lsb-release添加国内源以提升网速 添加软件源的GPG秘钥以确认所下载软件包…...

Mall脚手架总结(三) —— MongoDB存储浏览数据
前言 通过Elasticsearch整合章节的学习,我们了解SpringData框架以及相应的衍生查询的方式操作数据读写的语法。MongoDB的相关操作也同样是借助Spring Data框架,因此这篇文章的内容比较简单,重点还是弄清楚MongoDB的使用场景以及如何通过Sprin…...

Maven 引入外部依赖
如果我们需要引入第三方库文件到项目,该怎么操作呢? pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。 要添加依赖项,我们一般是先在 src 文件夹下添加 lib 文件夹,然后将你工程需要的 jar 文件复制到 …...

BS EN 12104-2023 软木地砖检测
软木地砖是指含有烧结成分的软木制成的块状砖,可用于地面覆盖物,装饰层等,具有脚感柔软舒适,防滑性能好,静音等性能,同时也其耐磨性较差,不易清洁。 BS EN 12104-2023软木地砖测试 测试项目 测…...

用Nginx搭建一个可用的静态资源Web服务器
sudo wget http://dlib.net/files/dlib-19.24.tar.bz2下载需要的文件。 sudo tar jxf dlib-19.24.tar.bz2进行解压。 sudo mkdir /nginx/dlib在nginx安装目录/nginx创建一个新的目录dlib。 配置文件nginx.conf里边的内容如下: worker_processes 1; events {…...

MAX30102心率血氧传感器
MAX30102心率血氧传感器介绍 背景基本功能基本结构基本原理采集方法直通式采集方法反射式采集方法 血氧采集原理Beer-Lambert 定理皮肤组织模型血氧测量过程AC / DC 的计算 心率采集原理 实验结果代码走读资源链接 背景 目前,基本上所有的可穿戴式设备都集成了心率…...

高效解决 TypeError : ‘ numpy._DTypeMeta‘ object is not subscriptable 问题
文章目录 问题描述解决问题 问题描述 解决问题 参考博文 打开报错位置 AppData\Roaming\Python\Python39\site-packages\cv2\typing\ 添加single-quotes,即单引号 博主说The trick is to use single-quotes to avoid the infamous TypeError: ‘numpy._DTypeMeta’…...

Hadoop作业篇(一)
一、选择题 1. 以下哪一项不属于Hadoop可以运行的模式__C____。 A. 单机(本地)模式 B. 伪分布式模式 C. 互联模式 D. 分布式模式 C. 互联模式 不属于Hadoop可以运行的模式。 Hadoop主要有四种运行模式: A. 单机(本地…...

SpringCloud中的分布式锁用法详解(Java+Redis SETNX命令)
前言: 在分布式系统中,保证数据的一致性和并发控制是至关重要的。分布式锁能够解决多个进程/线程同时访问共享资源的问题,确保只有一个进程/线程能够获得锁。本文将介绍如何使用Java和Redis实现分布式锁,并提供示例代码和注意事项…...

初学者如何选择:前端开发还是后端开发?
#开发做前端好还是后端好【话题征文】# 作为一名有多年开发经验的过来人,我认为前端开发和后端开发都有其独特的魅力和挑战。下面我将就我的个人经历和观点来分享一些关于前端开发和后端开发的看法。 首先,让我们将编程世界的大城市比作前端开发和后端开…...

从php页面插入MySQL的数据变为乱码如何解决?
在 PHP 页面中向 MySQL 数据库插入数据时,如果数据出现乱码,可能是因为字符集设置不正确或者字符编码不匹配。 数据库字符集设置不正确: 确保数据库的字符集设置与您的应用程序所使用的字符集一致。通常情况下,UTF-8 是一个通用的…...

OpenCV防抖实践及代码解析笔记
视频防抖是指用于减少摄像机运动对最终视频的影响的一系列方法。摄像机的运动可以是平移(比如沿着x、y、z方向上的运动)或旋转(偏航、俯仰、翻滚)。 正如你在上面的图片中看到的,在欧几里得运动模型中,图像…...

函数栈帧的创建与销毁剖析
目录 一、前言 二、基础知识介绍 2.1 寄存器介绍 2.2、汇编指令介绍 三、函数栈帧的创建销毁过程 3.1 调用main函数的函数 3.2 main函数开辟栈帧 3.3 在main函数中创建变量 3.4 调用Add函数前的准备 3.5 为Add函数开辟栈帧 3.6 在Add函数中创建变量并运算 3.7 Add函…...

性能测试-如何进行监控设计
监控设计步骤 首先,你要分析系统的架构。在知道架构中使用的组件之后,再针对每个组件进行监控。 其次,监控要有层次,要有步骤。先全局,后定向定量分析。 最后,通过分析全局、定向、分层的监控数据做分析…...

大数据List去重
概述 两个超大List集合去重,时间最短的方式去实现。 详细 MaxList模块主要是对Java集合大数据去重的相关介绍。 背景: 最近在项目中遇到了List集合中的数据要去重,大概一个2500万的数据,开始存储在List中,需要跟一个2万的List去…...

CentOS8.2重启网络
查看网络配置命令 # ip addr # nmcli ens160: 已连接 到 ens160"VMware VMXNET3"ethernet (vmxnet3), 00:50:56:B6:34:84, 硬件, mtu 1500ip4 默认inet4 10.3.10.111/24route4 10.3.10.0/24route4 0.0.0.0/0inet6 fe80::250:56ff:feb6:3484/64route6 ff00::/8rou…...

2023年【G1工业锅炉司炉】考试题及G1工业锅炉司炉模拟考试
题库来源:安全生产模拟考试一点通公众号小程序 2023年G1工业锅炉司炉考试题为正在备考G1工业锅炉司炉操作证的学员准备的理论考试专题,每个月更新的G1工业锅炉司炉模拟考试祝您顺利通过G1工业锅炉司炉考试。 1、【多选题】TSGG0001-2012《锅炉安全技术监…...

观察者模式 行为型设计模式之七
1.定义 在GOF的《设计模式:可复用面向对象软件的基础》一书中对观察者模式是这样定义的:定义对象的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。当一个对象发生了变化࿰…...

数据结构与算法之堆: Leetcode 451. 根据字符出现频率排序 (Typescript版)
根据字符出现频率排序 https://leetcode.cn/problems/sort-characters-by-frequency/ 描述 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。返回 已排序的字符串 。如果有多个答案,返回其…...

吃透底层:从路由到前缀树
前言 今天学到关于路由相关文章,发现动态路由中有一个很常见的实现方式是前缀树,很感兴趣这个算法,故进行记录。 前缀树 Trie(又被叫做字典树)可以看作是一个确定有限状态自动机,尽管边上的符号一般是隐含…...

SparkSQL外部数据源
1.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景。 - CSV - JSON - Parquet - ORC - JDBC/ODBC connections - Plain-text files 1.2 读数据格式 所有读取 API 遵循以下调用格式: // …...

林沛满-TCP 是如何避免被发送方分片的?
TCP 可以避免被发送方分片,是因为它主动把数据分成小段再交给网络层。最大的分段大小称为 MSS(Maximum Segment Size),它相当于把 MTU 刨去 IP头和 TCP 头之后的大小,所以一个 MSS 恰好能装进一个 MTU 中。 图4 图 4 …...

Java中的枚举是什么?
Java枚举详解 枚举(Enum)是Java编程语言中的一种特殊数据类型,它用于表示一组具名的常量。枚举提供了一种更加类型安全和易于理解的方式来表示常量值,使代码更加清晰和可维护。 为什么需要枚举? 在介绍Java枚举的具…...

java学习--day24(单例模式序列化Lambda表达式)
文章目录 回顾今天的内容1.单例模式2.序列化3.Lambda表达式3.1入门案例3.2lambda表达式语法格式3.2.1无参无返回值的形式3.2.2有参无返返回值的方法3.2.3无参有返回值3.2.4有参有返回值的 回顾 1.三种创建Class对象的形式Class.forName("")类.class对象.getCalss()字…...

从0开始学go第六天
方法一:gin获取querystring参数 package main//querystring import ("net/http""github.com/gin-gonic/gin" )func main() {r : gin.Default()r.GET("/web", func(c *gin.Context) {//获取浏览器那边发请求携带的query String参数//…...

unity设计模式——代理模式
Subject类,定义了Real Subject和Proxy的共用接口,这样就在任何使用Real Subject的地方都可以使用Proxy。 abstract class Subject : MonoBehaviour {public abstract void Request(); } RealSubject类,定义Proxy所代表的真实实体。 class R…...

SpringBoot 如何使用 Grafana 进行可视化监控
使用Spring Boot Sleuth进行分布式跟踪 在现代分布式应用程序中,跟踪请求和了解应用程序的性能是至关重要的。Spring Boot Sleuth是一个分布式跟踪解决方案,它可以帮助您在分布式系统中跟踪请求并分析性能问题。本文将介绍如何在Spring Boot应用程序中使…...