到今天为止,自己于一个月前建立的这个站点的网站样式以及阅读体验、基础的使用体验和内容管理发布方式终于初步成型了,在此之前每次在hugo里生成内容后,是通过SFTP上传到腾讯的云服务器的,在频繁更新网站代码的背景下难免有些麻烦。同时也因为之前网站是部署在Vercel上的,更新内容后只要PUSH到GITHUB就可以自动化部署后体现在前台(现在回想起来,Vercel应该也是用了GITHUB ACTION),导致对于手动更新站点内容的方式比较抵触。
其实从搭建现在这个主题的初始,也在一直寻找合适的自动化部署方式,也因此“误入”了Caddy的坑,结果发现Caddy 2在目前还不支持CaddyFile这种傻瓜方式进行基于WEBHOOK的自动化部署(不过有一说一,CaddyFile对于没什么代码基础的人而言,比NGINX这种怪物友好太多了),遂放弃。再到前两天想起来之前有看到过GITHUB ACTION貌似可以做到自动化部署,因此进行了一番搜索,下文也是对这一过程的记录,以免回头更换云服务器的时候还得重投再找一遍解决方案,主要内容来源于这篇博文,对于GITHUB的理解基于油管的这个阿婆主。
整体步骤大致分为以下几步:
- 生成SSH密钥,并在服务器端和GITHUB分别配置公钥和私钥
- 在GITHUB ACTION中创建自己的Workflow
生成SSH密钥及配置
生成SSH KEY
可以在任意一台支持SSH-Keygen的设备上生成SSH密钥,我这里使用的RSA加密算法,参考博文使用的ed25519算法,别问我为什么,因为我也不懂这两种算法有啥区别..
1ssh-keygen -m PEM -t rsa -b 4096 -C "YOUR_KEY_NAME"
随后生成输入KEY的生成地址以及名称,并且按回车跳过密码设置,因为设置了密码在后续无法进行自动化构建,最后会在前面输入的地址(windows通常默认为C:\Users\username/.ssh
,ubuntu默认会在/home/ubuntu/.ssh
)下找到生成好的公钥和私钥。
GITHUB中配置SSH私钥
在GITHUB的HUGO源码仓库中的SETTING - SECRETS下添加SSH私钥,NAME自行设定,VALUE填入私钥。
服务器的AUTHORIZED_KEYS下添加SSH公钥
ubuntu服务器的AUTHORIZED_KEYS通常在/home/username/.ssh
下,打开后将公钥复制进去。
至此,SSH密钥的相关配置完成。
GITHUB ACTION 构建
在构建前,需要再在GITIHUB的SECRETS下添加一个服务器地址变量,NAME自行设定,VALUE填入服务器地址。
在这个工作流中,一共用到了以下几个第三方ACTION
- Hugo Setup,用于在虚拟环境中创建HUGO环境
- SSH Agent,具体我也不懂是做什么用的,我自己的理解大致就是与SSH-KEYSCAN配合使用来匹配本地的私钥与远端的公钥是否匹配,匹配就建立SSH连接吧?
在本地hugo源码仓库或者直接在GITHUB ACTION标签下创建.github/workflow/CONFIG_NAME.yml
后,在其中添加配置内容。下面是完整的GITHUB ACTION配置。
1name: hugo deployment #action名称,随意
2
3on:
4 push: # action由push行为触发
5 branches: [master] # 只在mater分支上触发
6
7jobs:
8 build-and-deploy:
9 runs-on: ubuntu-18.04
10 steps:
11 - uses: actions/checkout@v2
12 with:
13 # submodules: true
14 fetch-depth: 0
15
16 - name: Setup Hugo
17 uses: peaceiris/actions-hugo@v2
18 with:
19 hugo-version: '0.82.0'
20 extended: true
21
22 - name: Build
23 run: hugo --minify
24
25 - uses: webfactory/ssh-agent@v0.5.2
26 with:
27 ssh-private-key: ${{ secrets.BLOG_SECRET }}
28
29 - name: Scan public keys
30 run: |
31 ssh-keyscan ${{ secrets.BLOG_HOST }} >> ~/.ssh/known_hosts
32
33 - name: Deploy
34 run: |
35 rsync -av --delete public ubuntu@${{ secrets.BLOG_HOST }}:/var/www/blog # 使用rsync将虚拟环境下hugo创建的public文件夹同步至服务器的/var/www/blog文件夹下
后记
本来想在工作流的最后加个发送邮件的action(Send email)的,结果QQ邮件要验证码,GMAIL有安全性问题,想想GITHUB本身就有PUSH成功的邮件推送,就算了。
还有就是被GITHUB ACTION配置语法的一个未知原因的要求坑的差点放弃,在run
后面加|
之后另起的一行需要退格再输入运行内容,不然就会无法通过自检,无法启动工作流,但是但是但是!GITHUB给我的报错竟然是标注在run
之上的- name
下面。
最后编辑于:2022-11-18 12:58