简介:这是一份来自GitHub Pages的个人站点源码包,项目名称为nyaojiang.github.io,内容围绕"猫妖酱的乳首开发日记"展开,整体定位偏向于个人博客或静态网页应用。它适合网页开发入门者、喜欢用GitHub Pages搭建轻量站点的用户,以及需要参考最小化仓库结构的开发人员。压缩包整体非常精简,仅有5个文件,包含2个Markdown文档、2个HTML页面和1个YAML配置文件,解压后大小约2KB,却能覆盖静态站点从内容编写、页面渲染到基础配置的完整链路。其中,Markdown文档用于承载正文与说明,HTML页面内嵌了Google和百度搜索引擎的验证代码,YAML文件则对站点名称、主题等参数进行了声明,便于Jekyll等工具直接构建部署。目前已有17319人学习浏览该资源。通过阅读这套源码,读者可以快速理解GitHub Pages的目录组织方式,掌握按钮式验证代码与页面头部信息的绑定技巧,并学会在本地预览时同步调整_config.yml中的关键配置项,从而节省从零搭建个人页面的时间。这份仓库虽然小巧,但结构完整,尤其适合作为轻量级建站学习的参考范本,也能为后续扩展成更丰富的博客系统提供一个清晰起点。
1. 项目概述与初衷
1.1 项目背景
很多技术人都有一个自己的个人站点,我也不例外。nyaojiang.github.io 这个项目,本质上是一个基于 GitHub Pages 的个人博客站点,域名形式是标准的 username.github.io。这类站点在国内技术圈很常见,很多人用它来写技术笔记、作品展示或者纯粹当一个网络自留地。
我搭建这个站点的核心诉求很简单:想拥有一个完全可控、免费、无需维护服务器的个人展示页。对比过主流的博客方案之后,最终选择了 GitHub Pages 这条路。原因有几个:免费额度足够个人使用,支持自定义域名,配合 Jekyll 或 Hexo 这类静态站点生成器,写文章、改主题都很方便,不需要买云服务器,也不用操心备案的事。
这个项目最直接的产出物就是一个可以被公开访问的静态网站,用户访问 username.github.io 就能看到站点内容。如果你也想搭一个类似的个人站点,或者对 GitHub Pages 的工作机制好奇,这篇文章应该能给你一些参考。
1.2 项目能解决什么问题
个人博客的价值往往被低估。对我来说,它解决了几个实际问题:第一,写技术文章需要一个稳定的载体,不像第三方平台那样担心内容被删或者平台倒闭;第二,面试或者接私活的时候,一个像样的个人站点比口头描述更有说服力;第三,沉淀知识这件事本身就有长期价值,哪怕访问量只有个位数。
GitHub Pages 这类服务的核心优势在于“静态托管”。所谓静态,就是没有后端逻辑,服务器只负责把 HTML、CSS、JavaScript 文件原样返回给浏览器。理解这个概念很重要,因为后面所有关于部署、SEO、性能优化的讨论,都基于“静态”这个前提展开。
2. 环境准备与基础概念
2.1 准备工作清单
搭建这个项目之前,需要准备以下工具和账号,我把它们列成表格方便对照:
| 工具/服务 | 用途 | 备注 |
|---|---|---|
| GitHub 账号 | 托管代码和站点文件 | 免费版即可满足需求 |
| Git | 本地代码版本管理 | 建议用 2.x 以上版本 |
| Node.js | 运行 Hexo/Jekyll 等生成工具 | 仅使用静态生成器时需要 |
| 文本编辑器 | 修改配置和编写文章 | VS Code、Sublime Text 均可 |
| 域名 | 自定义访问地址(可选) | 不购买也可使用默认域名 |
如果只是使用 GitHub 提供的默认域名,准备工作基本上只需要一个 GitHub 账号,外加装好 Git。这个门槛几乎等于零,也是这类方案流行的重要原因。
2.2 静态网站的底层逻辑
我刚开始接触静态站点的时候,对“生成”这个概念有些模糊。后来做了几个项目才彻底想明白:GitHub Pages 本身不运行任何动态脚本,它只做一件事——把仓库里的文件通过 HTTP 协议暴露出去。
那文章是怎么变成 HTML 的呢?关键在于本地先生成。拿 Hexo 举例,你在本地用 Markdown 写一篇文章,然后在终端执行 hexo g 命令,这个命令会把 Markdown 文件转换为完整的 HTML 页面,连同样式表、脚本、图片等静态资源一起输出到一个名为 public 的文件夹里。接着执行 hexo d,部署程序会把这个文件夹里的内容推送到远程仓库。GitHub Pages 检测到仓库内容更新,自动就在对应的域名下生效了。
整个流程的精妙之处在于把动态逻辑全部前移到本地执行,服务器只承担文件分发任务。这样做的好处很明显:访问速度快、安全性高(没有可攻击的动态接口)、成本低(免费),缺点也有——每次更新内容必须重新生成并推送,做不到动态网站那种“后台一提交前端立即展示”的体验。
3. 核心实现流程
3.1 创建 GitHub Pages 仓库
这个步骤是整个项目的地基,操作不复杂,但有几个细节必须注意。
登录 GitHub 后点击右上角加号,选择 New repository。仓库名必须严格遵循 username.github.io 的格式,其中 username 是你的 GitHub 用户名。比如你的用户名是 nyaojing,仓库名就要填 nyaojing.github.io。这个命名规则是硬性的,填错了 Pages 功能不会生效。
仓库可见性建议选 Public。虽然 GitHub Pages 也支持私有仓库(付费版功能),但开源精神本来就是这个平台的核心基调,而且公开仓库方便后续接入更多自动化服务。初始化仓库时,建议勾选 Add a README file,这样仓库一创建就有一个默认页面,方便确认基础连通性。
3.2 接入静态站点生成器
仓库创建好之后,需要决定使用哪种方式生成站点内容。我将几种方案放在一起比较,方便你根据自己的技术栈做选择:
| 生成器 | 语言 | 特点 | 适合人群 |
|---|---|---|---|
| Jekyll | Ruby | GitHub 原生支持,无需额外构建 | 追求零配置的用户 |
| Hexo | Node.js | 中文文档齐全,插件丰富 | 绝大多数国内开发者 |
| Hugo | Go | 构建速度极快 | 文章数量庞大的重度用户 |
| Vitepress | Node.js | 基于 Vue,开发者体验好 | 前端技术栈为主的人群 |
| 纯 HTML | 无 | 不用生成器,直接写页面 | 只做简单展示页 |
我选择的是 Hexo。原因比较实际:社区活跃度高、主题选择多、文档质量不错,而且本地环境只需要 Node.js,比 Jekyll 的 Ruby 环境配置省心得多。
安装 Hexo 的流程如下。假设你已经装好了 Node.js,在终端依次执行:
npm install -g hexo-cli hexo init nyaojing-blog cd nyaojing-blog npm install初始化完成之后,目录结构里会包含 source 文件夹(存放 Markdown 源文件)、themes 文件夹(存放主题)、_config.yml(站点配置文件)。先在本地预览一下默认效果:
hexo s浏览器访问 http://localhost:4000,如果能看到默认页面,说明本地环境已经跑通了。
3.3 配置部署参数
站点本地能跑了,接下来要把文章推送到 GitHub 仓库。这一步需要修改 _config.yml 文件中的部署配置。打开文件,定位到 deploy 相关配置段,改成类似下面的内容:
deploy: type: git repo: https://github.com/nyaoyao/nyaojing.github.io.git branch: main注意,repo 的地址要替换成你自己的仓库地址,分支名取决于你仓库的默认分支。GitHub 新仓库默认分支是 main,老仓库可能是 master,用 git branch 命令或者在仓库页面都能看到。
修改完配置后,需要安装 hexo-deployer-git 插件,否则 hexo d 命令会报错说找不到部署器。执行:
npm install hexo-deployer-git --save之后每次写文章,操作流程都是三连:hexo clean(清理缓存)→ hexo g(生成静态文件)→ hexo d(部署到 GitHub)。我第一次部署时没装部署插件,折腾了二十分钟才反应过来问题在哪,网上搜答案浪费了不少时间,这里直接说出来帮你避坑。
3.4 本地验证与线上访问
部署完成后,先不要急着关终端。访问你的线上地址 username.github.io,确认内容是否已经生效。这里有一个常见的“坑”:第一次部署或者修改 DNS 配置之后,站点可能不会立即出现,最长可能需要等待几分钟。这是因为 GitHub 需要时间同步配置,访问异常先等一两分钟再刷新试试。
如果页面能正常显示,说明整个链路已经打通。此时可以在本地继续调整站点配置——站点标题、作者信息、头像、菜单栏等个性化内容都在 _config.yml 中修改。改完之后重新执行 hexo g 和 hexo d 即可更新线上版本。
4. 主题定制与个性化配置
4.1 主题选择
Hexo 的主题生态很丰富,我对比了几个主流选项后选择了 Next。选择它的理由基于三点:首先它的文档完整,遇到问题容易找到解决方案;其次主题配置项丰富,从颜色风格到侧边栏布局都能自定义;最后它自带多语言支持和友链功能,省去自己写代码的麻烦。
如果 Next 的风格你觉得太大众化,还有其他选择:Butterfly 偏视觉系,卡片设计和渐变色让人眼前一亮;Fluid 走极简风格,以白色基调为主,排版干净利落;Volantis 更适合多媒体内容,大图和视频的渲染效果出色。建议不要一上来就追求复杂主题,先把基础功能跑通,再根据实际需求梯度升级,这样每一步的问题都更可控。
4.2 基础信息配置
安装主题后,需要在站点根目录的 _config.yml 中做几个基本设置。这里我贴一段核心配置示例:
# 站点基本信息 title: 猫妖酱の博客 subtitle: 记录技术与生活 keywords: GitHub Pages, Hexo, 个人博客 author: nяaojiang language: zh-CN timezone: Asia/Shanghai # 站点 URL 设置 url: https://nyaojiang.github.io root: /title 和 author 会显示在页面头部和每篇文章的元信息里,keywords 用于 SEO,url 必须填写最终访问地址。这些配置项修改后需要重新生成才能生效。
4.3 布局调整与页面扩展
Next 主题支持多种布局模式,在主题配置文件中可以控制是否显示侧边栏、侧边栏的展示位置、标签页和归档页的布局方式等。我最常用的调整是修改菜单导航。在主题配置文件的 menu 部分,可以启用或者停用首页、归档、分类、标签等页面:
menu: home: / || home tags: /tags/ || tags categories: /categories/ || th archives: /archives/ || archive注意,tags 和 categories 这类页面需要手动创建。在 Hexo 中执行以下命令:
hexo new page "tags" hexo new page "categories"然后编辑生成出来的 index.md 文件,在头部添加 type: "tags" 或 type: "categories",保存后重新生成部署,导航入口才能正常工作。我第一次启用 tags 页面时手动建了一个空文件,结果页面一直报错,排查了半天才发现问题出在缺少类型声明,这种细节问题只有实际踩过坑才会有印象。
5. 内容管理与写作体验
5.1 文章编写流程
Hexo 的文章以 Markdown 文件形式存放在 source/_posts 目录中。新建一篇文章用命令:
hexo new "文章标题"这会在 _posts 目录下生成一个以当前日期和文章标题命名的 .md 文件。文件开头有一块以三条短横线包裹的区域,叫 Front Matter,用来声明文章的元信息。我一般这样写:
--- title: 使用 GitHub Pages 搭建个人博客 date: 2025-01-15 10:30:00 tags: [Hexo, GitHub] categories: 技术分享 description: 本文介绍完整的搭建流程和注意事项 ---布局页面和时间排序功能都依赖这些元信息,所以每次写作时一定要认真填写,不要偷懒省略。写在 Front Matter 后方的内容即是正文,完全使用 Markdown 语法编写。段落不要写太长,代码记得用围栏式代码块包裹,URL 直接用标准链接语法展示,这样解析出来效果最稳定。
5.2 写作效率提升技巧
长期更新博客,写作效率很关键。我整理了几条比较实用的建议:
第一,本地起一个常驻服务。用 hexo s 启动预览服务后不要关掉终端,浏览器开一个标签页保持访问,写一段内容切过去看一眼效果,比全部写完再统一排版效率高很多。
第二,善用局部刷新。如果熟悉 Node.js 生态,可以搭配 browser-sync 这类工具实现浏览器自动刷新,改完文件立即生效,体验接近使用现代前端框架开发的效果。
第三,合理组织文章分类。文章多了以后,分类和标签就是导航的生命线。我习惯按技术栈分顶级分类,比如“前端开发”、“工程化”、“踩坑记录”,然后再用标签标记具体技术点,比如“webpack”、“ES6”、“GitHub Actions”。这种层级关系在后期维护时会非常省心。
5.3 图片与资源管理
Markdown 本身对图片的支持比较基础,只需要用相对路径或绝对路径引用即可。Hexo 提供了 post_asset_folder 配置选项,开启后每篇文章会自动创建一个同名文件夹,可以把图片和其他资源都放在文章专属文件夹内,引用路径保持相对关系,避免资源散落在各处。
在 _config.yml 中找到 post_asset_folder,把值改为 true,然后再新建文章,就会发现 _posts 目录下生成一个与文章同名的文件夹。这样图片路径写作就能被正确解析,部署到线上也没问题。
6. 域名绑定与 HTTPS 配置
6.1 自定义域名配置
GitHub 提供的默认域名 username.github.io 已经很好用,但如果你想让站点更专业,可以考虑绑定自己的域名。配置分两步:第一步,在 GitHub 仓库的 Settings → Pages 页面中的 Custom domain 处填入你的域名;第二步,去你的域名服务商后台,添加一条 CNAME 记录,将 www 子域名指向 username.github.io。
阿里云、腾讯云、Cloudflare 等平台的操作大同小异,核心都是添加一条解析记录。普通的 A 记录也可以,将域名指向 GitHub Pages 的 IP 地址,不过 IP 有时会变化,不如 CNAME 指向稳定。配置完成后,一般几分钟到几小时不等就能生效,具体取决于 DNS 缓存的刷新速度。
6.2 强制 HTTPS 访问
GitHub Pages 默认支持 HTTPS,并且在仓库设置中有一个 Enforce HTTPS 开关。自定义域名绑定后,这个开关通常会自动启用。证书由 GitHub 自动签发和续期,不需要我们干预,这种“开箱即用”的体验相当舒服。
如果绑定域名后 HTTPS 没有自动生效,可以先关掉 Enforce HTTPS 选项,等待片刻再重新打开,强制触发一次证书签发流程。需要注意的是,CNAME 记录解析到 GitHub Pages 后,DNS 生效前证书签发会失败,所以如果 HTTPS 迟迟开启不了,检查 DNS 解析是否已经完成。
6.3 多域名与重定向
有时候会遇到这种情况:主域名和 www 子域名都能访问站点,导致内容分散,不利于 SEO。解决方法是让其中一个地址永久重定向到另一个。GitHub Pages 本身不支持自定义重定向规则,但有一个简单做法——用仓库根目录下的 CNAME 文件指定唯一域名,然后在另一个域名对应的 DNS 管理处添加 301 重定向。
不同域名服务商的重定向设置入口不同,有的是“URL 转发”,有的是“显性/隐性跳转”,功能上大同小异。只保留一个有效入口,其他全部指向主域名,是维护个人站点的一个好习惯。
7. 问题排查与性能优化
7.1 常见报错与解决思路
部署过程踩坑是常态,我把实际遇到的高频问题整理成一个表,方便查对:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 页面返回 404 | 仓库名不符合规范 | 确认仓库名为 username.github.io |
| hexo d 报错 | 缺少部署插件 | 执行 npm install hexo-deployer-git --save |
| 修改配置不生效 | 未清理缓存 | 执行 hexo clean 后重新生成 |
| 站点访问过慢 | 引用的 JS/CSS 来自境外 CDN | 将静态资源替换为国内源 |
| 自定义域名无法访问 | DNS 解析未生效 | 使用 dig 命令检查解析状态 |
| 文章图片无法显示 | 路径引用错误 | 检查 post_asset_folder 配置 |
7.2 安全与合规事项
GitHub Pages 的使用规范中有几点值得注意:第一,仓库必须设定为公开,除非使用付费的企业版;第二,站点的内容不能违法违规,比如涉及版权侵权的内容可能被删除;第三,单个文件大小有限制,一般不要超过 100MB,不过对个人博客来说这个限制几乎不会触及。
还有一点是和本地代码安全有关的。Git 提交时不要把敏感信息写进代码文件,比如数据库密码、API Key 等。一旦推送到公开仓库,这些信息等于直接暴露给全世界。我自己就吃过亏,有一次不小心把七牛的 SecretKey 写到了配置模板里,发现后立刻把仓库设为私有并重新生成了密钥,这才算消除隐患。后续我养成了提交前用 git diff 检查变更内容的习惯,也可以借助 gitleaks 这类扫描工具做自动化检测。
7.3 性能优化技巧
静态站点的性能优化空间不算大,但做与不做差别还是很明显。我从实际体验出发,说几个值得下手的方向:
图片体积往往是最大的瓶颈。写博客时随手存的截图可能有 1MB 以上,建议统一用 Squoosh 或 TinyPNG 压一遍再入库。开启 Hexo 的懒加载插件或者主题自带的懒加载配置,也能让首屏速度有一定提升。
避免引入过多的 JS 依赖。个人博客的评论区、统计代码、访问地图等脚本动辄添加几十 KB 的 JS,全部加载会拖慢渲染速度。我现在的策略是能不用就不用的第三方脚本尽量不引,数量控制在两三个以内,这样清理完不必要的脚本,加载速度肉眼可见地提升。
7.4 自动化部署进阶
原生 Hexo 工作流是需要手动执行部署命令的,偶尔会忘记或者漏执行。借助 GitHub Actions,可以把“提交代码 → 生成页面 → 推送 Pages”这个过程完全自动化。
原理不复杂:在仓库根目录创建 .github/workflows/deploy.yml 文件,定义流水线:当 main 分支收到 push 事件时,自动在 GitHub 的虚拟机中安装 Node.js,执行依赖安装和静态生成命令,然后把产物推送到 gh-pages 分支或直接推送到 Pages 服务。核心配置大致如下:
name: Deploy Hexo Site on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Use Node.js uses: actions/setup-node@v3 with: node-version: 18 - name: Install dependencies run: npm install - name: Generate static files run: npx hexo generate - name: Deploy to GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: ./public配置完成后,你只需要在本地写好文章、提交代码、推到远程仓库,剩下的一切自动化完成。我从手动部署切换到自动部署之后,更新博客的心理负担小了很多。
8. 踩坑记录与小结
整体走下来,nyaojiang.github.io 这个项目给我最大的感受是:入门容易,做好难。GitHub Pages 本身的稳定性很强,部署出去之后几乎不用操心服务器层面的问题。经常出问题的是生成流程和配置细节,而这些基本上都属于一次性的“学习成本”,踩过一次坑,后面就顺了。
过程中比较深刻的经验有几个。第一,仓库命名必须严格规范,这是所有后续操作的前提。第二,静态站点生成器的本地环境和线上环境有时会有细微差异,比如路径分隔符、大小写问题,部署前多检查几遍没有坏处。第三,自动部署是大势所趋,能早配置就早配置,省下来的时间可以拿去做更有价值的事。
如果你也想搭建类似的项目,我的建议是:先不要纠结细节,跑通最小闭环最重要。默认主题、默认配置、一篇文章,先让站点上线,再逐步优化。很多人一上来就想做一个功能完备的现代化站点,结果卡在配置和主题调试环节,热情消耗殆尽。
我还有一个实用的心得:把搭建过程完整记录成文章发在站点上。既能帮助其他遇到相同问题的人,也是项目进展的天然文档。你以后回看这些记录,能看到自己从零到一走过的完整路程,这种痕迹感挺有意思的。
希望这篇文章对你有帮助。
本文还有配套的精品资源,点击获取