目錄
安裝docker+jenkins+docker-compose+ruoyi+mysql
安裝yum命令
下載docker-ce
啟動docker
安裝docker-compose
查詢docker和docker-compose兼容性
查詢docker-compose版本
下載docker-compose
使用sudo管理員權(quán)限執(zhí)行命令
?docker-compose --version? 查詢是否成功? ?
docker-compose部署若依項目
打包
部署出現(xiàn)過得問題
啟動基礎(chǔ)環(huán)境./deploy.sh base
若依數(shù)據(jù)庫默認(rèn)密碼
很納悶
deploy.sh? modules命令
docker 安裝Jenkins
linux安裝jdk17
安裝maven
安裝gitlab
拉取報錯docker: error pulling image configuration
?編輯
修改gitlab配置
重啟gitlab
?修改密碼
啟動Jenkins+掛載配置+訪問
jenkins部署若依
安裝docker-compose
?宿主機(jī)不安裝jdk和maven啟動
配置容器中得jdk和maven
設(shè)置全局工具配置
?構(gòu)建一個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 文件權(quán)限
jenkins部署遇到的問題
?部署ruoyi-ui
配置ruoyi.sh
修改jenkins.sh文件
docker 安裝es
docker官網(wǎng)查詢鏡像地址
第二步啟動 es
第三步?創(chuàng)建docker容器掛載的目錄
第四步將容器文件拷貝出來
?第五步 設(shè)置elasticsearch.yml內(nèi)容
第七步??重新起容器并掛載外部文件夾
docker安裝??logstash
啟動 logstash?
創(chuàng)建logstash?掛載文件夾
mkdir -p /data/logstash/config
將容器文件拷貝出來
停止和刪除容器
創(chuàng)建logstash.conf配置文件
啟動logstash和掛載的文件
docker進(jìn)入容器
docker安裝Kibana
啟動kibana
創(chuàng)建kibana本地掛載文件
停止和刪除臨時容器
啟動掛載地址后的新容器
?進(jìn)入elasticsearch容器獲取token
進(jìn)入es容器修改密碼
docker 安裝nacos
nacos單機(jī)版
啟動掛載
nacos配置數(shù)據(jù)庫
?搭建集群nacos
?添加多數(shù)據(jù)庫
修改cluster.conf文件配置集群節(jié)點(diǎn)
?遇到問題 :
啟動命令配置集群
參考文章
docker一站式安裝Java開發(fā)環(huán)境_codexiaov的博客-CSDN博客docker+jenkins+gitee+shell 自動化部署微服務(wù)(基于若依)【詳細(xì)完整版】_jenkins部署若依微服務(wù)_菠蘿仔丨葉的博客-CSDN博客docker一站式安裝Java開發(fā)環(huán)境_codexiaov的博客-CSDN博客
后續(xù)繼續(xù)實(shí)驗(yàn)完善補(bǔ)全
安裝docker
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
# 開機(jī)自啟動
sudo systemctl enable docker
# docker 會用到很多端口,建立先關(guān)閉
systemctl stop firewalld
# 禁止開機(jī)啟動防火墻
systemctl disable firewalld
#查看是否關(guān)閉防火墻
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"]
}
啟動docker
systemctl start docker ?# 啟動docker服務(wù)
systemctl stop docker ?# 停止docker服務(wù)
systemctl restart docker ?# 重啟docker服務(wù)
systemctl enable docker?#開機(jī)啟動
安裝docker-compose
查詢docker和docker-compose兼容性
https://docs.docker.com/compose/compose-file/compose-file-v3/
查詢docker-compose版本
https://github.com/docker/compose/releases/
下載docker-compose
我用的是centos桌面版,修改文件名字為docker-compose? ? 直接拷貝??
存放的路徑? usr/local/bin/?
使用sudo管理員權(quán)限執(zhí)行命令
sudo chmod +x /usr/local/bin/docker-compose
?docker-compose --version? 查詢是否成功? ?
不熟悉的,不推薦鏈接地址下載
明明文件在出現(xiàn)錯誤 : bash: /usr/local/bin/docker-compose: 沒有那個文件或目錄,
?
docker-compose部署若依項目
打包
需要注意修改若依yml文件中nacos注冊中心地址
復(fù)制一個分docker文件 上傳到服務(wù)器中
?
部署出現(xiàn)過得問題
問題1 :bash: ./deploy.sh: /bin/sh^M: 壞的解釋器: 沒有那個文件或目錄
腳本文件在windows下編輯過。在windows下,會出現(xiàn)空格 每一行的結(jié)尾是\n\r,而在linux下文件的結(jié)尾是\n
解決方法 :?cat -A 文件名稱?? #可以查詢當(dāng)前文件? ?\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? 去查詢也沒發(fā)現(xiàn)報錯信息?
問題4: 明明若依有幾個jar包,其他幾個卻沒有啟動
因?yàn)樵赿eploy.sh文件中有設(shè)置
啟動基礎(chǔ)環(huán)境./deploy.sh base
我是關(guān)閉了防火墻 所以不需要開啟端口,命令需要在當(dāng)前目錄下執(zhí)行
# 開啟所需端口
./deploy.sh port
# 啟動基礎(chǔ)環(huán)境
./deploy.sh base? 下面是操作圖
?
?
關(guān)閉所有模塊?因?yàn)闆]有把nacos得sql放入
?
使用 ./deploy? base 后的成功界面,因?yàn)闆]使用 ./?deploy.sh? ?modules所以,沒有服務(wù)注冊
若依數(shù)據(jù)庫默認(rèn)密碼
mysql -uroot-ppassword
docker exec -it? ? ?/bin/bash
讓root可被所有ip鏈接
grant all privileges on *.* to root@'%' with grant option;
刷新限權(quán)
flush privileges;
當(dāng)用navicat連接數(shù)據(jù)庫后,建議去執(zhí)行nacos所需要的sql??
# 開啟所需端口
./deploy.sh port
# 啟動基礎(chǔ)環(huán)境(必須)
./deploy.sh base
# 啟動程序模塊(必須)
./deploy.sh modules
# 關(guān)閉所有環(huán)境/模塊
./deploy.sh stop
# 刪除所有環(huán)境/模塊
./deploy.sh rm
很納悶
當(dāng)nacos通過docker logs 查詢?nèi)罩緯r,出現(xiàn)No DataSource set錯誤時 ,進(jìn)入mysql容器,然后進(jìn)入mysql,nacos就能訪問
后面再次關(guān)機(jī),重試啟動所有服務(wù)時, 就沒有在出現(xiàn)
deploy.sh? modules命令
docker 安裝Jenkins
docker pull jenkinsci/blueocean
當(dāng)下載超時,去阿里云容器鏡像服務(wù),把加速器的地址加入daemon.json
linux安裝jdk17
Java Downloads | Oracle
將文件傳輸?shù)絃inux的 /opt 目錄下
?解壓文件
tar -zxvf?jdk-17_linux-x64_bin.tar.gz
配置環(huán)境變量
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
安裝maven
https://maven.apache.org/download.cgimaven 官網(wǎng)地址??https://maven.apache.org/download.cgi
?存放路徑自己選擇,只要在profile指定就行
修改配置文件
:%d? ?清空文件內(nèi)容? ? 替換以下配置
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.2.0 https://maven.apache.org/xsd/settings-1.2.0.xsd">
<localRepository>/m2/repository</localRepository>
<pluginGroups>
</pluginGroups>
<proxies>
</proxies>
<servers>
</servers>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
<profiles>
</profiles>
</settings>
?修改profile? 在底部加入以下配置? 注意路徑? ?
MAVEN_HOME=/usr/local/maven/apache-maven-3.9.2
PATH=$MAVEN_HOME/bin:$PATH
export MAVEN_HOME PATH
保存后讓配置文件生效
source /etc/profile
驗(yàn)證
mvn -version
安裝gitlab
docker pull gitlab/gitlab-ce:latest
拉取報錯docker: error pulling image configuration
解決方法 修改國內(nèi)鏡像
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 和設(shè)置掛載
\-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
?
修改gitlab配置
修改端口80? 改為 9980
重啟gitlab
?
?修改密碼
#進(jìn)入容器 執(zhí)行以下命令
docker exec -it gitlab /bin/bash
# 進(jìn)入控制臺
gitlab-rails console -e production
# 查詢id為1的用戶,id為1的用戶是超級管理員
user = User.where(id:1).first
# 密碼不能太簡單 修改密碼為root123456
user.password='root123456'
# 保存
user.save!
# 退出
exit
?gitlab界面設(shè)置中文
啟動Jenkins+掛載配置+訪問
啟動后訪問密碼在本機(jī)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
?
?初次可以選擇推薦的插件
jenkins部署若依
安裝docker-compose
可以參考前面得安裝和使用
修改文件名字
mv docker-compose-linux-x86 64 docker-compose
授權(quán)
sudo chmod +x /usr/local/bin/docker-compose
查詢是否成功
docker-compose -version
下載jenkins:jdk17版本
docker pull jenkins/jenkins:jdk17
因?yàn)檫@個版本在新手安裝插件時,都是成功得, 比如jenkinsci/blueocean? 有些插件下載不了,或者因?yàn)殓R像源得版本?
例如 以下問題
有一些可以使用 清華鏡像源解決? :? https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/
完整路徑例子 :?https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/dynamic-2.387/update-center.json
修改站點(diǎn)地址
?宿主機(jī)不安裝jdk和maven啟動
設(shè)置掛載目錄,默認(rèn)密碼也在掛載目錄下面
docker run -u root -it --name jenkins -p 9200:8080 ?-v /var/jenkins_home:/var/jenkins_home -d jenkins/jenkins:jdk17
因?yàn)檫x擇得jenkins-jdk17 ,所以只需要拷貝maven到容器中
docker cp /usr/local/maven/apache-maven-3.9.2? ? 容器名稱:/opt
因?yàn)槿萜髦袩o法編輯profile,所以我是拷貝出來進(jìn)行修改環(huán)境變量
docker cp ?jenkins92:/etc/profile ?/usr/local/maven/apache-maven-3.9.2
配置容器中得jdk和maven
在文件的最下面添加容器中得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
?設(shè)置全局工具配置
?構(gòu)建一個maven項目
?如果沒有這個選項, 需要去jenkins下載插件?Maven Integration plugin, 然后在重啟
?
?配置項目
Credentials 是需要去設(shè)置賬戶密碼,我使用的url是gitlab地址
?創(chuàng)建賬戶
?
?ID不設(shè)置,會默認(rèn)生成??
?配置Build
?如果 jenkins? ?提示沒有這個文件: ‘pom.xml‘ ? 說明在工作空間中沒有把gitlab項目拉下來
?立即構(gòu)建后回去下載包
jenkins+docker+docker-compose+shell腳本部署
啟動 jenkins
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環(huán)境變量
當(dāng)啟動掛載目錄時,容器中就會創(chuàng)建對應(yīng)文件夾,只需要修改環(huán)境變量路徑
jenkins全局工具配置的jdk需要和jenkins容器配置的環(huán)境變量一致
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
替換文件jenkins容器中profile文件
docker cp ?/usr/local/maven/apache-maven-3.9.2/profile ? jenkins30:/etc/profile ?
#生效profile文件
source /etc/profile
jenkins項目配置
修改項目配置的build
添加Publish over SSH
沒有這個選項的取下載插件
用于jenkins通過SSH連接服務(wù)用
?找到SSH Servers , 添加SSH連接地址和密碼
添加Post Steps
?
選擇你添加的SSH賬戶和配置
Remote directory? 指定宿主機(jī)容器地址,也就是你liunx系統(tǒng)的地址,
會根據(jù)指定的路徑 /home/sw 把構(gòu)建的項目存在路徑下?,jenkins構(gòu)建完成后,可以去當(dāng)前路徑下查看
Exec command : 執(zhí)行宿主機(jī)下路徑的腳本
cd? /home/docker/? 找到路徑? ?我是換行了,至于不換行,能不能執(zhí)行還沒實(shí)驗(yàn)
sh ./jenkins.sh? ? 執(zhí)行的shell腳本
idea中修改項目配置
修改ip
連接nacos 和 config 替換? ?ruoyi-nacos
連接mysql 替換? ?ruoyi-mysql? ? ? ? ? 這里需要注意配置文件是在nacos中? ?,修改后重啟對應(yīng)容器
連接redis替換? ?ruoyi-redis????????????這里需要注意有些配置文件是在nacos中????
?注意dockerfile 里面的路徑配置
配置Jenkins.sh文件
?如果在windows下編輯,需要注意空格無法被liunx環(huán)境識別? 否則會報
bash: ./ruoyi-ui.sh: /bin/sh^M: 壞的解釋器: 沒有那個文件或目錄
解決方法 :?cat -A 文件名稱?? #可以查詢當(dāng)前文件? ?\r 字符被顯示為^M
使用指令sed -i 's/\r$//' 【文件名稱】? ,上面的指令會把? copy.sh 中的\r 替換成空白
配置容器名稱和版本,設(shè)置執(zhí)行的腳本
執(zhí)行了拷貝 : copy.sh
執(zhí)行了 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
# 拷貝構(gòu)建的jar包到宿主機(jī)
/home/docker/copy.sh
# 重新啟動docker項目
/home/docker/deploy.sh modules
因?yàn)檫@里使用docker-compose? 如果沒有請下參考前面的配置方式進(jìn)行配置
?作用是執(zhí)行docker-compose.yml文件里面的配置, 在docker-compose.yml配置文件中有指定執(zhí)行dockerfile,在dockerfile中又配置了執(zhí)行jar的路徑
version : '3.8'
services:
ruoyi-nacos:
#指定容器的名稱為
container_name: ruoyi-nacos
#指定要使用的鏡像
image: nacos/nacos-server
build:
#表示在 ./nacos 目錄下有 Dockerfile,可以用來構(gòu)建鏡像。
context: ./nacos
#設(shè)置環(huán)境變量,這里設(shè)置了 MODE=standalone,表示以單機(jī)模式運(yùn)行 Nacos。
environment:
- MODE=standalone
#設(shè)置容器掛載路徑 掛載文件或目錄到容器中
volumes:
- ./nacos/logs/:/home/nacos/logs
- ./nacos/conf/application.properties:/home/nacos/conf/application.properties
#將容器內(nèi)的端口映射到宿主機(jī)的對應(yīng)端口
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
#定義了服務(wù)之間的依賴關(guān)系,這里表示 ruoyi-nacos 依賴于另一個名為 ruoyi-mysql 的服務(wù)。
depends_on:
- ruoyi-mysql
links:
- ruoyi-mysql
ruoyi-mysql:
#指定容器的名稱為
container_name: ruoyi-mysql
#指定要使用的鏡像
image: mysql:5.7
build:
#表示在 ./mysql 目錄下有 Dockerfile,可以用來構(gòu)建鏡像。
context: ./mysql
#將容器內(nèi)的端口映射到宿主機(jī)的對應(yīng)端口
ports:
- "3306:3306"
#設(shè)置容器掛載路徑
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/logs:/logs
- ./mysql/data:/var/lib/mysql
#command: 定義了要在容器內(nèi)運(yùn)行的命令和參數(shù)。
#'mysqld': 指定要運(yùn)行的命令為 mysqld,即 MySQL 服務(wù)器進(jìn)程。
#--innodb-buffer-pool-size=80M: 設(shè)置 InnoDB 緩沖池的大小為 80MB。這是 MySQL 中用于存儲數(shù)據(jù)和索引的內(nèi)存緩沖區(qū)。
#--character-set-server=utf8mb4: 設(shè)置 MySQL 服務(wù)器的字符集為 utf8mb4,支持存儲和處理 Unicode 字符。
#--collation-server=utf8mb4_unicode_ci: 設(shè)置 MySQL 服務(wù)器的排序規(guī)則為 utf8mb4_unicode_ci,用于字符串比較和排序。
#--default-time-zone=+8:00: 設(shè)置默認(rèn)時區(qū)為 UTC+8,這里表示東八區(qū)時間。
#--lower-case-table-names=1: 設(shè)置表名大小寫不敏感,即表名的字母都被轉(zhuǎn)換為小寫。
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'
]
# #設(shè)置環(huán)境變量
environment:
#表示要創(chuàng)建的數(shù)據(jù)庫名稱為 'ry-cloud'。這將在 MySQL 容器啟動時自動創(chuàng)建該數(shù)據(jù)庫。
MYSQL_DATABASE: 'ry-cloud'
#表示要設(shè)置的 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 容器中執(zhí)行的命令是 redis-server /home/ruoyi/redis/redis.conf。
#告訴 Redis 容器使用指定的配置文件 /home/ruoyi/redis/redis.conf 啟動 Redis 服務(wù)器
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" 的服務(wù)容器,在啟動時會先啟動 "ruoyi-gateway"。
depends_on:
- ruoyi-gateway
#將 "ruoyi-gateway" 容器與 "ruoyi-nginx" 容器鏈接起來,以便于容器之間的通信。 相當(dāng)于在gateway上搭建了nginx
links:
- ruoyi-gateway
ruoyi-gateway:
container_name: ruoyi-gateway
build:
context: ./ruoyi/gateway
dockerfile: dockerfile
ports:
- "8080:8080"
#表示 ruoyi-gateway容器依賴于名為 "ruoyi-redis" 的服務(wù)容器
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"
添加copy.sh
注意在windows環(huán)境下編輯容易產(chǎn)生liunx無法識別的空格
主要作用就是拷貝
指定宿主機(jī)路徑/home/sw 打包路徑下的jar? ? 拷貝到宿主機(jī)其他路徑,方便./deploy.sh 執(zhí)行
配置deploy.sh
路徑最好是和jenkins.sh文件中配置的一致,如果你要增加模塊, 可以把docker-compose文件配置的模塊名稱加入到 base和modules中
端口號如果沒有關(guān)閉防火墻,就需要調(diào)用 ./deploy? port? 執(zhí)行配置的端口
配置完成后先別急使用jenkins進(jìn)行構(gòu)建,還需要配置jenkins.sh? ?deploy.sh? ?copy.sh 文件權(quán)限
配置jenkins.sh? ?deploy.sh? ?copy.sh 文件權(quán)限
ls -l deploy.sh? 查詢權(quán)限
?chmod +rwx ?deploy.sh? ?設(shè)置文件權(quán)限
jenkins部署遇到的問題
問題1
若依的mysql腳本為啥不會放入/docker-entrypoint-initdb.d文件夾中,?
?我用docker ?cp 放入, 重啟mysql 容器sql也還是不會被執(zhí)行
./deploy啟動后mysql 只會創(chuàng)建一個ruoyi-cloud ? 不會使用sql文件進(jìn)行創(chuàng)建
因?yàn)闆]有加入/docker-entrypoint-initdb.d(用于存放初始化數(shù)據(jù)庫的腳本文件)
想過是不是文件的使用權(quán)限不夠
查詢文件權(quán)限
ls -l ry_config_20220929.sql
這個問題還沒解決
問題2
Server check fail, please check server x.x.x.x ,port 9848 is available , error ={}
解決方法 : 是因?yàn)閯h除鏡像不徹底 ?docker rmi / rm ? 去刪除容器和鏡像,
然后在修改system服務(wù)數(shù)據(jù)庫,連接地址改成ruoyi-mysql ?和 ruoyi-redis ?然后重啟,最后所有容器才啟動成功
問題3
10:32:21 ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [2]]
修改 shell腳本 ?檢查是否存在windows空格
?部署ruoyi-ui
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
配置ruoyi.sh
#!/bin/sh
#進(jìn)入路徑
cd /home/sw/ruoyi-ui
#安裝依賴
npm install
#刪除原打包
rm -rf dist
#打包
npm run build:prod
#將名為 "stage" 的文件或目錄重命名為 "dist"
mv stage dist
# 打包完成后,將生成的靜態(tài)文件復(fù)制到指定目錄
# 例如,a將 dist 目錄下的文件 通過copy.sh 復(fù)制到 NGINX 的 HTML 目錄
#cp -R dist/* /usr/share/nginx/html
修改jenkins.sh文件
因?yàn)樵赾opy.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
# 拷貝構(gòu)建的jar包到宿主機(jī)
/home/docker/copy.sh
# 重新啟動docker項目
/home/docker/deploy.sh modules
訪問路徑http://192.168.16.130/login
訪問路徑http://192.168.16.130/login
docker 安裝es
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? ?進(jìn)入 容器
exit? 退出容器
docker logs <容器名稱或ID>? ?查詢?nèi)萜魅罩?br> docker ps -a? 查詢所有容器
docker inspect <容器名稱或ID> grep IPAddress? ?查看容器IP地址
docker logs -f cf66a8bd5cb5? ?查詢?nèi)萜鲗?shí)時日志
查詢?nèi)萜鞯膇p地址?4bf93249fc1b 容器的id
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 4bf93249fc1b
?
docker官網(wǎng)查詢鏡像地址
Docker
第二步啟動 es
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
參數(shù)說明
-
-d
?后臺啟動 -
–name
?起別名即:NAMES -
-p 9200:9200
?將端口映射出來
elasticsearch的9200端口是供外部訪問使用;9300端口是供內(nèi)部訪問使用集群間通訊 -
-e "discovery.type=single-node"
單節(jié)點(diǎn)啟動 -
-e ES_JAVA_OPTS="-Xms256m -Xmx256m"
?限制內(nèi)存大小
docker ps 查看是否啟動成功
第三步?創(chuàng)建docker容器掛載的目錄
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
?第五步 設(shè)置elasticsearch.yml內(nèi)容
vi /data/elasticsearch/config/elasticsearch.yml
還可以設(shè)置密碼
第六步? 停止和刪除臨時容器
?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"? 這是在虛擬機(jī)安裝的,可以在本機(jī)訪問 例如192.168.16.128:9200
es命令
match query?用于搜索單個字段
GET /attendance_server_log/_search
{
"query": {
"match": {
"action": "修改"
}
}
}
#等同于 or 匹配操作
multi_match 是 match 的升級,用于搜索多個字段
docker安裝??logstash
docker pull logstash:7.17.2
啟動 logstash?
啟動 logstash? :??docker run -d --name logstash -p 5044:5044 -p 9600:9600 logstash:7.17.2
創(chuàng)建logstash?掛載文件夾
mkdir -p /data/logstash/config
將容器文件拷貝出來
docker cp logstash:/usr/share/logstash/config /data/logstash/config
停止和刪除容器
docker stop logstash?
docker rm -f logstash?
創(chuàng)建logstash.conf配置文件
input {
#為logstash增加tcp輸入口,方便springboot接入
tcp {
mode => "server"
host => "0.0.0.0"
#從4560端口取日志
port => 4560
#需要進(jìn)入logstash容器安裝logstash-codec-json_lines插件
codec => json_lines
#設(shè)置類型
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"
}
}
#數(shù)據(jù)篩選和過濾,只處理符合特定條件的數(shù)據(jù),不需要可刪除
filter{
if [type] == "record" {
mutate {
remove_field => "port"
remove_field => "host"
remove_field => "@version"
}
json {
source => "message"
remove_field => ["message"]
}
}
}
output {
elasticsearch {
#hosts中的地址應(yīng)該寫同一network下的容器名稱
hosts => "192.168.16.128:9200"
index => "springboot-%{type}-%{+YYYY.MM.dd}"
}
}
啟動logstash和掛載的文件
??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進(jìn)入容器
docker exec -it bc3fa65632bb bash?
# 進(jìn)入bin目錄 cd /bin/
# 安裝插件 logstash-plugin install logstash-codec-json_lines
# 重啟logstash服務(wù) docker restart logstash
docker安裝Kibana
docker pull kibana:7.17.2
啟動kibana
?docker run -d --name kibana -p 5601:5601 kibana:7.17.2
創(chuàng)建kibana本地掛載文件
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
?進(jìn)入elasticsearch容器獲取token
?因?yàn)閗ibana發(fā)現(xiàn)es需要token
b726550721fb = 容器id
docker exec -it b726550721fb /bin/bash bin/elasticsearch-create-enrollment-token --scope kibana
進(jìn)入es容器修改密碼
使用kibana查詢索引下的所有
7之后的版本,默認(rèn)情況下會連接localhost:9200? 的Es
match query?用于搜索單個字段
docker 安裝nacos
nacos單機(jī)版
docker? pull
docker run -d --name nacos -p 8848:8848 -e MODE=standalone ?nacos/nacos-server
創(chuàng)建掛載目錄
?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? ?進(jìn)入 容器
因?yàn)槲沂褂玫氖潜緳C(jī)安裝虛擬機(jī)的方式,想讓docker中的nacos 連接到本機(jī)mysql 需要指定
--network host
參數(shù)將容器連接到宿主機(jī)的網(wǎng)絡(luò),
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
需要注意,當(dāng)使用nacos配置文件使用root賬戶時, mysql庫中的user表, root 用戶host是否設(shè)置了% 否則nacos無法連接
可能會出現(xiàn)以下報錯
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 |
nacos配置數(shù)據(jù)庫
我是通過在虛擬機(jī)中的docker 安裝nacos 訪問本機(jī)的mysql數(shù)據(jù)
?搭建集群nacos
準(zhǔn)備nacos三個服務(wù)端
?添加多數(shù)據(jù)庫
修改application.properties 配置文件? 添加多數(shù)據(jù)庫
spring.datasource.platform=mysql
### Connect URL of DB: 當(dāng)一個數(shù)據(jù)掛了后,會切換到另外一個數(shù)據(jù)庫
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*
修改cluster.conf文件配置集群節(jié)點(diǎn)
分別啟動nacos節(jié)點(diǎn)? ? nacos默認(rèn)啟動是集群方式
?遇到問題 :
nacos 服務(wù)端配置多數(shù)據(jù)源時, 添加配置時, 另外一個數(shù)據(jù)源沒有數(shù)據(jù)
需要通過mysql的主從同步來實(shí)現(xiàn)
當(dāng)沒有做主從時, nacos多數(shù)據(jù)庫源,只適合當(dāng)一個數(shù)據(jù)源掛掉后,進(jìn)行切換
啟動命令配置集群
這命令只會在虛擬機(jī)訪問
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
本機(jī)電腦訪問 需要\--network host 將容器連接到宿主機(jī)的網(wǎng)絡(luò),
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
?文章來源:http://www.zghlxwxcb.cn/news/detail-752695.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-752695.html
到了這里,關(guān)于docker+jenkins+docker-compose+mysql+elasticsearch+ruoyi(若依)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!