<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>GuyZeus's Blog</title>
        <link>https://blog.guyzeus.top/blog</link>
        <description>分享 Java、Spring Boot、前端、Docker 等技术文章</description>
        <lastBuildDate>Fri, 31 Jul 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>zh-Hans</language>
        <copyright>Copyright © 2026 GuyZeus</copyright>
        <item>
            <title><![CDATA[Fblog 部署指南（GitHub Pages + Docusaurus）]]></title>
            <link>https://blog.guyzeus.top/blog/Github-doc</link>
            <guid>https://blog.guyzeus.top/blog/Github-doc</guid>
            <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[本文档说明如何把基于 **Docusaurus 3.10.2 重构后的 `Fblog` 个人博客部署到 GitHub Pages，并使用自定义域名 `blog.guyzeus.top`。]]></description>
            <content:encoded><![CDATA[
<p>本文档说明如何把基于 <strong>Docusaurus 3.10.2</strong> 重构后的 <code>Fblog</code> 个人博客部署到 GitHub Pages，并使用自定义域名 <code>blog.guyzeus.top</code>。</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="一项目结构概览">一、项目结构概览<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%B8%80%E9%A1%B9%E7%9B%AE%E7%BB%93%E6%9E%84%E6%A6%82%E8%A7%88" class="hash-link" aria-label="一、项目结构概览的直接链接" title="一、项目�结构概览的直接链接" translate="no">​</a></h2>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">Fblog/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── .github/workflows/deploy.yml   # GitHub Pages 自动部署工作流</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── blog/                          # 博客文章（Markdown）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── src/                           # 首页与自定义组件、主题 CSS</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── static/                        # 静态资源（含 CNAME）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── docusaurus.config.js           # 站点配置（url / baseUrl / 导航等）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── sidebars.js</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── package.json</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">├── .gitignore</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">└── DEPLOY.md                      # 本文档</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="二部署前置条件">二、部署前置条件<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%BA%8C%E9%83%A8%E7%BD%B2%E5%89%8D%E7%BD%AE%E6%9D%A1%E4%BB%B6" class="hash-link" aria-label="二、部署前置条件的直接链接" title="二、部署前��置条件的直接链接" translate="no">​</a></h2>
<ul>
<li class="">已安装 Node.js 18+（工作流使用 Node 20）。</li>
<li class="">已拥有 GitHub 仓库 <code>https://github.com/名称/Fblog.git</code>（分支 <code>main</code>）。</li>
<li class="">已配置自定义域名 <code>域名</code>（或准备改用 GitHub 默认域名）。</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="三本地提交最关键的一步">三、本地提交（最关键的一步）<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%B8%89%E6%9C%AC%E5%9C%B0%E6%8F%90%E4%BA%A4%E6%9C%80%E5%85%B3%E9%94%AE%E7%9A%84%E4%B8%80%E6%AD%A5" class="hash-link" aria-label="三、本地提交（最关键的一步）的直接链接" title="三、本地提交（最关键的一步）的直接链接" translate="no">​</a></h2>
<blockquote>
<p>而 Docusaurus 源码（<code>blog/</code>、<code>src/</code>、<code>docusaurus.config.js</code> 等）和部署工作流是<strong>未跟踪</strong>状态。
必须先提交，否则 GitHub 上干净的 checkout 缺少 <code>package.json</code> / <code>docusaurus.config.js</code>，
工作流里的 <code>npm ci</code> / <code>npm run build</code> 会直接失败。</p>
</blockquote>
<p>在 <code>Fblog/</code> 根目录执行：</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain"># 暂存：旧文件删除 + 新 Docusaurus 源码 / 配置</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># （.gitignore 已自动排除 node_modules、build、.docusaurus、.workbuddy）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git add -A</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># 提交</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git commit -m "重构为 Docusaurus 并接入 GitHub Pages 自动部署"</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"># 推送到 main，触发自动部署</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">git push origin main</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="四github-仓库设置">四、GitHub 仓库设置<a href="https://blog.guyzeus.top/blog/Github-doc#%E5%9B%9Bgithub-%E4%BB%93%E5%BA%93%E8%AE%BE%E7%BD%AE" class="hash-link" aria-label="四、GitHub 仓库设置的直接链接" title="四、GitHub 仓库设置的直接链接" translate="no">​</a></h2>
<ol>
<li class="">打开仓库 <strong>Settings → Pages</strong>。</li>
<li class=""><strong>Source（构建与部署来源）</strong> 选择 <strong>GitHub Actions</strong>（不要选 “Deploy from a branch”）。</li>
<li class=""><strong>Custom domain</strong> 填写 <code>域名</code>：<!-- -->
<ul>
<li class="">项目已在 <code>static/CNAME</code> 写入该域名，GitHub 会自动识别并在每次部署后保留。</li>
<li class="">首次填写后点击 <strong>Save</strong>，GitHub 会发起域名所有权验证（需在 DNS 处加一条记录，见下一步）。</li>
</ul>
</li>
</ol>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="五域名-dns-配置">五、域名 DNS 配置<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%BA%94%E5%9F%9F%E5%90%8D-dns-%E9%85%8D%E7%BD%AE" class="hash-link" aria-label="五、域名 DNS 配置的直接链接" title="五、域名 DNS 配置的直接链接" translate="no">​</a></h2>
<p>在域名服务商（如 Cloudflare、阿里云、腾讯云）处，为 <code>域名</code> 添加以下任一方式：</p>
<p><strong>方式 A：A 记录（推荐）</strong></p>
<pre tabindex="0" class="codeBlockStandalone_MEMb thin-scrollbar codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"></code></pre>
<p><strong>方式 B：CNAME 记录</strong></p>
<pre tabindex="0" class="codeBlockStandalone_MEMb thin-scrollbar codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"></code></pre>
<blockquote>
<p>若不使用自定义域名，可跳过本节，改用 GitHub 默认地址（见第七节）。</p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="六等待部署完成">六、等待部署完成<a href="https://blog.guyzeus.top/blog/Github-doc#%E5%85%AD%E7%AD%89%E5%BE%85%E9%83%A8%E7%BD%B2%E5%AE%8C%E6%88%90" class="hash-link" aria-label="六、等待部署完成的直接链接" title="六、等待部署完成的直接链接" translate="no">​</a></h2>
<ol>
<li class="">推送后进入仓库 <strong>Actions</strong> 标签页，查看 <code>Deploy to GitHub Pages</code> 工作流。</li>
<li class="">包含两个 Job：<code>build</code>（构建 Docusaurus）→ <code>deploy</code>（发布到 Pages），均变绿即通过。</li>
<li class="">浏览器访问 <strong>域名</strong> 查看站点。</li>
</ol>
<p>以后只要向 <code>main</code> 分支推送改动（新文章、配置调整等），就会<strong>自动重新构建并部署</strong>，无需手动操作。</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="七自定义域名-vs-github-默认域名">七、自定义域名 vs GitHub 默认域名<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%B8%83%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D-vs-github-%E9%BB%98%E8%AE%A4%E5%9F%9F%E5%90%8D" class="hash-link" aria-label="七、自定义域名 vs GitHub 默认域名的直接链接" title="七、自定义域名 vs GitHub 默认域名的直接链接" translate="no">​</a></h2>
<p>当前 <code>docusaurus.config.js</code> 已按自定义域名配置：</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token literal-property property" style="color:#36acaa">url</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://域名'</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token literal-property property" style="color:#36acaa">baseUrl</span><span class="token operator" style="color:#393A34">:</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'/'</span><span class="token punctuation" style="color:#393A34">,</span><br></div></code></pre></div></div>
<table><thead><tr><th>场景</th><th>url</th><th>baseUrl</th><th>附加操作</th></tr></thead><tbody><tr><td>自定义域名（当前）</td><td><code>域名</code></td><td><code>/</code></td><td>保留 <code>static/CNAME</code></td></tr><tr><td>GitHub 默认域名（项目仓库）</td><td><code>https://名称.github.io</code></td><td><code>/Fblog/</code></td><td>删除 <code>static/CNAME</code></td></tr></tbody></table>
<blockquote>
<p>注意：<code>baseUrl</code> 必须与访问路径一致。用项目仓库路径时若仍写 <code>/</code>，站内资源（CSS/JS/图片）会出现 404。</p>
</blockquote>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="八本地开发与预览">八、本地开发与预览<a href="https://blog.guyzeus.top/blog/Github-doc#%E5%85%AB%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91%E4%B8%8E%E9%A2%84%E8%A7%88" class="hash-link" aria-label="八、本地开发与预览的直接链接" title="八、本地开发与预览的直接链接" translate="no">​</a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token plain">npm install        # 安装依赖（首次或依赖变更后）</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm start          # 本地开发预览，带热更新，默认 http://localhost:3000</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run build      # 生成静态文件到 build/</span><br></div><div class="token-line" style="color:#393A34"><span class="token plain">npm run serve      # 预览生产构建（build/）</span><br></div></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="九常见问题">九、常见问题<a href="https://blog.guyzeus.top/blog/Github-doc#%E4%B9%9D%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98" class="hash-link" aria-label="九、常见问题的直接链接" title="九、常见问题的直接链接" translate="no">​</a></h2>
<ul>
<li class="">
<p><strong>工作流失败：<code>npm ci</code> 报错 / 找不到 package.json</strong>
说明仓库没有提交 Docusaurus 源码（仍在跟踪旧静态站）。回到第三节重新 <code>git add -A</code> + commit + push。</p>
</li>
<li class="">
<p><strong>部署后样式/图片 404</strong>
通常是 <code>baseUrl</code> 与访问路径不匹配，检查第七节配置。</p>
</li>
<li class="">
<p><strong>自定义域名访问提示“不安全 / DNS 未生效”</strong>
DNS 记录未生效（通常几分钟到几小时），或 GitHub Pages 自定义域名验证未通过，确认第五节记录正确且已保存 Custom domain。</p>
</li>
<li class="">
<p><strong>想彻底不用 GitHub Actions，改用分支部署</strong>
不推荐。Docusaurus 官方已弃用 <code>npm run deploy</code>（基于 <code>gh-pages</code> 分支）方式，GitHub Actions 更稳定且无需本地 token。</p>
</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="十常用命令速查">十、常用命令速查<a href="https://blog.guyzeus.top/blog/Github-doc#%E5%8D%81%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4%E9%80%9F%E6%9F%A5" class="hash-link" aria-label="十、常用命令速查的直接链接" title="十、常用命令速查的直接链接" translate="no">​</a></h2>
<table><thead><tr><th>命令</th><th>作用</th></tr></thead><tbody><tr><td><code>git add -A &amp;&amp; git commit -m "..." &amp;&amp; git push origin main</code></td><td>提交并触发部署</td></tr><tr><td><code>npm start</code></td><td>本地开发预览</td></tr><tr><td><code>npm run build</code></td><td>生产构建</td></tr><tr><td><code>npm run serve</code></td><td>预览构建产物</td></tr></tbody></table>
<hr>
<p><em>最后更新：2026-07-31 · 适用于 Docusaurus 3.10.2 + GitHub Pages（GitHub Actions 部署）</em></p>]]></content:encoded>
            <author>guyzeus@mail.timxy.com (GuyZeus)</author>
            <category>GitHub Pages</category>
            <category>Docusaurus</category>
            <category>Github</category>
            <category>blog</category>
        </item>
        <item>
            <title><![CDATA[自制A-Nav导航站，GitHub Pages免费部署上线]]></title>
            <link>https://blog.guyzeus.top/blog/a-nav</link>
            <guid>https://blog.guyzeus.top/blog/a-nav</guid>
            <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[分享我独立开发的个人导航项目 A-Nav，全程纯 HTML 手写，无任何前端框架，依托 GitHub Pages 免费托管。]]></description>
            <content:encoded><![CDATA[<p>分享我独立开发的个人导航项目 A-Nav，全程纯 HTML 手写，无任何前端框架，依托 GitHub Pages 免费托管，现在已经可以在线访问使用。</p>
<!-- -->
<p>项目开源地址：<code>https://github.com/GuyZeus/A-Nav</code>，仓库仅使用 HTML 编写，轻量化无依赖，打开即用，适合当作浏览器专属首页。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为��什么要自己写导航站">为什么要自己写导航站？<a href="https://blog.guyzeus.top/blog/a-nav#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%87%AA%E5%B7%B1%E5%86%99%E5%AF%BC%E8%88%AA%E7%AB%99" class="hash-link" aria-label="为什么要自己写导航站？的直接链接" title="为什么要自己写导航站？的直接链接" translate="no">​</a></h2>
<p>日常上网一直使用商用导航主页，但 hao123、360导航这类平台广告弹窗繁多、页面臃肿，充斥大量无关推荐链接，每次打开都要被冗余内容干扰。</p>
<p>市面上开源导航模板大多基于 Vue、React 等框架，配置繁琐，对于只想简单收藏网址的需求来说过于沉重。于是决定从零手写一套极简导航页面，只保留自己常用的网站链接，干净无广告，完全自定义。</p>
<p>整个 A-Nav 仅使用原生 HTML 开发，没有引入 CSS、JS 外部依赖，仓库结构极简，仅包含首页 index.html 与图标资源文件夹，代码量少、加载速度极快，手机电脑都能自适应展示。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="a-nav-项目设计思路与功能">A-Nav 项目设计思路与功能<a href="https://blog.guyzeus.top/blog/a-nav#a-nav-%E9%A1%B9%E7%9B%AE%E8%AE%BE%E8%AE%A1%E6%80%9D%E8%B7%AF%E4%B8%8E%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="A-Nav 项目设计思路与功能的直接链接" title="A-Nav 项目设计思路与功能的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-极简干净的页面结构">1. 极简干净的页面结构<a href="https://blog.guyzeus.top/blog/a-nav#1-%E6%9E%81%E7%AE%80%E5%B9%B2%E5%87%80%E7%9A%84%E9%A1%B5%E9%9D%A2%E7%BB%93%E6%9E%84" class="hash-link" aria-label="1. 极简干净的页面结构的直接链接" title="1. 极简干净的页面结构的直接链接" translate="no">​</a></h3>
<p>摒弃繁杂分区、资讯模块，页面只保留分类网址卡片布局，按照开发工具、学习网站、社区、工具站点做分组，鼠标点击即可跳转对应链接，视觉清爽无多余元素。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-轻量化零依赖">2. 轻量化零依赖<a href="https://blog.guyzeus.top/blog/a-nav#2-%E8%BD%BB%E9%87%8F%E5%8C%96%E9%9B%B6%E4%BE%9D%E8%B5%96" class="hash-link" aria-label="2. 轻量化零依赖的直接链接" title="2. 轻量化零依赖的直接链接" translate="no">​</a></h3>
<p>不引入任何第三方库、CSS框架、JS脚本，单页面完成全部功能，仓库体积极小，GitHub Pages 部署秒加载，低带宽环境也能流畅打开。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-完全私有自定义">3. 完全私有自定义<a href="https://blog.guyzeus.top/blog/a-nav#3-%E5%AE%8C%E5%85%A8%E7%A7%81%E6%9C%89%E8%87%AA%E5%AE%9A%E4%B9%89" class="hash-link" aria-label="3. 完全私有自定义的直接链接" title="3. 完全私有自定义的直接链接" translate="no">​</a></h3>
<p>所有网址、分类名称、图标都可以直接修改 index.html 内代码，按需增删链接，只留存自己高频访问的站点，打造专属个人上网主页。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-开源可复用">4. 开源可复用<a href="https://blog.guyzeus.top/blog/a-nav#4-%E5%BC%80%E6%BA%90%E5%8F%AF%E5%A4%8D%E7%94%A8" class="hash-link" aria-label="4. 开源可复用的直接链接" title="4. 开源可复用的直接链接" translate="no">​</a></h3>
<p>项目完全开源，无版权限制，任何人 Fork 仓库后修改链接就能搭建属于自己的导航页，适合前端新手学习静态页面基础布局写法。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="github-pages-部署流程项目仓库型站点">GitHub Pages 部署流程（项目仓库型站点）<a href="https://blog.guyzeus.top/blog/a-nav#github-pages-%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B%E9%A1%B9%E7%9B%AE%E4%BB%93%E5%BA%93%E5%9E%8B%E7%AB%99%E7%82%B9" class="hash-link" aria-label="GitHub Pages 部署流程（项目仓库型站点）的直接链接" title="GitHub Pages 部署流程（项目仓库型站点）的直接链接" translate="no">​</a></h2>
<p>和个人主页仓库 <code>用户名.github.io</code> 部署逻辑略有区别，项目类仓库部署步骤如下：</p>
<ol>
<li class=""><strong>创建普通公开仓库</strong>：仓库名自定义为 A-Nav，无需遵循特殊命名规则，上传导航站全部源码文件，确保根目录存在 index.html。</li>
<li class=""><strong>进入仓库配置 Pages</strong>：打开仓库 Settings → Pages，部署分支选择 main，部署目录选择根目录 root。</li>
<li class=""><strong>等待自动构建发布</strong>：保存配置后 GitHub 自动构建，1分钟左右部署完成。</li>
<li class=""><strong>访问项目在线地址</strong>：访问地址格式为 <code>用户名.github.io/仓库名</code>，我的导航站地址为 <code>guyzeus.github.io/A-Nav</code>。</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="开发与部署踩坑记录">开发与部署踩坑记录<a href="https://blog.guyzeus.top/blog/a-nav#%E5%BC%80%E5%8F%91%E4%B8%8E%E9%83%A8%E7%BD%B2%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95" class="hash-link" aria-label="开发与部署踩坑记录的直接链接" title="开发与部署踩坑记录的直接链接" translate="no">​</a></h2>
<ul>
<li class=""><strong>项目站点路径问题</strong>：项目仓库部署后页面资源会带上二级路径，图标、图片本地正常线上失效，统一使用相对路径 ./ 引用静态资源即可修复。</li>
<li class=""><strong>仓库权限限制</strong>：私有仓库无法开启免费 Pages 服务，必须将仓库设置为 Public 公开才能正常部署。</li>
<li class=""><strong>缓存更新延迟</strong>：修改代码推送后页面不更新，强制 Ctrl+F5 清除浏览器缓存，或等待5分钟左右 GitHub 缓存刷新。</li>
<li class=""><strong>移动端布局错乱</strong>：初期未添加 viewport 适配，手机端页面缩放异常，头部补充移动端视口 meta 标签后完美适配。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="后续优化计划">后续优化计划<a href="https://blog.guyzeus.top/blog/a-nav#%E5%90%8E%E7%BB%AD%E4%BC%98%E5%8C%96%E8%AE%A1%E5%88%92" class="hash-link" aria-label="后续优化计划的直接链接" title="后续优化计划的直接链接" translate="no">​</a></h2>
<p>目前基础导航功能已经稳定可用，后续会持续迭代升级：</p>
<ul>
<li class="">增加明暗主题切换功能，适配白天/夜间浏览；</li>
<li class="">加入简易搜索框，快速检索站内收藏网址；</li>
<li class="">优化响应式布局，完善平板、手机端卡片排版；</li>
<li class="">新增本地存储功能，支持自定义网址本地保存，不用修改源码；</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="写在最后">写在最后<a href="https://blog.guyzeus.top/blog/a-nav#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E" class="hash-link" aria-label="写在最后的直接链接" title="写在最后的直接链接" translate="no">​</a></h2>
<p>这次手写 A-Nav 导航站，不仅解决了日常上网的实用需求，也巩固了原生 HTML 页面布局基础。依托 GitHub Pages 免费静态托管，不用服务器、不用域名成本，几分钟就能上线可用网站。</p>
<p>如果你厌烦了广告满天飞的商用导航，或是想练习基础前端页面开发，都可以 Fork 我的 A-Nav 仓库，修改成属于自己的极简导航主页，低成本打造专属上网工具✨。</p>]]></content:encoded>
            <author>guyzeus@mail.timxy.com (GuyZeus)</author>
            <category>HTML</category>
            <category>导航站</category>
            <category>GitHub Pages</category>
        </item>
        <item>
            <title><![CDATA[Cloud-Mail：基于Cloudflare Workers搭建私有域名邮箱]]></title>
            <link>https://blog.guyzeus.top/blog/cloud-mail</link>
            <guid>https://blog.guyzeus.top/blog/cloud-mail</guid>
            <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[最近完成了 Cloud-Mail 私有邮箱项目的部署调试，依托 Cloudflare 全生态实现零服务器成本搭建专属域名邮箱。]]></description>
            <content:encoded><![CDATA[<p>最近完成了 Cloud-Mail 私有邮箱项目的部署调试，依托 Cloudflare 全生态实现零服务器成本搭建专属域名邮箱，项目开源仓库地址：<code>https://github.com/GuyZeus/cloud-mail</code>。</p>
<!-- -->
<p>区别于第三方企业邮箱、免费邮箱，这套系统完全自主可控，只用一个域名即可批量生成无数个子邮箱，个人注册、验证码接收、日常收发邮件全部自给自足。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么要自建-cloud-mail-邮箱系统">为什么要自建 Cloud-Mail 邮箱系统？<a href="https://blog.guyzeus.top/blog/cloud-mail#%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%87%AA%E5%BB%BA-cloud-mail-%E9%82%AE%E7%AE%B1%E7%B3%BB%E7%BB%9F" class="hash-link" aria-label="为什么要自建 Cloud-Mail 邮箱系统？的直接链接" title="为什么要自建 Cloud-Mail 邮箱系统？的直接链接" translate="no">​</a></h2>
<p>日常使用公共邮箱存在不少痛点：Gmail、QQ邮箱容易收到垃圾邮件，临时注册网站不想暴露个人主邮箱；付费企业邮箱年费成本高，批量创建别名邮箱限制多。</p>
<p>市面上开源邮箱方案大多需要 VPS、邮件服务器、反解析配置，运维复杂。而 Cloud-Mail 基于 Cloudflare Workers 开发，全程无服务器，依靠 Cloudflare 免费额度就能满足个人长期使用需求，完美解决低成本自建邮箱的需求。</p>
<p>技术栈分工清晰：Vue3 + Element Plus 做前端页面展示，Hono 作为 Workers 后端框架，搭配 D1 数据库、KV缓存、R2对象存储，整套代码结构规范，二次开发门槛低。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="cloud-mail-核心功能一览">Cloud-Mail 核心功能一览<a href="https://blog.guyzeus.top/blog/cloud-mail#cloud-mail-%E6%A0%B8%E5%BF%83%E5%8A%9F%E8%83%BD%E4%B8%80%E8%A7%88" class="hash-link" aria-label="Cloud-Mail 核心功能一览的直接链接" title="Cloud-Mail 核心功能一览的直接链接" translate="no">​</a></h2>
<ul>
<li class=""><strong>多域名批量邮箱</strong>：绑定自有域名，无限生成 xxx@你的域名 临时邮箱、长期邮箱；</li>
<li class=""><strong>完整收发邮件</strong>：集成 Resend 实现邮件发送，支持附件、图片、群发；收件自动存入系统，支持草稿、星标、归档分类；</li>
<li class=""><strong>附件存储</strong>：使用 Cloudflare R2 存储所有邮件附件，无流量扣费；</li>
<li class=""><strong>消息推送</strong>：新邮件自动转发至 Telegram 机器人或备用邮箱，实时提醒；</li>
<li class=""><strong>管理员后台</strong>：RBAC权限管控，管理所有用户、限制收发额度、查看系统数据；</li>
<li class=""><strong>开放API接口</strong>：支持批量创建账号、接口查询邮件，可对接自己的其他项目；</li>
<li class=""><strong>安全防护</strong>：内置 Turnstile 人机验证，防止恶意批量注册垃圾账号；</li>
<li class=""><strong>个性化自定义</strong>：自定义登录页背景、网站标题、界面透明度；配套ECharts数据看板，查看收发邮件统计数据。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="项目整体架构">项目整体架构<a href="https://blog.guyzeus.top/blog/cloud-mail#%E9%A1%B9%E7%9B%AE%E6%95%B4%E4%BD%93%E6%9E%B6%E6%9E%84" class="hash-link" aria-label="项目整体架构的直接链接" title="项目整体架构的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-mail-worker后端服务">1. mail-worker（后端服务）<a href="https://blog.guyzeus.top/blog/cloud-mail#1-mail-worker%E5%90%8E%E7%AB%AF%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="1. mail-worker（后端服务）的直接链接" title="1. mail-worker（后端服务）的直接链接" translate="no">​</a></h3>
<p>部署在 Cloudflare Workers，负责邮件接收、接口处理、数据库读写、权限校验；依赖 D1 存储用户与邮件数据，KV做登录缓存，R2存放附件。配置文件 wrangler.toml 统一管理所有云资源绑定信息。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-mail-vue前端网页">2. mail-vue（前端网页）<a href="https://blog.guyzeus.top/blog/cloud-mail#2-mail-vue%E5%89%8D%E7%AB%AF%E7%BD%91%E9%A1%B5" class="hash-link" aria-label="2. mail-vue（前端网页）的直接链接" title="2. mail-vue（前端网页）的直接链接" translate="no">​</a></h3>
<p>Vue3 响应式管理后台，电脑、手机自适应布局，登录后可查看收件箱、发邮件、修改个人配置、查看数据统计，打包后静态资源可通过 GitHub Pages / Cloudflare Pages 托管。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="完整部署流程">完整部署流程<a href="https://blog.guyzeus.top/blog/cloud-mail#%E5%AE%8C%E6%95%B4%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B" class="hash-link" aria-label="完整部署流程的直接链接" title="完整部署流程的直接链接" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="方案cloudflare-原生部署推荐完整邮件功能">方案：Cloudflare 原生部署（推荐，完整邮件功能）<a href="https://blog.guyzeus.top/blog/cloud-mail#%E6%96%B9%E6%A1%88cloudflare-%E5%8E%9F%E7%94%9F%E9%83%A8%E7%BD%B2%E6%8E%A8%E8%8D%90%E5%AE%8C%E6%95%B4%E9%82%AE%E4%BB%B6%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="方案：Cloudflare 原生部署（推荐，完整邮件功能）的直接链接" title="方案：Cloudflare 原生部署（推荐，完整邮件功能）的直接链接" translate="no">​</a></h3>
<ol>
<li class="">Fork 本仓库到自己 GitHub 账号；</li>
<li class="">Cloudflare 后台创建 D1 数据库、KV命名空间、R2存储桶，记录所有ID；</li>
<li class="">注册 Resend 并验证域名，获取发送邮件 API Key；</li>
<li class="">仓库 Settings → Secrets，填入 Cloudflare 账号ID、API令牌、域名列表、JWT密钥等参数；</li>
<li class="">开启仓库 Actions，自动构建部署 Workers 后端；</li>
<li class="">前端 Vue 打包上传至 Cloudflare Pages，绑定域名访问邮箱后台。</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="部署踩坑记录">部署踩坑记录<a href="https://blog.guyzeus.top/blog/cloud-mail#%E9%83%A8%E7%BD%B2%E8%B8%A9%E5%9D%91%E8%AE%B0%E5%BD%95" class="hash-link" aria-label="部署踩坑记录的直接链接" title="部署踩坑记录的直接链接" translate="no">​</a></h2>
<ul>
<li class=""><strong>云资源绑定丢失</strong>：项目代码更新重部署后，D1/KV/R2绑定会失效，需要重新在 Workers 设置中绑定资源，执行初始化接口同步数据库；</li>
<li class=""><strong>域名邮件解析失败</strong>：域名必须在 Cloudflare 托管，配置对应 Email DNS 记录，否则无法接收外部邮件；</li>
<li class=""><strong>静态资源路径异常</strong>：GitHub Pages 二级子仓库部署前端时，打包需要配置二级基础路径，否则页面样式、接口请求全部404；</li>
<li class=""><strong>JWT密钥泄露风险</strong>：密钥不能硬编码进代码，必须存放于仓库Secret，否则他人可伪造登录管理员账号；</li>
<li class=""><strong>免费额度限制</strong>：Cloudflare 免费版 Workers、D1、R2 有每日限额，大量收发邮件会触发限流，个人轻度使用无压力。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="后续迭代规划">后续迭代规划<a href="https://blog.guyzeus.top/blog/cloud-mail#%E5%90%8E%E7%BB%AD%E8%BF%AD%E4%BB%A3%E8%A7%84%E5%88%92" class="hash-link" aria-label="后续迭代规划的直接链接" title="后续迭代规划的直接链接" translate="no">​</a></h2>
<ul>
<li class="">完善多语言国际化，优化中文界面细节；</li>
<li class="">增加邮件过滤规则，自动拦截垃圾邮件；</li>
<li class="">优化移动端交互，适配小屏手机操作；</li>
<li class="">简化一键部署脚本，降低新手配置难度；</li>
<li class="">增加邮件导出、批量删除功能。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="写在最后">写在最后<a href="https://blog.guyzeus.top/blog/cloud-mail#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E" class="hash-link" aria-label="写在最后的直接链接" title="写在最后的直接链接" translate="no">​</a></h2>
<p>Cloud-Mail 是继手写博客、A-Nav导航站之后，又一个完全自主部署上线的云原生项目。全程依托免费云平台，不用服务器、不用长期付费，就能拥有完全私有化的邮箱服务，不管是注册各类网站收验证码，还是日常工作邮件都非常实用。</p>
<p>如果你厌烦了公共邮箱的广告与隐私泄露问题，又不想花钱购买企业邮箱，不妨 Fork 这份 Cloud-Mail 项目，搭配自己的域名搭建专属私有邮件系统，低成本打造完全属于自己的云服务工具✨。</p>]]></content:encoded>
            <author>guyzeus@mail.timxy.com (GuyZeus)</author>
            <category>云邮件</category>
            <category>邮箱</category>
            <category>Cloudflare</category>
            <category>私有邮箱</category>
        </item>
        <item>
            <title><![CDATA[Github 部署博客上线]]></title>
            <link>https://blog.guyzeus.top/blog/github-pages-blog-online</link>
            <guid>https://blog.guyzeus.top/blog/github-pages-blog-online</guid>
            <pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[全程靠 HTML + CSS + JavaScript 手写打磨，依托 GitHub Pages 免费托管，从零实现属于自己的专属个人博客。]]></description>
            <content:encoded><![CDATA[<p>折腾了许久的个人博客，今天终于正式部署上线啦！🎉</p>
<!-- -->
<p>没有使用成熟的博客框架，也没有复杂的搭建流程，全程靠 <strong>HTML + CSS + JavaScript</strong> 手写打磨，依托 GitHub Pages 免费托管，从零实现了属于自己的专属个人博客。从页面布局、样式美化到交互调试、线上部署，一步步踩坑、优化、完善，看到域名成功打开页面的那一刻，所有的熬夜折腾都变得格外有意义。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="为什么选择手写静态博客">为什么选择手写静态博客？<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%89%E6%8B%A9%E6%89%8B%E5%86%99%E9%9D%99%E6%80%81%E5%8D%9A%E5%AE%A2" class="hash-link" aria-label="为什么选择手写静态博客？的直接链接" title="为什么选择手写静态博客？的直接链接" translate="no">​</a></h2>
<p>市面上的博客搭建方案五花八门，Hexo、VuePress、Jekyll 等框架开箱即用，一键部署十分便捷，但我始终觉得少了一点专属感。</p>
<p>作为前端爱好者，一直想拥有一个完全由自己掌控的博客站点。不用受制于框架的模板限制，不用适配繁杂的配置项，从每一行代码、每一个页面样式、每一个交互效果都由自己定义。</p>
<p>这次全程手写 <strong>HTML+CSS+JavaScript</strong>，不仅是搭建一个博客，更是一次完整的前端实战练习。从页面自适应布局、样式配色搭配，到简单的动态交互、页面加载优化，全程自主调试，既能沉淀技术，又能打造独一无二的个人展示空间，用来记录学习笔记、技术心得、日常感悟再合适不过。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="我的博客部署方案github-pages">我的博客部署方案：GitHub Pages<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2%E9%83%A8%E7%BD%B2%E6%96%B9%E6%A1%88github-pages" class="hash-link" aria-label="我的博客部署方案：GitHub Pages的直接链接" title="我的博客部署方案：GitHub Pages的直接链接" translate="no">​</a></h2>
<p>本次博客最终选择 <strong>GitHub Pages</strong> 作为托管平台，最核心的优势就是 <strong>免费、稳定、零服务器成本、部署便捷</strong>，非常适合个人静态博客、作品集网站展示。</p>
<p>不同于需要购买服务器、配置环境的传统部署方式，GitHub Pages 专门用于托管静态网页资源，完美适配纯前端手写的静态站点，无需复杂的后端配置，只要有静态页面文件，即可快速上线。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="极简部署流程纯静态页面通用">极简部署流程（纯静态页面通用）<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#%E6%9E%81%E7%AE%80%E9%83%A8%E7%BD%B2%E6%B5%81%E7%A8%8B%E7%BA%AF%E9%9D%99%E6%80%81%E9%A1%B5%E9%9D%A2%E9%80%9A%E7%94%A8" class="hash-link" aria-label="极简部署流程（纯静态页面通用）的直接链接" title="极简部署流程（纯静态页面通用）的直接链接" translate="no">​</a></h2>
<p>记录一下本次完整的部署步骤，方便后续复盘，也给想搭建个人博客的小伙伴做个参考：</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="1-准备源码文件">1. 准备源码文件<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#1-%E5%87%86%E5%A4%87%E6%BA%90%E7%A0%81%E6%96%87%E4%BB%B6" class="hash-link" aria-label="1. 准备源码文件的直接链接" title="1. 准备源码文件的直接链接" translate="no">​</a></h3>
<p>整理好本地所有博客文件，包括 HTML 页面、CSS 样式文件、JS 交互文件、图片资源等，确保本地打开页面可以正常展示、交互无异常，页面布局、样式、功能全部调试完毕。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="2-创建专属仓库">2. 创建专属仓库<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#2-%E5%88%9B%E5%BB%BA%E4%B8%93%E5%B1%9E%E4%BB%93%E5%BA%93" class="hash-link" aria-label="2. 创建专属仓库的直接链接" title="2. 创建专属仓库的直接链接" translate="no">​</a></h3>
<p>登录 GitHub 账号，新建公开仓库，仓库名严格按照规则填写：<code>用户名.github.io</code>（这是 GitHub Pages 专属域名格式，必须精准填写，否则无法正常访问），勾选初始化 README 文件，完成仓库创建。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="3-上传博客源码">3. 上传博客源码<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#3-%E4%B8%8A%E4%BC%A0%E5%8D%9A%E5%AE%A2%E6%BA%90%E7%A0%81" class="hash-link" aria-label="3. 上传博客源码的直接链接" title="3. 上传博客源码的直接链接" translate="no">​</a></h3>
<p>将本地整理好的所有博客静态文件，直接上传到该仓库根目录，也可以通过 Git 命令提交推送代码，确保首页文件 <code>index.html</code> 在仓库根路径下，保证站点可以正常识别入口文件。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="4-开启-github-pages-服务">4. 开启 GitHub Pages 服务<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#4-%E5%BC%80%E5%90%AF-github-pages-%E6%9C%8D%E5%8A%A1" class="hash-link" aria-label="4. 开启 GitHub Pages 服务的直接链接" title="4. 开启 GitHub Pages 服务的直接链接" translate="no">​</a></h3>
<p>进入仓库 <strong>Settings</strong> 页面，找到 <strong>Pages</strong> 配置项，在构建部署选项中，选择部署来源为 <code>main</code> 分支、根目录（root），保存配置。</p>
<p>保存后 GitHub 会自动执行构建部署，首次部署通常需要几十秒到两分钟左右，等待系统完成编译发布即可。</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="5-访问上线博客">5. 访问上线博客<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#5-%E8%AE%BF%E9%97%AE%E4%B8%8A%E7%BA%BF%E5%8D%9A%E5%AE%A2" class="hash-link" aria-label="5. 访问上线博客的直接链接" title="5. 访问上线博客的直接链接" translate="no">​</a></h3>
<p>部署完成后，通过专属域名 <code>用户名.github.io</code> 即可成功访问个人博客，一个完全属于自己的线上站点就正式诞生了。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="部署过程踩坑小结">部署过程踩坑小结<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#%E9%83%A8%E7%BD%B2%E8%BF%87%E7%A8%8B%E8%B8%A9%E5%9D%91%E5%B0%8F%E7%BB%93" class="hash-link" aria-label="部署过程踩坑小结的直接链接" title="部署过程踩坑小结的直接链接" translate="no">​</a></h2>
<p>看似简单的部署流程，实际操作中也遇到了几个小问题，在这里记录避雷：</p>
<ul>
<li class=""><strong>仓库名格式错误</strong>：初期随意命名仓库，导致页面无法访问，必须严格遵循<code>用户名.github.io</code> 格式，且仓库必须设置为公开权限。</li>
<li class=""><strong>资源路径报错</strong>：本地正常、线上样式错乱，排查后发现是相对路径书写不规范，静态资源路径错误导致 CSS、JS、图片加载失败，统一修正相对路径后恢复正常。</li>
<li class=""><strong>部署延迟问题</strong>：代码推送后页面没有及时更新，GitHub Pages 部署存在短暂缓存延迟，耐心等待几分钟或强制刷新页面、清除缓存即可解决。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="写在最后">写在最后<a href="https://blog.guyzeus.top/blog/github-pages-blog-online#%E5%86%99%E5%9C%A8%E6%9C%80%E5%90%8E" class="hash-link" aria-label="写在最后的直接链接" title="写在最后的直接链接" translate="no">​</a></h2>
<p>从零基础手写页面样式、调试交互 bug，到一步步配置、部署、上线，整个过程虽然繁琐，但成就感满满。</p>
<p>相比于套用模板的博客，自己手写搭建的站点，每一处细节都是心血，也更有温度。往后这里就是我的专属技术小天地，会持续更新技术笔记、学习心得、踩坑记录，慢慢打磨页面样式、优化交互体验，不断丰富博客内容。</p>
<p>如果你也想拥有免费的个人博客，不妨试试 <strong>HTML+CSS+JS + GitHub Pages</strong> 的组合，低成本、高收获，亲手搭建属于自己的线上自留地✨。</p>]]></content:encoded>
            <author>guyzeus@mail.timxy.com (GuyZeus)</author>
            <category>博客</category>
            <category>HTML</category>
            <category>CSS</category>
            <category>JavaScript</category>
        </item>
    </channel>
</rss>