边缘化搭建 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:2376

  2.重启Docker服务

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker.service

测试Remote API

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

  测试成功将返回如下信息:

640?wx_fmt=png

 开启 Remote API 安全认证

  到目前位置,我们已经在x86服务器开启Docker Remote API来控制Docker服务。但是,细心的读者应该已经发现,在这个连接访问的过程中并没有安全认证机制,也就是说任何人只要知道Remote API地址和端口都可以控制Docker 服务,然而这样将会大大增加了服务的风险。接下来笔者将告诉大家如何为Remote API添加认证机制。

生成证书

  1.新建一个命名为 createSSL.sh 的 Shell 脚本文件。

$ sudo nano createSSL.sh

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

640?wx_fmt=png

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.pem

  3.重启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.构建一个自由风格的软件项目

640?wx_fmt=png

  2.设置源码地址,为了方便各位读者,笔者已经新建一个项目代码仓,读者可以直接使用这个仓,快速跑一遍流程。git 地址:https://gitee.com/wenalu/Rpi-MvcTest.git

640?wx_fmt=png

 

  3.设置构建触发器,让项目可以定时轮询仓库,执行自动构建,本次配置的参数为2分钟获取一次。

640?wx_fmt=png

  4.新增构建,选择执行Shell,并填写以下脚本内容

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

注意事项 

  请各位读者在填写执行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

 测试

  当各位读者的构建结果最后输出的信息最终和笔者保持一致的时候,那么整个流程就跑完了。

 640?wx_fmt=png

写在后面

  至此,本篇内容已经全部完毕了,博文中可能有很多表述不太专业的地方,还请各位读者指点交流。其实本文章标题有另外一个《「穷」式搭建 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

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/318738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客题霸 [二进制中1的个数] C++题解/答案

牛客题霸 [二进制中1的个数] C题解/答案 题目描述 输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。 题解: 判断1的个数 x&(-x)2^k 有点类似于树状数组中lowbit的操作 代码: class Solution { public:int Num…

2021牛客暑期多校训练营5 G-Greater Integer, Better LCM(暴力+子集dp)

G-Greater Integer, Better LCM 看到校大佬的代码就瞬间会做了。 当时和队友想的是,首先转化题意即找两个数x≥a,y≥b[lcm(a,b)c]x\ge a,y\ge b[\text{lcm}(a,b)c]x≥a,y≥b[lcm(a,b)c],首先不考虑x≥a,y≥bx\ge a,y\ge bx≥a,y≥b的限制,显…

P2179-[NOI2012]骑行川藏【导数,二分】

正题 题目链接:https://www.luogu.com.cn/problem/P2179 题目大意 给出EEE和nnn个si,ki,uis_i,k_i,u_isi​,ki​,ui​求一个序列viv_ivi​满足 ∑i1nkisi(vi−ui)2≤E\sum_{i1}^nk_is_i(v_i-u_i)^2\leq Ei1∑n​ki​si​(vi​−ui​)2≤E 的情况下最小化 ∑i1nsivi\sum_{i1}^…

不止代码:乘法游戏 题解(区间dp)

题目描述 乘法游戏是在一行牌上进行的。每一张牌包括了一个正整数。在每一个移动中,玩家拿出一张牌,得分是用它的数字乘以它左边和右边的数,所以不允许拿第1张和最后1张牌。最后一次移动后,这里只剩下两张牌。 你的目标是使得分的…

边缘化搭建DotNet Core 2.1 自动化构建和部署环境(上)

写在前面写这篇文章的缘由是由于笔者的对新兴技术方向有所追求,但个人资产有限,只能容许购买一台阿里云低配1核2G服务器。服务器上搭建了 Centos7 & Docker & Jenkins & ASP.NET Core 2.0 自动化发布和部署 环境后牺牲了大部分性能。造成了一…

牛客题霸 [丑数] C++题解/答案

牛客题霸 [丑数] C题解/答案 题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 题解:…

codeforces1549 F1 - Gregor and the Odd Cows (Easy)(皮克公式)

皮克公式:求格点多边形面积 AB2I−1A\frac B 2I-1 A2B​I−1 其中 A:area 面积 B:boundary 边界上整点的个数 I:interior 多边形内部点的个数 对于两个整数点(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1​,y1​),(x2​,y2​)来说&…

P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】

正题 题目链接:https://www.luogu.com.cn/problem/P3288 题目大意 给出nnn个点mmm条边的一张图,没条边iii流量为cic_ici​,费用是did_idi​,然后缩小一个流量费用是aia_iai​,增加一个流量费用是bib_ibi​。 要求改动图之后最大…

不止代码:ybtoj-消除木块(区间DP)

题目描述 n个木块排成一列,每个木块都有一个颜色。 每次,你都可以点击一个木块,这样被点击的木块以及和它相邻并且同色的木块就会消除。 如果一次性消除了k个木块,那么就会得到k*k分。 给定你一个游戏初始状态,请你…

.NET Core实战项目之CMS 第六章 入门篇-Vue的快速入门及其使用

写在前面上面文章我给大家介绍了Dapper这个ORM框架的简单使用,大伙会用了嘛!本来今天这篇文章是要讲Vue的快速入门的,原因是想在后面的文章中使用Vue进行这个CMS系统的后台管理界面的实现。但是奈何Vue实现的SPA有一定的门槛,不太…

牛客练习赛10 F-序列查询(莫队+链表)

F-序列查询 v5zsq题解 假设数字xxx在区间[l,r]种出现y次,那么包含x的子区间个数为2r−l1−y⋅(2y−1)2^{r-l1-y}(2^y-1)2r−l1−y⋅(2y−1),因此对询问贡献是x⋅2r−l1−y⋅(2y−1)x[2r−l1−2r−l1−y]x2^{r-l1-y}(2^y-1)x[2^{r-l1}-2^{r-l1-y}]x⋅2r…

牛客题霸 [有关阶乘的两个问题1] C++题解/答案

牛客题霸 [有关阶乘的两个问题1] C题解/答案 题目描述 给定一个非负整数N,返回N!结果的末尾为0的数量 题解: 这个题有技巧 102*5,也就是说有一对2和5就会贡献一个0,但是2的数量远远大于5,所以只用统计五即可 代码&#xff1a…

不止代码:ybtoj-棋盘分割(二维区间dp)

题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了n-1次后,连同最后剩下的矩形棋盘共有n块矩形棋盘。 (每次切割都只能沿着棋盘格子的边进行) 原棋盘上…

P7717-「EZEC-10」序列【Trie】

正题 题目链接:https://www.luogu.com.cn/problem/P7717 题目大意 求有多少个长度为nnn的序列aaa满足&#xff0c;都在[0,k][0,k][0,k]的范围内且满足mmm个限制刑如&#xff1a;axxorayza_x\ xor\ a_yzax​ xor ay​z 0≤n,m≤5105,0≤k<2300\leq n,m\leq 5\times 10^5,0\…

ASP.NET Core MVC 授权的扩展:自定义 Authorize 和 IApplicationModelProvide

一、概述ASP.NET Core MVC 提供了基于角色( Role )、声明( Chaim ) 和策略 ( Policy ) 等的授权方式。在实际应用中&#xff0c;可能采用部门&#xff08; Department , 本文采用用户组 Group &#xff09;、职位 ( 可继续沿用 Role )、权限( Permission )的方式进行授权。要达…

牛客题霸 [分糖果问题] C++题解/答案

牛客题霸 [分糖果问题] C题解/答案 题目描述 一群孩子做游戏&#xff0c;现在请你根据游戏得分来发糖果&#xff0c;要求如下&#xff1a; 每个孩子不管得分多少&#xff0c;起码分到一个糖果。任意两个相邻的孩子之间&#xff0c;得分较多的孩子必须拿多一些糖果。(若相同则…

不止代码 洛谷P1006 传纸条(dp)

传送门 走两次 dp[x1][y1][x2][y2]表示两条路分别到两个点的坐标后的最大值 为了防止走重&#xff0c;dp[x1][y1][x1][y1]赋值为无穷小 时间复杂度O&#xff08;n^4&#xff09; 代码 #include<cstdio> #include<cstring> #include<algorithm> #include<…

通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span

前言作为.net程序员&#xff0c;使用过指针&#xff0c;写过不安全代码吗&#xff1f;为什么要使用指针&#xff0c;什么时候需要使用它&#xff1f;如果能很好地回答这两个问题&#xff0c;那么就能很好地理解今天了主题了。C#构建了一个托管世界&#xff0c;在这个世界里&…

P5180-[模板]支配树

正题 题目链接:https://www.luogu.com.cn/problem/P5180 题目大意 给出nnn个点的一张有向图&#xff0c;求每个点支配的点数量。 1≤n≤2105,1≤m≤31051\leq n\leq 2\times 10^5,1\leq m\leq 3\times 10^51≤n≤2105,1≤m≤3105 解题思路 首先定义半支配点semixsemi_xsemix…

P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)

P4062 [Code#1]Yazid 的新生舞会 杭电多校懂得都懂 Code1 分治 比较喜欢分治的做法&#xff0c;非常好写。skylee大佬题解 首先对于任何一个区间来说&#xff0c;由于两个端点不确定性非常难以一次性统计多组区间&#xff0c;因为它们没有相似之处。 考虑分治&#xff0c;…