使用 Hugo + Github + Doks 搭建个人网站
Posted by clannadzsy ‐ Updated ‐ 2 min read
使用 Hugo + Github + Doks 搭建个人网站
本文保留 2021 年 Doks 旧版项目的搭建思路,本站依赖文件中的主题版本为 Doks 0.2.3,不代表新版 Doks 的安装教程。原先的 Node.js 15、ubuntu-18.04 和旧版 Actions 配置属于历史环境;Node.js 15 已结束维护,见 Node.js 版本状态。新建项目应按所选版本的 Doks 文档和 Hugo 文档选择相容的工具链。
下面的命令需在项目根目录执行。复现已有站点时以仓库的 package.json、package-lock.json 和工作流为准;记录 node --version、npm --version、hugo version,不要直接混用不同年代的主题与依赖。本次校订核对了仓库脚本和配置,没有重新执行安装、构建或部署。
1. 安装 Hugo, 参阅官方文档
2. 选择合适的主题
3. 安装主题,选择与版本对应的方式
以下是 2021 年使用的历史克隆来源,二选一。远端默认分支可能已经升级;它们不保证现在克隆出来仍是 Doks 0.2.3。复现旧项目应使用已知提交和锁文件,新项目应使用对应版本的官方安装步骤。
Hugo网站的Doks主题: Huog-Doks-Theme
Doks官网: Doks
# 历史来源:Doks child theme git clone https://github.com/h-enk/doks-child-theme.git my-doks-site && cd my-doks-site# 历史来源:Doks starter theme git clone https://github.com/h-enk/doks.git my-doks-site && cd my-doks-site# 已有 package-lock.json 的项目按锁文件安装 npm ci# Start development server # 本站旧项目可用的预览脚本;服务地址以终端输出为准 npm run server
4. 参照所选主题的文档, 自定义修改样式
5. 以 Doks 为例
添加
blog文章# 本站旧版脚本的两种等价方式,选择一条执行 npm run create -- "blog/my-first-post/index.md" # 或者: hugo new "blog/my-first-post/index.md"编写博客文件, 完成之后, 注意事项
# 在新文章的 frontmatter 中取消草稿形式 draft: false预览效果
npm run server发布到Github
GitHub 上建立
{username}.github.io仓库,username替换为自己的账号。项目站点的地址和baseURL与用户站点不同,按 GitHub Pages 文档配置发布来源。工作流参考本站维护的
.github/workflows/deploy-github.yml。校订时它监听main,执行锁文件安装、检查、构建和静态输出验收,再把public发布到gh-pages;GitHub Pages 的发布分支应与实际产物分支相符。该文件仍包含为旧项目兼容而保留的工具版本,不应作为新项目的版本推荐。新项目可参考 Hugo 官方 GitHub Pages 部署指南,不要把它的直接 Actions 发布方式与gh-pages分支方式混在一起。源码分支、工作流触发分支和推送分支保持一致。本例统一为
main;如果自己的仓库使用别的分支,应同步修改工作流,而不是一边监听master、一边推送main。先检查仓库状态。旧版 Doks 的
npm run init实际包含rimraf .git,会删除现有 Git 元数据,已有项目不要执行它。下面的初始化命令只用于尚无 Git 仓库的新目录,git init -b main要求 Git 2.28 或更高版本,见 Git 官方说明。# 仅在尚无 Git 仓库的新项目根目录中初始化 git init -b main git add . git commit -m "First Commit" # 将 owner 和仓库名替换成自己的远程仓库 git remote add origin https://github.com/owner/owner.github.io.git git remote -v git push -u origin main如果目录来自
git clone,它已经是 Git 仓库,应跳过git init;先用git status、git branch --show-current和git remote -v检查状态。已有origin时按需用git remote set-url origin 自己的仓库地址修改,不要再次添加同名远程,也不要删除.git。
验证发布结果
本地先按仓库脚本检查并构建,确认预览中的首页、文章和资源能加载;推送后在 GitHub Actions 中核对对应提交的工作流是否成功,再检查 Pages 部署状态。最后打开
https://{username}.github.io/,核对新文章、CSS/JS 和站内链接。仅看到一次本地预览成功,不等于线上已发布;失败时先看具体步骤日志,不要反复改依赖碰运气。
6. 个人修改项, 仅供参考
修改博客默认生成的模板,
archetypes/blog.md# 修改之后,以下是 Hugo archetype 模板内容 --- title: "{{ replace .Name "-" " " | title }}" description: "" lead: "" date: {{ .Date }} lastmod: {{ .Date }} draft: false weight: 50 contributors: [作者名字] ---
7. 问题记录
rimraf not found:先确认在正确的项目目录,并按原锁文件执行npm ci。rimraf已在本站devDependencies中,省略开发依赖的生产安装会导致构建工具缺失;不应在依赖没有装全时靠删除.git或盲目全局安装解决。POSTCSS: failed to transform "main.css":保留完整报错,检查是否安装了主题要求的 Hugo Extended 及匹配的本地 PostCSS 依赖。可用npm ls postcss postcss-cli autoprefixer核对已安装版本,再针对错误修复;全局安装postcss-cli不保证被项目构建调用。旧文中的npm audit fix会改变依赖树,不作为通用构建修复命令,更新依赖应另行审查锁文件并验证。