搭站过程中遇到的三个问题,记下来免得下次再查。

坑一:GitHub 全段被 hosts 到 127.0.0.1

C:\Windows\System32\drivers\etc\hosts 里有几百行(#S302 标记)把 github.com、raw.githubusercontent.com、github.io 等全部指向 127.0.0.1。

后果:

git clone https://github.com/adityatelange/hugo-PaperMod
fatal: unable to access '...': The requested URL returned error: 502

于是 git submodule add 这条路在这台机器上走不通。

坑二:受限环境下 HTTPS 握手失败

curl: (35) schannel: AcquireCredentialsHandle failed: SEC_E_NO_CREDENTIALS

Windows 上 curl / .NET 的 HTTPS 走 SChannel,在受限的执行环境里拿不到 TLS 凭证,表现为「所有 HTTPS 站点都连不上」,而 http:// 正常。

绕法:换掉 TLS 实现。

  • Node.js 自带 TLS 栈 → 用一小段 node -e "https.get(...)" 抓文件
  • Go 自带 TLS 栈 → 用 Go 模块代理拉依赖

坑三:Hugo 最新版要 Go 1.27,本机是 1.26.5

go: github.com/gohugoio/hugo@v0.168.0 requires go >= 1.27.0
   (running go 1.26.5; GOTOOLCHAIN=local)

查了各版本对 Go 的要求:

Hugo需要 Go
v0.168.0 / v0.167.0 / v0.166.01.27.0
v0.165.01.26.0 ✅
v0.162.11.25.0

最终解法:全程走 Go 模块代理

goproxy.cn 同时能取到 Hugo 源码 和 PaperMod 主题源码(任何 GitHub 仓库都能当 Go module 拉)。

$root = "$PWD\.tools"
$env:GOBIN        = "$root\bin"
$env:GOPATH       = "$root\gopath"
$env:GOMODCACHE   = "$root\gomod"
$env:GOCACHE      = "$root\gocache"
$env:GOPROXY      = 'https://goproxy.cn,direct'
$env:GOSUMDB      = 'sum.golang.google.cn'
$env:GOTOOLCHAIN  = 'local'
$env:CGO_ENABLED  = '0'      # 非 extended 版,不需要 C 编译器

go install github.com/gohugoio/hugo@v0.165.0

主题源码直接从模块代理的 zip 拿:

# 查最新版本
# https://goproxy.cn/github.com/adityatelange/hugo-!paper!mod/@latest
# 下载对应 zip 后解压到 themes/PaperMod

好处是整个过程不需要访问 GitHub,坏处是只能装非 extended 版(没有 SCSS/PostCSS 支持)。PaperMod 用的是纯 CSS 拼接,不受影响。

顺便验证了「构建时间」

  • 首次 go install 要拉几十个依赖,约 3–5 分钟
  • 之后 hugo --minify 构建整站:几十毫秒
  • hugo server 内存占用:几十 MB

这也是为什么这台 2C2G 的机器托管静态博客属于性能过剩。