边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)
寫在前面
? 本篇文章是上一篇邊緣化搭建 DotNet Core 2.1 自動化發布和部署(上)的后續操作,本文主要講解如何開啟Docker Remote API,開啟Remote API后的權限安全問題。配置Jenkins構建項目,并在云服務器上構建成功。廢話不多說,我們一起來動手操作吧。
先決條件
1.一臺Debain 9系統 x86 服務器?硬件環境:1核2G 40G硬盤。
2. x86服務器成功安裝并運行Docker環境(本文不闡述安裝過程,讀者可查閱參考文獻)
2.根據上一篇邊緣化搭建 DotNet Core 2.1 自動化發布和部署(上)搭建好的邊緣計算環境?
開啟Docker Remote API
Remote API主要用于遠程訪問Docker守護進程從而下達指令的。?因此,我們在啟動Docker守護進程時,需要添加-H參數并指定開啟的訪問端口。?通常,我們可以通過編輯守護進程的配置文件來實現。不過對于不同操作系統而言,守護進程啟動的配置文件也不盡相同。但是現在我們不需要去改動系統原有的配置文件,通過drop-in file方式進行覆蓋配置,所以在不改動系統配置文件的方式下,我們的覆蓋配置文件的路徑基本保持一致。
創建 override.conf
我們需要在x86服務器上創建 override.conf 配置文件。
$ mkdir -p /etc/systemd/system/docker.service.d/$ nano override.conf編輯 override.conf?
1.將以下內容加入到override.conf文件
[Service] ExecStart=ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:23762.重啟Docker服務
$ sudo systemctl daemon-reload $ sudo systemctl restart docker.service測試Remote API
$ curl http://your ip:2375/info測試成功將返回如下信息:
?開啟 Remote API 安全認證
到目前位置,我們已經在x86服務器開啟Docker Remote API來控制Docker服務。但是,細心的讀者應該已經發現,在這個連接訪問的過程中并沒有安全認證機制,也就是說任何人只要知道Remote API地址和端口都可以控制Docker 服務,然而這樣將會大大增加了服務的風險。接下來筆者將告訴大家如何為Remote API添加認證機制。
生成證書
1.新建一個命名為 createSSL.sh 的 Shell 腳本文件。
$ sudo nano createSSL.sh2.在 createSSL.sh 文件中加入以下代碼:
3.執行生成證書操作。
$ sh createSSL.sh master第一個ca-key.perm 生成時可能需要你輸入一個密碼,隨便就可以了,只要記得住。此處略有坑,不能一路回車,$VAR 輸入的參數必須是域名,這波操作是在配置jenkins docker插件時發現的。筆者使用的域名是:master ,為了各位讀者能順利進行教程操作,請跟筆者一起使用相同的域名。
配置?override.conf?
1.將生成的ca.pem, server-cert.pem, server-key.pem 文件復制到 /root/.docker 目錄下。當然此目錄并非固定的,讀者可以根據自己的心情來存放其他的目錄路徑。目錄存放的路徑絕對不能錯,否者docker.service 將會啟動不了。
$ mkdir -p /root/.docker $ cp {ca,server-cert,server-key}.pem /root/.docker/2.最終?/etc/systemd/system/docker.service.d/override.conf 文件內容如下:
[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.pem3.重啟Docker服務
$ sudo systemctl daemon-reload $ sudo systemctl restart docker.service測試?Remote API 安全認證
測試的使用記得一定要使用域名進行訪問,如果沒有設置域名解析,可以通過修改本地的host的方式進行實現。
curl https://master:2376/info --cert /root/master/cert.pem --key /root/master/key.pem --cacert /root/master/ca.pem創建Jenkins項目
接下來,我們進入使用樹莓派搭建好的Jenkins系統新建項目,并通過 docker-compose 方式啟動項目。Let's do it
下載證書
通過SSH連接樹莓派后,將x86服務器上生成的 ca.pem,server-cert.pem,server-key.pem?證書下載到樹莓派 /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新建任務
1.構建一個自由風格的軟件項目
2.設置源碼地址,為了方便各位讀者,筆者已經新建一個項目代碼倉,讀者可以直接使用這個倉,快速跑一遍流程。git 地址:https://gitee.com/wenalu/Rpi-MvcTest.git
?
3.設置構建觸發器,讓項目可以定時輪詢倉庫,執行自動構建,本次配置的參數為2分鐘獲取一次。
4.新增構建,選擇執行Shell,并填寫以下腳本內容
注意事項?
請各位讀者在填寫執行Shell內容時注意 -H=master:2376 ,master的含義是生成證書使用的域名,亦是在上篇博文中,啟動 Jenkins 添加 --add-host 解析參數,筆者填寫的解析IP:192.168.6.200,所以最后筆者訪問master將會指向6.200的機器。當然,讀者若使用的是云服務器,并且配置了域名解析,那么只需要將 master 改成解析的域名即可,不需要在啟動 Jenkins 添加 --add-host 參數。請各位讀者謹記,避免踩坑。為了方便各位讀者,重貼啟動 Jenkins 代碼,請按需修改啟動參數。
$ 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?測試
當各位讀者的構建結果最后輸出的信息最終和筆者保持一致的時候,那么整個流程就跑完了。
?
寫在后面
至此,本篇內容已經全部完畢了,博文中可能有很多表述不太專業的地方,還請各位讀者指點交流。其實本文章標題有另外一個《「窮」式搭建 DotNet Core 2.1 自動化發布和部署》,后來考慮很久不用這個標題是因為本身自己屬于這個行業的專業人士,不能用比較庸俗的詞來表述這篇文章,所以才有現在的這個標題。很開心我終于寫完了,寫這一大章的內容真的挺不容易,也挺佩服那些堅持下來,寫了那么多博文的作者是怎么走過來的。為他們對社區作出的貢獻喝彩吧。大吉大利,今晚吃雞
參考文獻
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
原文地址:https://www.cnblogs.com/LongJiangXie/p/9965190.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的边缘化搭建 DotNet Core 2.1 自动化发布和部署(下)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker最全教程——从理论到实战(四
- 下一篇: 边缘化搭建DotNet Core 2.1