搭建 Hugo 博客 (2)——Action 发布
通过 Github Action 将生成的网站代码直接部署到云服务器上。
对于如何发布在自己的服务器上,需要考虑以下几个方面的问题:
- 服务器是发布网站的地方,不适合于把生成的逻辑放在服务器上操作,尤其这种静态网站。我们更不应该把 Go 和 Hugo 的环境放在服务器上。
- 之前有想过使用 Docker 的方式部署,但我觉得有点大材小用了,再说 Docker 部署需要的资源更多,不至于一个静态网站这么大动干戈。
- 第三点,在 Github 上,我们可以利用 Github Action 来自动化
hugo deploy
,把生成的静态网站,转移到咱们的服务器中。
最后思考的就是如何把静态网站转移到服务器上。
这里继续考虑两个问题:
- 我们可以在 Github 上生成的静态网站装到 Docker 镜像中,这样在服务器上就可以下载 Docker Image,部署网站。
- 但通过 Github 生成的镜像,由于网络的问题,在国内服务器下载或者更新,都很费劲。所以我们需要继续往下思考。
创建 Action
❯ mkdir -p .github/workflows
❯ touch .github/workflows/deploy.yml
具体 deploy.yml
内容:
name: Custom Server
on:
push:
branches:
- main # Set a branch to deploy
pull_request:
jobs:
deploy:
runs-on: ubuntu-20.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- uses: actions/checkout@v3
with:
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.145.0'
extended: true
- name: Build
run: hugo --minify
- name: Deploy
uses: burnett01/rsync-deployments@5.2
with:
switches: -avzr --delete
path: ./public
remote_path: ${{ secrets.DEPLOY_PATH }} # 需要先手动在远程主机创建该目录,否则会执行失败
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 方式引用,需要在对应仓库中创建这些 secret。
这里用的是 rsync 方式,需要在服务器上安装 rsync。这里用的是 centos7,自带了 rsync, 只是没有启动,只需要启动就好,其他系统应该也默认安装了。
systemctl enable rsyncd --now
至于剩下的就是在 Github 设置这几个参数。只要代码提交到服务器上,我们就能看到 Action 执行。
参考
https://www.lixueduan.com/posts/blog/01-github-action-deploy-hugo/ Hugo + GitHub Action,搭建你的博客自动发布系统
最后修改于 2025-03-16