前置工作

具体目标

部署一个博客,可以通过在本地写作,然后一键上传云端,同步实现文章内容自动生成网页。

所需工具

1、Hugo:配置博客网站,将md文件生成博客页面;

2、Git:通过推送,完成本地与云端文件的同步工作,实现“一键上传”;

3、Cloudflare Pages:自动拉取git上的变化,生成网页;

提前注册好GitHub、Cloudflare的账号。

部署流程

Hugo

1、安装hugo和git

sudo apt install hugo git

2、站点初始化:

hugo new site myblog --format toml  # 创建项目目录
cd myblog
git init                           # 初始化 Git 仓库

3、主题引入

采用PaperMod主题,通过使用 submodule(子模块)方式,方便后续同步主题更新。

git submodule add https://github.com/adityatelange/hugo-PaperMod.git themes/PaperMod

4、站点配置

进行Hugo 核心配置 (hugo.toml),在这个文件中配置站点的基础信息、功能、菜单导航页之类。具体如下:

- **基础信息**:设置 `baseURL`(你的域名)、`title`(站点标题)、`theme = "PaperMod"`。
- **功能开关**:在 `[params]` 下配置目录(TOC)、代码高亮、搜索功能等。
- **菜单导航**:通过 `[[menu.main]]` 定义顶部的栏目(如文章、分类、关于)。

这样,hugo就已经在本地创建好了站点,这时运行hugo server,再浏览器打开 http://localhost:1313/ 就可以看到我们的静态博客。

下一步就是用git进行推送。

Git

这里回答三个问题,第一、git推送时哪些必须推到云端、哪些可以不用推送?第二、怎么配置才可以正常推送?第三、怎么推?

配置 .gitignore

Hugo 运行后会产生大量静态文件(在 public/ 目录下),这些文件不需要上传到 Git,因为 Cloudflare 会在云端动态生成。

在根目录创建 .gitignore 文件:

# 忽略编译出的静态网页
public/
# 忽略缓存
resources/
.hugo_build.lock
# 忽略系统文件
.DS_Store

GitHub配置

本地生成ssh密钥、填入GitHub

# 生成密钥对(一路回车即可)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 启动 ssh-agent 并添加私钥
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# 复制公钥内容
cat ~/.ssh/id_ed25519.pub
  1. 登录 GitHub,进入 Settings -> SSH and GPG keys -> New SSH key

  2. 将刚才 cat 出来的公钥粘贴进去并保存。

image image

新建云端仓库

在 GitHub 上点击右上角 + -> New repository,新建仓库,填入仓库名(如 myblog),不要勾选 “Initialize this repository with a README”。

image image 创建完成之后,复制仓库地址: git@github.com:你的用户名/myblog.git

本地仓库关联

# 关联远程地址
git remote add origin git@github.com:你的用户名/myblog.git

# 强制将本地分支命名为 main (Cloudflare 默认识别 main)
git branch -M main

至此,github已经配置完成,可以实现推送了。

本地提交与推送流程

# 1. 查看当前状态(确认 .gitmodules 和 content 被记录)
git status

# 2. 暂存所有更改
git add .

# 3. 写commit,提交到本地仓库
git commit -m "Add new post and fix submodule"

# 4. 推送到 GitHub
git push origin main

推送一次,试验是否成功。

Cloudflare Pages

git完成了推送到云端这一个步骤,但是,怎么通过域名展示出来呢?这就需要Cloudflare了。它通过连接GitHub仓库,监听其状态,实现推送后的实时更新、展示。

登录机连接仓库

登录进入Cloudflare,搜索pages,打开:选择【导入现有的git存储库】,选择刚才的GitHub账户、选择刚才的仓库。

开始部署。 image image image image

设置构建参数

1、填入项目名称、构架预设选择hugo,其余自动生成。

2、为了防止因本地和Cloudflare的hugo版本不一致导致的问题,在部署页面,可以选择配置设置环境变量,将hugo的版本号填进去。

变量名称: `HUGO_VERSION`, 值: 本地hugo的版本号( 终端输入 `hugo version` 查看,例如 `0.145.0`);
后续本地升级,可在Cloudflare相应的地方同步修改。

3、保存并部署,等待success。

4、可选项:绑定域名。

在 Pages 项目页面点击 自定义域——设置自定义域,填入域名。成功后即可可通过域名访问博客。

image image

至此,Cloudflare已经连上GitHub,并且和它同步。后续GitHub的仓库变化,都会在这同步显示。Hugo-GitHub-Pages的搭建架构完全完成,实现了博客推送、自动化同步、展示。

使用

本地写md文件,将md文件存到content/posts/ 下;

运行hugo server ,打开 http://localhost:1313/ 预览,看排版、检查;

git add .
git commit -m "更新了一篇新文章"
git push origin main

往后发博客,就那么简单。