目录
安装docker+jenkins+docker-compose+ruoyi+mysql
安装yum命令
下载docker-ce
启动docker
安装docker-compose
查询docker和docker-compose兼容性
查询docker-compose版本
下载docker-compose
使用sudo管理员权限执行命令
docker-compose --version 查询是否成功
docker-compose部署若依项目
打包
部署出现过得问题
启动基础环境./deploy.sh base
若依数据库默认密码
很纳闷
deploy.sh modules命令
docker 安装Jenkins
linux安装jdk17
安装maven
安装gitlab
拉取报错docker: error pulling image configuration
编辑
修改gitlab配置
重启gitlab
修改密码
启动Jenkins+挂载配置+访问
jenkins部署若依
安装docker-compose
宿主机不安装jdk和maven启动
配置容器中得jdk和maven
设置全局工具配置
构建一个maven项目
配置项目
配置Build
jenkins+docker+docker-compose+shell脚本部署
jenkins项目配置
修改项目配置的build
添加Publish over SSH
添加Post Steps
idea中修改项目配置
修改ip
配置Jenkins.sh文件
添加copy.sh
配置deploy.sh
配置jenkins.sh deploy.sh copy.sh 文件权限
jenkins部署遇到的问题
部署ruoyi-ui
配置ruoyi.sh
修改jenkins.sh文件
docker 安装es
docker官网查询镜像地址
第二步启动 es
第三步 创建docker容器挂载的目录
第四步将容器文件拷贝出来
第五步 设置elasticsearch.yml内容
第七步 重新起容器并挂载外部文件夹
docker安装 logstash
启动 logstash
创建logstash 挂载文件夹
mkdir -p /data/logstash/config
将容器文件拷贝出来
停止和删除容器
创建logstash.conf配置文件
启动logstash和挂载的文件
docker进入容器
docker安装Kibana
启动kibana
创建kibana本地挂载文件
停止和删除临时容器
启动挂载地址后的新容器
进入elasticsearch容器获取token
进入es容器修改密码
docker 安装nacos
nacos单机版
启动挂载
nacos配置数据库
搭建集群nacos
添加多数据库
修改cluster.conf文件配置集群节点
遇到问题 :
启动命令配置集群
参考文章
docker一站式安装Java开发环境_codexiaov的博客-CSDN博客docker+jenkins+gitee+shell 自动化部署微服务(基于若依)【详细完整版】_jenkins部署若依微服务_菠萝仔丨叶的博客-CSDN博客docker一站式安装Java开发环境_codexiaov的博客-CSDN博客
后续继续实验完善补全
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
# 开机自启动
sudo systemctl enable docker
# docker 会用到很多端口,建立先关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
#查看是否关闭防火墙
systemctl status firewalld
Docker配置镜像源
{
"registry-mirrors":["https://vu7aic22.mirror.aliyuncs.com","https://hub-mirror.c.163.com","https://registry.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn"]
}
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl enable docker #开机启动
https://docs.docker.com/compose/compose-file/compose-file-v3/
https://github.com/docker/compose/releases/
我用的是centos桌面版,修改文件名字为docker-compose 直接拷贝
存放的路径 usr/local/bin/
sudo chmod +x /usr/local/bin/docker-compose
不熟悉的,不推荐链接地址下载
明明文件在出现错误 : bash: /usr/local/bin/docker-compose: 没有那个文件或目录,
需要注意修改若依yml文件中nacos注册中心地址
复制一个分docker文件 上传到服务器中
问题1 :bash: ./deploy.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录
脚本文件在windows下编辑过。在windows下,会出现空格 每一行的结尾是\n\r,而在linux下文件的结尾是\n
解决方法 : cat -A 文件名称 #可以查询当前文件 \r 字符被显示为^M
使用指令sed -i 's/\r$//' 【文件名称】 ,上面的指令会把 copy.sh 中的\r 替换成空白
问题2 :启动./deploy.sh modules时,连接nacos 提示 Connection refused: /127.0.0.1:9848
把注册地址换成了,容器名称:端口,不使用ip地址
问题3:Connection refused: localhost/127.0.0.1:6379
我是查询redis容器得ip, 修改nacos注册中心yml文件 redis 地址
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 7d7d1b396ac4
也配置过容器名称,访问redis 通过docker logs 去查询也没发现报错信息
问题4: 明明若依有几个jar包,其他几个却没有启动
因为在deploy.sh文件中有设置
我是关闭了防火墙 所以不需要开启端口,命令需要在当前目录下执行
# 开启所需端口
./deploy.sh port
# 启动基础环境
./deploy.sh base 下面是操作图
关闭所有模块 因为没有把nacos得sql放入
使用 ./deploy base 后的成功界面,因为没使用 ./ deploy.sh modules所以,没有服务注册
mysql -uroot-ppassword
docker exec -it /bin/bash
让root可被所有ip链接
grant all privileges on *.* to root@'%' with grant option;
刷新限权
flush privileges;
当用navicat连接数据库后,建议去执行nacos所需要的sql
# 开启所需端口
./deploy.sh port
# 启动基础环境(必须)
./deploy.sh base
# 启动程序模块(必须)
./deploy.sh modules
# 关闭所有环境/模块
./deploy.sh stop
# 删除所有环境/模块
./deploy.sh rm
当nacos通过docker logs 查询日志时,出现No DataSource set错误时 ,进入mysql容器,然后进入mysql,nacos就能访问
后面再次关机,重试启动所有服务时, 就没有在出现
docker pull jenkinsci/blueocean
当下载超时,去阿里云容器镜像服务,把加速器的地址加入daemon.json
Java Downloads | Oracle
将文件传输到Linux的 /opt 目录下
解压文件
tar -zxvf jdk-17_linux-x64_bin.tar.gz
配置环境变量
vim /etc/profile
在文件底部加上
JAVA_HOME=/opt/jdk-17.0.7
PATH=/opt/jdk-17.0.7/bin:$PATH
export JAVA_HOME PATH
保存后让配置文件生效
source /etc/profile
https://maven.apache.org/download.cgimaven 官网地址 https://maven.apache.org/download.cgi
存放路径自己选择,只要在profile指定就行
修改配置文件
:%d 清空文件内容 替换以下配置
/m2/repository
alimaven
aliyun maven
http://maven.aliyun.com/nexus/content/groups/public/
central
修改profile 在底部加入以下配置 注意路径
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.2
PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH
保存后让配置文件生效
source /etc/profile
验证
mvn -version
docker pull gitlab/gitlab-ce:latest
解决方法 修改国内镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com","https://nrbewqda.mirror.aliyuncs.com","https://dmmxhzvq.mirror.aliyuncs.com"]
}
然后重启docker
systemctl restart docker
启动gitlab 和设置挂载
\-v /var/gitlab 这是挂载路径
docker run \-itd \-p 9980:80 \-p 9922:22 \-v /var/gitlab/etc:/etc/gitlab \-v /var/gitlab/log:/var/log/gitlab \-v /var/gitlab/opt:/var/opt/gitlab \--restart always \--privileged=true \--name gitlab \gitlab/gitlab-ce
修改端口80 改为 9980
#进入容器 执行以下命令
docker exec -it gitlab /bin/bash
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 密码不能太简单 修改密码为root123456
user.password='root123456'
# 保存
user.save!
# 退出
exit
gitlab界面设置中文
启动后访问密码在本机var地址中,不在docker容器
docker run \-u root \-d \--name jenkins \--restart=always \-p 8001:8080 \-p 50000:50000 \-v /var/run/docker.sock:/var/run/docker.sock \-v /var/jenkins_home:/var/jenkins_home \jenkinsci/blueocean
可以参考前面得安装和使用
修改文件名字
mv docker-compose-linux-x86 64 docker-compose
授权
sudo chmod +x /usr/local/bin/docker-compose
查询是否成功
docker-compose -version
下载jenkins:jdk17版本
docker pull jenkins/jenkins:jdk17
因为这个版本在新手安装插件时,都是成功得, 比如jenkinsci/blueocean 有些插件下载不了,或者因为镜像源得版本
例如 以下问题
有一些可以使用 清华镜像源解决 : https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/
完整路径例子 : https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.387/update-center.json
修改站点地址
设置挂载目录,默认密码也在挂载目录下面
docker run -u root -it --name jenkins -p 9200:8080 -v /var/jenkins_home:/var/jenkins_home -d jenkins/jenkins:jdk17
因为选择得jenkins-jdk17 ,所以只需要拷贝maven到容器中
docker cp /usr/local/maven/apache-maven-3.9.2 容器名称:/opt
因为容器中无法编辑profile,所以我是拷贝出来进行修改环境变量
docker cp jenkins92:/etc/profile /usr/local/maven/apache-maven-3.9.2
在文件的最下面添加容器中得maven和jdk地址
export MAVEN_HOME=/opt/apache-maven-3.9.2
export PATH=$MAVEN_HOME/bin:$PATH
JAVA_HOME=/opt/java/openjdk
PATH=/opt/java/openjdk/bin:$PATH
export JAVA_HOME PATH
#生效profile文件
source /etc/profile
检查
mvn -v
java -version
如果没有这个选项, 需要去jenkins下载插件 Maven Integration plugin, 然后在重启
Credentials 是需要去设置账户密码,我使用的url是gitlab地址
如果 jenkins 提示没有这个文件: ‘pom.xml‘ 说明在工作空间中没有把gitlab项目拉下来
立即构建后回去下载包
docker run -u root -it --name jenkins30 -p 9400:8080 -v /var/jenkins_home3:/var/jenkins_home -v /opt/jdk-17.0.7:/opt/java/openjdk -v /usr/local/maven/apache-maven-3.9.2:/opt/apache-maven-3.9.2 -d jenkins/jenkins:jdk17
当启动挂载目录时,容器中就会创建对应文件夹,只需要修改环境变量路径
jenkins全局工具配置的jdk需要和jenkins容器配置的环境变量一致
export MAVEN_HOME=/opt/apache-maven-3.9.2
export PATH=$MAVEN_HOME/bin:$PATH
JAVA_HOME=/opt/java/openjdk
PATH=/opt/java/openjdk/bin:$PATH
export JAVA_HOME PATH
docker cp /usr/local/maven/apache-maven-3.9.2/profile jenkins30:/etc/profile
source /etc/profile
没有这个选项的取下载插件
用于jenkins通过SSH连接服务用
找到SSH Servers , 添加SSH连接地址和密码
选择你添加的SSH账户和配置
Remote directory 指定宿主机容器地址,也就是你liunx系统的地址,
会根据指定的路径 /home/sw 把构建的项目存在路径下 ,jenkins构建完成后,可以去当前路径下查看
Exec command : 执行宿主机下路径的脚本
cd /home/docker/ 找到路径 我是换行了,至于不换行,能不能执行还没实验
sh ./jenkins.sh 执行的shell脚本
连接nacos 和 config 替换 ruoyi-nacos
连接mysql 替换 ruoyi-mysql 这里需要注意配置文件是在nacos中 ,修改后重启对应容器
连接redis替换 ruoyi-redis 这里需要注意有些配置文件是在nacos中
注意dockerfile 里面的路径配置
如果在windows下编辑,需要注意空格无法被liunx环境识别 否则会报
bash: ./ruoyi-ui.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录
解决方法 : cat -A 文件名称 #可以查询当前文件 \r 字符被显示为^M
使用指令sed -i 's/\r$//' 【文件名称】 ,上面的指令会把 copy.sh 中的\r 替换成空白
配置容器名称和版本,设置执行的脚本
执行了拷贝 : copy.sh
执行了 deploy.sh modules
#!/bin/sh
echo "清理已有容器及镜像资源"
for container in {"ruoyi-gateway","ruoyi-auth","ruoyi-modules-system"}
do
image=docker-${container}:latest
if docker ps | grep ${container} ;then
docker stop ${container}
fi
if docker ps -a | grep ${container};then
docker rm ${container}
fi
if docker images | grep ${image};then
docker rmi ${image}
fi
done
# 拷贝构建的jar包到宿主机
/home/docker/copy.sh
# 重新启动docker项目
/home/docker/deploy.sh modules
因为这里使用docker-compose 如果没有请下参考前面的配置方式进行配置
作用是执行docker-compose.yml文件里面的配置, 在docker-compose.yml配置文件中有指定执行dockerfile,在dockerfile中又配置了执行jar的路径
version : '3.8'
services:
ruoyi-nacos:
#指定容器的名称为
container_name: ruoyi-nacos
#指定要使用的镜像
image: nacos/nacos-server
build:
#表示在 ./nacos 目录下有 Dockerfile,可以用来构建镜像。
context: ./nacos
#设置环境变量,这里设置了 MODE=standalone,表示以单机模式运行 Nacos。
environment:
- MODE=standalone
#设置容器挂载路径 挂载文件或目录到容器中
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
#将容器内的端口映射到宿主机的对应端口
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
#定义了服务之间的依赖关系,这里表示 ruoyi-nacos 依赖于另一个名为 ruoyi-mysql 的服务。
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-mysql:
#指定容器的名称为
container_name: ruoyi-mysql
#指定要使用的镜像
image: mysql:5.7
build:
#表示在 ./mysql 目录下有 Dockerfile,可以用来构建镜像。
context: ./mysql
#将容器内的端口映射到宿主机的对应端口
ports:
- "3306:3306"
#设置容器挂载路径
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
#command: 定义了要在容器内运行的命令和参数。
#'mysqld': 指定要运行的命令为 mysqld,即 MySQL 服务器进程。
#--innodb-buffer-pool-size=80M: 设置 InnoDB 缓冲池的大小为 80MB。这是 MySQL 中用于存储数据和索引的内存缓冲区。
#--character-set-server=utf8mb4: 设置 MySQL 服务器的字符集为 utf8mb4,支持存储和处理 Unicode 字符。
#--collation-server=utf8mb4_unicode_ci: 设置 MySQL 服务器的排序规则为 utf8mb4_unicode_ci,用于字符串比较和排序。
#--default-time-zone=+8:00: 设置默认时区为 UTC+8,这里表示东八区时间。
#--lower-case-table-names=1: 设置表名大小写不敏感,即表名的字母都被转换为小写。
command: [
'mysqld',
'--innodb-buffer-pool-size=80M',
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci',
'--default-time-zone=+8:00',
'--lower-case-table-names=1'
]
# #设置环境变量
environment:
#表示要创建的数据库名称为 'ry-cloud'。这将在 MySQL 容器启动时自动创建该数据库。
MYSQL_DATABASE: 'ry-cloud'
#表示要设置的 MySQL 根用户的密码为 'password' 账户为root
MYSQL_ROOT_PASSWORD: password
ruoyi-redis:
container_name: ruoyi-redis
image: redis
build:
context: ./redis
ports:
- "6379:6379"
volumes:
- ./redis/conf/redis.conf:/home/ruoyi/redis/redis.conf
- ./redis/data:/data
#表示在 Redis 容器中执行的命令是 redis-server /home/ruoyi/redis/redis.conf。
#告诉 Redis 容器使用指定的配置文件 /home/ruoyi/redis/redis.conf 启动 Redis 服务器
command: redis-server /home/ruoyi/redis/redis.conf
ruoyi-nginx:
container_name: ruoyi-nginx
image: nginx
build:
context: ./nginx
ports:
- "80:80"
volumes:
- ./nginx/html/dist:/home/ruoyi/projects/ruoyi-ui
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
- ./nginx/conf.d:/etc/nginx/conf.d
#表示该容器依赖于名为 "ruoyi-gateway" 的服务容器,在启动时会先启动 "ruoyi-gateway"。
depends_on:
- ruoyi-gateway
#将 "ruoyi-gateway" 容器与 "ruoyi-nginx" 容器链接起来,以便于容器之间的通信。 相当于在gateway上搭建了nginx
links:
- ruoyi-gateway
ruoyi-gateway:
container_name: ruoyi-gateway
build:
context: ./ruoyi/gateway
dockerfile: dockerfile
ports:
- "8080:8080"
#表示 ruoyi-gateway容器依赖于名为 "ruoyi-redis" 的服务容器
depends_on:
- ruoyi-redis
#将 "ruoyi-redis" 容器与 "ruoyi-gateway" 容器链接起来,以便于容器之间的通信。
links:
- ruoyi-redis
ruoyi-auth:
container_name: ruoyi-auth
build:
context: ./ruoyi/auth
dockerfile: dockerfile
ports:
- "9200:9200"
depends_on:
- ruoyi-redis
links:
- ruoyi-redis
ruoyi-modules-system:
container_name: ruoyi-modules-system
build:
context: ./ruoyi/modules/system
dockerfile: dockerfile
ports:
- "9201:9201"
depends_on:
- ruoyi-redis
- ruoyi-mysql
links:
- ruoyi-redis
- ruoyi-mysql
ruoyi-modules-gen:
container_name: ruoyi-modules-gen
build:
context: ./ruoyi/modules/gen
dockerfile: dockerfile
ports:
- "9202:9202"
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-modules-job:
container_name: ruoyi-modules-job
build:
context: ./ruoyi/modules/job
dockerfile: dockerfile
ports:
- "9203:9203"
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-modules-file:
container_name: ruoyi-modules-file
build:
context: ./ruoyi/modules/file
dockerfile: dockerfile
ports:
- "9300:9300"
volumes:
- ./ruoyi/uploadPath:/home/ruoyi/uploadPath
ruoyi-visual-monitor:
container_name: ruoyi-visual-monitor
build:
context: ./ruoyi/visual/monitor
dockerfile: dockerfile
ports:
- "9100:9100"
注意在windows环境下编辑容易产生liunx无法识别的空格
主要作用就是拷贝
指定宿主机路径/home/sw 打包路径下的jar 拷贝到宿主机其他路径,方便./deploy.sh 执行
路径最好是和jenkins.sh文件中配置的一致,如果你要增加模块, 可以把docker-compose文件配置的模块名称加入到 base和modules中
端口号如果没有关闭防火墙,就需要调用 ./deploy port 执行配置的端口
配置完成后先别急使用jenkins进行构建,还需要配置jenkins.sh deploy.sh copy.sh 文件权限
ls -l deploy.sh 查询权限
chmod +rwx deploy.sh 设置文件权限
问题1
若依的mysql脚本为啥不会放入/docker-entrypoint-initdb.d文件夹中,
我用docker cp 放入, 重启mysql 容器sql也还是不会被执行
./deploy启动后mysql 只会创建一个ruoyi-cloud 不会使用sql文件进行创建
因为没有加入/docker-entrypoint-initdb.d(用于存放初始化数据库的脚本文件)
想过是不是文件的使用权限不够
查询文件权限
ls -l ry_config_20220929.sql
这个问题还没解决
问题2
Server check fail, please check server x.x.x.x ,port 9848 is available , error ={}
解决方法 : 是因为删除镜像不彻底 docker rmi / rm 去删除容器和镜像,
然后在修改system服务数据库,连接地址改成ruoyi-mysql 和 ruoyi-redis 然后重启,最后所有容器才启动成功
问题3
10:32:21 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
修改 shell脚本 检查是否存在windows空格
Centos安装Nodejs简单方式_诚哥博客的博客-CSDN博客
安装 Node.js 和 npm
cd /usr/local
wget https://npmmirror.com/mirrors/node/v16.18.1/node-v16.18.1-linux-x64.tar.xz
node -v
npm -v
#!/bin/sh
#进入路径
cd /home/sw/ruoyi-ui
#安装依赖
npm install
#删除原打包
rm -rf dist
#打包
npm run build:prod
#将名为 "stage" 的文件或目录重命名为 "dist"
mv stage dist
# 打包完成后,将生成的静态文件复制到指定目录
# 例如,a将 dist 目录下的文件 通过copy.sh 复制到 NGINX 的 HTML 目录
#cp -R dist/* /usr/share/nginx/html
因为在copy.sh 配置文件中,把打包生成的html文件拷贝到nginx中,
#!/bin/sh
echo "清理已有容器及镜像资源"
for container in {"ruoyi-gateway","ruoyi-auth","ruoyi-modules-system"}
do
image=docker-${container}:latest
if docker ps | grep ${container} ;then
docker stop ${container}
fi
if docker ps -a | grep ${container};then
docker rm ${container}
fi
if docker images | grep ${image};then
docker rmi ${image}
fi
done
#部署ruoyi-ui
/home/docker/ruoyi-ui.sh
# 拷贝构建的jar包到宿主机
/home/docker/copy.sh
# 重新启动docker项目
/home/docker/deploy.sh modules
访问路径http://192.168.16.130/login
访问路径http://192.168.16.130/login
docker login 登录
docker tag 镜像名称 / TAG docker账户/ 上传得版本号 打包镜像上传到docker
docker tag hello-world:latest gandegui629/test-hello:1.0.0
docker push gandegui629/test-hello:1.0.0 上传
docker pull elasticsearch:7.17.2
docker ps 查看是否启动
docker logs elasticsearch 启动日志查询
docker restart elasticsearch 重启
docker exec -it 容器名称 /bin/bash 进入 容器
exit 退出容器
docker logs <容器名称或ID> 查询容器日志
docker ps -a 查询所有容器
docker inspect <容器名称或ID> grep IPAddress 查看容器IP地址
docker logs -f cf66a8bd5cb5 查询容器实时日志
查询容器的ip地址 4bf93249fc1b 容器的id
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 4bf93249fc1b
Docker
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms256m -Xmx256m" elasticsearch:7.17.2
参数说明
-d
后台启动–name
起别名即:NAMES-p 9200:9200
将端口映射出来-e "discovery.type=single-node"
单节点启动-e ES_JAVA_OPTS="-Xms256m -Xmx256m"
限制内存大小docker ps 查看是否启动成功
mkdir -p /data/elasticsearch/{config,data,logs,plugins}
docker cp elasticsearch:/usr/share/elasticsearch/config /data/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/logs /data/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/data /data/elasticsearch
docker cp elasticsearch:/usr/share/elasticsearch/plugins /data/elasticsearch
vi /data/elasticsearch/config/elasticsearch.yml
还可以设置密码
第六步 停止和删除临时容器
docker stop elasticsearch
docker rm elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 \-e "discovery.type=single-node" \-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \-v /data/elasticsearch/data:/usr/share/elasticsearch/data \-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \elasticsearch:7.17.2
注意 \-e \-v之间不能有空格 \前面需要一个空格否则会报 docker: invalid reference format
然后就可以访问 curl "http://localhost:9200" 这是在虚拟机安装的,可以在本机访问 例如192.168.16.128:9200
es命令
match query 用于搜索单个字段
GET /attendance_server_log/_search
{
"query": {
"match": {
"action": "修改"
}
}
}
#等同于 or 匹配操作
multi_match 是 match 的升级,用于搜索多个字段
docker pull logstash:7.17.2
启动 logstash : docker run -d --name logstash -p 5044:5044 -p 9600:9600 logstash:7.17.2
docker cp logstash:/usr/share/logstash/config /data/logstash/config
docker stop logstash
docker rm -f logstash
input {
#为logstash增加tcp输入口,方便springboot接入
tcp {
mode => "server"
host => "0.0.0.0"
#从4560端口取日志
port => 4560
#需要进入logstash容器安装logstash-codec-json_lines插件
codec => json_lines
#设置类型
type => "debug"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4561
codec => json_lines
type => "error"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4562
codec => json_lines
type => "info"
}
tcp {
mode => "server"
host => "0.0.0.0"
port => 4563
codec => json_lines
type => "record"
}
}
#数据筛选和过滤,只处理符合特定条件的数据,不需要可删除
filter{
if [type] == "record" {
mutate {
remove_field => "port"
remove_field => "host"
remove_field => "@version"
}
json {
source => "message"
remove_field => ["message"]
}
}
}
output {
elasticsearch {
#hosts中的地址应该写同一network下的容器名称
hosts => "192.168.16.128:9200"
index => "springboot-%{type}-%{+YYYY.MM.dd}"
}
}
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \--link elasticsearch:es \-v /data/logstash/config/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \-d logstash:7.17.2
docker exec -it bc3fa65632bb bash
# 进入bin目录 cd /bin/
# 安装插件 logstash-plugin install logstash-codec-json_lines
# 重启logstash服务 docker restart logstash
docker pull kibana:7.17.2
docker run -d --name kibana -p 5601:5601 kibana:7.17.2
mkdir -p /data/kibana/
拷贝docker文件指定存储
docker cp kibana:/usr/share/kibana/config /data/kibana
修改kibana.yml配置文件
vim /data/kibana/config/kibana.yml
docker stop kibana
docker rm kibana
docker run -d --name kibana -p 5601:5601 -v /data/kibana/config:/usr/share/kibana/config kibana:7.17.2
因为kibana发现es需要token
b726550721fb = 容器id
docker exec -it b726550721fb /bin/bash bin/elasticsearch-create-enrollment-token --scope kibana
使用kibana查询索引下的所有
7之后的版本,默认情况下会连接localhost:9200 的Es
match query 用于搜索单个字段
docker pull
docker run -d --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server
创建挂载目录
mkdir -p /data/nacos/{conf,data,logs}
请求地址http://192.168.16.128:8848/nacos
删除启动的nacos
docker stop nacos
docker rm nacos
docker run -it --name nacos \-p 8848:8848 \-e MODE=standalone
\-v /data/nacos/conf/application.properties:/home/nacos/conf/application.properties
\-v /data/nacos/data:/home/nacos/conf/data
\-v /data/nacos/logs:/home/nacos/conf/logs \-d nacos/nacos-server
docker exec -it 容器名称 /bin/bash 进入 容器
因为我使用的是本机安装虚拟机的方式,想让docker中的nacos 连接到本机mysql 需要指定
--network host
参数将容器连接到宿主机的网络,
docker run --network host -d -e MODE=standalone -v /data/nacos/logs:/home/nacos/logs -v /data/nacos/conf:/home/nacos/conf -p 8848:8848 --name nacos --restart=always nacos/nacos-server:v2.2.3
需要注意,当使用nacos配置文件使用root账户时, mysql库中的user表, root 用户host是否设置了% 否则nacos无法连接
可能会出现以下报错
message from server: "Host '192.168.38.52' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' | |
Access denied for user ‘root‘@ ‘*.*.*.*‘ (using password: YES) | |
Nacos启动报错java.lang.IllegalStateException: No DataSource set |
我是通过在虚拟机中的docker 安装nacos 访问本机的mysql数据
准备nacos三个服务端
修改application.properties 配置文件 添加多数据库
spring.datasource.platform=mysql
### Connect URL of DB: 当一个数据挂了后,会切换到另外一个数据库
db.num=1
db.url.0=jdbc:mysql://192.168.38.52:3306/nacos?rewriteBatchedStatements=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
db.user.0=root
db.password.0=yraicm
db.num=2
db.url.1=jdbc:mysql://192.168.88.79:3306/nacos?rewriteBatchedStatements=true&characterEncoding=UTF8&serverTimezone=GMT%2B8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
db.user.1=root
db.password.1=Attendance@2022*
分别启动nacos节点 nacos默认启动是集群方式
nacos 服务端配置多数据源时, 添加配置时, 另外一个数据源没有数据
需要通过mysql的主从同步来实现
当没有做主从时, nacos多数据库源,只适合当一个数据源挂掉后,进行切换
这命令只会在虚拟机访问
docker run \--name nacos8850 -itd \--privileged=true \--restart=always \-p 8850:8850 \-e MODE=cluster \-e PREFER_HOST_MODE=ip \-e NACOS_SERVER_IP=192.168.16.128 \-e NACOS_SERVERS=192.168.16.128:8850,192.168.16.128:8860,192.168.16.128:8870 \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=192.168.38.52 \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=yraicm \-e MYSQL_SERVICE_DB_NAME=nacos \-e TIME_ZONE='Asia/Shanghai' \-e JVM_XMS=512m \-e JVM_XMX=512m \nacos/nacos-server:v2.2.3
本机电脑访问 需要\--network host 将容器连接到宿主机的网络,
docker run \--network host \--name nacos8850 -itd \--privileged=true \--restart=always \-p 8850:8850 \-e MODE=cluster \-e PREFER_HOST_MODE=ip \-e NACOS_SERVER_IP=192.168.16.128 \-e NACOS_SERVERS=192.168.16.128:8850,192.168.16.128:8860,192.168.16.128:8870 \-e SPRING_DATASOURCE_PLATFORM=mysql \-e MYSQL_SERVICE_HOST=192.168.38.52 \-e MYSQL_SERVICE_PORT=3306 \-e MYSQL_SERVICE_USER=root \-e MYSQL_SERVICE_PASSWORD=yraicm \-e MYSQL_SERVICE_DB_NAME=nacos \-e TIME_ZONE='Asia/Shanghai' \-e JVM_XMS=512m \-e JVM_XMX=512m \nacos/nacos-server:v2.2.3