<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://zhihaisblog.top/</id>
  <title type="text">栀海的博客</title>
  <subtitle type="text">记录技术、折腾与随想</subtitle>
  <updated>2026-10-09T00:00:00.000Z</updated>
  <author><name>栀海</name></author>
  <link rel="alternate" href="https://zhihaisblog.top/"/>
  <link rel="self" href="https://zhihaisblog.top/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.8</generator>
    <entry>
      <id>https://zhihaisblog.top/posts/hello-world/</id>
      <title type="text">博客开张：用 Astro + Firefly + Cloudflare 上线</title>
      <published>2026-10-09T00:00:00.000Z</published>
      <updated>2026-10-09T00:00:00.000Z</updated>
      <author><name>栀海</name></author>
      <link rel="alternate" href="https://zhihaisblog.top/posts/hello-world/"/>
      <summary type="text">这个博客的技术选型和第一篇介绍——Astro 静态生成、Firefly 主题、Cloudflare Workers 托管，一年成本只有域名钱。</summary>
      <content type="html"><![CDATA[<p>欢迎来到栀海的博客。</p>
<p>这个站点用 <a href="https://astro.build" target="_blank">Astro</a> 做静态生成，托管在 Cloudflare Workers 的静态资源服务上。选它的原因很简单：</p>
<ul>
<li><strong>零成本</strong>：免费额度对一个个人博客来说绰绰有余（每天 10 万次请求，静态资源每天不限请求数）。</li>
<li><strong>零运维</strong>：不需要服务器、不需要装 Nginx、证书自动签发和续期。</li>
<li><strong>快</strong>：静态文件走 Cloudflare 全球边缘节点，国内访问一般也能接受。</li>
<li><strong>写作舒服</strong>：文章就是 Markdown 文件，写完 <code>git push</code> 或者一条命令就上线。</li>
</ul>
<section><h2>怎么发一篇新文章<a href="#怎么发一篇新文章"><span>#</span></a></h2><p>在 <code>src/content/blog/</code> 里新建一个 <code>.md</code> 文件，开头写上元信息：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>---</span></div></div><div><div><div>2</div></div><div><span>title</span><span>: </span><span>文章标题</span></div></div><div><div><div>3</div></div><div><span>description</span><span>: </span><span>一句话摘要，会显示在列表和搜索结果里</span></div></div><div><div><div>4</div></div><div><span>pubDate</span><span>: </span><span>2026-10-09</span></div></div><div><div><div>5</div></div><div><span>tags</span><span>: [</span><span>'随笔'</span><span>]</span></div></div><div><div><div>6</div></div><div><span>draft</span><span>: </span><span>false</span></div></div><div><div><div>7</div></div><div><span>---</span></div></div><div><div><div>8</div></div><div>
</div></div><div><div><div>9</div></div><div><span>正文用 Markdown 写就行。</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>然后本地预览：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>dev</span><span>      </span><span># http://localhost:4321</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>确认没问题后发布：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>deploy</span><span>   </span><span># = astro build + wrangler deploy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>就这两步。</p></section>
<section><h2>接下来想写什么<a href="#接下来想写什么"><span>#</span></a></h2><ul>
<li>一些折腾记录（软路由、NAS、各种自建服务）</li>
<li>读书笔记</li>
<li>一些关于效率工具的想法</li>
</ul><p>如果这个博客能坚持写下去，那它就已经完成使命了。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://zhihaisblog.top/posts/deploy-to-cloudflare/</id>
      <title type="text">把博客部署到 Cloudflare（含绑定自有域名）</title>
      <published>2026-10-08T00:00:00.000Z</published>
      <updated>2026-10-08T00:00:00.000Z</updated>
      <author><name>栀海</name></author>
      <link rel="alternate" href="https://zhihaisblog.top/posts/deploy-to-cloudflare/"/>
      <summary type="text">从本地构建到绑定自定义域名、开启缓存和 HTTPS 的完整步骤，以及常见报错的处理办法。</summary>
      <content type="html"><![CDATA[<p>这篇文章记录把本博客部署到 Cloudflare 的完整流程。全程免费，只有域名需要花钱（也可以先用免费的 <code>*.workers.dev</code> 子域）。</p>
<section><h2>一、本地构建并首次部署<a href="#一本地构建并首次部署"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>install</span><span>          </span><span># 只做一次</span></div></div><div><div><div>2</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>deploy</span><span>       </span><span># astro build + wrangler deploy</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>第一次运行 <code>wrangler deploy</code> 会打开浏览器要求授权登录 Cloudflare 账号。登录完成后回到终端，会看到：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Uploaded my-blog (x.xx sec)</span></div></div><div><div><div>2</div></div><div><span>Deployed my-blog triggers (x.xx sec)</span></div></div><div><div><div>3</div></div><div><span><span>  </span></span><span>https://my-blog.&lt;你的子域&gt;.workers.dev</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>这个 <code>*.workers.dev</code> 地址就是你的博客，已经自动带 HTTPS。</p><blockquote><p>Worker 名称在 <code>wrangler.jsonc</code> 的 <code>name</code> 字段，它决定了 <code>workers.dev</code> 子域名，必须是全局唯一的。如果提示被占用，改个名字再部署即可。</p></blockquote></section>
<section><h2>二、绑定自己的域名<a href="#二绑定自己的域名"><span>#</span></a></h2><ol>
<li>在 Cloudflare 控制台 <strong>Workers &amp; Pages → 你的 Worker → Settings → Domains &amp; Routes</strong>，点 <strong>Add → Custom Domain</strong>，填 <code>blog.example.com</code>。</li>
<li>如果域名还没接入 Cloudflare：先在控制台 <strong>Add site</strong> 添加域名，然后到域名注册商处把 NS 改成 Cloudflare 给的两个名称服务器。</li>
<li>添加成功后 Cloudflare 会自动签发证书，通常 1～15 分钟生效。</li>
<li>顺手把 <code>astro.config.mjs</code> 里的 <code>site</code> 和 <code>src/consts.ts</code> 里的 <code>url</code> 改成新域名，这样 RSS 和站点地图里的链接才是对的。</li>
</ol></section>
<section><h2>三、值得打开的开关<a href="#三值得打开的开关"><span>#</span></a></h2><ul>
<li><strong>SSL/TLS → Edge Certificates</strong>：Always Use HTTPS、Automatic HTTPS Rewrites、HSTS。</li>
<li><strong>Speed</strong>：Brotli、HTTP/3、Early Hints。</li>
<li><strong>Caching → Cache Rules</strong>：静态资源（<code>/_astro/*</code>）可以设长缓存，<code>Cache-Control</code> 交给 Astro 生成的指纹文件名处理即可。</li>
<li><strong>Analytics</strong>：开启 Web Analytics，免费且不需要在页面里塞第三方脚本。</li>
</ul></section>
<section><h2>四、常见问题<a href="#四常见问题"><span>#</span></a></h2>

<table><thead><tr><th>现象</th><th>原因与处理</th></tr></thead><tbody><tr><td><code>Error 1027</code></td><td>Workers 免费额度当天用尽（10 万次/天，UTC 零点重置）；静态资源站点一般很难碰到</td></tr><tr><td>访问域名 522 / 521</td><td>这是源站类错误，纯静态部署在 CF 上不会出现；出现说明路径配置有问题，检查 <code>wrangler.jsonc</code> 的 <code>assets.directory</code></td></tr><tr><td>子域被占用</td><td>改 <code>wrangler.jsonc</code> 里的 <code>name</code></td></tr><tr><td>页面样式丢失</td><td>检查 <code>npm run build</code> 是否成功、<code>dist/</code> 是否生成</td></tr><tr><td>国内访问慢</td><td>免费版没有中国大陆节点，通常走香港/日本；这是免费方案的固有代价</td></tr></tbody></table></section>
<section><h2>五、之后的更新流程<a href="#五之后的更新流程"><span>#</span></a></h2><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>dev</span><span>        </span><span># 本地写、本地看</span></div></div><div><div><div>2</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>deploy</span><span>     </span><span># 满意了就上线</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>如果想更省事，可以把仓库连到 Cloudflare 的 Git 集成（Workers Builds），以后 <code>git push</code> 就自动构建部署。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://zhihaisblog.top/posts/markdown-cheatsheet/</id>
      <title type="text">这个博客的 Markdown 速查表</title>
      <published>2026-10-01T00:00:00.000Z</published>
      <updated>2026-10-01T00:00:00.000Z</updated>
      <author><name>栀海</name></author>
      <link rel="alternate" href="https://zhihaisblog.top/posts/markdown-cheatsheet/"/>
      <summary type="text">标题、列表、引用、代码块、表格、图片在正文里的写法示例，写文章时直接抄。</summary>
      <content type="html"><![CDATA[<p>正文支持常见的 Markdown 语法，下面是可以直接复制改写的示例。</p>
<section><h2>标题与段落<a href="#标题与段落"><span>#</span></a></h2><p><code>##</code> 是二级标题，<code>###</code> 是三级标题。段落之间空一行即可。</p></section>
<section><h2>列表<a href="#列表"><span>#</span></a></h2><p>无序列表：</p><ul>
<li>第一项</li>
<li>第二项
<ul>
<li>嵌套一项</li>
</ul>
</li>
</ul><p>有序列表：</p><ol>
<li>第一步</li>
<li>第二步</li>
</ol></section>
<section><h2>引用<a href="#引用"><span>#</span></a></h2><blockquote><p>引用块适合放摘录或强调。
可以写多行。</p></blockquote></section>
<section><h2>代码<a href="#代码"><span>#</span></a></h2><p>行内代码用反引号，比如 <code>npm run deploy</code>。</p><p>代码块可以标语言，构建时会自动做语法高亮：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>export</span><span> </span><span>function</span><span> </span><span>greet</span><span><span>(</span><span>name</span><span>) {</span></span></div></div><div><div><div>2</div></div><div><span>  </span><span>return</span><span> </span><span>`Hello, </span><span>${</span><span>name</span><span>}</span><span>!`</span><span>;</span></div></div><div><div><div>3</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>build</span></div></div><div><div><div>2</div></div><div><span>npx</span><span> </span><span>wrangler</span><span> </span><span>deploy</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section>
<section><h2>表格<a href="#表格"><span>#</span></a></h2>

<table><thead><tr><th>功能</th><th>命令</th></tr></thead><tbody><tr><td>本地预览</td><td><code>npm run dev</code></td></tr><tr><td>构建</td><td><code>npm run build</code></td></tr><tr><td>构建并部署</td><td><code>npm run deploy</code></td></tr></tbody></table></section>
<section><h2>链接与图片<a href="#链接与图片"><span>#</span></a></h2><p>链接：<code>[Cloudflare](https://www.cloudflare.com/)</code> → <a href="https://www.cloudflare.com/" target="_blank">Cloudflare</a></p><p>图片：把文件放进 <code>public/</code>，然后用 <code>![说明](/图片名.png)</code> 引用；文章专属图片也可以放在 <code>src/content/blog/</code> 旁边用相对路径引用。</p></section>
<section><h2>分隔线<a href="#分隔线"><span>#</span></a></h2><hr /><p>以上这些基本够用。真需要复杂排版时，Astro 还支持在页面里写组件，Markdown 和组件可以混用。</p></section>]]></content>
    </entry>
</feed>
