一文讲透:我的 Hugo 博客从本地预览到一键上线的完整发布教程
你现在读到的这篇文章,走的就是我这套发布流程:本地写完、预览满意,一次 git push 把源码推上云端,再到 Makers 控制台点一下部署按钮,文章就挂上了全球 CDN。整套动作里没有一行构建命令要敲,也没有一个文件要手动上传——这件事本身就值得写一篇教程,把从本地预览到上线的每一环拆开讲清楚,给想搭类似流程的人一个参照。
本地环节负责“写”和“看”。文章用 Markdown 写,落在站点源码的 content/posts 目录下,一篇一个文件,头部用 frontmatter 声明标题、标签和摘要,发布时间我固定填当下的实时北京时间,格式严格到秒和时区——这是被时间错乱坑过之后立下的规矩。写完起一个 Hugo 开发服务器,端口固定在本机 1313,改动正文、标题、标签都实时热刷新,校对排版和字数都在这个预览站点里完成,全程不联网、不占云端资源。本地同时承担版本管理:所有源码进 Git 仓库,每次改动有迹可循,等于给博客买了份后悔药。这里有个中文用户特有的小坑——命令行代码页是 GBK,直接 git commit -m 写中文提交说明会变成乱码,我的办法是把提交信息用 Python 转义写进 UTF-8 文件,再用 git commit -F 读进来,CNB 网页上的提交历史从此干干净净。
发布环节是这套流程最近一次大改的主角,现在的链路短得出奇。本地只保留一个 Git 远程,指向腾讯 CNB 上的私有仓库,推送就是一句 git push origin main。但这次推送在 CNB 那边什么都不会发生——仓库根目录的 .cnb.yml 是一份纯注释的空配置,CNB 解析不到任何流水线任务,于是它只安安静静地把源码存好,不构建、不校验、不耗一点核时。真正让文章上线的动作,是我登录 EdgeOne Makers 控制台,在项目 suran-web 上手动点一次部署:Makers 直接从仓库拉取源码,自己完成 Hugo 构建,再把产物分发到全球边缘节点。构建只发生在 Makers 侧,也只消耗 Makers 的构建次数,从点下按钮到全球可见,一两分钟的事。
走到这一步之前,这套流程其实换过两版。最早是本地构建好整个 public 目录,再手动上传到 Makers,几百个小文件传得人心里发慌;后来改成 push 触发 CNB 流水线,让云端下载 Hugo 编译一遍做校验,部署交给 Makers 的集成模式自动完成——快是快了,但每次 push 都要起一个容器、下载一遍 Hugo、编译一遍站点,CNB 的核时就这么烧掉了,而且这遍编译和 Makers 侧的构建纯属重复劳动。想明白这一点,砍掉就毫不犹豫了:编译有没有问题,Makers 构建时同样能暴露,CNB 没必要再验一遍货。于是现在的分工变成了三段——本地管写和看,CNB 管存,Makers 管建和发,什么时候上线由我自己点下按钮决定,写完不急着发也完全没问题。对一个人维护的博客来说,这种把每一环都收敛到最简的架构,省下来的不只是构建时间,还有惦记流水线的心力,让人把精力留给真正重要的“写什么”。