个人比较喜欢使用Github Actions来发布博客,因为Github Actions可以自动提交到Github,而且可以自动使用SSH发布到服务器。
并且有一定的时间的免费服务,不拿来做点什么,有点看着可惜了。
在服务器中增加名为 github 的用户名
注意设置只能使用 SSH 证书的方式登录。防止有暴力破解的风险。
1
2
| # 在 /etc/ssh/sshd_config 修改如下配置
PasswordAuthentication no
|
1
2
3
4
5
6
7
| # 添加用户,都可以选择默认设置
$ sudo adduser github
# 生成密钥
$ ssh-keygen -t rsa -b 4096 -C "github"
# 将密钥添加到当前服务器github用户的 home/github/.ssh/authorized_keys 文件中
# 注意权限为 rw-------
$ cat ~/.ssh/id_rsa.pub
|
在github中新建一个名为 blog 的仓库
注意,这里的 blog 仓库是指的是 github 上的仓库,而不是服务器上的仓库。
这里可以参照官方文档:创建仓库。
就不详细赘述。
将密钥添加到 Github 的 SSH 密钥库中
在 Github 中,点击仓库的 Settings (不是个人设置) -> Secrets -> Actions,点击 New repository secret,
将 name 命名为 PRIVATE_SSH_KEY
。以及 KNOWN_HOSTS
的内容,值为你部署的服务器的域名或者 IP 地址。
Actions 配置
点击仓库的 Actions -> New workflow, 将 name 命名为 “cicd-website”,最后会在该仓库中生成 .github/workflows/cicd-website.yml
文件。
写入以下内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| name: Website
on:
workflow_dispatch:
push:
# paths:
# - "website/**"
branches:
- master
jobs:
build:
name: Build and Deploy
runs-on: ubuntu-latest
steps:
- name: 🛒 Checkout
uses: actions/checkout@v2
- name: ✨ Setup Hugo
env:
HUGO_VERSION: 0.100.2
run: |
mkdir ~/hugo
cd ~/hugo
curl -L "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_${HUGO_VERSION}_Linux-64bit.tar.gz" --output hugo.tar.gz
tar -xvzf hugo.tar.gz
sudo mv hugo /usr/local/bin
- name: 🛠️ Build
# run: hugo --source website --minify
run: hugo -D
- name: 🔑 Install SSH Key
run: |
install -m 600 -D /dev/null ~/.ssh/id_rsa
echo "${{ secrets.PRIVATE_SSH_KEY }}" > ~/.ssh/id_rsa
- name: Adding Known Hosts
run: ssh-keyscan -H ${{ secrets.KNOWN_HOSTS }} >> ~/.ssh/known_hosts
- name: 🚀 Deploy
# run: rsync --archive --delete --stats -e 'ssh -p 22' 'website/public/' ${{ secrets.REMOTE_DEST }}
run: rsync --archive --delete --stats -e 'ssh -p 22' 'public/' github@alpnut.com:~/blog/
|
这里的配置参照配置
(
Citation: Scott W Harden, Scott W Harden
(s.d.). Retrieved from
https://swharden.com/blog/2022-03-20-github-actions-hugo/
)
,但是在添加 known_hosts 时一直都部署不通过的问题,所以中间改进增加了 Adding Known Hosts
这一步。
参考链接: