多节点持续部署白瞟篇

对于中小型项目部署而言,还是尽可能的节省资源,(抠门~~~) 再去自搭个gitlab-ci,或者jenkins去做持续部署就有点大炮打蚊子了。 于是Github Actions 了解一下,整了一下白瞟方案。 基础的知识学习可以去看阮博士的 GitHub Actions 入门教程 ,在此不赘述。

资源

网上瞟了一圈,目前比较实用的一些actions有如下:

github,gitee上都支持私库了代码双份同步他难道不香吗? 真香

如果你的代码是托管在自搭或其他服务商的平台上的用这个纯ssh协议的镜像actions就对了。

现在已经追求简约风了,hugo的基本功能做博客绰绰有余,用这个再结合peaceiris/actions-gh-pages基本上github.io的镜像自动发布也一步到位了。

自动化发布静态内容到GitHub Pages上形成xxx.github.io的独立站点(有钱买米CNAME一下更可个性化)

基本上在项目的secrets里配好私钥,再结合这个ssh的action可以对你自己的服务器为所欲为 为所欲为

设计

其他

对于国内的服务器而言,用github是会时常撞墙的,所以国内的服务器使用gitee的仓库,但依赖github-acions的回国链路来做部署,不知道何时也会撞墙, 看了一下,貌似gitee这边是支持 百度效率云的DevOps的服务 的,所以也可以拿来白瞟,配置过程略复杂,在此不赘述了,有兴趣的可以来捣鼓一下。 用了一下基本上是和阿里云的Pipeline一个套路,装个java的agent到你的vps节点上,然后后台配置脚本内容和路径,基本和jenkins差不多,国内免撞墙自动部署,白瞟目标达成+1。

奇怪的技能增加了

配置iptables的NAT转发

  1. 打开系统ip_forward的配置:

临时:

1
echo 1 >/proc/sys/net/ipv4/ip_forward

保持重启有效:

1
sudo vim /etc/sysctl.conf

追加/修改:

1
net.ipv4.ip_forward=1

NAT转发流量:

1
2
-A PREROUTING -p tcp -m tcp --dport 8443 -j DNAT --to-destination 192.168.0.3:81443
-A POSTROUTING -d 192.168.0.3/32 -p tcp -m tcp --dport 81443 -j SNAT --to-source 192.168.0.2

解释: 前置路由:把对本地网络(比如内网地址为192.168.0.2)8443端口的请求转发给 192.168.0.3的ip地址的81443端口 后置路由:把来自192.168.0.3的ip的81443的请求转发到源ip为192.168.0.2的地址去

查看结果:

1
sudo iptables -t nat -nvL

链接及证书的命令行检查(curl+openssl)

日常开发运维中经常需要用到的一些检查链接连通性,包括但不限于挂代理/指定服务实例IP的情况, 另外随着LE的使用,证书的单个周期的有效性检测验证也需要做一下记录。

http/https连通性检查

常规连接检查

1
curl --connect-timeout 15 --max-time 20 -ivs http://www.bing.com

指定域名和ip检测

http协议的:

1
curl --connect-timeout 15 --max-time 20 -ivs --resolve "www.bing.com:80:202.89.233.101" http://www.bing.com

https协议的:

1
curl --connect-timeout 15 --max-time 20 -ivs --resolve "www.bing.com:443:202.89.233.101" https://www.bing.com

(备选)使用手工指定ip+Host头的模式:

1
curl --connect-timeout 15 --max-time 20 -ivs -H "Host:www.bing.com:80" http://202.89.233.101

验证挂代理后的公网地址

1
curl --connect-timeout 15 --max-time 20 -ivs -x http://127.0.0.1:8118 https://httpbin.org/ip

其中参数:

1
-x http://127.0.0.1:8118

代表使用本地127.0.0.1的IP的8118端口的http协议的代理服务

证书有效期检查

本地证书检查

1
openssl x509 -in mycert.pem -noout -enddate

输出类似于:

1
notAfter=Oct 28 23:42:57 2020 GMT

证书明细信息打印:

1
openssl x509 -in mycert.pem -noout -text

在线服务的证书检查

1
echo | openssl s_client -servername bing.com -connect "bing.com":443 2>/dev/null | openssl x509 -noout -enddate