<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://blog.994613.xyz/</id>
  <title type="text">临渊羡鱼博客</title>
  <subtitle type="text">博客</subtitle>
  <updated>2026-09-13T00:00:00.000Z</updated>
  <author><name>临渊羡鱼</name></author>
  <link rel="alternate" href="https://blog.994613.xyz/"/>
  <link rel="self" href="https://blog.994613.xyz/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.8</generator>
    <entry>
      <id>https://blog.994613.xyz/posts/friend-link/</id>
      <title type="text">博客部署</title>
      <published>2026-07-15T00:00:00.000Z</published>
      <updated>2026-07-25T00:00:00.000Z</updated>
      <author><name>临渊羡鱼</name></author>
      <link rel="alternate" href="https://blog.994613.xyz/posts/friend-link/"/>
      <summary type="text">本次更新为博客引入了友链审核系统、全功能管理后台以及深度品牌定制，并清理了示例内容。以下是主要变更描述：</summary>
      <content type="html"><![CDATA[<section><h2>🚀 本地开发部署（从零开始）<a href="#-本地开发部署从零开始"><span>#</span></a></h2><section><h3>环境要求<a href="#环境要求"><span>#</span></a></h3><ul>
<li>Node.js &gt;= 22</li>
<li>pnpm &gt;= 9</li>
</ul></section><section><h3>1. 克隆仓库<a href="#1-克隆仓库"><span>#</span></a></h3><p>你可以直接克隆主仓库，但更推荐先 Fork 到自己名下再克隆：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git</span><span> </span><span>clone</span><span> </span><span>https://github.com/jeio258/Firefly.git</span></div></div><div><div><div>2</div></div><div><span>cd</span><span> </span><span>Firefly</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2. 安装依赖<a href="#2-安装依赖"><span>#</span></a></h3><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>-g</span><span> </span><span>pnpm</span><span>   </span><span># 如果尚未安装 pnpm</span></div></div><div><div><div>2</div></div><div><span>pnpm</span><span> </span><span>install</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>3. 创建 GitHub OAuth App（友链审核功能必需）<a href="#3-创建-github-oauth-app友链审核功能必需"><span>#</span></a></h3><p>前往 <a href="https://github.com/settings/developers" target="_blank">GitHub Developer Settings</a> 新建一个 OAuth App：</p><ul>
<li><strong>Application name</strong>：任意填写，如 <code>My Blog Admin</code></li>
<li><strong>Homepage URL</strong>：你的博客首页地址</li>
<li><strong>Authorization callback URL</strong>：<code>https://你的Worker域名/api/auth/callback</code></li>
</ul><p>创建完成后，你将获得 <strong>Client ID</strong> 和 <strong>Client Secret</strong>。<br />
接着生成一个具有 <code>repo</code> 权限的 <strong>Personal Access Token</strong>，用于向仓库推送友链数据。</p></section><section><h3>4. 配置 Cloudflare 环境变量<a href="#4-配置-cloudflare-环境变量"><span>#</span></a></h3><p>登录 <a href="https://dash.cloudflare.com/" target="_blank">Cloudflare Dashboard</a>，进入你的 Worker 设置，添加以下加密环境变量：</p>

<table><thead><tr><th>变量名</th><th>说明</th></tr></thead><tbody><tr><td><code>GITHUB_CLIENT_ID</code></td><td>上一步获取的 OAuth App Client ID</td></tr><tr><td><code>GITHUB_CLIENT_SECRET</code></td><td>OAuth App Client Secret</td></tr><tr><td><code>GITHUB_TOKEN</code></td><td>拥有 repo 权限的 Personal Access Token</td></tr><tr><td><code>GITHUB_REPO</code></td><td>仓库全名，例如 <code>CuteLeaf/Firefly</code></td></tr><tr><td><code>GITHUB_BRANCH</code></td><td>要推送的分支，一般为 <code>main</code></td></tr></tbody></table><p>配置无误后，友链审核后台即可正常工作。</p></section><section><h3>5. 自定义博客配置<a href="#5-自定义博客配置"><span>#</span></a></h3><p>所有可配置项都在 <code>src/config/</code> 目录下，推荐至少修改以下文件：</p><ul>
<li><code>siteConfig.ts</code>：站点名称、语言、域名等基础信息</li>
<li><code>profileConfig.ts</code>：个人头像、昵称、社交链接</li>
<li><code>navBarConfig.ts</code>：导航菜单</li>
<li><code>sidebarConfig.ts</code>：侧边栏布局与小组件</li>
</ul><p>更多细节见 <a href="https://docs-firefly.cuteleaf.cn/" target="_blank">Firefly 使用文档</a>。</p></section><section><h3>6. 启动开发服务器<a href="#6-启动开发服务器"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>pnpm</span><span> </span><span>dev</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>浏览器访问 <code>http://localhost:4321</code> 即可实时预览。</p><hr /></section></section>
<section><h2>🧞 常用命令<a href="#-常用命令"><span>#</span></a></h2>

<table><thead><tr><th>命令</th><th>说明</th></tr></thead><tbody><tr><td><code>pnpm install</code></td><td>安装依赖</td></tr><tr><td><code>pnpm dev</code></td><td>启动开发服务器 (localhost&lt;4321&gt;)</td></tr><tr><td><code>pnpm build</code></td><td>构建生产版本至 <code>./dist/</code></td></tr><tr><td><code>pnpm preview</code></td><td>本地预览构建结果</td></tr><tr><td><code>pnpm new-post &lt;filename&gt;</code></td><td>快速创建新文章</td></tr><tr><td><code>pnpm format</code></td><td>格式化代码</td></tr></tbody></table><p>现在，你可以轻松打造属于自己的个性博客了。如果在使用中遇到任何问题，欢迎到 <a href="https://github.com/CuteLeaf/Firefly/issues" target="_blank">GitHub Issues</a> 反馈，或加入 QQ 交流群：<strong>1087127207</strong> 一起讨论。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.994613.xyz/posts/ce-shi/</id>
      <title type="text">测试</title>
      <published>2026-09-13T00:00:00.000Z</published>
      <updated>2026-09-13T00:00:00.000Z</updated>
      <author><name>临渊羡鱼</name></author>
      <link rel="alternate" href="https://blog.994613.xyz/posts/ce-shi/"/>
      <summary type="text"></summary>
      <content type="html"><![CDATA[<p>测试</p>]]></content>
    </entry>
    <entry>
      <id>https://blog.994613.xyz/posts/imgbed-deploy/</id>
      <title type="text">CloudFlare-ImgBed 图床 + Firefly 相册 部署教程</title>
      <published>2026-07-25T00:00:00.000Z</published>
      <updated>2026-07-25T00:00:00.000Z</updated>
      <author><name>临渊羡鱼</name></author>
      <link rel="alternate" href="https://blog.994613.xyz/posts/imgbed-deploy/"/>
      <summary type="text">CloudFlare-ImgBed 图床 + Firefly 相册 部署教程</summary>
      <content type="html"><![CDATA[<section><h2>一、部署图床（CloudFlare-ImgBed / Sanyue ImgHub）<a href="#一部署图床cloudflare-imgbed--sanyue-imghub"><span>#</span></a></h2><section><h3>1.1 克隆项目<a href="#11-克隆项目"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git</span><span> </span><span>clone</span><span> </span><span>https://github.com/MarSeventh/CloudFlare-ImgBed.git</span></div></div><div><div><div>2</div></div><div><span>cd</span><span> </span><span>CloudFlare-ImgBed</span></div></div><div><div><div>3</div></div><div><span>npm</span><span> </span><span>install</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>1.2 配置环境变量<a href="#12-配置环境变量"><span>#</span></a></h3><p>复制 <code>.env.example</code> 为 <code>.env</code>，填写必要配置：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 必填：Telegram Bot Token（用于存储文件到 Telegram）</span></div></div><div><div><div>2</div></div><div><span>TG_BOT_TOKEN=你的Telegram Bot Token</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 必填：管理员密码</span></div></div><div><div><div>5</div></div><div><span>ADMIN_PASSWORD=你的管理员密码</span></div></div><div><div><div>6</div></div><div>
</div></div><div><div><div>7</div></div><div><span># 可选：自定义域名</span></div></div><div><div><div>8</div></div><div><span>CUSTOM_DOMAIN=https://imge.yourdomain.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>1.3 部署到 Cloudflare Pages<a href="#13-部署到-cloudflare-pages"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 构建</span></div></div><div><div><div>2</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>build</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 部署（需要先安装 wrangler 并登录）</span></div></div><div><div><div>5</div></div><div><span>npx</span><span> </span><span>wrangler</span><span> </span><span>pages</span><span> </span><span>deploy</span><span> </span><span>dist</span><span> </span><span>--project-name=imge</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>或在 Cloudflare Dashboard 中：</p><ol>
<li>Workers &amp; Pages → Create → Pages → Connect to Git</li>
<li>选择仓库，框架预设选 <strong>None</strong></li>
<li>构建命令：<code>npm run build</code></li>
<li>输出目录：<code>dist</code></li>
<li>添加环境变量（TG_BOT_TOKEN 等）</li>
</ol></section><section><h3>1.4 配置 Telegram 存储<a href="#14-配置-telegram-存储"><span>#</span></a></h3><ol>
<li>在 Telegram 搜索 <code>@BotFather</code>，创建 Bot 获取 Token</li>
<li>创建一个频道，将 Bot 添加为管理员</li>
<li>发送一条消息到频道，转发给 <code>@getidsbot</code> 获取频道 ID</li>
<li>将 Token 和频道 ID 填入 <code>.env</code></li>
</ol></section><section><h3>1.5 生成 API Token<a href="#15-生成-api-token"><span>#</span></a></h3><ol>
<li>访问 <code>https://你的域名/admin</code> 登录管理后台</li>
<li>系统设置 → 安全设置 → API Token 管理</li>
<li>新建 Token，勾选 <strong>list</strong> 权限</li>
<li>复制保存 Token（仅显示一次）</li>
</ol><hr /></section></section>
<section><h2>二、对接 Firefly 相册<a href="#二对接-firefly-相册"><span>#</span></a></h2><section><h3>2.1 配置文件<a href="#21-配置文件"><span>#</span></a></h3><p>编辑 Firefly 项目的 <code>src/config/imgBedConfig.ts</code>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>export</span><span> </span><span>const</span><span> </span><span>imgBedConfig</span><span> </span><span>=</span><span> {</span></div></div><div><div><div>2</div></div><div><span>  </span><span>baseUrl</span><span>:</span><span> </span><span>"https://你的图床域名"</span><span>,</span></div></div><div><div><div>3</div></div><div><span>  </span><span>apiToken</span><span>:</span><span> </span><span>"你的API Token（list权限）"</span><span>,</span></div></div><div><div><div>4</div></div><div><span>  </span><span>pageSize</span><span>:</span><span> </span><span>50</span><span>,</span></div></div><div><div><div>5</div></div><div><span>};</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.2 相册配置<a href="#22-相册配置"><span>#</span></a></h3><p>在 <code>src/config/galleryConfig.ts</code> 的 <code>albums</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><span>    </span></span><span>id</span><span>: </span><span>"imgbed"</span><span>,</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>name</span><span>: </span><span>"图床相册"</span><span>,</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>description</span><span>: </span><span>"来自 ImgBed 的图片（构建时自动同步）"</span><span>,</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>location</span><span>: </span><span>"CloudFlare-ImgBed"</span><span>,</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>date</span><span>: </span><span>"2026-01-01"</span><span>,</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>tags</span><span>: [</span><span>"图床"</span><span>, </span><span>"自动同步"</span><span>],</span></div></div><div><div><div>8</div></div><div><span>},</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>2.3 构建与发布<a href="#23-构建与发布"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>pnpm</span><span> </span><span>build</span><span>    </span><span># 构建时自动从 API 拉取最新图片列表</span></div></div><div><div><div>2</div></div><div><span>pnpm</span><span> </span><span>preview</span><span>  </span><span># 本地预览</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>构建后访问 <code>https://你的博客域名/gallery/imgbed</code> 即可看到图床中的所有图片。</p><hr /></section></section>
<section><h2>三、工作原理<a href="#三工作原理"><span>#</span></a></h2><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>pnpm build</span></div></div><div><div><div>2</div></div><div><span><span>    </span></span><span>│</span></div></div><div><div><div>3</div></div><div><span><span>    </span></span><span>├─ src/utils/imgbed-utils.ts</span></div></div><div><div><div>4</div></div><div><span><span>    </span></span><span>│     └─ fetchImgBedImages()</span></div></div><div><div><div>5</div></div><div><span><span>    </span></span><span>│           │</span></div></div><div><div><div>6</div></div><div><span><span>    </span></span><span>│           ├─ GET /api/manage/list?fileType=image&amp;start=0&amp;count=50</span></div></div><div><div><div>7</div></div><div><span><span>    </span></span><span>│           │  Authorization: Bearer &lt;token&gt;</span></div></div><div><div><div>8</div></div><div><span><span>    </span></span><span>│           │</span></div></div><div><div><div>9</div></div><div><span><span>    </span></span><span>│           └─ 循环分页拉取直到全部获取</span></div></div><div><div><div>10</div></div><div><span><span>    </span></span><span>│</span></div></div><div><div><div>11</div></div><div><span><span>    </span></span><span>├─ src/utils/gallery-utils.ts</span></div></div><div><div><div>12</div></div><div><span><span>    </span></span><span>│     └─ scanAlbumPhotos("imgbed")</span></div></div><div><div><div>13</div></div><div><span><span>    </span></span><span>│           └─ 调用 fetchImgBedImages()</span></div></div><div><div><div>14</div></div><div><span><span>    </span></span><span>│</span></div></div><div><div><div>15</div></div><div><span><span>    </span></span><span>└─ 生成静态 HTML，图片 URL 硬编码为 /file/&lt;name&gt;</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><ul>
<li>图片在<strong>构建时</strong>拉取，生成静态页面</li>
<li>新增图片后需要<strong>重新构建</strong>才会显示</li>
<li>支持分页，自动处理大量图片</li>
</ul><hr /></section>
<section><h2>四、常见问题<a href="#四常见问题"><span>#</span></a></h2><section><h3>Q: 图床使用哪种存储？<a href="#q-图床使用哪种存储"><span>#</span></a></h3><p>A: 支持 Telegram、Cloudflare R2、S3、Discord、HuggingFace。推荐 Telegram（免费无限存储）。</p></section><section><h3>Q: 图片不显示？<a href="#q-图片不显示"><span>#</span></a></h3><p>A: 检查 <code>imgBedConfig.ts</code> 中的 <code>baseUrl</code> 是否正确，API Token 是否有 <code>list</code> 权限。浏览器 F12 → Network 查看 API 请求是否 200。</p></section><section><h3>Q: 如何更新图片？<a href="#q-如何更新图片"><span>#</span></a></h3><p>A: 在图床上传新图片后，重新执行 <code>pnpm build</code> 即可同步。</p></section><section><h3>Q: CORS 问题？<a href="#q-cors-问题"><span>#</span></a></h3><p>A: ImgBed 默认已启用 <code>Access-Control-Allow-Origin: *</code>，无需额外配置。</p></section></section>]]></content>
    </entry>
</feed>
