将 Hugo 部署为 GitHub Pages 项目,并使用 Github Actions 自动化整个过程。
官方文档其实已经把文件都写完了,但是官方没给出
- 密钥配置
- hugo项目和静态资源仓库分开部署的情况
这里补充一下上面两点
添加 deploy key
如果你的项目不是分离成两个仓库,而是一个仓库两个分支的。那么不需要 deploy key 。不过我仍然建议分离出私密仓库,如果你的项目中有不想大家看到的草稿或者隐藏网页,或者有曾经发布了但是后来又删除的网页,那么全部公开必然是有泄露风险的。
如果你的整体项目结构是 hugo 项目作为一个仓库设置为私密,静态资源作为另一个仓库(github.io)。那么你需要设置 deploy key
创建 ssh key
进入 hugo 项目的根目录(其实是不是无所谓)
运行下面一行
1
| ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
|
随后仓库根目录中出现了 公钥 和 私钥
1
2
| yuki@ubuntu:~$ ls
gh-pages gh-pages.pub
|
在 静态资源 仓库添加公钥
仓库内:setting -> Deploy keys
把 gh-pages.pub 的内容复制进去
在 hugo 仓库中添加私钥
仓库内:setting -> Secrets and variables -> Actions
把 gh-pages 的内容复制进去
如果你要直接复制下方的文件,这里取名为 ACTIONS_DEPLOY_KEY
配置 action
发布到 静态资源 仓库
在你的 hugo 项目根目录。
创建文件 .github/workflows/deploy.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
42
43
44
45
46
47
| name: GitHub Page
on:
push:
branches:
- master # master 更新触发
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
submodules: true # clone submodules
fetch-depth: 0 # 克隆所有历史信息
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: "0.87.0" # Hugo 版本
extended: true # hugo插件版 Stack主题 必须启用
- name: Cache resources # 缓存 resource 文件加快生成速度
uses: actions/cache@v2
with:
path: resources
# 检查照片文件变化
key: ${{ runner.os }}-hugocache-${{ hashFiles('content/**/*') }}
restore-keys: ${{ runner.os }}-hugocache-
- name: Build # 生成网页 删除无用 resource 文件 削减空行
run: hugo --minify --gc
- name: Deploy # 部署到 GitHub Page
uses: peaceiris/actions-gh-pages@v3
with:
# 如果在同一个仓库下使用请使用 github_token 并注释 deploy_key
# github_token: ${{ secrets.GITHUB_TOKEN }}
deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
# 如果在同一个仓库请注释
external_repository: # 你的 GitHub page 仓库 example/example.github.io
publish_dir: ./public
user_name: "github-actions[bot]"
user_email: "github-actions[bot]@users.noreply.github.com"
full_commit_message: Deploy from ${{ github.repository }}@${{ github.sha }} 🚀
|
Cache resources
可以删掉,不影响主体功能。
整个 Action 一个包含 4 个步骤
- 拉取代码
- 准备 hugo 环境
- 使用 hugo 编译生成静态文件
- 把生成的静态文件发布到 Github Pages
发布到 服务器
仅仅需要修改最后一步 Deploy
(当然,如果两个都要的话,上述文件的结尾再加上这一步即可)
1
2
3
4
5
6
7
8
9
10
| - name: Server Deploy
uses: burnett01/rsync-deployments@5.2
with:
switches: -avzr --delete
path: ./public
remote_path: /var/www/html/ # 最好先在远程主机创建该目录
remote_host: ${{ secrets.DEPLOY_HOST }} # 远程主机 IP
remote_port: ${{ secrets.DEPLOY_PORT }} # ssh 端口,默认为 22
remote_user: ${{ secrets.DEPLOY_USER }} # ssh user
remote_key: ${{ secrets.DEPLOY_KEY }} # ssh 私钥
|
secrets.
等变量需要在仓库中创建,和 在hugo仓库中添加私钥 这一步是一样的。按照自己的信息填写创建即可。
DEPLOY_KEY
是在服务器配置 ssh
密钥,在创建后将公钥加入 authorized_keys
中去。私钥复制到仓库的 secrets
中。
如果没有经验可以参考下面的文章。
如果配置过程无误,仍然下述报错
1
| rsync: connection unexpectedly closed
|
查看下述文件
1
| sudo nano /etc/ssh/sshd_config
|
其中有这么一段
1
2
3
4
5
6
7
8
9
| # Authentication:
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
|
下面这个可能没有开启,修改为开启的
1
| PubkeyAuthentication yes
|
参考
https://zhixuan2333.github.io/posts/ce103e3b/
https://www.pseudoyu.com/en/2022/05/29/deploy_your_blog_using_hugo_and_github_action/
https://gohugo.io/hosting-and-deployment/hosting-on-github/
https://www.lixueduan.com/posts/blog/01-github-action-deploy-hugo/
https://lunawen.com/cicd/20200628-luna-tech-github-action-blog-autodeployment/