折腾完家里的 NAS 之后,我一直想把这些过程记录下来。照片备份、Jellyfin 影音库、Tailscale 外网访问……每一个步骤踩过的坑,搜索的时候都找不到中文资料,写出来或许能帮到别人。
于是我花了一个下午搭了这个博客。这篇文章记录整个过程。
为什么选 Hugo
搭博客有很多方式。最简单的是直接写 HTML,但每篇新文章都要复制一个模板文件,手动改标题、日期、导航,改一次主题要把所有页面都改一遍,维护成本太高。
另一个选择是 WordPress,功能齐全,但需要数据库和服务器,个人博客用不上那些功能,反而多了维护负担。
静态生成器是目前个人技术博客的主流方案:只写 Markdown,工具自动把它转成完整的 HTML 网站,部署到 CDN 上,快、免费、不需要服务器。
常见的选择有 Hugo、Hexo、Astro、Jekyll。我选 Hugo 的原因很简单:它是单个可执行文件,Windows 上解压即用,不需要安装 Node.js 或者任何运行时,构建速度极快。
安装 Hugo
打开 PowerShell,一行命令安装:
winget install Hugo.Hugo.Extended
验证是否安装成功:
hugo version
输出类似 hugo v0.161.1+extended 就可以了。
如果 winget 安装失败,去 Hugo Releases 下载
hugo_extended_x.x.x_windows-amd64.zip,解压后把hugo.exe放到C:\Windows\System32\即可。
创建项目
选一个目录,我放在 D:\Projects:
cd D:\Projects
hugo new site crownleo-blog
cd crownleo-blog
git init
git branch -M main
git branch -M main 是把默认分支重命名为 main,和 GitHub 保持一致,避免后面推送时分支名不匹配。
执行完之后,目录结构是这样的:
crownleo-blog/
├── content/ ← 文章放这里
├── static/ ← 图片等静态文件
├── themes/ ← 主题
└── hugo.toml ← 站点配置
安装主题
我选的是 PaperMod,目前最流行的 Hugo 极简主题,支持深色模式、标签分类、全文搜索、阅读时间、代码一键复制,风格简洁不过时。
git submodule add --depth=1 https://github.com/adityatelange/hugo-PaperMod themes/PaperMod
网络不好时多试几次,或者开代理执行。
配置站点
打开 hugo.toml,替换为以下内容(根据自己情况修改):
baseURL = "https://crownleo.cn/"
languageCode = "zh-CN"
title = "crownleo"
theme = "PaperMod"
hasCJKLanguage = true
enableRobotsTXT = true
paginate = 10
[params]
author = "王冠"
description = "工程师的折腾记录:NAS、AI工具、代码与系统"
defaultTheme = "auto"
ShowReadingTime = true
ShowCodeCopyButtons = true
ShowToc = true
TocOpen = false
[params.homeInfoParams]
Title = "👋 你好"
Content = "工程师的折腾记录。振动工程背景,热衷于 NAS 搭建、AI 工具与代码实验。"
[[params.socialIcons]]
name = "github"
url = "https://github.com/crownleo"
[menu]
[[menu.main]]
name = "文章"
url = "/posts/"
weight = 1
[[menu.main]]
name = "标签"
url = "/tags/"
weight = 2
[[menu.main]]
name = "关于"
url = "/about/"
weight = 3
[[menu.main]]
name = "🔍"
url = "/search/"
weight = 4
[outputs]
home = ["HTML", "RSS", "JSON"]
hasCJKLanguage = true 是让 Hugo 正确统计中文字数,影响阅读时间的计算,不加这个中文文章的阅读时间会偏短。[outputs] 里加 JSON 是开启全文搜索功能用的。
写第一篇文章
文章直接放到 content/posts/ 目录下,用命令创建会自动补全开头的元信息:
hugo new posts/nas-docker.md
或者直接新建一个 .md 文件拖进去也完全没问题,Hugo 只认文件在不在那个目录,不在乎是怎么放进去的。
文章格式如下,开头的 --- 包裹的部分是元信息,正文是普通 Markdown:
---
title: "用 Docker 在 Windows 上搭建家用 NAS"
date: 2026-05-21T20:00:00+08:00
tags: ["NAS折腾", "Docker", "系统搭建"]
description: "完整记录 NextCloud + Jellyfin 的部署过程,包括踩过的坑。"
draft: false
---
## 前言
这是正文,正常写 Markdown 就行...
注意 draft: false,不写或者写 true 的话构建时这篇文章不会出现。
本地预览
hugo server
浏览器打开 http://localhost:1313,修改文件后实时刷新,满意了再推送。
推送到 GitHub
先在 GitHub 新建一个仓库(https://github.com/new),名字随意,建议 Private 私有。
在项目根目录新建 .gitignore:
public/
resources/
.hugo_build.lock
然后推送:
git add .
git commit -m "init blog"
git remote add origin https://github.com/crownleo/crownleo-blog.git
git push -u origin main
部署到 Vercel
Vercel 对 Hugo 有原生支持,配置比大多数平台简单。
第一步: 打开 https://vercel.com,用 GitHub 账号登录。
第二步: 点击「Add New → Project」,选择刚才的 crownleo-blog 仓库,点击「Import」。
第三步: Vercel 会自动识别出这是 Hugo 项目,构建配置会自动填好:
| 选项 | 自动填写的值 |
|---|---|
| Framework Preset | Hugo |
| Build Command | hugo |
| Output Directory | public |
只需要手动添加一个环境变量,指定 Hugo 版本(避免 Vercel 用旧版本构建报错):
- 变量名:
HUGO_VERSION - 值:
0.161.1(填你本地hugo version输出的版本号)
点击「Deploy」,等待约 1 分钟构建完成。
Vercel 会分配一个临时域名如 crownleo-blog.vercel.app,先用这个验证效果。
绑定自定义域名
第一步: 进入 Vercel 项目 → Settings → Domains,填写 crownleo.cn,点击 Add。
第二步: Vercel 会提示需要添加 DNS 记录。去你的域名服务商(Cloudflare、阿里云等)添加一条 CNAME 记录:
| 类型 | 名称 | 内容 |
|---|---|---|
| CNAME | @ 或 crownleo.cn |
cname.vercel-dns.com |
DNS 生效后(通常几分钟),访问 https://crownleo.cn 就能看到博客。HTTPS 证书 Vercel 自动签发。
日常写作
配置完成后,以后发文章只有这几步:
- 在
content/posts/下新建或拖入.md文件 - 写内容,确认
draft: false - 推送
git add .
git commit -m "新文章:文章标题"
git push
推送后 Vercel 自动触发构建,约 30 秒后 crownleo.cn 更新完成。
小结
整个流程跑通之后,日常写作和发布的心智负担几乎为零。打开编辑器,写 Markdown,推送,完事。
Hugo 本身的学习曲线很平缓,大多数配置一次设好就不用再动。PaperMod 主题把常用的功能都做好了,深色模式、标签、搜索、目录、代码复制,开箱即用。
接下来我会陆续把之前折腾 NAS 的经历都写进来,也会记录一些用 AI 工具提高效率的实验。