InfinityFree 是一家提供永久免费虚拟主机服务的国外平台(真免费么?进入该网站可以看到上下左右的广告)
由于访问 GitHub 时常抽风打不开,补充一个博客的镜像访问(与 GitHub Pages 同步发布)
通过 GitHub Actions 的工作流自动发布至 InfinityFree
同步发布工作原理
1、首先,当前的静态博客是通过 GitHub Actions工作流构建出静态网页文件然后发布至开启GitHub Pages公共仓库
2、只需在 GitHub Actions的工作流yml文件中添加上传至 Infinityfree FTP 路径的步骤即可
3、Infinityfree 的子域名关联一个FTP路径,访问该域名即可打开静态网站
准备工作
注册 InfinityFree 账户
- 注册链接:https://dash.infinityfree.com/register
- 填写邮箱和密码,点击 Sign UP ,然后查看邮件点击 Verify Email Address
创建子域名
获取 FTP 凭据
从 InfinityFree 控制面板获取以下信息:
- FTP 主机名
- FTP 用户名
- FTP 密码
- FTP 端口
- FTP 路径
- 如果是第一个创建的子域名,那么默认的 FTP 路径为 /htdocs/
- 如果是第二个创建的子域名,那么默认的 FTP 路径为 /your-subdomains/htdocs/
GitHub仓库设置
在 GitHub 仓库中设置 Secrets
将 FTP 凭据加密存储在 GitHub Secrets 中:
- 进入你的 GitHub 仓库 → Settings → Secrets and variables → Actions。
- 点击 New repository secret,添加以下 Secrets:
FTP_HOST
:FTP 主机地址FTP_USERNAME
:FTP 用户名FTP_PASSWORD
:FTP 密码FTP_PORT
:FTP 端口(21
)REMOTE_DIR
:服务器目标路径(如/htdocs/
或/your-subdomains/htdocs/
)
创建 GitHub Acton 工作流yml
在项目根目录下创建 .github/workflows/hugo-build-deploy.yml
文件,内容如下
name: Hugo Build & GitHub Pages Deploy & FTP Deploy
on:
push:
branches: [ "main" ] # 触发分支
jobs:
deploy:
runs-on: ubuntu-24.04
concurrency:
group: ${{ github.workflow }}-${{ github.ref }} # 防止并发冲突
steps:
# 步骤1:检出代码
- uses: actions/checkout@v4
with:
submodules: recursive # 递归检出子模块(适用于Hugo主题)
# 步骤2:安装Hugo
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.136.5' # 与本地开发环境一致
extended: true # 使用extended版本(支持SCSS等)
# 步骤3:构建静态站点
- name: Build
run: hugo --minify --cleanDestinationDir # 生成public目录
# 步骤4:验证构建结果
- name: Verify Public Folder
run: |
ls -la ./public
[ -f ./public/index.html ] || exit 1 # 确保首页存在
# 步骤5:部署到GitHub Pages
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.BLOG_PAT}} # 如果secret取了其他名称,将MY_PAT替换掉
external_repository: kiraster/kiraster.github.io # 填写远程仓库,不一定是这个格式,按照自己的情况写
publish_dir: ./public # 指定发布目录(Hugo默认输出目录)
# 步骤6:FTP上传到InfinityFree
- name: FTP Upload
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.FTP_HOST }}
username: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
port: ${{ secrets.FTP_PORT }}
local-dir: ./public/ # 直接使用本地生成的目录
server-dir: ${{ secrets.REMOTE_DIR }}
dry-run: false # 实际执行上传
# dangerous-clean-slate: true # 首次部署启用(取消注释),完成首次部署后再将其注释
触发 Github Acton 工作流
Github Acton工作流触发条件为 push 至 main 分支后自动触发,我是在本地创建的 yml,所以只需git三板斧(add-commit-push)即可
最后
- InfinityFree:It can take up to 72 hours for new domains to be accessible everywhere!
- InfinityFree 的 FTP 上传速度不是很快且空间只有 5GB
- 尝试过分成两个yml工作流文件执行,但是使用 actions/download-artifact@v4 始终不能找到 actions/upload-artifact@v4 构建的 Artifacts (不折腾这个了)
- 在 GitHub Actions 中,工作流不会自动回滚已执行成功的操作;同时,如果工作流其中一个步骤没有执行成功会被标记状态为 Failure (会有 notifications 邮件提示)
- 小小 Hugo 网站没有工作流回滚
- 首次 FTP 上传到 InfinityFree,可能是由于静态文件过多耗时较久,完成首次部署后注释
dangerous-clean-slate: true
之后的 FTP Upload 为增量上传 - Have a good time!