SOP 指南:零成本个人博客从零到上线
版本:v1.0 | 适用:技术型个人博客 | 平台:Windows 前置条件:一台能上网的 Windows 电脑,无需任何付费
目录
SOP-01: 注册账号
SOP-02: 安装 Hugo
SOP-03: 创建站点 & 安装主题
SOP-04: 写第一篇文章
SOP-05: 本地预览
SOP-06: 初始化 Git & 推送到 GitHub
SOP-07: 部署到 Vercel
SOP-08: 部署到 Netlify
SOP-09: 部署到 Cloudflare Pages
SOP-10: 三站验证
SOP-11: R2 核弹备份
SOP-12: 日常维护流程
SOP-01: 注册账号
步骤
| # | 操作 | 目标 | 预估时间 |
|---|---|---|---|
| 1 | 打开 https://github.com/signup | GitHub 账号 | 5 分钟 |
| 2 | 打开 https://vercel.com/signup → Continue with GitHub | Vercel 账号 | 2 分钟 |
| 3 | 打开 https://app.netlify.com/signup → GitHub 登录 | Netlify 账号 | 2 分钟 |
| 4 | 打开 https://dash.cloudflare.com/signup → 输入邮箱 + 密码 | Cloudflare 账号 | 3 分钟 |
验证点
✅ GitHub: 登录后能看到 Dashboard
✅ Vercel: 登录后在 Overview 页面能看到 "Import Git Repository" 按钮
✅ Netlify: 登录后看到 "Import from Git" 按钮
✅ Cloudflare: 登录后能看到 "Websites" 和 "Pages" 菜单
⚠️ 常见问题
Q: 注册 Vercel 时 "Continue with GitHub" 点了没反应?
A: 可能是浏览器弹窗拦截,允许弹出窗口后重试。
Q: GitHub 注册弹出 "Unable to verify your captcha"?
A: 国内访问 GitHub 的 reCAPTCHA 可能加载不出来。尝试:
1. 开代理后刷新
2. 或使用手机热点连接
3. 或装浏览器插件 "nocaptcha"
Q: 需要手机号验证?
A: GitHub 注册可能需要手机验证,用国内手机号即可。
Plan B 分支
如果 GitHub 注册不了:
└─ 改用 Gitee(国内,无需翻墙)
└─ Vercel/Netlify/CF Pages 仍然支持 Gitee 导入
└─ 后面步骤中的 git push 地址改为 gitee.com
如果 Vercel 注册不了:
└─ 跳过 Vercel,主站改为 Netlify
└─ 步骤 SOP-07 跳过,SOP-08 作为主站
如果 Cloudflare 注册不了:
└─ R2 备份改用 阿里云盘 / 百度网盘(免费)
└─ 不影响三平台部署
SOP-02: 安装 Hugo
步骤
1. 确认 Windows 系统类型(64 位)
开始菜单 → 设置 → 系统 → 关于 → 系统类型: 64 位操作系统
2. 下载 Hugo Extended 版
打开 https://github.com/gohugoio/hugo/releases
找到最新版本(如 v0.145.0)
下载 hugo_extended_0.145.0_windows-amd64.zip
⚠️ 必须带 extended 字样,不能下标准版
3. 解压安装
在 D:\AI 目录下创建 hugo 文件夹(D:\AI\hugo\)
将 zip 里的 hugo.exe 解压进去
4. 加入系统 PATH
右键"此电脑"→ 属性 → 高级系统设置 → 环境变量
系统变量 → Path → 编辑 → 新建 → 输入 D:\AI\hugo
确定 → 确定 → 确定
5. 验证安装
打开新终端(必须重启终端,不能用旧的)
输入: hugo version
预期输出: hugo v0.145.0+extended windows/amd64 BuildDate=...
验证点
✅ hugo version 命令可执行
✅ 输出中有 extended 字样
✅ 版本号不低于 0.120.0(否则部分主题不兼容)
⚠️ 常见问题
ERROR: 'hugo' is not recognized as an internal or external command
原因1: PATH 未生效
解决: 重启终端;如果不行,重启电脑
原因2: 解压路径不对
解决: 确认 hugo.exe 在 D:\AI\hugo\ 下面,不在子文件夹里
ERROR: 下载速度极慢
原因: GitHub Releases 国内下载慢
解决: 使用代理下载;或从 Gitee 镜像获取
ERROR: 下载了标准版(非 extended)
症状: 安装主题后 hugo server 报错 "SCSS processing failed"
解决: 重新下载 extended 版覆盖即可
Plan B 分支
如果 Hugo 无法安装(PATH 反复不生效等):
└─ 使用 Hugo 的 Windows 安装包 winget:
winget install Hugo.Hugo.Extended
如果所有安装方式都失败:
└─ 切换到 Astro(Node.js 生态,不需要单独下载)
└─ 前提: 安装 Node.js(https://nodejs.org/),LTS 版即可
└─ 后续命令: npm create astro@latest 代替 hugo new site
SOP-03: 创建站点 & 安装主题
3.1 创建站点骨架
# 在个人网站目录下创建项目
cd F:\gog安装版游戏\个人网站
hugo new site myblog --format yaml
预期输出: Congratulations! Your new Hugo site was created in F:\gog安装版游戏\个人网站\myblog
3.2 验证骨架
cd myblog
dir
预期看到:
archetypes/
content/
data/
layouts/
static/
themes/
hugo.yaml
3.3 安装主题(以 PaperMod 为例)
# 初始化 Git(主题需要用 submodule 安装)
git init
# 添加主题(如果用 PaperMod)
git submodule add https://github.com/adityatelange/hugo-PaperMod themes/PaperMod
# 或者用 Hugo Theme Stack(备选)
# git submodule add https://github.com/CaiJimmy/hugo-theme-stack themes/stack
3.4 启用主题
编辑 hugo.yaml,写入:
baseURL: '/'
languageCode: zh-CN
title: 我的博客
theme: PaperMod
paginate: 10
enableEmoji: true
3.5 验证主题安装
hugo server
打开浏览器访问 http://localhost:1313。应该能看到一个带着默认内容的博客页面。
⚠️ 常见问题
ERROR: git submodule 下载失败
原因: GitHub 被阻断或网络超时
解决:
方案 A: 开代理后重试
方案 B: 手动下载主题:
1. 浏览器打开 https://github.com/adityatelange/hugo-PaperMod
2. 点 "Code" → "Download ZIP"
3. 解压到 themes/PaperMod 目录
4. 注意: 手动安装后无法自动更新,下次手动替换
ERROR: hugo server 报错 "failed to resolve element in Page"
原因: Hugo 版本太低或主题兼容性问题
解决: 确认 hugo version 显示 extended + 版本号 >= 0.120.0
ERROR: 页面空白
原因: 主题没有示例内容
解决: 别担心,下一步写文章后就会有内容
Plan B 分支
如果 PaperMod 安装失败且手动下载也不行:
└─ 改用 Hugo Theme Stack(备选)
git submodule add https://github.com/CaiJimmy/hugo-theme-stack themes/stack
然后在 hugo.yaml 中 theme: stack
如果 Stack 也不行:
└─ 试试更简单的 LoveIt 主题
git submodule add https://github.com/dillonzq/LoveIt themes/LoveIt
如果所有主题都下载失败(网络彻底不行):
└─ 临时用 Hugo 内置的默认主题(无样式,但能验证构建流程正常)
hugo.yaml 中 theme: "" (空字符串即可)
SOP-04: 写第一篇文章
4.1 生成文章模板
hugo new posts/my-first-post.md
4.2 编辑文章
用任意文本编辑器打开 content/posts/my-first-post.md,内容结构:
---
title: 我的第一篇文章
date: 2026-06-18T20:00:00+08:00
draft: false
tags:
- hello
- blog
categories:
- 随笔
---
这是我的第一篇博客文章。
用 **Markdown** 写内容,支持:
- **粗体**、*斜体*
- 列表
- `代码`
- [链接](https://example.com)
- 
关键: 把 draft: true 改为 draft: false,否则文章不会显示。
4.3 验证文章
hugo server -D # -D 表示显示草稿
打开 http://localhost:1313,确认文章出现在首页。
⚠️ 常见问题
Q: 文章不显示
A1: 检查 frontmatter 中 draft: false
A2: 如果没有 -D 参数,草稿不会显示
A3: 确认文件在 content/posts/ 下面,不在子目录
Q: 中文乱码
A: 用 UTF-8 无 BOM 编码保存文件
VSCode: 右下角编码 → Save with Encoding → UTF-8
记事本: 另存为 → 编码选 UTF-8
SOP-05: 本地预览
# 不带草稿的正常预览
hugo server
# 带草稿的预览(开发时用)
hugo server -D
# 绑定到所有网卡(局域网其他设备可访问)
hugo server --bind=0.0.0.0 --baseURL=http://你电脑的IP:1313
验证点
✅ http://localhost:1313 能正常打开
✅ 文章列表显示
✅ 文章内容、标题、日期正确
✅ RSS 链接存在(通常显示为 /index.xml)
停止预览
在终端按 Ctrl+C 停止服务器。
SOP-06: 初始化 Git & 推送到 GitHub
6.1 创建 .gitignore
在 myblog/ 目录下创建 .gitignore 文件:
# Hugo 构建产物
/public/
/resources/_gen/
.hugo_build.lock
# 编辑器
.vscode/
.idea/
*.swp
*.swo
# 系统
Thumbs.db
.DS_Store
6.2 首次提交
# 确认在 myblog 目录下
cd F:\gog安装版游戏\个人网站\myblog
# 查看当前状态(确认没有意外包含大文件)
git status
# 添加所有文件
git add .
# 提交
git commit -m "Initial commit: Hugo blog with PaperMod theme"
# 重命名分支
git branch -M main
6.3 GitHub 建仓库
1. 打开 https://github.com/new
2. Repository name: myblog(或你喜欢的名字)
3. Description: 我的个人博客
4. 选 Public(免费部署必须公开)
5. 不要勾选任何初始化选项(README/LICENSE/.gitignore)
6. 点 Create repository
创建后会看到一段命令,复制 SSH 或 HTTPS 方式:
# 方式 A: HTTPS(推荐,简单)
git remote add origin https://github.com/你的用户名/myblog.git
# 方式 B: SSH(国内更稳定)
git remote add origin git@github.com:你的用户名/myblog.git
6.4 推送
git push -u origin main
验证点
✅ GitHub 仓库页面上能看到刚刚推送的文件
✅ content/posts/my-first-post.md 在仓库里
✅ themes/ 目录存在(如果是 submodule 会显示为带箭头的文件夹)
✅ public/ 目录不在仓库中
⚠️ 常见问题
ERROR: fatal: repository 'https://github.com/...' not found
原因: 仓库名或用户名打错了
解决: git remote remove origin 后重新添加正确的地址
ERROR: git push 卡住不动 / timeout
原因: 国内连接 GitHub 网络不稳定
解决:
方案 A(推荐): 切换为 SSH 方式
git remote set-url origin git@github.com:用户名/仓库名.git
需要先到 GitHub 添加 SSH Key
方案 B: 开系统代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
如果代理端口不是 7890,替换为你的代理端口
方案 C: 更换 DNS
ping github.com 看看是不是解析到国内 IP
Windows 修改 C:\Windows\System32\drivers\etc\hosts
加入: 140.82.113.3 github.com
ERROR: git push 被拒绝 "failed to push some refs"
原因: 远程仓库有本地没有的提交(比如你创建仓库时勾了 README)
解决: git pull --rebase origin main 再 push
ERROR: 提交了 public/ 目录(仓库里有大量静态文件)
原因: 忘记写 .gitignore 或写错了
解决: git rm -r --cached public/
确认 .gitignore 文件里有 /public/
git commit -m "Remove public/ from tracking"
Plan B 分支
HTTPS push 反复失败:
└─ 方案 A: SSH key
ssh-keygen -t ed25519 -C "你的邮箱"
cat ~/.ssh/id_ed25519.pub
复制到 GitHub: Settings → SSH and GPG keys → New SSH key
git remote set-url origin git@github.com:用户名/仓库名.git
git push
└─ 方案 B: Gitee(国内 Git 平台)
注册 gitee.com → 创建仓库 → 推送到 Gitee
注意: 后续 Vercel/Netlify/CF Pages 的 Git Import 步骤需改为选 Gitee
└─ 方案 C: GitLab
注册 gitlab.com → 创建仓库 → 推送
三平台支持 GitLab 集成
SOP-07: 部署到 Vercel(主站 A)
步骤
1. 登录 vercel.com
2. Dashboard → Add New → Project
3. Import Git Repository → 选择你的 myblog 仓库
4. Configure Project:
- Framework Preset: Hugo(自动识别)
- Build Command: hugo(自动填充,保留即可)
- Output Directory: public(自动填充,保留即可)
- Environment Variables → Add:
- Name: HUGO_VERSION
- Value: 0.145.0(与本地版本一致)
5. Deploy(等待 ~1-2 分钟)
验证点
✅ Deploy 页面看到绿色 "Congratulations!" 或 "Production Deployment"
✅ 点击 Visit 打开的页面显示你的博客
✅ 站点的每一篇文章都能正常访问
⚠️ 常见问题
ERROR: Build Failed!
打开 Deploy 日志,查看具体错误:
错误1: "Current version is too old, please upgrade"
原因: Vercel 默认的 Hugo 版本太低
解决: 上一步骤中 Environment Variables 添加 HUGO_VERSION
错误2: "hugo: not found"
原因: Framework Preset 没选 Hugo,Vercel 不知道用什么命令构建
解决: Project Settings → Build & Development Settings → 改为 Hugo
错误3: "Error building site: process: ...
Failed to get resolved config in path"
原因: Hugo 版本与主题不兼容
解决: 确保 HUGO_VERSION 与你本地版本一致
ERROR: Deploy 成功但页面空白
原因: 构建后的 public/ 为空
解决: 本地运行 hugo 确认能正常生成 public/index.html
ERROR: Deploy 成功但 404
原因: Output Directory 配置错误
解决: 确认填的是 public 而不是 /public/ 或 ./public
Plan B 分支
如果 Vercel 构建始终失败:
└─ 改用本地构建 + CLI 上传(跳过 CI 构建)
npm i -g vercel
hugo
vercel deploy --prebuilt --prod ./public
如果 Vercel + CLI 都失败:
└─ 放弃 Vercel,主站改为 Netlify(SOP-08)
SOP-08: 部署到 Netlify(备用站 B)
步骤
1. 登录 app.netlify.com
2. Sites → Add new site → Import an existing project
3. Connect to Git provider → GitHub → 选择 myblog 仓库
4. Build settings(Netlify 会自动检测为 Hugo):
- Build command: hugo
- Publish directory: public
5. Advanced → Environment variables → Add:
- HUGO_VERSION = 0.145.0
6. Deploy site
验证点
✅ Deploy 成功后显示 Site published at https://xxx.netlify.app
✅ 点击域名能正常显示博客
✅ 内容与 Vercel 站一致
⚠️ 常见问题
ERROR: Build 日志中 "hugo" 命令不存在
原因: Netlify 默认镜像不包含 Hugo
解决: Netlify 会自动安装 Hugo,如果失败则在 Environment variables
中添加 HUGO_VERSION 即可触发自动安装
ERROR: 部署后样式丢失
原因: 主题的 CSS 路径是绝对路径
解决: 检查 hugo.yaml 中 baseURL 是否设置为 '/'(相对路径)
baseURL: '/'
如果是绝对路径如 https://xxx.netlify.app,换到 Vercel 后会错
Plan B 分支
Vercel 和 Netlify 都失败:
└─ 主站和备用站全用 Cloudflare Pages(SOP-09)
SOP-09: 部署到 Cloudflare Pages(备用站 C)
步骤
1. 登录 dash.cloudflare.com
2. 左侧菜单 → Pages
3. Create a project → Connect to Git
4. 选择 myblog 仓库(首次需要授权 GitHub)
5. Set up builds and deployments:
- Framework preset: Hugo
- Build command: hugo
- Build output directory: public
- Environment variables (Advanced):
- HUGO_VERSION = 0.145.0
6. Save and Deploy
验证点
✅ 部署成功后显示 your-project.pages.dev
✅ 访问正常
✅ 内容和前两个站一致
⚠️ 常见问题
ERROR: "Could not find a Hugo version matching ..."
原因: Cloudflare 的 Hugo 安装器没找到对应版本
解决: 在 Environment variables 中设置 HUGO_VERSION = 0.145.0
或改为 HUGO_VERSION = 0.121.2(CF 默认支持的版本)
ERROR: 每月构建次数超过 500 次
几乎不可能,除非你一天 push 17 次。如果真超了:
下个月自动恢复。
ERROR: 构建成功但访问 404
原因: Output directory 配置错了,确认是 public(没有斜杠)
SOP-10: 三站验证(关键步骤)
手动验证清单
部署完成后,逐个打开并检查:
# 记录三个地址
你的三个站应该是:
A: https://myblog.vercel.app # Vercel
B: https://myblog.netlify.app # Netlify
C: https://myblog.pages.dev # Cloudflare Pages
# 检查项(每站逐一验证)
□ 首页能打开
□ 文章列表显示
□ 文章内容排版正常
□ 图片正常加载
□ 页面切换不报 404
□ 文章日期、标签显示正常
□ RSS 链接可达 (/index.xml)
内容一致性验证
写一篇测试文章推送到 GitHub,确认三站同步:
# 1. 写一篇测试文章
hugo new posts/sync-test.md
# 2. 编辑添加标记性内容(方便识别版本)
# 在文章中写: "同步测试: 部署于 2026-06-18"
# 3. 发布 & 推送
git add .
git commit -m "test: sync verification"
git push
# 4. 等待 1-2 分钟后刷新三个站点
# 确认新文章在三站都已出现
故障模拟测试(建议上线前做一次)
# 模拟 Vercel 不可用
# 不访问 Vercel 地址,只访问 Netlify 和 Cloudflare Pages
# 确认内容可用且一致
# 模拟 git push 后某平台构建失败
# 故意在 Vercel 的环境变量中填错 HUGO_VERSION
# 确认 Vercel 构建失败,但 Netlify 和 CF Pages 不受影响
# 改正 HUGO_VERSION 后 Vercel 重新构建恢复
多地址管理
创建 F:\gog安装版游戏\个人网站\访问地址.txt:
=== 我的博客 ===
主站(推荐优先访问):
https://myblog.vercel.app
备用站 1(Vercel 不可用时):
https://myblog.netlify.app
备用站 2(前两个都不行时):
https://myblog.pages.dev
更新时间: 每次 git push 后三站自动同步
同时在每个站点的博客页脚或关于页面加上:
# 在 hugo.yaml 中(如果主题支持自定义 footer)
params:
footer_text: |
本博客部署于三平台备用 |
<a href="https://myblog.vercel.app">Vercel</a> |
<a href="https://myblog.netlify.app">Netlify</a> |
<a href="https://myblog.pages.dev">Cloudflare</a>
SOP-11: R2 核弹备份
步骤
# 1. 本地构建最新版本
cd F:\gog安装版游戏\个人网站\myblog
hugo
# 2. 压缩 public/
# 用 7z(推荐,压缩率高):
7z a public-backup-2026-06-18.zip .\public\*
# 或用 PowerShell(Windows 自带):
Compress-Archive -Path public\* -DestinationPath public-backup-2026-06-18.zip
# 3. 登录 Cloudflare → R2
# 创建存储桶: myblog-backup
# 上传压缩包
# 4. 同时复制一份到 U 盘
R2 启用静态托管(紧急情况)
如果三个平台全挂,启用 R2 静态托管作为临时访问入口:
1. Cloudflare R2 → myblog-backup 存储桶
2. Settings → Public Access → "Allow access"
3. 记下公开 URL(格式: https://pub-xxxxx.r2.dev)
4. 上传 public/ 内容(不是压缩包,是解压后的文件)
5. 访问 https://pub-xxxxx.r2.dev 确认网站可访问
验证点
✅ R2 存储桶中有最新的压缩包
✅ U 盘中有同样的压缩包
✅ 压缩包解压后能看到 index.html
✅ R2 静态托管 URL 能访问博客
SOP-12: 日常维护流程
写新文章
# 1. 拉取最新代码(如果换了电脑)
git pull
# 2. 创建新文章
hugo new posts/文章标题.md
# 3. 编辑文章内容
# 4. 本地预览
hugo server -D
# 5. 确认无误后构建
hugo
# 6. 推送
git add .
git commit -m "新文章: 文章标题"
git push
# 三平台自动构建部署
更新主题
# 如果是 submodule 安装的主题
git submodule update --remote --merge
# 如果是手动安装的主题
# 重新下载最新版覆盖 themes/目录
更换主题
# 1. 安装新主题
git submodule add https://github.com/XXX/YYY themes/YYY
# 2. 修改 hugo.yaml, 改 theme: YYY
# 3. 本地预览检查效果
hugo server
# 4. 满意后推送
git add .
git commit -m "更换主题为 YYY"
git push
恢复:从 GitHub 克隆到新电脑
# 1. 在新电脑上安装 Hugo
# 2. 克隆仓库(带 submodule)
git clone --recurse-submodules https://github.com/用户名/myblog.git
# 3. 进入目录
cd myblog
# 4. 本地预览
hugo server
# 5. 正常写文章、推送
恢复:从 U 盘完全重建
# 如果 GitHub 和所有部署站都丢失了
# 1. 从 U 盘拷贝 myblog 源码目录到新电脑
# 2. 安装 Hugo(SOP-02)
# 3. 安装主题(如果主题文件夹不存在,重新下载)
# 4. 本地预览
hugo server
# 5. 重新创建 GitHub 仓库并推送
git remote add origin https://github.com/用户名/新仓库名.git
git push -u origin main
# 6. 重新在 Vercel/Netlify/Cloudflare Pages 部署
附录 A: 完整命令速查表
| 命令 | 用途 |
|---|---|
hugo new site myblog |
创建新站点 |
hugo new posts/xxx.md |
创建新文章 |
hugo server -D |
本地预览(含草稿) |
hugo server |
本地预览(仅已发布) |
hugo |
构建静态文件到 public/ |
git add . |
暂存所有变更 |
git commit -m "message" |
提交 |
git push |
推送到 GitHub |
git pull |
拉取最新代码 |
git clone --recurse-submodules 地址 |
克隆含主题的仓库 |
附录 B: 关键文件路径速查
| 路径 | 说明 |
|---|---|
F:\gog安装版游戏\个人网站\myblog\ |
博客源码根目录 |
F:\gog安装版游戏\个人网站\myblog\content\posts\ |
文章存放目录 |
F:\gog安装版游戏\个人网站\myblog\themes\ |
主题目录 |
F:\gog安装版游戏\个人网站\myblog\hugo.yaml |
博客配置文件 |
F:\gog安装版游戏\个人网站\访问地址.txt |
三站地址记录 |
F:\gog安装版游戏\个人网站\myblog\.gitignore |
Git 忽略规则 |
附录 C: 边界情况与补救措施速查
| 边界情况 | 补救措施 | 参考 |
|---|---|---|
| 本地电脑硬盘损坏 | 在新电脑 git clone 仓库 | SOP-12 |
| 本地 + GitHub 同时丢失 | 从 U 盘重建,重新 push | SOP-12 |
| 所有线上 + 本地全丢 | 从 R2 下载备份压缩包 | SOP-11 |
| Vercel 宕机 | 用户访问 Netlify 或 CF Pages | SOP-10 |
| Vercel 取消免费 | Netlify 升为主站 | 白皮书 F-04 |
| GitHub 被墙 | SSH 协议 / Gitee 镜像 | SOP-06 Plan B |
| 三平台全挂 | R2 静态托管临时恢复 | SOP-11 |
| Hugo 版本不兼容 | 锁定 HUGO_VERSION 环境变量 | SOP-07 |
| 主题报错 | 换备用主题 | SOP-03 Plan B |
| 文章发布后不显示 | 检查 draft: false | SOP-04 |
| 图片加载不出来 | 检查路径大小写 / 文件是否存在 | 本地检查 |
| 推送后平台没构建 | 检查 GitHub Webhook 状态 | 各平台 Git 设置页 |
本 SOP 随系统变更持续更新。遇到本文档未覆盖的情况,先查白皮书中的 FMEA 表,找到对应的故障编号和恢复程序。