邊緣化搭建?DotNet?Core?2.1?自動(dòng)化發(fā)布和部署(下)

寫(xiě)在前面

  本篇文章是上一篇邊緣化搭建 DotNet Core 2.1 自動(dòng)化發(fā)布和部署(上)的后續(xù)操作悉盆,本文主要講解如何開(kāi)啟Docker Remote API,開(kāi)啟Remote API后的權(quán)限安全問(wèn)題送淆。配置Jenkins構(gòu)建項(xiàng)目帜羊,并在云服務(wù)器上構(gòu)建成功系吭。廢話不多說(shuō)咙鞍,我們一起來(lái)動(dòng)手操作吧。

先決條件

1.一臺(tái)Debain 9系統(tǒng) x86 服務(wù)器 硬件環(huán)境:1核2G 40G硬盤(pán)切距。

2. x86服務(wù)器成功安裝并運(yùn)行Docker環(huán)境(本文不闡述安裝過(guò)程朽缎,讀者可查閱參考文獻(xiàn))

2.根據(jù)上一篇邊緣化搭建 DotNet Core 2.1 自動(dòng)化發(fā)布和部署(上)搭建好的邊緣計(jì)算環(huán)境

開(kāi)啟Docker Remote API

  Remote API主要用于遠(yuǎn)程訪問(wèn)Docker守護(hù)進(jìn)程從而下達(dá)指令的。 因此蔚舀,我們?cè)趩?dòng)Docker守護(hù)進(jìn)程時(shí)饵沧,需要添加-H參數(shù)并指定開(kāi)啟的訪問(wèn)端口。 通常赌躺,我們可以通過(guò)編輯守護(hù)進(jìn)程的配置文件來(lái)實(shí)現(xiàn)狼牺。不過(guò)對(duì)于不同操作系統(tǒng)而言,守護(hù)進(jìn)程啟動(dòng)的配置文件也不盡相同礼患。但是現(xiàn)在我們不需要去改動(dòng)系統(tǒng)原有的配置文件是钥,通過(guò)drop-in file方式進(jìn)行覆蓋配置,所以在不改動(dòng)系統(tǒng)配置文件的方式下缅叠,我們的覆蓋配置文件的路徑基本保持一致悄泥。

創(chuàng)建 override.conf

  我們需要在x86服務(wù)器上創(chuàng)建 override.conf 配置文件肤粱。

$ mkdir -p /etc/systemd/system/docker.service.d/

$ nano override.conf

編輯 override.conf

  1.將以下內(nèi)容加入到override.conf文件

[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376

  2.重啟Docker服務(wù)

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker.service

測(cè)試Remote API

$ curl http://your ip:2375/info

  測(cè)試成功將返回如下信息:

開(kāi)啟 Remote API 安全認(rèn)證

  到目前位置鸥鹉,我們已經(jīng)在x86服務(wù)器開(kāi)啟Docker Remote API來(lái)控制Docker服務(wù)灸异。但是,細(xì)心的讀者應(yīng)該已經(jīng)發(fā)現(xiàn)喇聊,在這個(gè)連接訪問(wèn)的過(guò)程中并沒(méi)有安全認(rèn)證機(jī)制凯楔,也就是說(shuō)任何人只要知道Remote API地址和端口都可以控制Docker 服務(wù)虐骑,然而這樣將會(huì)大大增加了服務(wù)的風(fēng)險(xiǎn)垂寥。接下來(lái)筆者將告訴大家如何為Remote API添加認(rèn)證機(jī)制。

生成證書(shū)

  1.新建一個(gè)命名為 createSSL.sh 的 Shell 腳本文件戏仓。

$ sudo nano createSSL.sh

  2.在 createSSL.sh 文件中加入以下代碼:

復(fù)制代碼

#!/bin/bash

set -e

if [ -z $1 ];then

? ? ? ? echo "input file location"

? ? ? ? exit 0

fi

VAR=$1?

mkdir -p $1

cd $1

openssl genrsa -aes256 -out ca-key.pem 4096

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

openssl genrsa -out server-key.pem 4096

openssl req -subj "/CN=$VAR" -sha256 -new -key server-key.pem -out server.csr

echo subjectAltName = DNS:$VAR,IP:127.0.0.1 > extfile.cnf

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

openssl genrsa -out key.pem 4096

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

echo extendedKeyUsage = clientAuth > extfile.cnf

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

rm -v client.csr server.csr

chmod -v 0400 ca-key.pem key.pem server-key.pem

chmod -v 0444 ca.pem server-cert.pem cert.pem

復(fù)制代碼

  3.執(zhí)行生成證書(shū)操作嗓奢。

$ sh createSSL.sh master

  第一個(gè)ca-key.perm 生成時(shí)可能需要你輸入一個(gè)密碼讼撒,隨便就可以了,只要記得住。此處略有坑根盒,不能一路回車(chē)钳幅,$VAR 輸入的參數(shù)必須是域名,這波操作是在配置jenkins docker插件時(shí)發(fā)現(xiàn)的炎滞。筆者使用的域名是:master 敢艰,為了各位讀者能順利進(jìn)行教程操作,請(qǐng)跟筆者一起使用相同的域名册赛。

配置 override.conf

  1.將生成的ca.pem, server-cert.pem, server-key.pem 文件復(fù)制到 /root/.docker 目錄下钠导。當(dāng)然此目錄并非固定的,讀者可以根據(jù)自己的心情來(lái)存放其他的目錄路徑森瘪。目錄存放的路徑絕對(duì)不能錯(cuò)牡属,否者docker.service 將會(huì)啟動(dòng)不了。

$ mkdir -p /root/.docker

$ cp {ca,server-cert,server-key}.pem /root/.docker/

  2.最終 /etc/systemd/system/docker.service.d/override.conf 文件內(nèi)容如下:

復(fù)制代碼

[Service]

ExecStart=

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/root/.docker/ca.pem --tlscert=/root/.docker/server-cert.pem --tlskey=/root/.docker/server-key.pem

復(fù)制代碼

  3.重啟Docker服務(wù)

$ sudo systemctl daemon-reload

$ sudo systemctl restart docker.service

測(cè)試 Remote API 安全認(rèn)證

  測(cè)試的使用記得一定要使用域名進(jìn)行訪問(wèn)扼睬,如果沒(méi)有設(shè)置域名解析逮栅,可以通過(guò)修改本地的host的方式進(jìn)行實(shí)現(xiàn)。

curl https://master:2376/info --cert /root/master/cert.pem --key /root/master/key.pem --cacert /root/master/ca.pem

創(chuàng)建Jenkins項(xiàng)目

  接下來(lái)窗宇,我們進(jìn)入使用樹(shù)莓派搭建好的Jenkins系統(tǒng)新建項(xiàng)目措伐,并通過(guò) docker-compose 方式啟動(dòng)項(xiàng)目。Let's do it

下載證書(shū)

  通過(guò)SSH連接樹(shù)莓派后军俊,將x86服務(wù)器上生成的 ca.pem侥加,server-cert.pem,server-key.pem 證書(shū)下載到樹(shù)莓派 /var/jenkins_home/cert/master 目錄蝇完。

$ sudo mkdir -p /var/jenkins_home/cert/master

$ sudo scp rtdsoft@192.168.6.200:/home/loongle/master/{cert,key,ca}.pem /var/jenkins_home/cert/master

新建任務(wù)

  1.構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目

  2.設(shè)置源碼地址官硝,為了方便各位讀者,筆者已經(jīng)新建一個(gè)項(xiàng)目代碼倉(cāng)短蜕,讀者可以直接使用這個(gè)倉(cāng)氢架,快速跑一遍流程。git 地址:https://gitee.com/wenalu/Rpi-MvcTest.git

  3.設(shè)置構(gòu)建觸發(fā)器朋魔,讓項(xiàng)目可以定時(shí)輪詢倉(cāng)庫(kù)岖研,執(zhí)行自動(dòng)構(gòu)建,本次配置的參數(shù)為2分鐘獲取一次警检。

  4.新增構(gòu)建孙援,選擇執(zhí)行Shell,并填寫(xiě)以下腳本內(nèi)容

復(fù)制代碼

#!/bin/bash

# 獲取短版本號(hào)

docker ps

pwd

ls

echo ----------------------------------------

whoami

echo ----------------------------------------

GITHASH=`git rev-parse --short HEAD`

echo ---------------Docker Three------------------

docker-compose --tlsverify \

? --tlscacert=/usr/local/jenkins/cert/master/ca.pem \

? --tlscert=/usr/local/jenkins/cert/master/cert.pem \

? --tlskey=/usr/local/jenkins/cert/master/key.pem \

? -H=master:2376 \

? -f ./docker-compose.yml -f ./docker-compose.override.yml? -p dockercompose4255153253317384266 down --rmi local --remove-orphans

?

?

docker-compose --tlsverify \

? --tlscacert=/usr/local/jenkins/cert/master/ca.pem \

? --tlscert=/usr/local/jenkins/cert/master/cert.pem \

? --tlskey=/usr/local/jenkins/cert/master/key.pem \

? -H=master:2376 \

? -f ./docker-compose.ci.build.yml -p dockercompose4255153253317384266 config

?

?

docker-compose --tlsverify \

? --tlscacert=/usr/local/jenkins/cert/master/ca.pem \

? --tlscert=/usr/local/jenkins/cert/master/cert.pem \

? --tlskey=/usr/local/jenkins/cert/master/key.pem \

? -H=master:2376 \

? -f ./docker-compose.ci.build.yml -p dockercompose4255153253317384266 up --build

echo ---------------Publishing...------------------

docker-compose --tlsverify \

? --tlscacert=/usr/local/jenkins/cert/master/ca.pem \

? --tlscert=/usr/local/jenkins/cert/master/cert.pem \

? --tlskey=/usr/local/jenkins/cert/master/key.pem \

? -H=master:2376 \

? -f "./docker-compose.yml" -f "./docker-compose.override.yml"? -p dockercompose4255153253317384266 up -d --build

復(fù)制代碼

注意事項(xiàng)

  請(qǐng)各位讀者在填寫(xiě)執(zhí)行Shell內(nèi)容時(shí)注意 -H=master:2376 扇雕,master的含義是生成證書(shū)使用的域名拓售,亦是在上篇博文中,啟動(dòng) Jenkins 添加 --add-host 解析參數(shù)镶奉,筆者填寫(xiě)的解析IP:192.168.6.200础淤,所以最后筆者訪問(wèn)master將會(huì)指向6.200的機(jī)器崭放。當(dāng)然,讀者若使用的是云服務(wù)器鸽凶,并且配置了域名解析币砂,那么只需要將 master 改成解析的域名即可,不需要在啟動(dòng) Jenkins 添加 --add-host 參數(shù)玻侥。請(qǐng)各位讀者謹(jǐn)記决摧,避免踩坑。為了方便各位讀者凑兰,重貼啟動(dòng) Jenkins 代碼掌桩,請(qǐng)按需修改啟動(dòng)參數(shù)。

復(fù)制代碼

$ sudo docker run --name=jenkins --restart=always --add-host master:192.168.6.200 -p 8080:8080 -p 50000:50000 -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/bin/docker -v /var/jenkins_home:/usr/local/jenkins/ -d auto-jenkins

復(fù)制代碼

測(cè)試

  當(dāng)各位讀者的構(gòu)建結(jié)果最后輸出的信息最終和筆者保持一致的時(shí)候票摇,那么整個(gè)流程就跑完了拘鞋。

寫(xiě)在后面

  至此,本篇內(nèi)容已經(jīng)全部完畢了矢门,博文中可能有很多表述不太專業(yè)的地方,還請(qǐng)各位讀者指點(diǎn)交流灰蛙。其實(shí)本文章標(biāo)題有另外一個(gè)《「窮」式搭建 DotNet Core 2.1 自動(dòng)化發(fā)布和部署》祟剔,后來(lái)考慮很久不用這個(gè)標(biāo)題是因?yàn)楸旧碜约簩儆谶@個(gè)行業(yè)的專業(yè)人士,不能用比較庸俗的詞來(lái)表述這篇文章摩梧,所以才有現(xiàn)在的這個(gè)標(biāo)題物延。很開(kāi)心我終于寫(xiě)完了,寫(xiě)這一大章的內(nèi)容真的挺不容易仅父,也挺佩服那些堅(jiān)持下來(lái)叛薯,寫(xiě)了那么多博文的作者是怎么走過(guò)來(lái)的。為他們對(duì)社區(qū)作出的貢獻(xiàn)喝彩吧笙纤。大吉大利耗溜,今晚吃雞

參考文獻(xiàn)

https://docs.docker.com/install/linux/docker-ce/debian/

https://success.docker.com/article/how-do-i-enable-the-remote-api-for-dockerd

https://blog.csdn.net/laodengbaiwe0838/article/details/79340805

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市省容,隨后出現(xiàn)的幾起案子抖拴,更是在濱河造成了極大的恐慌,老刑警劉巖腥椒,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阿宅,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笼蛛,警方通過(guò)查閱死者的電腦和手機(jī)洒放,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滨砍,“玉大人往湿,你說(shuō)我怎么就攤上這事榨为。” “怎么了煌茴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵随闺,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我蔓腐,道長(zhǎng)矩乐,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任回论,我火速辦了婚禮散罕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘傀蓉。我一直安慰自己欧漱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布葬燎。 她就那樣靜靜地躺著误甚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谱净。 梳的紋絲不亂的頭發(fā)上窑邦,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音壕探,去河邊找鬼冈钦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛李请,可吹牛的內(nèi)容都是我干的瞧筛。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼导盅,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼较幌!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起认轨,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绅络,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后嘁字,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體恩急,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年纪蜒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了衷恭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纯续,死狀恐怖随珠,靈堂內(nèi)的尸體忽然破棺而出灭袁,到底是詐尸還是另有隱情,我是刑警寧澤窗看,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布茸歧,位于F島的核電站,受9級(jí)特大地震影響显沈,放射性物質(zhì)發(fā)生泄漏软瞎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一拉讯、第九天 我趴在偏房一處隱蔽的房頂上張望涤浇。 院中可真熱鬧,春花似錦魔慷、人聲如沸只锭。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜻展。三九已至,卻和暖如春召边,著一層夾襖步出監(jiān)牢的瞬間铺呵,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工隧熙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幻林。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓贞盯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親沪饺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子躏敢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容