<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>油咖喱</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <id>https://blog.noyu.moe/</id>
  <link href="https://blog.noyu.moe/" rel="alternate"/>
  <link href="https://blog.noyu.moe/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, 油咖喱</rights>
  <subtitle>记录技术折腾与生活日常</subtitle>
  <title>油咖喱的博客</title>
  <updated>2026-09-01T00:55:00.000Z</updated>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/categories/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/tags/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/tags/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <category term="紫记" scheme="https://blog.noyu.moe/tags/%E7%B4%AB%E8%AE%B0/"/>
    <content>
      <![CDATA[<p>站点地址：<a href="https://zi.kokonoyu.com/">zi.kokonoyu.com</a></p><p>「紫记」是我给九重紫（ここのゆ）搭的非官方动态档案馆。起因特别简单：阿紫的动态、投稿、录播散在 B 站和推特好几个地方，我每天想翻她干了什么，得在几个 App 之间来回切。翻多了就烦，烦了就干脆自己做一个地方，把她每天留下的痕迹按日期串起来——哪天发了动态、投了什么视频、直播聊了什么，点开那一天就全都看得见。</p><p>纯个人折腾，不盈利，也没有任何商业用途，所有功能都是自己写、自己维护的。</p><h2 id="站点结构"><a href="#站点结构" class="headerlink" title="站点结构"></a>站点结构</h2><ul><li><strong>档案页（首页）</strong>：一张日历，亮起的日子代表当天有内容，点进去看那天发生了什么</li><li><strong>总结页</strong>：周 &#x2F; 月 &#x2F; 季 &#x2F; 年四个周期的自动总结</li><li><strong>直播页</strong>：直播场次、时长的统计，按年份分组</li><li><strong>后台</strong>：我自己维护数据、重新生成总结、看同步日志用的入口</li></ul><h2 id="功能设计"><a href="#功能设计" class="headerlink" title="功能设计"></a>功能设计</h2><h3 id="日历与日期页"><a href="#日历与日期页" class="headerlink" title="日历与日期页"></a>日历与日期页</h3><p>首页是一张日历，日期下方标出当天发过什么类型的内容：B 站动态、投稿视频、推特、直播。有内容的日期可以点进去，当天是一条按时间排列的时间线，把 B 站动态（带正文）、投稿视频（标题 + 封面）、直播录播、翻译过的推特按时间排在一起，点封面能跳回原站。</p><p><img src="https://img.noyu.moe/home.png" alt="紫记首页：日历视图"></p><p><img src="https://img.noyu.moe/day.png" alt="紫记日期页：当天的时间线"></p><h3 id="推特的-AI-翻译"><a href="#推特的-AI-翻译" class="headerlink" title="推特的 AI 翻译"></a>推特的 AI 翻译</h3><p>阿紫在推特上主要发日语，抓下来的推文会先用 AI 翻译成中文再展示。翻译尽量保留她说话的语气，不追求逐字逐句，让人看得懂、读得顺。</p><h3 id="自动总结"><a href="#自动总结" class="headerlink" title="自动总结"></a>自动总结</h3><p>这是我花心思最多的一块。系统按周、月、季、年四个周期，把周期内的 B 站动态、投稿、录播、推特全部读一遍，再按点赞、投币、播放、转发这些互动数据做权重，生成一篇像「周记 &#x2F; 月记」的总结——她这个阶段主要在忙什么、有没有新工作、配音、健康或直播安排上的变化，而不是干巴巴报数字。</p><p>总结生成后自动存进数据库，每个周期结束后的第一天重新生成；周期内抓到新内容也会增量更新。后台可以手动重新生成、直接编辑文字，改完自动覆盖。</p><p><img src="https://img.noyu.moe/summary.png" alt="紫记总结页"></p><h3 id="值得回看"><a href="#值得回看" class="headerlink" title="值得回看"></a>值得回看</h3><p>总结页里有个「值得回看」板块，按互动权重挑出这个周期最值得看的 9 条（推特 4 条、B 站 5 条，火的内容多时可以更多），每条带标题、封面和跳转链接，方便快速找到这个月的高光时刻。</p><h3 id="直播统计"><a href="#直播统计" class="headerlink" title="直播统计"></a>直播统计</h3><p>直播页单独统计直播场次、总时长、录播数量，按年份分组。时长按直播实际时间算，不是录播的发布时间。</p><p><img src="https://img.noyu.moe/live.png" alt="紫记直播统计页"></p><h3 id="手机端适配"><a href="#手机端适配" class="headerlink" title="手机端适配"></a>手机端适配</h3><p>日历、时间线、总结、直播统计都做了移动端适配，手机上能正常浏览和点选，布局随屏幕宽度自动调整。</p><p><img src="https://img.noyu.moe/mobile.png" alt="紫记手机端"></p><h2 id="技术说明"><a href="#技术说明" class="headerlink" title="技术说明"></a>技术说明</h2><p>整条链路都是免费额度拼起来的：</p><ul><li><strong>前端</strong>：Next.js（App Router）+ Tailwind CSS，部署在 Vercel，推到 GitHub main 就自动部署</li><li><strong>数据</strong>：Supabase 免费项目，PostgreSQL，行级安全按表隔离</li><li><strong>定时同步</strong>：GitHub Actions 每天早上 7 点和晚上 7 点各跑一次，抓 B 站动态、投稿、录播和推特的增量，只补缺失的，不重复写</li><li><strong>AI 翻译与总结</strong>：DeepSeek API（deepseek-chat）</li><li><strong>同步日志</strong>：后台有日志面板，每次同步抓了多少条、有没有失败都记录，失败会标红提示</li><li><strong>字体与图片</strong>：中文字体用霞鹜文楷，图片懒加载 + 本地代理展示，尽量控制加载速度</li></ul><h2 id="还没做好的"><a href="#还没做好的" class="headerlink" title="还没做好的"></a>还没做好的</h2><p>说点实在的：</p><ul><li>推特的历史数据实在补不全。主页显示大概有 5.6 万条，但 X 对免登录访问限制很严，稳定抓到的只有近期一部分，2020 到 2024 年之间的老推文试了很多办法还是补不完整。这个缺口目前是真补不上，以后有可行方案再说。好在近期的推文基本当天就能同步进来。</li><li>早期 B 站动态的正文还没补全。</li><li>UI 和交互还在持续调整，整体目前还是 demo 阶段。</li><li>直播「主要内容」这类整理内容，会逐步在后台补上。</li></ul><h2 id="后续计划"><a href="#后续计划" class="headerlink" title="后续计划"></a>后续计划</h2><ul><li>继续尝试补推特的历史数据</li><li>把早期 B 站动态的正文补全</li><li>UI 交互和美化继续调</li><li>后台补直播主要内容整理</li></ul><h2 id="版权与免责声明"><a href="#版权与免责声明" class="headerlink" title="版权与免责声明"></a>版权与免责声明</h2><p>紫记是粉丝自己搭的小站，和阿紫本人没有关系。站内内容全部来自 B 站和 X 的公开信息，只做整理和归档，不商用；所有素材版权归九重紫及创作者所有。</p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/09/01/zi-ji-jiu-chong-zi-dong-tai-dang-an-guan/</id>
    <link href="https://blog.noyu.moe/2026/09/01/zi-ji-jiu-chong-zi-dong-tai-dang-an-guan/"/>
    <published>2026-09-01T00:55:00.000Z</published>
    <summary>
      <![CDATA[<p>站点地址：<a href="https://zi.kokonoyu.com/">zi.kokonoyu.com</a></p>
<p>「紫记」是我给九重紫（ここのゆ）搭的非官方动态档案馆。起因特别简单：阿紫的动态、投稿、录播散在 B 站和推特好几个地方，我每天想翻她干了什么]]>
    </summary>
    <title>给九重紫做了一个动态档案馆：紫记</title>
    <updated>2026-09-01T00:55:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="博客" scheme="https://blog.noyu.moe/categories/%E5%8D%9A%E5%AE%A2/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <category term="博客" scheme="https://blog.noyu.moe/tags/%E5%8D%9A%E5%AE%A2/"/>
    <content>
      <![CDATA[<p>这篇文章教完全不懂代码的人，从零搭出一个和本站一样的博客。全程尽量用鼠标点，需要复制粘贴的地方我会单独标出来，你只需要”复制 → 粘贴 → 回车”。</p><p>本站就是按这篇文章搭出来的，可以对照本站效果（<a href="https://blog.noyu.moe/">https://blog.noyu.moe</a> ）。下面的路线一推荐让 AI 帮你搭建，你全程只需要在网页上点确认。</p><hr><h1 id="路线一：让-AI-帮你搭建（推荐小白，最省事）"><a href="#路线一：让-AI-帮你搭建（推荐小白，最省事）" class="headerlink" title="路线一：让 AI 帮你搭建（推荐小白，最省事）"></a>路线一：让 AI 帮你搭建（推荐小白，最省事）</h1><p>这条路不需要安装任何软件、不需要敲命令，全程跟 AI 编程助手对话，AI 负责干活，你负责在网页上点”确认 / 授权”。</p><h2 id="第-1-步：注册-GitHub"><a href="#第-1-步：注册-GitHub" class="headerlink" title="第 1 步：注册 GitHub"></a>第 1 步：注册 GitHub</h2><ol><li>打开 <a href="https://github.com/">https://github.com</a> ，点右上角 <strong>Sign up</strong></li><li>填邮箱 → 设密码 → 起个用户名（以后你的备用站网址会带这个名字）→ 点 <strong>Continue</strong></li><li>按提示完成验证（有时要输入图片里的单词），然后去邮箱点验证链接</li><li>注册完成</li></ol><h2 id="第-2-步：向-AI-说清需求，让它开工"><a href="#第-2-步：向-AI-说清需求，让它开工" class="headerlink" title="第 2 步：向 AI 说清需求，让它开工"></a>第 2 步：向 AI 说清需求，让它开工</h2><ol><li>打开一个 AI 编程助手（例如 Codex）</li><li>对它说：</li></ol><blockquote><p>帮我搭一个 Hexo + Stellar 博客，参考 <a href="https://blog.noyu.moe/">https://blog.noyu.moe</a> 这个博客的样子，部署到 Cloudflare Pages（免费，不用 Vercel），域名用我的 blog.example.com<br>要求：</p><ol><li>源码仓库设为<strong>私有</strong>（别人看不到源码）</li><li>评论用 giscus，单独建一个<strong>公开的评论仓库</strong>（源码私有也能正常评论）</li><li>图片用 <strong>Cloudflare R2</strong> 存储，并配好图片域名 img.example.com</li></ol></blockquote><ol start="3"><li>AI 需要你登录 GitHub、Cloudflare 时，跟着网页提示点”授权 / 确认”就行</li><li>AI 会帮你完成：创建私有源码仓库、创建公开评论仓库并配好 giscus、创建 R2 存储桶并配好图片域名、写好配置、推送到 GitHub、在 Cloudflare Pages 部署</li><li>想改成自己的：直接说”把标题改成 XXX、头像换成我给你的图片、页脚改成 XXX”，它改完自动上线</li></ol><blockquote><p>下面的第 3～7 步是”想自己动手”时的对照步骤；用 AI 的话这些它都会帮你完成，你可以跳过。</p></blockquote><h2 id="第-3-步（手工对照）：让-Cloudflare-Pages-帮你把博客放到网上（免费）"><a href="#第-3-步（手工对照）：让-Cloudflare-Pages-帮你把博客放到网上（免费）" class="headerlink" title="第 3 步（手工对照）：让 Cloudflare Pages 帮你把博客放到网上（免费）"></a>第 3 步（手工对照）：让 Cloudflare Pages 帮你把博客放到网上（免费）</h2><ol><li>打开 <a href="https://dash.cloudflare.com/">https://dash.cloudflare.com</a> 登录（没有就先注册，域名托管到 Cloudflare 见第 5 步）</li><li>左侧 <strong>Workers 和 Pages</strong> → <strong>Pages</strong> → 点 <strong>创建</strong> → <strong>连接到 Git（Connect to Git）</strong></li><li>第一次会跳去授权 GitHub：允许 Cloudflare Pages 访问你的仓库（源码仓库是<strong>私有的也没关系</strong>）</li><li>在仓库列表里选你刚创建的 <code>my-blog</code> → <strong>开始设置（Begin setup）</strong></li><li>构建配置照填：生产分支 <code>main</code>、构建命令 <code>pnpm run build</code>、构建输出目录 <code>public</code></li><li>Node 版本不用设置（Cloudflare 默认 Node 22）</li><li>点 <strong>保存并部署（Save and Deploy）</strong>，等一两分钟，会给你一个 <code>xxx.pages.dev</code> 预览网址，点开就能看到博客</li></ol><blockquote><p>完整版部署、域名绑定和缓存加速见文末的”部署方案三：Cloudflare Pages”。</p></blockquote><h2 id="第-4-步（手工对照）：改成你自己的名字和头像（可选但建议）"><a href="#第-4-步（手工对照）：改成你自己的名字和头像（可选但建议）" class="headerlink" title="第 4 步（手工对照）：改成你自己的名字和头像（可选但建议）"></a>第 4 步（手工对照）：改成你自己的名字和头像（可选但建议）</h2><p>以下都在 GitHub 网页上完成：</p><ol><li>打开你的仓库（<a href="https://github.com/%E4%BD%A0%E7%9A%84%E7%94%A8%E6%88%B7%E5%90%8D/my-blog%EF%BC%89">https://github.com/你的用户名/my-blog）</a></li><li>点进 <strong>_config.yml</strong> 文件 → 点右上角铅笔图标（编辑）</li><li>找到这几行，改成你的：</li></ol><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">title:</span> <span class="string">我的博客</span></span><br><span class="line"><span class="attr">subtitle:</span> <span class="string">记录生活</span></span><br><span class="line"><span class="attr">author:</span> <span class="string">我</span></span><br></pre></td></tr></tbody></table></figure><ol start="4"><li>点绿色的 <strong>Commit changes</strong>（提交更改）→ 再点一次确认</li><li>改头像：点进 <strong>source/images/</strong> 文件夹 → 点 <code>avatar.jpg</code> → 点右上角垃圾桶删除 → 回到文件夹 → 点 <strong>Add file → Upload files</strong> → 把你自己做的头像（文件名就叫 <code>avatar.jpg</code>）拖进去 → <strong>Commit changes</strong></li></ol><p>每次提交后，部署平台（Cloudflare Pages 或 Vercel）会自动重新部署，等一两分钟刷新网页就能看到变化。</p><h2 id="第-5-步（手工对照）：绑定你自己的域名（可选）"><a href="#第-5-步（手工对照）：绑定你自己的域名（可选）" class="headerlink" title="第 5 步（手工对照）：绑定你自己的域名（可选）"></a>第 5 步（手工对照）：绑定你自己的域名（可选）</h2><p>如果你有自己的域名（比如 <code>blog.example.com</code>）：</p><ol><li>打开 <a href="https://dash.cloudflare.com/">https://dash.cloudflare.com</a> ，注册登录，点 <strong>Add a site（添加站点）</strong>，输入你的域名，选 <strong>Free（免费）</strong> 套餐，按提示把域名的 NS 记录改成 Cloudflare 给的（要去你的域名注册商网站改）</li><li>在 Cloudflare Pages 项目里：<strong>自定义域（Custom domains）→ 设置自定义域</strong>，输入 <code>blog.example.com</code> → <strong>继续</strong></li><li>提示需要激活 DNS 时点 <strong>激活（Activate）</strong>（Cloudflare 会自动加好橙色云记录）</li><li>等几分钟证书签发完成，你的域名就能访问博客了</li></ol><blockquote><p>如果用 Vercel（可选方案一），域名绑定方式不同，见方案一第 4～5 点。</p></blockquote><h2 id="第-6-步（手工对照）：写第一篇文章"><a href="#第-6-步（手工对照）：写第一篇文章" class="headerlink" title="第 6 步（手工对照）：写第一篇文章"></a>第 6 步（手工对照）：写第一篇文章</h2><ol><li>打开你的仓库 → 点进 <strong>source/_posts/</strong> 文件夹</li><li>点 <strong>Add file → Create new file（创建新文件）</strong></li><li>文件名填 <code>hello.md</code></li><li>把下面内容复制粘贴进去：</li></ol><figure class="highlight markdown"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">title: "你好，世界"</span><br><span class="line">date: 2026-08-31 12:00:00</span><br><span class="line">categories:</span><br><span class="line"><span class="bullet">  -</span> [技术]</span><br><span class="line">tags:</span><br><span class="line"><span class="section">  - Hexo</span></span><br><span class="line"><span class="section">---</span></span><br><span class="line"></span><br><span class="line">这是我的第一篇文章。</span><br></pre></td></tr></tbody></table></figure><ol start="5"><li>点绿色 <strong>Commit changes</strong></li><li>等一两分钟，刷新你的博客，文章就出现了</li></ol><p>以后写文章都这么操作：在 <code>source/_posts/</code> 里新建文件 → 粘贴上面的格式 → 改标题和内容 → 提交。</p><h2 id="第-7-步（手工对照）：发动态（可选）"><a href="#第-7-步（手工对照）：发动态（可选）" class="headerlink" title="第 7 步（手工对照）：发动态（可选）"></a>第 7 步（手工对照）：发动态（可选）</h2><p>用 AI 的话直接说”帮我发一条动态：……”即可。</p><ol><li>仓库里点进 <strong>source/cross/index.md</strong></li><li>点铅笔编辑，在 <code>{% timeline %}</code> 和 <code>{% endtimeline %}</code> 之间加一行日期注释和内容：</li></ol><figure class="highlight markdown"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">{% timeline %}</span><br><span class="line"></span><br><span class="line">&lt;!-- node 2026-08-31 --&gt;</span><br><span class="line">今天发的动态。</span><br><span class="line"></span><br><span class="line">{% endtimeline %}</span><br></pre></td></tr></tbody></table></figure><ol start="3"><li>点 <strong>Commit changes</strong></li></ol><hr><h2 id="第-8-步（进阶，推荐）：像本站一样：私有源码-公开评论-R2-图片"><a href="#第-8-步（进阶，推荐）：像本站一样：私有源码-公开评论-R2-图片" class="headerlink" title="第 8 步（进阶，推荐）：像本站一样：私有源码 + 公开评论 + R2 图片"></a>第 8 步（进阶，推荐）：像本站一样：私有源码 + 公开评论 + R2 图片</h2><p>这一节告诉 AI 帮你做，你只需要跟着点”确认 / 授权”；每一步下面都写了原理，方便你知道在配什么。</p><h3 id="为什么这样配"><a href="#为什么这样配" class="headerlink" title="为什么这样配"></a>为什么这样配</h3><ul><li><strong>源码仓库私有</strong>：别人看不到你的配置和文章源码，防止被一键复制，也不影响自动部署。</li><li><strong>单独公开的评论仓库</strong>：评论系统 giscus 要求仓库公开；源码私有后，评论如果还放在源码仓库里，访客就发不了、也看不到评论。所以单独建一个公开仓库专门放评论。</li><li><strong>图片放 Cloudflare R2</strong>：图片不占 GitHub 仓库、不拖慢构建，加载也快；R2 每月免费 10GB 存储，个人博客完全够用。</li></ul><h3 id="8-1-把源码仓库设为私有"><a href="#8-1-把源码仓库设为私有" class="headerlink" title="8.1 把源码仓库设为私有"></a>8.1 把源码仓库设为私有</h3><ol><li>打开你的仓库 → <strong>Settings（设置）</strong> → 左侧 <strong>General</strong> → 拉到最下面的 <strong>Danger Zone（危险区域）</strong> → <strong>Change repository visibility（更改仓库可见性）</strong> → 选 <strong>Private（私有）</strong> → 输入仓库名确认</li><li>私有后部署平台依然会自动部署（之前已经授权过，不受影响）</li><li>注意：私有仓库的 Actions 每月有 2000 分钟免费额度（每月 1 号刷新）。如果某个月在 Actions 里下载打包文件失败，说明额度用完了，让 AI 帮你打包一份 <code>public.zip</code> 兜底即可。</li></ol><h3 id="8-2-单独建一个公开的评论仓库（giscus）"><a href="#8-2-单独建一个公开的评论仓库（giscus）" class="headerlink" title="8.2 单独建一个公开的评论仓库（giscus）"></a>8.2 单独建一个公开的评论仓库（giscus）</h3><ol><li>GitHub 右上角 <strong>+ → New repository</strong> → 仓库名填 <code>giscus</code>（或任意名字）→ 可见性选 <strong>Public（公开）</strong> → <strong>Create repository</strong></li><li>打开新仓库 → <strong>Settings → General</strong> → 找到 <strong>Discussions</strong> → 勾选 <strong>Enable discussions（启用讨论）</strong> → <strong>Save</strong></li><li>回到 AI 对话说：”评论仓库用我刚建的 XXX，帮我把 giscus 配好”</li><li>最后去 <a href="https://github.com/settings/installations">https://github.com/settings/installations</a> → 找到 <strong>giscus</strong> 应用 → <strong>Configure</strong> → 仓库访问选 <strong>All repositories（所有仓库）</strong>（或勾选你新建的评论仓库）→ <strong>Save</strong></li><li>完成：文章底部评论正常使用，评论都存在公开评论仓库里；源码仓库私有不影响评论。</li></ol><h3 id="8-3-图片存到-Cloudflare-R2"><a href="#8-3-图片存到-Cloudflare-R2" class="headerlink" title="8.3 图片存到 Cloudflare R2"></a>8.3 图片存到 Cloudflare R2</h3><ol><li>打开 <a href="https://dash.cloudflare.com/">https://dash.cloudflare.com</a> ，把域名托管到 Cloudflare（<strong>Add a site</strong>，按提示把域名的 NS 记录改成 Cloudflare 给的，和绑定博客域名是同一个操作）</li><li>左侧点 <strong>R2</strong> → <strong>Create bucket（创建存储桶）</strong> → 名字随意（比如 <code>blog-images</code>）→ <strong>Create bucket</strong></li><li>进入桶 → <strong>Upload objects（上传对象）</strong> → 把图片拖进去，上传完成</li><li>给桶绑定一个图片域名：桶 → <strong>Settings → Custom Domains（自定义域名）</strong> → <strong>Connect domain</strong> → 输入 <code>img.example.com</code> → 继续（Cloudflare 会自动加好 DNS 记录，等几分钟生效）</li><li>文章里引用图片：</li></ol><figure class="highlight markdown"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">![<span class="string">图片说明</span>](<span class="link">https://img.example.com/图片文件名.jpg</span>)</span><br></pre></td></tr></tbody></table></figure><ol start="6"><li>开防盗链，防止别人偷你的图片刷流量：桶 → <strong>Settings → Hotlink protection（热链保护）</strong> → 打开，允许来源填你的博客域名 → <strong>Save</strong>。个人博客开这个就够；流量很大的话再考虑加 WAF 规则。</li><li>以后需要图片时，直接把图片发给 AI，说”传到 R2 并给我链接”，它会帮你上传并把链接写进文章。</li></ol><hr><h1 id="路线二：在自己电脑上完整搭建（进阶）"><a href="#路线二：在自己电脑上完整搭建（进阶）" class="headerlink" title="路线二：在自己电脑上完整搭建（进阶）"></a>路线二：在自己电脑上完整搭建（进阶）</h1><p>适合想彻底搞懂、想在本地写文章预览的人。需要安装三个软件，安装过程全是”下一步下一步”，之后命令都是复制粘贴。</p><h2 id="第-1-步：安装-Git"><a href="#第-1-步：安装-Git" class="headerlink" title="第 1 步：安装 Git"></a>第 1 步：安装 Git</h2><ol><li>打开 <a href="https://git-scm.com/download/win">https://git-scm.com/download/win</a> ，下载 Windows 版</li><li>双击安装包，一路点 <strong>Next（下一步）</strong>，最后点 <strong>Install</strong></li><li>完成</li></ol><h2 id="第-2-步：安装-Node-js"><a href="#第-2-步：安装-Node-js" class="headerlink" title="第 2 步：安装 Node.js"></a>第 2 步：安装 Node.js</h2><ol><li>打开 <a href="https://nodejs.org/">https://nodejs.org</a> ，下载 <strong>LTS</strong> 版本</li><li>双击安装，一路 <strong>Next</strong>，完成</li></ol><h2 id="第-3-步：打开命令行"><a href="#第-3-步：打开命令行" class="headerlink" title="第 3 步：打开命令行"></a>第 3 步：打开命令行</h2><p>按键盘 <strong>Win + R</strong>，输入 <code>powershell</code>，回车。</p><h2 id="第-4-步：复制粘贴以下命令（一行一行来）"><a href="#第-4-步：复制粘贴以下命令（一行一行来）" class="headerlink" title="第 4 步：复制粘贴以下命令（一行一行来）"></a>第 4 步：复制粘贴以下命令（一行一行来）</h2><p>安装 hexo 和 pnpm：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g hexo-cli pnpm</span><br></pre></td></tr></tbody></table></figure><p>创建博客项目（名字可以自己换，比如 <code>my-blog</code>）：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">hexo init my-blog</span><br></pre></td></tr></tbody></table></figure><p>进入项目：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> my-blog</span><br></pre></td></tr></tbody></table></figure><p>安装依赖和 Stellar 主题：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">pnpm install</span><br><span class="line">pnpm add hexo-theme-stellar</span><br></pre></td></tr></tbody></table></figure><h2 id="第-5-步：启用主题（记事本编辑）"><a href="#第-5-步：启用主题（记事本编辑）" class="headerlink" title="第 5 步：启用主题（记事本编辑）"></a>第 5 步：启用主题（记事本编辑）</h2><ol><li>用记事本打开项目里的 <strong>_config.yml</strong></li><li>找到 <code>theme: landscape</code>，改成 <code>theme: stellar</code></li><li>保存</li></ol><h2 id="第-6-步：本地预览"><a href="#第-6-步：本地预览" class="headerlink" title="第 6 步：本地预览"></a>第 6 步：本地预览</h2><p>回到命令行：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">pnpm run server</span><br></pre></td></tr></tbody></table></figure><p>浏览器打开 <a href="http://localhost:4000/">http://localhost:4000</a> 就能看到博客。</p><h2 id="第-7-步：推送上线"><a href="#第-7-步：推送上线" class="headerlink" title="第 7 步：推送上线"></a>第 7 步：推送上线</h2><p>先把代码推到 GitHub（第 2 步的仓库可以直接用）：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">git init -b main</span><br><span class="line">git add -A</span><br><span class="line">git commit -m <span class="string">"first commit"</span></span><br><span class="line">git remote add origin https://github.com/你的用户名/my-blog.git</span><br><span class="line">git push -u origin main</span><br></pre></td></tr></tbody></table></figure><p>然后按”路线一”第 3～5 步在 Cloudflare Pages 部署即可（完整步骤见”部署方案三”）。</p><hr><h1 id="部署方案一：GitHub-Vercel-Cloudflare（可选方案）"><a href="#部署方案一：GitHub-Vercel-Cloudflare（可选方案）" class="headerlink" title="部署方案一：GitHub + Vercel + Cloudflare（可选方案）"></a>部署方案一：GitHub + Vercel + Cloudflare（可选方案）</h1><blockquote><p>本站现已改用”部署方案三：Cloudflare Pages”。Vercel 方案仍然完全可用，想用 Vercel 的按下面操作：</p></blockquote><ol><li>打开 <a href="https://vercel.com/">https://vercel.com</a> ，点 <strong>Sign Up</strong> → <strong>Continue with GitHub</strong> 授权登录</li><li>点 <strong>Add New Project（添加新项目）</strong>，在列表里找到你的 <code>my-blog</code> 仓库 → <strong>Import（导入）</strong> → <strong>Deploy（部署）</strong></li><li>仓库里有现成的构建配置，Vercel 会自动识别，等一两分钟出现绿色 <strong>Congratulations</strong> 即成功，得到 <code>my-blog-xxx.vercel.app</code> 预览网址</li><li>绑定域名：Vercel 项目 <strong>Settings（设置）→ Domains（域名）→ Add</strong>，输入 <code>blog.example.com</code>，复制它给的 CNAME 值</li><li>回 Cloudflare <strong>DNS → Add record</strong>：类型 <strong>CNAME</strong>、名称 <code>blog</code>、目标粘贴 Vercel 给的值（<code>cname.vercel-dns.com</code>）、保持橙色云</li><li>以后每发一篇文章，推送到 GitHub 就自动上线</li></ol><hr><h1 id="部署方案二：自己的服务器-1Panel"><a href="#部署方案二：自己的服务器-1Panel" class="headerlink" title="部署方案二：自己的服务器 + 1Panel"></a>部署方案二：自己的服务器 + 1Panel</h1><p>想完全自己掌控、境内访问更稳定时，可以部署到自己的 Debian 12 服务器。全程只需要复制一条命令，其余全是鼠标。</p><h2 id="第-1-步：安装-1Panel"><a href="#第-1-步：安装-1Panel" class="headerlink" title="第 1 步：安装 1Panel"></a>第 1 步：安装 1Panel</h2><p>用服务器商提供的网页终端登录，复制粘贴这一条，回车：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh &amp;&amp; <span class="built_in">sudo</span> bash quick_start.sh</span><br></pre></td></tr></tbody></table></figure><p>按提示按几次回车（选默认），完成后记下<strong>面板地址、用户名、密码</strong>。</p><h2 id="第-2-步：下载博客打包文件（不用自己构建）"><a href="#第-2-步：下载博客打包文件（不用自己构建）" class="headerlink" title="第 2 步：下载博客打包文件（不用自己构建）"></a>第 2 步：下载博客打包文件（不用自己构建）</h2><ol><li>打开你的仓库 → 点 <strong>Actions</strong> 标签</li><li>左侧选 <strong>Build Blog Package</strong></li><li>点开最新一条（绿色打勾的）</li><li>页面底部 <strong>Artifacts</strong> 处下载 <strong>blog-public</strong>（就是一个 zip）</li></ol><blockquote><p>每次你更新文章并推送，这里都会自动生成新的 zip。</p></blockquote><blockquote><p>说明：私有仓库的 Actions 打包会消耗每月 2000 分钟的免费额度（每月 1 号刷新），本任务单次约 2 分钟，正常够用。万一某月额度用完导致这里失败，直接让 AI 帮你打包一份 <code>public.zip</code>，其他步骤照旧。</p></blockquote><h2 id="第-3-步：上传并建站"><a href="#第-3-步：上传并建站" class="headerlink" title="第 3 步：上传并建站"></a>第 3 步：上传并建站</h2><ol><li>浏览器打开 1Panel，登录</li><li>左侧 <strong>文件</strong> → 进入 <code>/opt/1panel/www/sites/</code></li><li>点 <strong>上传</strong>，选择刚下载的 zip → 上传完点 <strong>解压</strong></li><li>左侧 <strong>网站 → 创建网站</strong>，类型选 <strong>静态网站</strong></li><li>域名填 <code>blog.example.com</code>，主目录选解压出的文件夹 → 确认</li></ol><h2 id="第-4-步：域名解析-证书"><a href="#第-4-步：域名解析-证书" class="headerlink" title="第 4 步：域名解析 + 证书"></a>第 4 步：域名解析 + 证书</h2><ol><li>去域名商 / Cloudflare，把 <code>blog.example.com</code> 的解析改成 <strong>A 记录 → 服务器 IP</strong>（原来是解析到 Vercel / Cloudflare Pages，改成 A 记录）</li><li>回 1Panel → 网站 → 打开你的网站 → <strong>HTTPS</strong> → <strong>申请证书</strong> → 选 Let’s Encrypt → 确认</li><li>等一分钟，<a href="https://blog.example.com/">https://blog.example.com</a> 就是你的博客</li></ol><h2 id="第-5-步：安全设置-每周自动维护"><a href="#第-5-步：安全设置-每周自动维护" class="headerlink" title="第 5 步：安全设置 + 每周自动维护"></a>第 5 步：安全设置 + 每周自动维护</h2><ol><li>1Panel → <strong>计划任务 → 创建计划任务</strong></li><li>类型选 <strong>Shell</strong>，执行周期选<strong>每周</strong>（建议周日凌晨）</li><li>把下面内容整体复制粘贴到”命令”框：</li></ol><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> DEBIAN_FRONTEND=noninteractive</span><br><span class="line"><span class="built_in">export</span> NEEDRESTART_MODE=a</span><br><span class="line">apt update</span><br><span class="line">apt upgrade -y</span><br><span class="line">apt autoremove --purge -y</span><br><span class="line">apt clean</span><br><span class="line"><span class="keyword">if</span> ! swapon --show | grep -q <span class="string">'/swapfile'</span>; <span class="keyword">then</span></span><br><span class="line">  fallocate -l 1G /swapfile 2&gt;/dev/null || <span class="built_in">dd</span> <span class="keyword">if</span>=/dev/zero of=/swapfile bs=1M count=1024</span><br><span class="line">  <span class="built_in">chmod</span> 600 /swapfile</span><br><span class="line">  mkswap /swapfile</span><br><span class="line">  swapon /swapfile</span><br><span class="line">  grep -q <span class="string">'^/swapfile'</span> /etc/fstab || <span class="built_in">echo</span> <span class="string">'/swapfile none swap sw 0 0'</span> &gt;&gt; /etc/fstab</span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">'net.ipv4.icmp_echo_ignore_all=1'</span> &gt; /etc/sysctl.d/99-icmp.conf</span><br><span class="line">sysctl -p /etc/sysctl.d/99-icmp.conf &gt;/dev/null 2&gt;&amp;1 || <span class="literal">true</span></span><br><span class="line"><span class="built_in">command</span> -v ufw &gt;/dev/null 2&gt;&amp;1 || apt install -y ufw</span><br><span class="line">ufw allow 22/tcp &gt;/dev/null 2&gt;&amp;1</span><br><span class="line">ufw allow 80/tcp &gt;/dev/null 2&gt;&amp;1</span><br><span class="line">ufw allow 443/tcp &gt;/dev/null 2&gt;&amp;1</span><br><span class="line">ufw --force <span class="built_in">enable</span> &gt;/dev/null 2&gt;&amp;1 || <span class="literal">true</span></span><br><span class="line"><span class="built_in">command</span> -v fail2ban-client &gt;/dev/null 2&gt;&amp;1 || apt install -y fail2ban</span><br><span class="line"><span class="built_in">cat</span> &gt; /etc/fail2ban/jail.local &lt;&lt;<span class="string">'EOF'</span></span><br><span class="line">[DEFAULT]</span><br><span class="line">bantime = 1h</span><br><span class="line">findtime = 10m</span><br><span class="line">maxretry = 5</span><br><span class="line">[sshd]</span><br><span class="line">enabled = <span class="literal">true</span></span><br><span class="line">EOF</span><br><span class="line">systemctl <span class="built_in">enable</span> --now fail2ban &gt;/dev/null 2&gt;&amp;1 || <span class="literal">true</span></span><br><span class="line">journalctl --vacuum-time=3d 2&gt;/dev/null || <span class="literal">true</span></span><br><span class="line">journalctl --vacuum-size=100M 2&gt;/dev/null || <span class="literal">true</span></span><br><span class="line">find /tmp -<span class="built_in">type</span> f -mtime +7 -delete 2&gt;/dev/null || <span class="literal">true</span></span><br><span class="line">find /var/log -<span class="built_in">type</span> f \( -name <span class="string">"*.gz"</span> -o -name <span class="string">"*.old"</span> \) -mtime +7 -delete 2&gt;/dev/null || <span class="literal">true</span></span><br><span class="line"><span class="built_in">mkdir</span> -p /etc/systemd/journald.conf.d</span><br><span class="line"><span class="built_in">cat</span> &gt; /etc/systemd/journald.conf.d/99-size.conf &lt;&lt;<span class="string">'EOF'</span></span><br><span class="line">[Journal]</span><br><span class="line">SystemMaxUse=200M</span><br><span class="line">MaxRetentionSec=7day</span><br><span class="line">EOF</span><br><span class="line">systemctl restart systemd-journald 2&gt;/dev/null || <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><ol start="4"><li>保存后点 <strong>执行</strong> 跑一次，看日志成功即可</li></ol><p>这个任务每周自动：更新系统、清理垃圾、限制日志；第一次跑还会完成 1G Swap、禁 Ping、防火墙、fail2ban。</p><h2 id="第-6-步：以后更新"><a href="#第-6-步：以后更新" class="headerlink" title="第 6 步：以后更新"></a>第 6 步：以后更新</h2><ul><li>额度正常：去 GitHub Actions 重新下载最新 <code>blog-public</code>，在 1Panel 文件里上传、解压覆盖，完成。</li><li>额度用完（每月 1 号刷新）：让 AI 帮你重新打包一份 <code>public.zip</code>，再上传、解压覆盖。</li></ul><hr><h1 id="部署方案三：GitHub-Cloudflare-Pages（推荐，本站现用）"><a href="#部署方案三：GitHub-Cloudflare-Pages（推荐，本站现用）" class="headerlink" title="部署方案三：GitHub + Cloudflare Pages（推荐，本站现用）"></a>部署方案三：GitHub + Cloudflare Pages（推荐，本站现用）</h1><p>免费、不限流量、自带全球 CDN，构建在 Cloudflare 那边自动完成，<strong>不占 GitHub Actions 额度</strong>，源码仓库私有也照常部署。构建命令是 <code>pnpm run build</code>（就是 <code>hexo generate</code>，主域名已经写死在配置里，不需要任何”vercel 专用”配置）。</p><h2 id="第-1-步：连接仓库并部署"><a href="#第-1-步：连接仓库并部署" class="headerlink" title="第 1 步：连接仓库并部署"></a>第 1 步：连接仓库并部署</h2><ol><li>打开 <a href="https://dash.cloudflare.com/">https://dash.cloudflare.com</a> 登录（没有就先注册，并把域名托管到 Cloudflare：<strong>Add a site</strong> → 选 Free 套餐 → 去域名注册商把 NS 记录改成 Cloudflare 给的）</li><li>左侧 <strong>Workers 和 Pages</strong> → <strong>Pages</strong> → <strong>创建</strong> → <strong>连接到 Git（Connect to Git）</strong></li><li>第一次使用会跳去授权 GitHub：允许 Cloudflare Pages 访问（<strong>私有仓库也可以</strong>）</li><li>仓库列表里选 <code>my-blog</code> → <strong>开始设置（Begin setup）</strong></li><li>构建配置照填：</li></ol><div class="md-table-scroll"><table><thead><tr><th>配置项</th><th>值</th></tr></thead><tbody><tr><td>生产分支</td><td><code>main</code></td></tr><tr><td>构建命令</td><td><code>pnpm run build</code></td></tr><tr><td>构建输出目录</td><td><code>public</code></td></tr></tbody></table></div><ol start="6"><li>Node 版本不用设置（默认 Node 22）</li><li>点 <strong>保存并部署（Save and Deploy）</strong>，等一两分钟构建完成，得到 <code>xxx.pages.dev</code> 预览网址</li><li>以后每次推送到 <code>main</code> 都会自动重新构建上线</li></ol><h2 id="第-2-步：绑定域名"><a href="#第-2-步：绑定域名" class="headerlink" title="第 2 步：绑定域名"></a>第 2 步：绑定域名</h2><ol><li>Pages 项目里 → <strong>自定义域（Custom domains）</strong> → <strong>设置自定义域</strong></li><li>输入 <code>blog.example.com</code> → <strong>继续</strong></li><li>提示激活 DNS 时点 <strong>激活</strong>（自动加好橙色云记录）</li><li>等几分钟证书签发完成，<a href="https://blog.example.com/">https://blog.example.com</a> 就是你的博客</li></ol><blockquote><p>想先测试再切主域名？先绑 <code>cf.blog.example.com</code> 对比速度，确认更快再把主域名绑上来。</p></blockquote><h2 id="第-3-步：缓存加速（强烈建议）"><a href="#第-3-步：缓存加速（强烈建议）" class="headerlink" title="第 3 步：缓存加速（强烈建议）"></a>第 3 步：缓存加速（强烈建议）</h2><p>静态博客<strong>整站都可以缓存</strong>。缓存已经写进仓库的 <code>source/_headers</code> 文件（Hexo 构建时会自动放进 <code>public/</code>），Cloudflare Pages 每次部署都会自动应用，<strong>不用在后台手动配规则</strong>：</p><ul><li><code>/css/</code>、<code>/js/</code>、<code>/images/</code> 静态文件：缓存 1 个月，浏览器本地也缓存 1 个月，老访客二次打开几乎零加载</li><li>页面（HTML 等）：由 Cloudflare Pages 默认的实时校验（ETag）保证拿到的一定是新版，发完文章推上去就能看到，不用清缓存</li></ul><p>Cloudflare 免费版本身还会自动开 Brotli 压缩和 HTTP/3，不用额外设置。</p><p>想验证缓存生效：部署完成后打开 <a href="https://blog.example.com/">https://blog.example.com</a> ，按 F12 → Network，点开一个文件看响应头里的 <code>cache-control</code>。</p><p>静态文件因为有新版本时基本是新的路径或查询参数（如 <code>main.css?v=1.44.0</code>），所以不用担心旧缓存；如果哪天改了同路径文件想立刻全部生效，去 Cloudflare 左侧 <strong>缓存 → 清除缓存 → 清除所有内容（Purge Everything）</strong> 即可。</p><hr><h1 id="日常使用小结"><a href="#日常使用小结" class="headerlink" title="日常使用小结"></a>日常使用小结</h1><ul><li><strong>写文章</strong>：GitHub 网页 → <code>source/_posts/</code> → Add file（或本地写完推送）</li><li><strong>发动态</strong>：编辑 <code>source/cross/index.md</code></li><li><strong>改标题/头像</strong>：编辑 <code>_config.yml</code> 和 <code>source/images/avatar.jpg</code></li><li><strong>评论</strong>：文章底部用 giscus，评论存在公开评论仓库的 Discussions 里</li><li><strong>图片</strong>：优先用 Cloudflare R2（见第 8 步），文章里贴链接</li></ul><h1 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h1><div class="md-table-scroll"><table><thead><tr><th>问题</th><th>解决</th></tr></thead><tbody><tr><td>部署失败（Cloudflare Pages）</td><td>检查构建命令是 <code>pnpm run build</code>、输出目录是 <code>public</code>；失败日志发我看</td></tr><tr><td>部署失败（Vercel）</td><td>确认导入的是你的仓库且构建配置没被改过；失败日志发我看</td></tr><tr><td>域名打不开</td><td>DNS 生效需要几分钟到几小时；Cloudflare 代理开启时 SSL 模式选”完全”</td></tr><tr><td>文章不更新</td><td>提交后等 1～2 分钟；刷新时按 Ctrl+F5</td></tr><tr><td>图片裂图</td><td>检查图床链接能不能直接在浏览器打开</td></tr><tr><td>图片想放 R2 存储</td><td>见第 8 步，上传后链接形如 <a href="https://img.你的域名/%E5%9B%BE%E7%89%87%E5%90%8D.jpg">https://img.你的域名/图片名.jpg</a></td></tr><tr><td>评论不能用</td><td>评论存放在公开的评论仓库（giscus）：仓库要公开、Discussions 要开启、giscus App 要安装到该仓库；源码仓库私有不影响</td></tr></tbody></table></div>]]>
    </content>
    <id>https://blog.noyu.moe/2026/08/31/hexo-stellar-blog-tutorial/</id>
    <link href="https://blog.noyu.moe/2026/08/31/hexo-stellar-blog-tutorial/"/>
    <published>2026-08-31T00:00:00.000Z</published>
    <summary>
      <![CDATA[<p>这篇文章教完全不懂代码的人，从零搭出一个和本站一样的博客。全程尽量用鼠标点，需要复制粘贴的地方我会单独标出来，你只需要”复制 → 粘贴 → 回车”。</p>
<p>本站就是按这篇文章搭出来的，可以对照本站效果（<a href="https://blog.noyu.moe/"]]>
    </summary>
    <title>用 Hexo + Stellar 从零搭建一个博客（小白版）</title>
    <updated>2026-08-31T00:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/categories/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/tags/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/tags/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <category term="一家紫放映厅" scheme="https://blog.noyu.moe/tags/%E4%B8%80%E5%AE%B6%E7%B4%AB%E6%94%BE%E6%98%A0%E5%8E%85/"/>
    <content>
      <![CDATA[<p>给紫老师做了一个在线点播系统，名字叫「一家紫放映厅」。直播时粉丝可以在这里点想看的 B 站视频，阿紫在后台一键切换，配合 OBS 展示页，直播画面里就能实时显示”正在播放 &#x2F; 下一首”。</p><p>站点地址：</p><ul><li><a href="https://live.kokonoyu.com/">live.kokonoyu.com</a> —— Vercel 主站，全球可用；境内访问速度可能不太稳定</li><li><a href="https://livecn.kokonoyu.com/">livecn.kokonoyu.com</a> —— 香港三网优化节点，境内访问更快，推荐国内访问使用</li></ul><h2 id="这是什么"><a href="#这是什么" class="headerlink" title="这是什么"></a>这是什么</h2><p>一句话：<strong>一个给虚拟主播用的视频点播（点歌）系统</strong>。整个站由三个页面组成：</p><ul><li><strong>前台 <code>/</code></strong>：粉丝使用的点歌页</li><li><strong>后台 <code>/admin</code></strong>：主播专用的管理面板</li><li><strong>展示页 <code>/display</code></strong>：给 OBS 用的配信画面</li></ul><p>技术栈是 Next.js + Supabase（数据库、登录、实时同步）+ Cloudflare Turnstile（人机验证），部署在 Vercel 上。视频本身不存放在本站，只是记录 BV 号，由 B 站播放。</p><p><img src="https://img.noyu.moe/live-fan.png" alt="观众点歌页示意"></p><h2 id="给粉丝的使用方法"><a href="#给粉丝的使用方法" class="headerlink" title="给粉丝的使用方法"></a>给粉丝的使用方法</h2><p>打开 <a href="https://live.kokonoyu.com/">live.kokonoyu.com</a> 就能点歌，步骤很简单：</p><ol><li>在「哔哩哔哩 BV 号」输入框里填视频的 BV 号（例如 <code>BV1irnyzREdf</code>）</li><li>「推荐人昵称」可以填也可以不填（选填）</li><li>点「提交」，视频就会进入放映单排队</li></ol><p>几个小规则：</p><ul><li>同一个视频只能点一次（已经播放过的也不能再点）</li><li>不存在的 BV 号会被拒绝</li><li>两次点歌之间有冷却时间（默认 5 分钟，主播可以随时改成 1 分钟～1 天）</li><li>如果主播设置了总数上限，排满后会自动停止接收</li></ul><p>把鼠标悬停在列表里的视频上，还会出现「复制 BV 号」和「打开 B 站搜索」两个快捷按钮，方便查视频或分享。</p><h2 id="给阿紫的使用方法"><a href="#给阿紫的使用方法" class="headerlink" title="给阿紫的使用方法"></a>给阿紫的使用方法</h2><h3 id="管理后台"><a href="#管理后台" class="headerlink" title="管理后台"></a>管理后台</h3><p>打开 <code>live.kokonoyu.com/admin</code> 登录即可，只有主播本人能进。</p><p><strong>前台设置</strong></p><ul><li>开放观众点播：一键开关，关闭后前台就只显示列表、不显示点歌表单</li><li>前台公告：在页面顶部显示的通知，加粗展示</li><li>点播冷却时间：1 分钟 &#x2F; 2 分钟 &#x2F; 5 分钟 &#x2F; 10 分钟 &#x2F; 30 分钟 &#x2F; 1 小时 &#x2F; 12 小时 &#x2F; 1 天</li><li>点播总数上限：0 表示不限制（包含已播放的累计计数）</li></ul><p><strong>放映单管理</strong></p><ul><li>「下一个」：最常用的按钮。点一下，自动把下一首设为”正在演唱”、当前这首设为”已播”，还会弹出 BV 号方便复制或去 B 站打开</li><li>状态切换：等待演唱 &#x2F; 正在演唱 &#x2F; 已播</li><li>置顶：把某首歌固定在列表最上面</li><li>删除：连点两次确认，防止误删</li><li>一键删除已播放：批量清掉已播视频（同样两次确认）</li><li>复制：快速复制 BV 号</li></ul><p><img src="https://img.noyu.moe/live-admin.png" alt="管理后台示意"></p><h3 id="OBS-配信画面"><a href="#OBS-配信画面" class="headerlink" title="OBS 配信画面"></a>OBS 配信画面</h3><p>在 OBS 里添加「浏览器」源，地址填 <code>live.kokonoyu.com/display</code>，尺寸按喜好设置（例如 1280×720）。</p><p>画面会自动显示当前正在播放的视频和下一首，后台每切换一次状态，配信画面 5 秒内自动同步，直播时不需要手动操作。</p><p><img src="https://img.noyu.moe/live-obs.png" alt="OBS 展示页示意"></p><h2 id="版权与免责声明"><a href="#版权与免责声明" class="headerlink" title="版权与免责声明"></a>版权与免责声明</h2><ol><li>本网站内所使用的<strong>所有美术素材、图片、Logo、背景故事及设定等内容，版权均归主播 九重紫 及其合作画师所有。</strong></li><li>本站仅作粉丝安利与导航整理用途，没有任何商业盈利目的。</li><li>如果本站的内容有任何侵权或不妥之处，请随时通过上方 B 站链接私信联系我，我会在第一时间配合修改或删除。</li></ol>]]>
    </content>
    <id>https://blog.noyu.moe/2026/08/11/yi-jia-zi-fang-ying-ting/</id>
    <link href="https://blog.noyu.moe/2026/08/11/yi-jia-zi-fang-ying-ting/"/>
    <published>2026-08-11T04:00:00.000Z</published>
    <summary>
      <![CDATA[<p>给紫老师做了一个在线点播系统，名字叫「一家紫放映厅」。直播时粉丝可以在这里点想看的 B 站视频，阿紫在后台一键切换，配合 OBS 展示页，直播画面里就能实时显示”正在播放 &#x2F; 下一首”。</p>
<p>站点地址：</p>
<ul>
<li><a href="htt]]>
    </summary>
    <title>一家紫放映厅：给阿紫做的在线点播系统</title>
    <updated>2026-08-11T04:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p><strong>✅</strong> <strong>Nezha-zero 完整部署教程（Debian + NGINX + Cloudflare 单端口 gRPC）<br>注意：全文所有</strong> <a href="https://www.nodeseek.com/jump?to=http://nezha.example.com"><strong>nezha.example.com</strong></a> <strong>请全部替换为你的真实域名。</strong></p><h4 id="前置准备"><a href="#前置准备" class="headerlink" title="前置准备"></a><strong>前置准备</strong></h4><ol><li><p>Debian 服务器</p></li><li><p>域名 A 记录指向服务器公网 IP</p></li><li><p>Cloudflare 账号</p></li></ol><hr><h4 id="第一步：安装官方最新-NGINX"><a href="#第一步：安装官方最新-NGINX" class="headerlink" title="第一步：安装官方最新 NGINX"></a><strong>第一步：安装官方最新 NGINX</strong></h4><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">apt update</span><br><span class="line">apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring</span><br><span class="line">curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | <span class="built_in">tee</span> /usr/share/keyrings/nginx-archive-keyring.gpg &gt; /dev/null</span><br><span class="line"><span class="built_in">echo</span> <span class="string">"deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/debian <span class="subst">$(lsb_release -cs)</span> nginx"</span> | <span class="built_in">tee</span> /etc/apt/sources.list.d/nginx.list</span><br><span class="line">apt update</span><br><span class="line">apt install -y nginx</span><br><span class="line">nginx -v</span><br></pre></td></tr></tbody></table></figure><hr><h4 id="第二步：安装-Nezha-zero-Dashboard"><a href="#第二步：安装-Nezha-zero-Dashboard" class="headerlink" title="第二步：安装 Nezha-zero Dashboard"></a><strong>第二步：安装 Nezha-zero Dashboard</strong></h4><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -L https://ba.sh/naza -o naza.sh &amp;&amp; <span class="built_in">chmod</span> +x naza.sh &amp;&amp; ./naza.sh</span><br></pre></td></tr></tbody></table></figure><p>参数选择：</p><ul><li><p>安装方式：Docker</p></li><li><p>OAuth：n（需要使用OAuth请参考结尾）</p></li><li><p>密码登录：y（设置强密码）</p></li><li><p>站点访问端口：10086</p></li><li><p>Agent RPC 端口：10086（必须相同）<br>验证：</p></li></ul><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">docker ps | grep dashboard</span><br><span class="line">curl -I http://127.0.0.1:10086</span><br></pre></td></tr></tbody></table></figure><hr><h4 id="第三步：安装证书-配置-Nginx（注意换成你的域名）"><a href="#第三步：安装证书-配置-Nginx（注意换成你的域名）" class="headerlink" title="第三步：安装证书 + 配置 Nginx（注意换成你的域名）"></a><strong>第三步：安装证书 + 配置 Nginx（注意换成你的域名）</strong></h4><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">apt install -y certbot python3-certbot-nginx</span><br><span class="line">certbot --nginx -d nezha.example.com</span><br></pre></td></tr></tbody></table></figure><p>输入邮箱回车 y回车 y回车<br>创建配置文件：（注意换成你的域名）</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nano /etc/nginx/conf.d/nezha.example.com.conf</span><br></pre></td></tr></tbody></table></figure><p>粘贴以下内容（把所有 <a href="https://www.nodeseek.com/jump?to=http://nezha.example.com">nezha.example.com</a> 替换为你的域名）：</p><figure class="highlight nginx"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="section">server</span> {</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">80</span>;</span><br><span class="line">    <span class="attribute">listen</span> [::]:<span class="number">80</span>;</span><br><span class="line">    <span class="attribute">server_name</span> nezha.example.com;</span><br><span class="line">    <span class="attribute">return</span> <span class="number">301</span> https://<span class="variable">$host</span><span class="variable">$request_uri</span>;</span><br><span class="line">}</span><br><span class="line"><span class="section">server</span> {</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">443</span> ssl;</span><br><span class="line">    <span class="attribute">listen</span> [::]:<span class="number">443</span> ssl;</span><br><span class="line">    <span class="attribute">http2</span> <span class="literal">on</span>;</span><br><span class="line">    <span class="attribute">server_name</span> nezha.example.com;</span><br><span class="line">    <span class="attribute">ssl_certificate</span> /etc/letsencrypt/live/nezha.example.com/fullchain.pem;</span><br><span class="line">    <span class="attribute">ssl_certificate_key</span> /etc/letsencrypt/live/nezha.example.com/privkey.pem;</span><br><span class="line">    <span class="attribute">ssl_protocols</span> TLSv1.<span class="number">2</span> TLSv1.<span class="number">3</span>;</span><br><span class="line">    <span class="attribute">ssl_ciphers</span> HIGH:!aNULL:!MD5;</span><br><span class="line">    <span class="attribute">ssl_prefer_server_ciphers</span> <span class="literal">on</span>;</span><br><span class="line">    <span class="attribute">ssl_session_cache</span> shared:SSL:<span class="number">10m</span>;</span><br><span class="line">    <span class="attribute">ssl_session_timeout</span> <span class="number">10m</span>;</span><br><span class="line">    <span class="attribute">underscores_in_headers</span> <span class="literal">on</span>;</span><br><span class="line">    <span class="section">location</span><span class="regexp"> ^~</span> /proto.NezhaService/ {</span><br><span class="line">        <span class="attribute">grpc_pass</span> grpc://127.0.0.1:10086;</span><br><span class="line">        <span class="attribute">grpc_set_header</span> Host <span class="variable">$host</span>;</span><br><span class="line">        <span class="attribute">grpc_set_header</span> nz-realip <span class="variable">$http_cf_connecting_ip</span>;</span><br><span class="line">        <span class="attribute">grpc_set_header</span> client_secret <span class="variable">$http_client_secret</span>;</span><br><span class="line">        <span class="attribute">grpc_set_header</span> client_uuid <span class="variable">$http_client_uuid</span>;</span><br><span class="line">        <span class="attribute">client_body_timeout</span> <span class="number">3600s</span>;</span><br><span class="line">        <span class="attribute">grpc_read_timeout</span> <span class="number">3600s</span>;</span><br><span class="line">        <span class="attribute">grpc_send_timeout</span> <span class="number">3600s</span>;</span><br><span class="line">        <span class="attribute">grpc_socket_keepalive</span> <span class="literal">on</span>;</span><br><span class="line">        <span class="attribute">client_max_body_size</span> <span class="number">10m</span>;</span><br><span class="line">        <span class="attribute">grpc_buffer_size</span> <span class="number">4m</span>;</span><br><span class="line">    }</span><br><span class="line">    <span class="section">location</span> / {</span><br><span class="line">        <span class="attribute">proxy_pass</span> http://127.0.0.1:10086;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> Host <span class="variable">$host</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Real-IP <span class="variable">$http_cf_connecting_ip</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Forwarded-For <span class="variable">$http_cf_connecting_ip</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> REMOTE-HOST <span class="variable">$remote_addr</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> Upgrade <span class="variable">$http_upgrade</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> Connection <span class="string">"upgrade"</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Forwarded-Proto <span class="variable">$scheme</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Forwarded-Port <span class="variable">$server_port</span>;</span><br><span class="line">        <span class="attribute">proxy_http_version</span> <span class="number">1</span>.<span class="number">1</span>;</span><br><span class="line">        <span class="attribute">proxy_read_timeout</span> <span class="number">3600s</span>;</span><br><span class="line">        <span class="attribute">proxy_send_timeout</span> <span class="number">3600s</span>;</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>ctrl+o保存 回车 ctrl+x退出</p><p>启用配置：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">rm</span> -f /etc/nginx/conf.d/default.conf</span><br><span class="line">nginx -t</span><br><span class="line">systemctl stop nginx</span><br><span class="line">pkill -9 nginx</span><br><span class="line">systemctl start nginx</span><br></pre></td></tr></tbody></table></figure><hr><h4 id="第四步：配置-Dashboard"><a href="#第四步：配置-Dashboard" class="headerlink" title="第四步：配置 Dashboard"></a><strong>第四步：配置 Dashboard</strong></h4><ol><li><p>访问 <a href="https://www.nodeseek.com/jump?to=https://nezha.example.com">https://nezha.example.com</a> 登录</p></li><li><p>设置 → 「未接入 CDN 的面板服务器域名/IP」填写你的域名并保存</p></li><li><p>编辑配置：</p></li></ol><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">nano /opt/nezha/dashboard/data/config.yaml</span><br></pre></td></tr></tbody></table></figure><p>先删除已存在的 proxygrpcport 和 tls，然后在最上方添加：</p><figure class="highlight yaml"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">proxygrpcport:</span> <span class="number">443</span></span><br><span class="line"><span class="attr">tls:</span> <span class="literal">true</span></span><br></pre></td></tr></tbody></table></figure><p>ctrl+o保存 回车 ctrl+x退出<br>重启：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">cd</span> /opt/nezha/dashboard</span><br><span class="line">docker compose down &amp;&amp; docker compose up -d</span><br></pre></td></tr></tbody></table></figure><hr><h4 id="第五步：Cloudflare-配置"><a href="#第五步：Cloudflare-配置" class="headerlink" title="第五步：Cloudflare 配置"></a><strong>第五步：Cloudflare 配置</strong></h4><ol><li><p>DNS 改为橙色云</p></li><li><p>SSL/TLS → 完全(严格)</p></li><li><p>网络 → 开启 gRPC</p></li></ol><hr><h4 id="后期维护"><a href="#后期维护" class="headerlink" title="后期维护"></a><strong>后期维护</strong></h4><p><strong>更新 NGINX</strong>：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt update &amp;&amp; apt install nginx &amp;&amp; nginx -t &amp;&amp; systemctl restart nginx</span><br></pre></td></tr></tbody></table></figure><p><strong>更新 Nezha</strong>：</p><figure class="highlight bash"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">./naza.sh restart_and_update</span><br></pre></td></tr></tbody></table></figure><hr><p><strong>最终检查清单</strong></p><ul><li><p>[ ] 所有 <a href="https://www.nodeseek.com/jump?to=http://nezha.example.com">nezha.example.com</a> 已替换为真实域名</p></li><li><p>[ ] <a href="https://www.nodeseek.com/jump?to=https://xn--6qqv7i2xdt95b">https://你的域名</a> 可正常登录</p></li><li><p>[ ] config.yaml 中 proxygrpcport 和 tls 只出现一次</p></li><li><p>[ ] Cloudflare 已开启橙色云 + gRPC</p></li><li><p>[ ] Agent 可正常上线</p></li></ul><hr><p><strong>使用GitHub登录</strong></p><ol><li><p>打开 <a href="https://www.nodeseek.com/jump?to=https://github.com/settings/developers">https://github.com/settings/developers</a> ，依次选择 “OAuth Apps” - “New OAuth App”。</p></li><li><p>填写以下需要的字段：<br>Application name：应用名<br>Homepage URL：面板访问地址，例如 <code>https://nezha.example.com</code><br>Authorization callback URL 面板的 Callback 地址，这里只检测前缀，所以可以填写<br><code>https://nezha.example.com/oauth2/callback</code></p></li></ol>]]>
    </content>
    <id>https://blog.noyu.moe/2026/07/18/na-zha-tan-zhen-v0ban-ben-bu-shu-jiao-cheng/</id>
    <link href="https://blog.noyu.moe/2026/07/18/na-zha-tan-zhen-v0ban-ben-bu-shu-jiao-cheng/"/>
    <published>2026-07-18T01:13:00.000Z</published>
    <summary>
      <![CDATA[<p><strong>✅</strong> <strong>Nezha-zero 完整部署教程（Debian + NGINX + Cloudflare 单端口 gRPC）<br>注意：全文所有</strong> <a href="https://www.nodeseek.com/]]>
    </summary>
    <title>哪吒探针V0版本部署教程</title>
    <updated>2026-07-18T01:13:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="生活" scheme="https://blog.noyu.moe/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="美食" scheme="https://blog.noyu.moe/tags/%E7%BE%8E%E9%A3%9F/"/>
    <category term="生活" scheme="https://blog.noyu.moe/tags/%E7%94%9F%E6%B4%BB/"/>
    <content>
      <![CDATA[<p>我家里是做早餐店和小吃的，在这里会详细记录各种小吃的制作方法和调料配比。</p><h1 id="几种包子的制作（和面及馅料的做法）"><a href="#几种包子的制作（和面及馅料的做法）" class="headerlink" title="几种包子的制作（和面及馅料的做法）"></a>几种包子的制作（和面及馅料的做法）</h1><h2 id="前期准备"><a href="#前期准备" class="headerlink" title="前期准备"></a>前期准备</h2><h3 id="和面："><a href="#和面：" class="headerlink" title="和面："></a>和面：</h3><p>和面时：1000g面粉、10g酵母、2g改良剂、20g白糖、560g水。</p><p>和好后：7g泡打粉、0.7g小苏打。</p><p>之后放到揉面机内揉制表面光滑，然后醒面。</p><h3 id="琼脂冻的做法："><a href="#琼脂冻的做法：" class="headerlink" title="琼脂冻的做法："></a>琼脂冻的做法：</h3><p>12g琼脂条用1000g温水泡软，然后大火烧开熬化，全部化开之后小火再煮8分钟后关火放凉。</p><h3 id="辣椒油的做法："><a href="#辣椒油的做法：" class="headerlink" title="辣椒油的做法："></a>辣椒油的做法：</h3><p>100g粗辣椒面、35g细辣椒面、10g白芝麻、25g秘制拌酱、25g馋口酱、30g巴蜀红汤、30g川味香辣油。</p><h3 id="料油的做法："><a href="#料油的做法：" class="headerlink" title="料油的做法："></a>料油的做法：</h3><p>四头蒜、一根半大葱、一点生姜、一点香菜，之后放到凉油里面慢炸，炸到焦黄后捞出来。</p><h2 id="南方鲜肉包"><a href="#南方鲜肉包" class="headerlink" title="南方鲜肉包"></a>南方鲜肉包</h2><h3 id="配料："><a href="#配料：" class="headerlink" title="配料："></a>配料：</h3><ol><li><p>100g水、1g白酒。</p></li><li><p>20g一品鲜酱油、25g海天草菇老抽、10g海天蚝油、10g十三香老卤膏。</p></li><li><p>5g增鲜粉、0.5g增香粉、4g鸡鲜粉、2g白胡椒粉、1g肉味香、1g味素粉、3g包子料、1g花椒粉、2g蒜粉、6g白糖、2g姜粉。</p></li><li><p>60g猪油。</p></li><li><p>50g花生油。</p></li><li><p>200g琼脂冻。</p></li><li><p>80g大葱末、10g姜末。</p></li></ol><p>（油可以多放一些，500g肉，肉的比例为肥瘦2:3）</p><h3 id="打料："><a href="#打料：" class="headerlink" title="打料："></a>打料：</h3><p>先放1、2、3，打开打细之后放4，猪油打散之后放5、6、7，拌开即可。</p><h2 id="青菜香菇包"><a href="#青菜香菇包" class="headerlink" title="青菜香菇包"></a>青菜香菇包</h2><h2 id="配料：-1"><a href="#配料：-1" class="headerlink" title="配料："></a>配料：</h2><p>600g油菜、5g增香粉、3.5g盐、25g干香菇、3g包子料、8g白糖、30g料油、40g猪油、10g香油、</p><h3 id="做法："><a href="#做法：" class="headerlink" title="做法："></a>做法：</h3><ul><li><p>25g干香菇用温水泡开后为90g、600g油菜放到锅里用开水烫一下，盆里放冰水和一点小苏打，油菜捞出来之后马上投到冰水里，烫出来是400g（把水攥干）。</p></li><li><p>油菜和香菇切开之后拌开。</p></li><li><p>先放猪油，猪油拌开之后放入配料，拌好之后撒一点葱花。</p></li></ul><h2 id="豆腐包"><a href="#豆腐包" class="headerlink" title="豆腐包"></a>豆腐包</h2><h2 id="配料：-2"><a href="#配料：-2" class="headerlink" title="配料："></a>配料：</h2><p>500g焯过水的豆腐、30g料油或者猪油、10g馋口酱、10g香辣酱、5g增鲜粉、3g包子料、1g白胡椒粉、1g回味粉、5g蚝油、3g麻辣鲜、2g鸡精、2g十三香、3-5g老抽、3g花椒油。</p><h3 id="做法：-1"><a href="#做法：-1" class="headerlink" title="做法："></a>做法：</h3><ul><li><p>把两种酱放一起，其他的料子放一块。</p></li><li><p>把豆腐上锅蒸14分钟，先蒸后切。</p></li><li><p>把酱放到锅里炒一下，然后直接放到豆腐里面，再放一点辣椒油，放一点葱花即可。</p></li></ul><h2 id="梅干菜五花肉包子"><a href="#梅干菜五花肉包子" class="headerlink" title="梅干菜五花肉包子"></a>梅干菜五花肉包子</h2><h3 id="配料：-3"><a href="#配料：-3" class="headerlink" title="配料："></a>配料：</h3><p>160g梅干菜（洗干净蒸熟切碎250g）、3g姜粉、3g包子料、1g肉味香、1g胡椒粉、2g增鲜粉、3g味精、3g南德、10g料酒、5g辣椒油、60g猪油、适量香油。</p><h3 id="做法：-2"><a href="#做法：-2" class="headerlink" title="做法："></a>做法：</h3><p>先炒肉末，放入一品鲜、料酒、梅干菜，之后加水，水平梅干菜即可，水分炒干之后放入料粉，之后放油和辣椒油即可。</p><h2 id="豆芽粉丝包子"><a href="#豆芽粉丝包子" class="headerlink" title="豆芽粉丝包子"></a>豆芽粉丝包子</h2><h3 id="配料：-4"><a href="#配料：-4" class="headerlink" title="配料："></a>配料：</h3><p>500g豆芽焯水、115g干粉丝泡软、80g肉丁、6g盐、2g增鲜粉、2g胡椒粉、2g姜粉、1g肉味香、5g白糖、适量辣椒油、2g鸡粉、30g猪油、适量老抽生抽。</p><h3 id="做法：-3"><a href="#做法：-3" class="headerlink" title="做法："></a>做法：</h3><p>热锅凉油炒肉丁，六成熟后下姜末，之后倒入老抽生抽。</p><p>这个配方还可以做公婆饼。</p><h1 id="飘香面卤汤的制作（12斤汤）"><a href="#飘香面卤汤的制作（12斤汤）" class="headerlink" title="飘香面卤汤的制作（12斤汤）"></a>飘香面卤汤的制作（12斤汤）</h1><h2 id="配料：-5"><a href="#配料：-5" class="headerlink" title="配料："></a>配料：</h2><ol><li><p>5g八角、4g桂皮、2g香叶、4g小茴香、2g丁香、3g陈皮、2g甘草、3g草果、3g香砂仁、3g白扣、5g党参、3g山奈、15g青花椒、8g红花椒。</p></li><li><p>200g冰糖。</p></li><li><p>50g干辣椒。</p></li><li><p>20g卤料粉。</p></li><li><p>80g老卤膏、60g生抽、10g老抽、70g鸡精、100g味精、50g盐、35g增鲜粉、6g肉味香、8g透骨增香粉AAA、20g肉味万用油、6g增香粉、8g味素粉、20g白糖、100g甜面酱。</p></li><li><p>20g红曲米（泡水）。</p></li><li><p>35g草本麻辣油、30g馋口酱、25g香辣酱。</p></li></ol><h2 id="做法：-4"><a href="#做法：-4" class="headerlink" title="做法："></a>做法：</h2><ol><li><p>先把1、3、6这三个盆用开水泡半小时。</p></li><li><p>称12斤高汤（这里注意熬高汤的话老汤一个半小时，新汤两个半小时到三个小时），煮开之后把5放进去。</p></li><li><p>生姜一块，大葱一根，洋葱半个，三个香菜，锅里倒油把这些东西放进去炸，炸干炸香之后把1倒进去。炸到油变清亮，然后捞出来和4一起放到卤包中。</p></li><li><p>锅里再次倒油（刚刚炸料的油），加入3炸一会，然后倒入7，炒开之后倒入高汤锅里面，把泡红曲米的水倒到高汤锅里面，红曲米放到密漏里面放到高汤锅里面涮一下，之后扔掉。</p></li><li><p>熬糖色：把冰糖放到锅中，加凉水，小火慢熬不要动，直到中间没有泡泡的时候放入水。</p></li><li><p>把糖色倒入高汤锅中，开始计时，小火煮一个小时。</p></li><li><p>把五花肉和鸡蛋凉水下锅，烧开后转小火，煮到用筷子插入肉就能取下的程度后关火捞出放入冰箱，等肉凉了之后拿出来切片。</p></li><li><p>肉和鸡蛋抹上老抽下锅炸，炸好之后放入凉水中泡一泡。</p></li><li><p>肉和鸡蛋放到锅中卤四十分钟，卤三十五分钟之后把鸡腿鸭腿豆干火腿肠这些放进去，四十分钟后关火再焖四十分钟。</p></li></ol><h1 id="酸辣粉的制作"><a href="#酸辣粉的制作" class="headerlink" title="酸辣粉的制作"></a>酸辣粉的制作</h1><h2 id="主料："><a href="#主料：" class="headerlink" title="主料："></a>主料：</h2><p>酸辣粉（凉水泡六个小时以上）、蒜水、姜末、小葱、香菜、保宁醋、腐乳水、酸豆角、花生米、大料水。</p><h2 id="底汤的制作：（三斤高汤）"><a href="#底汤的制作：（三斤高汤）" class="headerlink" title="底汤的制作：（三斤高汤）"></a>底汤的制作：（三斤高汤）</h2><p>20g盐、20g香油、20g味极鲜酱油、9g花椒油、40g巴蜀红汤、3g花椒粉、5g白糖、30g增鲜粉、10g豉香酱、10g香辣酱、2g飘香粉、5g回味粉。</p><h2 id="大料水：（五斤水）"><a href="#大料水：（五斤水）" class="headerlink" title="大料水：（五斤水）"></a>大料水：（五斤水）</h2><p>1g草果、1g白豆蔻、1g砂仁、1g香叶、1g肉蔻、2g花椒、1个八角、1g小茴香、1g香茅草、2g孜然、1g桂皮、25g生姜。</p><p>香料用水泡半小时，锅里放水，把香料包放入水中大火烧开后再煮四分钟，然后把料包捞出，香料水就做好了。</p><h2 id="碗底："><a href="#碗底：" class="headerlink" title="碗底："></a>碗底：</h2><p>一勺腐乳水、一勺保宁醋、半勺味极鲜、四到五勺香料水、一勺蒜水、适量底汤。</p><p>表面放花生米、酸豆角、肉末、香菜、辣椒油。</p><h2 id="肉末制作："><a href="#肉末制作：" class="headerlink" title="肉末制作："></a>肉末制作：</h2><p>配料：30g生姜末、50g蒜末、60g洋葱、40g香菇末、半勺馋口酱、半勺香辣酱、200g瘦肉末、50g肥肉末。</p><p>锅中倒油，把肉倒进锅中炒一炒，炒一会之后放入洋葱末姜末蒜末，把锅中水汽炒干之后放入两种酱，炒开之后放入料酒、蚝油、老抽、生抽、鸡精、味精、糖，炒开之后放入一碗水，那水烧开后即可。</p><h1 id="干扣面的制作"><a href="#干扣面的制作" class="headerlink" title="干扣面的制作"></a>干扣面的制作</h1><h2 id="配料：-6"><a href="#配料：-6" class="headerlink" title="配料："></a>配料：</h2><ol><li><p>60g黄豆酱、5g甜面酱、20g蚝油。</p></li><li><p>30g红烧酱油、30g蒸鱼豉油、10g鱼露、20g生抽、20g老抽。</p></li><li><p>3g味素粉、4g透骨粉、6g增鲜粉、3g增香粉、2g肉香乙基增香剂、10g鸡精、5g白糖、13g南德、5g澳宴奇。</p></li><li><p>350g高汤。</p></li><li><p>半根大葱、半颗洋葱、一块生姜、三颗香菜，炸干切碎。（剩下的油即为料油）</p></li></ol><h2 id="汤底：（一斤汤）"><a href="#汤底：（一斤汤）" class="headerlink" title="汤底：（一斤汤）"></a>汤底：（一斤汤）</h2><p>3.5g盐、0.8g增鲜粉、0.4g白胡椒粉、0.3g味素粉、0.2g透骨粉、0.2g肉味香、0.5g养生高汤、0.2g肉味增香粉、1g鸡精、0.6g味精、0.2g白糖。</p><h2 id="酱料制作方法："><a href="#酱料制作方法：" class="headerlink" title="酱料制作方法："></a>酱料制作方法：</h2><p>先炒1，再炒半份5，再炒2，然后放入4，最后放3，等汤汁可以挂着勺子后即可。</p><p>面煮好之后两勺酱一勺料油，适当放入辣椒油。</p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/04/27/ji-zhong-xiao-chi-zhi-zuo-fang-fa-bei-fen/</id>
    <link href="https://blog.noyu.moe/2026/04/27/ji-zhong-xiao-chi-zhi-zuo-fang-fa-bei-fen/"/>
    <published>2026-04-27T05:16:00.000Z</published>
    <summary>
      <![CDATA[<p>我家里是做早餐店和小吃的，在这里会详细记录各种小吃的制作方法和调料配比。</p>
<h1 id="几种包子的制作（和面及馅料的做法）"><a href="#几种包子的制作（和面及馅料的做法）" class="headerlink" title="几种包子的制作（和面及馅料的]]>
    </summary>
    <title>几种小吃制作方法备份</title>
    <updated>2026-04-27T05:16:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/categories/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/categories/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <category term="生活" scheme="https://blog.noyu.moe/tags/%E7%94%9F%E6%B4%BB/"/>
    <category term="九重紫" scheme="https://blog.noyu.moe/tags/%E4%B9%9D%E9%87%8D%E7%B4%AB/"/>
    <content>
      <![CDATA[<p>站点地址：<a href="https://www.kokonoyu.com/">www.kokonoyu.com</a></p><p>本文介绍我制作的九重紫（Kokonoe Yukari）非官方个人主页。该站点定位为粉丝应援与资料整理用途，非官方、非盈利，所有内容均可在站点内查看。</p><h2 id="站点结构"><a href="#站点结构" class="headerlink" title="站点结构"></a>站点结构</h2><p>网站采用多页面结构，通过顶部导航访问以下栏目：</p><ul><li>主页：角色形象展示、简短介绍、个人档案、直播内容与相关梗的整理，以及活跃天数等数据。</li><li>作品：九重紫相关作品与内容的导航整理。</li><li>音乐：音乐作品展示与在线播放。</li><li>画廊：图片作品展示，支持点击查看大图。</li><li>历程：按时间线整理的重要节点与活动记录。</li><li>留言板：访客留言与交流。</li><li>关于本站：站点说明与相关信息。</li></ul><p>同时提供简体中文与日语两套界面语言，可通过页面顶部的语言按钮切换。</p><h2 id="功能设计"><a href="#功能设计" class="headerlink" title="功能设计"></a>功能设计</h2><p><strong>音乐模块</strong></p><p>音乐资源托管于 Cloudflare R2，通过页面内置播放器播放。播放过程中切换页面不会中断，页面右下角会显示迷你播放器，支持切歌、暂停与播放模式切换。</p><p><strong>画廊模块</strong></p><p>图片资源同样来自 Cloudflare R2，采用画廊式布局与懒加载机制，点击缩略图可查看大图，并针对手机屏幕进行了适配。</p><p><strong>留言板模块</strong></p><p>支持访客选择头像并提交留言，留言内容在页面内即时展示，便于粉丝之间交流。</p><p><strong>历程与作品</strong></p><p>历程页按时间线整理重要节点与活动记录；作品页提供相关内容导航。</p><p><strong>响应式适配</strong></p><p>全站采用响应式设计，手机端对导航、图片、按钮与文字排版均做了单独优化，保证不同屏幕尺寸下的浏览体验。</p><h2 id="视觉与交互设计"><a href="#视觉与交互设计" class="headerlink" title="视觉与交互设计"></a>视觉与交互设计</h2><p>视觉风格以亮色二次元与 VTuber 角色站为方向，主色调为粉色、紫色与浅蓝，配合少量渐变效果，整体呈现温暖、梦幻的氛围。标题与导航使用圆体风格字体，中文可读性良好。</p><p>页面装饰元素包括樱花树与飘落的花瓣、左下角的 sirotan 形象等，均为轻量动画，不影响页面性能。交互方面实现了卡片悬浮、页面淡入过渡、图片悬停效果，以及鼠标跟随等细节反馈。sirotan 的视线会随鼠标位置移动，属于基于前端叠加层实现的轻量交互效果，不依赖额外运行库。</p><h2 id="技术说明"><a href="#技术说明" class="headerlink" title="技术说明"></a>技术说明</h2><ul><li>音视频与图片资源均存于 Cloudflare R2，站点本身保持轻量。</li><li>图片使用懒加载，音乐与画廊页面按需加载资源。</li><li>页面结构清晰，便于后续维护与扩展。</li><li>站点支持 Cloudflare &#x2F; Vercel 等常见静态托管环境。</li></ul><h2 id="后续计划"><a href="#后续计划" class="headerlink" title="后续计划"></a>后续计划</h2><p>后续计划包括完善画廊投稿渠道、补充音乐封面信息，以及在获得授权后推进更正式的作品导航与音乐站建设。目前尚未获得主播的正式授权回复，站点将继续保持非官方、非盈利的粉丝向定位。</p><h2 id="版权与免责声明"><a href="#版权与免责声明" class="headerlink" title="版权与免责声明"></a>版权与免责声明</h2><ol><li>本网站内所使用的美术素材、图片、Logo、背景故事及设定等内容，版权均归主播九重紫（Kokonoe Yukari）及其合作画师所有。</li><li>本站仅作粉丝安利与资料整理用途，无任何商业盈利目的。</li><li>如内容存在侵权或不妥之处，可通过 B 站私信联系作者，作者将第一时间配合修改或删除。</li></ol>]]>
    </content>
    <id>https://blog.noyu.moe/2026/04/19/zuo-liao-yi-ge-jiu-chong-zi-de-ge-ren-zhu-ye/</id>
    <link href="https://blog.noyu.moe/2026/04/19/zuo-liao-yi-ge-jiu-chong-zi-de-ge-ren-zhu-ye/"/>
    <published>2026-04-19T04:00:00.000Z</published>
    <summary>
      <![CDATA[<p>站点地址：<a href="https://www.kokonoyu.com/">www.kokonoyu.com</a></p>
<p>本文介绍我制作的九重紫（Kokonoe Yukari）非官方个人主页。该站点定位为粉丝应援与资料整理用途，非官方、非盈利，所有内容均可在]]>
    </summary>
    <title>做了一个九重紫的个人主页</title>
    <updated>2026-04-19T04:00:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>本文主要内容转载自：<a href="https://ryanz.de/archives/33.html">https://ryanz.de/archives/33.html</a>，感谢 ryanz 大佬的教程指导。</p><p>本文仅作备份之用，无意侵占或剽窃原作者成果。</p><p>教程适用于使用1panel反代的方式，证书为公开 CA 签发的免费证书。</p><h2 id="Cloudflare内设置："><a href="#Cloudflare内设置：" class="headerlink" title="Cloudflare内设置："></a>Cloudflare内设置：</h2><ul><li><p>点击域名——网络——开启 gRPC和WebSockets。</p></li><li><p>SSL/TLS——概述——将SSL/TLS加密模式改为完全。</p></li><li><p>将域名托管至Cloudflare后开启小黄云。</p></li></ul><h2 id="1Panel-域名配置文件"><a href="#1Panel-域名配置文件" class="headerlink" title="1Panel 域名配置文件"></a>1Panel 域名配置文件</h2><p>打开 1Panel 你添加的哪吒面板域名——配置文件，加上代码：</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"># 定义真实 IP 变量</span><br><span class="line">map $http_x_real_ip $temp_ip {</span><br><span class="line">    ""      $http_cf_connecting_ip;</span><br><span class="line">    default $http_x_real_ip;</span><br><span class="line">}</span><br><span class="line">map $temp_ip $temp_ip2 {</span><br><span class="line">    ""      $http_x_forwarded_for;</span><br><span class="line">    default $temp_ip;</span><br><span class="line">}</span><br><span class="line">map $temp_ip2 $real_ip {</span><br><span class="line">    ""      $remote_addr;</span><br><span class="line">    default $temp_ip2;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"># 允许头部包含下划线</span><br><span class="line">underscores_in_headers on; </span><br><span class="line"></span><br><span class="line"># 定义上游服务器</span><br><span class="line">upstream dashboard {</span><br><span class="line">    keepalive 512; </span><br><span class="line">    server 127.0.0.1:8008; </span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><p>如果你使用的是其它面板（比如宝塔）或程序，完整的配置文件结构应该是这样的:</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br></pre></td><td class="code"><pre><span class="line">http {</span><br><span class="line">    # 其他全局配置...</span><br><span class="line">    </span><br><span class="line">    # 真实 IP 获取</span><br><span class="line">    map $http_x_real_ip $temp_ip {</span><br><span class="line">      ""      $http_cf_connecting_ip;</span><br><span class="line">      default $http_x_real_ip;</span><br><span class="line">    }</span><br><span class="line">    map $temp_ip $temp_ip2 {</span><br><span class="line">      ""      $http_x_forwarded_for;</span><br><span class="line">      default $temp_ip;</span><br><span class="line">    }</span><br><span class="line">    map $temp_ip2 $real_ip {</span><br><span class="line">      ""      $remote_addr;</span><br><span class="line">      default $temp_ip2;</span><br><span class="line">    }</span><br><span class="line">    </span><br><span class="line">    # 允许头部包含下划线</span><br><span class="line">    underscores_in_headers on;</span><br><span class="line">    </span><br><span class="line">    # 定义上游服务器</span><br><span class="line">    upstream dashboard {</span><br><span class="line">        keepalive 512;</span><br><span class="line">        server 127.0.0.1:8008;</span><br><span class="line">    }</span><br><span class="line">    </span><br><span class="line">    # 其他全局配置...</span><br><span class="line">    </span><br><span class="line">    server {</span><br><span class="line">        # server配置...</span><br><span class="line">        </span><br><span class="line">        # 反向代理配置(location块)...</span><br><span class="line">    }</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h2 id="1Panel-域名反向代理源文"><a href="#1Panel-域名反向代理源文" class="headerlink" title="1Panel 域名反向代理源文"></a>1Panel 域名反向代理源文</h2><p>域名——反向代理——源文，使用下面的配置替换：</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line">location ^~ / {</span><br><span class="line">    proxy_pass http://127.0.0.1:8008;</span><br><span class="line">    proxy_set_header Host $host;</span><br><span class="line">    proxy_set_header X-Real-IP $real_ip;</span><br><span class="line">    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span><br><span class="line">    proxy_set_header REMOTE-HOST $remote_addr;</span><br><span class="line">    proxy_set_header Upgrade $http_upgrade;</span><br><span class="line">    proxy_set_header Connection "upgrade";</span><br><span class="line">    proxy_set_header X-Forwarded-Proto $scheme;</span><br><span class="line">    proxy_http_version 1.1;</span><br><span class="line">    proxy_read_timeout 1800s;</span><br><span class="line">    proxy_send_timeout 1800s;</span><br><span class="line">    proxy_buffer_size 128k;</span><br><span class="line">    proxy_buffers 4 128k;</span><br><span class="line">    proxy_busy_buffers_size 256k;</span><br><span class="line">    proxy_max_temp_file_size 0;</span><br><span class="line">    add_header X-Cache $upstream_cache_status;</span><br><span class="line">    add_header Cache-Control "private, no-store";</span><br><span class="line">    proxy_ssl_server_name on;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"># gRPC 服务</span><br><span class="line">location ^~ /proto.NezhaService/ {</span><br><span class="line">    grpc_set_header Host $host;</span><br><span class="line">    grpc_set_header X-Real-IP $real_ip;</span><br><span class="line">    grpc_read_timeout 600s;</span><br><span class="line">    grpc_send_timeout 600s;</span><br><span class="line">    grpc_socket_keepalive on;</span><br><span class="line">    client_max_body_size 10m;</span><br><span class="line">    grpc_buffer_size 4m;</span><br><span class="line">    grpc_pass grpc://dashboard;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line"># WebSocket 服务</span><br><span class="line">location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ {</span><br><span class="line">    proxy_set_header Host $host;</span><br><span class="line">    proxy_set_header X-Real-IP $real_ip;</span><br><span class="line">    proxy_set_header Origin https://$host;</span><br><span class="line">    proxy_set_header Upgrade $http_upgrade;</span><br><span class="line">    proxy_set_header Connection "upgrade";</span><br><span class="line">    proxy_read_timeout 1800s;</span><br><span class="line">    proxy_send_timeout 1800s;</span><br><span class="line">    proxy_pass http://127.0.0.1:8008;</span><br><span class="line">}</span><br></pre></td></tr></tbody></table></figure><h2 id="面板后台设置"><a href="#面板后台设置" class="headerlink" title="面板后台设置"></a>面板后台设置</h2><ul><li><p>前端真实 IP 请求头设置为&nbsp;<code>X-Real-IP</code></p></li><li><p>Agent 真实 IP 请求头设置为&nbsp;<code>X-Real-IP</code></p></li></ul><p>无论是否开启 CDN 都无需修改任何设置，因为我们通过 Nginx 的 map 指令动态确定了&nbsp;<code>X-Real-IP</code>&nbsp;头部的值。</p><p>至此，所有设置完成。</p><p>这个统一配置的好处是简化了管理，不需要在切换 CDN 状态时手动修改 Nginx 配置和哪吒面板设置，系统会自动选择正确的 IP 来源。</p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/03/26/na-zha-tan-zhen-agent-lian-jie-di-zhi-shi-yong-yu-ming-bing-qi-yong-cfxiao-huang-yun/</id>
    <link href="https://blog.noyu.moe/2026/03/26/na-zha-tan-zhen-agent-lian-jie-di-zhi-shi-yong-yu-ming-bing-qi-yong-cfxiao-huang-yun/"/>
    <published>2026-03-26T02:31:00.000Z</published>
    <summary>
      <![CDATA[<p>本文主要内容转载自：<a href="https://ryanz.de/archives/33.html">https://ryanz.de/archives/33.html</a>，感谢 ryanz 大佬的教程指导。</p>
<p>本文仅作备份之用，无意侵占或剽窃原作者成]]>
    </summary>
    <title>哪吒探针V1版本Agent 连接地址使用域名并启用CF代理的教程</title>
    <updated>2026-03-26T02:31:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<h1 id="寻找你想更换的字体"><a href="#寻找你想更换的字体" class="headerlink" title="寻找你想更换的字体"></a>寻找你想更换的字体</h1><p>到<a href="https://www.zfont.cn/">https://www.zfont.cn/</a>找一款你想更换的字体。</p><p>本站使用的字体为<a href="https://www.zfont.cn/cn/font_559.html">猫啃珠圆体</a>，个人觉得很清爽，看着很舒服。</p><p>下载完成后的格式可能为ttf，建议更改为.woff2或.woff格式，可以使用这个网站进行格式转换<a href="https://transfonter.org/">https://transfonter.org/</a>。</p><p>然后把转换好的字体文件上传到Halo后台附件内。</p><h1 id="设置主题字体"><a href="#设置主题字体" class="headerlink" title="设置主题字体"></a>设置主题字体</h1><p>在halo后台找到“设置&gt;代码注入&gt;全局 head 标签”粘贴以下代码（xxx改为自己下载的字体文件）</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&lt;style&gt;</span><br><span class="line">@font-face {</span><br><span class="line">    font-family: 'CustomFont';</span><br><span class="line">    src: url('/upload/xxx.woff2'),</span><br><span class="line">         url('/upload/xxx.woff');</span><br><span class="line">    font-weight: normal;</span><br><span class="line">    font-style: normal;</span><br><span class="line">}</span><br><span class="line">*{</span><br><span class="line">    font-family: 'CustomFont' !important;</span><br><span class="line">}</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></tbody></table></figure><p>完成之后你的小站的字体应该已经更换成功了！</p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/02/26/halo-geng-huan-xi-tong-mo-ren-zi-ti/</id>
    <link href="https://blog.noyu.moe/2026/02/26/halo-geng-huan-xi-tong-mo-ren-zi-ti/"/>
    <published>2026-02-26T01:01:00.000Z</published>
    <summary>
      <![CDATA[<h1 id="寻找你想更换的字体"><a href="#寻找你想更换的字体" class="headerlink" title="寻找你想更换的字体"></a>寻找你想更换的字体</h1><p>到<a href="https://www.zfont.cn/">https://w]]>
    </summary>
    <title>Halo 更换系统默认字体</title>
    <updated>2026-02-26T01:01:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="转载" scheme="https://blog.noyu.moe/categories/%E8%BD%AC%E8%BD%BD/"/>
    <category term="音乐" scheme="https://blog.noyu.moe/categories/%E9%9F%B3%E4%B9%90/"/>
    <category term="转载" scheme="https://blog.noyu.moe/tags/%E8%BD%AC%E8%BD%BD/"/>
    <category term="音乐" scheme="https://blog.noyu.moe/tags/%E9%9F%B3%E4%B9%90/"/>
    <content>
      <![CDATA[<h3 id="网站"><a href="#网站" class="headerlink" title="网站"></a>网站</h3><p><a href="https://wyapi.toubiec.cn/">https://wyapi.toubiec.cn</a></p><p><a href="https://tunefree.fun/">https://tunefree.fun</a></p><p><a href="https://www.kanxizai.cn/163_music/">https://www.kanxizai.cn/163_music</a></p><p><a href="https://1music.cc/zh-CN">https://1music.cc/zh-CN</a></p><p><a href="https://flac.music.hi.cn/">https://flac.music.hi.cn/</a></p><p><a href="https://dmla.lanzouy.com/b05nb1e8d">https://dmla.lanzouy.com/b05nb1e8d</a></p><h3 id="NCM格式在线转换为MP3格式"><a href="#NCM格式在线转换为MP3格式" class="headerlink" title="NCM格式在线转换为MP3格式"></a>NCM格式在线转换为MP3格式</h3><p><a href="https://ncm.worthsee.com/">https://ncm.worthsee.com/</a></p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/02/03/wu-sun-yin-le-xia-zai-di-zhi/</id>
    <link href="https://blog.noyu.moe/2026/02/03/wu-sun-yin-le-xia-zai-di-zhi/"/>
    <published>2026-02-03T10:19:00.000Z</published>
    <summary>
      <![CDATA[<h3 id="网站"><a href="#网站" class="headerlink" title="网站"></a>网站</h3><p><a href="https://wyapi.toubiec.cn/">https://wyapi.toubiec.cn</a></p>
<]]>
    </summary>
    <title>无损音乐下载地址</title>
    <updated>2026-02-03T10:19:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="备份" scheme="https://blog.noyu.moe/categories/%E5%A4%87%E4%BB%BD/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <content>
      <![CDATA[<p>Demo：<a href="https://komari.noyu.moe/">komari.noyu.moe</a></p><p>虽然是哪吒的美化代码，但是Komari的Nezha主题也能用。</p><p>Komari的Nezha主题：<a href="https://github.com/BITJEBE/nezha-BITJEBE">https://github.com/BITJEBE/nezha-BITJEBE</a></p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br></pre></td><td class="code"><pre><span class="line">&lt;!-- 烟花特效 --&gt;</span><br><span class="line">&lt;script src="https://cdn.jsdelivr.net/gh/kamanfaiz/Nezha-Dash-UI@main/js/fireworks.js"&gt;&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;style&gt;  </span><br><span class="line">    /* ===== 抖音 Sans 字体 ===== */</span><br><span class="line">    @font-face {</span><br><span class="line">        font-family: 'Douyin Sans';</span><br><span class="line">        src: url('https://cdn.jsdelivr.net/gh/bytedance/fonts@main/DouyinSans/DouyinSansBold.ttf') format('truetype');</span><br><span class="line">        font-weight: bold;</span><br><span class="line">        font-style: normal;</span><br><span class="line">        font-display: swap; </span><br><span class="line">    }    </span><br><span class="line"></span><br><span class="line">    * {</span><br><span class="line">        font-family: 'Douyin Sans', sans-serif !important; </span><br><span class="line">    }</span><br><span class="line">    </span><br><span class="line">    h1, h2, h3, h4, h5 {</span><br><span class="line">        font-family: 'Douyin Sans', sans-serif !important;</span><br><span class="line">        font-weight: bold;</span><br><span class="line">    }</span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;script&gt;</span><br><span class="line">    /* ===== 基础配置 ===== */</span><br><span class="line">    window.CustomBackgroundImage = 'https://i.111666.best/image/1N8OaC7za3z5JT43aRrcZS.jpeg';</span><br><span class="line">    window.CustomMobileBackgroundImage = 'https://i.111666.best/image/K2faDOZrdCwi3oBhvXn1lf.jpeg';</span><br><span class="line">    window.CustomLogo = 'https://i.111666.best/image/aO68LlStwF4yeyhjWkDlDZ.png';</span><br><span class="line">    window.CustomDesc = "It's the only NEET thing to do.";</span><br><span class="line">    window.ShowNetTransfer = true;</span><br><span class="line">    window.DisableAnimatedMan = true;</span><br><span class="line"></span><br><span class="line">    /* ===== 强制设置 favicon（核心） ===== */</span><br><span class="line">    (function () {</span><br><span class="line">        const url = window.CustomLogo;</span><br><span class="line"></span><br><span class="line">        function setFavicon(href) {</span><br><span class="line">            let link = document.querySelector("link[rel*='icon']");</span><br><span class="line">            if (!link) {</span><br><span class="line">                link = document.createElement("link");</span><br><span class="line">                link.rel = "icon";</span><br><span class="line">                document.head.appendChild(link);</span><br><span class="line">            }</span><br><span class="line">            link.href = href;</span><br><span class="line">        }</span><br><span class="line"></span><br><span class="line">        // 页面加载后设置</span><br><span class="line">        window.addEventListener("load", () =&gt; {</span><br><span class="line">            setFavicon(url);</span><br><span class="line">        });</span><br><span class="line"></span><br><span class="line">        // 防止被哪吒前端覆盖（关键）</span><br><span class="line">        const observer = new MutationObserver(() =&gt; {</span><br><span class="line">            setFavicon(url);</span><br><span class="line">        });</span><br><span class="line"></span><br><span class="line">        observer.observe(document.head, { childList: true });</span><br><span class="line">    })();</span><br><span class="line"></span><br><span class="line">    /* ===== Footer 左侧隐藏 ===== */</span><br><span class="line">    const observerFooterLeft = new MutationObserver(() =&gt; {</span><br><span class="line">        const footerLeft = document.querySelector('.server-footer-name &gt; div:first-child');</span><br><span class="line">        if (footerLeft) {</span><br><span class="line">            footerLeft.style.visibility = 'hidden';</span><br><span class="line">            observerFooterLeft.disconnect();</span><br><span class="line">        }</span><br><span class="line">    });</span><br><span class="line">    observerFooterLeft.observe(document.body, { childList: true, subtree: true });</span><br><span class="line"></span><br><span class="line">    /* ===== Footer 右侧修改 ===== */</span><br><span class="line">    const observerFooterRight = new MutationObserver(() =&gt; {</span><br><span class="line">        const footerRight = document.querySelector('.server-footer-theme');</span><br><span class="line">        if (footerRight) {</span><br><span class="line">            footerRight.innerHTML = '&lt;section&gt;Powered by &lt;a href="https://github.com/komari-monitor/komari" target="_blank"&gt; Komari Monitor &lt;/a&gt;&lt;/section&gt;';</span><br><span class="line">            observerFooterRight.disconnect();</span><br><span class="line">        }</span><br><span class="line">    });</span><br><span class="line">    observerFooterRight.observe(document.body, { childList: true, subtree: true });</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;style&gt;</span><br><span class="line">    /* ===== 背景虚化 ===== */</span><br><span class="line">    .dark .bg-cover::after {</span><br><span class="line">        content: '';</span><br><span class="line">        position: absolute;</span><br><span class="line">        inset: 0;</span><br><span class="line">        backdrop-filter: blur(0px);</span><br><span class="line">        background-color: rgba(0, 0, 0, 0.6);</span><br><span class="line">    }</span><br><span class="line"></span><br><span class="line">    .light .bg-cover::after {</span><br><span class="line">        content: '';</span><br><span class="line">        position: absolute;</span><br><span class="line">        inset: 0;</span><br><span class="line">        backdrop-filter: blur(0px);</span><br><span class="line">        background-color: rgba(255, 255, 255, 0.3);</span><br><span class="line">    }</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></tbody></table></figure><p>最新</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br><span class="line">134</span><br><span class="line">135</span><br><span class="line">136</span><br><span class="line">137</span><br><span class="line">138</span><br><span class="line">139</span><br><span class="line">140</span><br><span class="line">141</span><br><span class="line">142</span><br><span class="line">143</span><br><span class="line">144</span><br><span class="line">145</span><br><span class="line">146</span><br><span class="line">147</span><br><span class="line">148</span><br><span class="line">149</span><br><span class="line">150</span><br><span class="line">151</span><br><span class="line">152</span><br><span class="line">153</span><br><span class="line">154</span><br><span class="line">155</span><br><span class="line">156</span><br><span class="line">157</span><br><span class="line">158</span><br><span class="line">159</span><br><span class="line">160</span><br><span class="line">161</span><br><span class="line">162</span><br><span class="line">163</span><br><span class="line">164</span><br><span class="line">165</span><br><span class="line">166</span><br><span class="line">167</span><br><span class="line">168</span><br><span class="line">169</span><br><span class="line">170</span><br><span class="line">171</span><br><span class="line">172</span><br><span class="line">173</span><br><span class="line">174</span><br><span class="line">175</span><br><span class="line">176</span><br><span class="line">177</span><br><span class="line">178</span><br><span class="line">179</span><br><span class="line">180</span><br><span class="line">181</span><br><span class="line">182</span><br><span class="line">183</span><br><span class="line">184</span><br><span class="line">185</span><br><span class="line">186</span><br><span class="line">187</span><br><span class="line">188</span><br><span class="line">189</span><br><span class="line">190</span><br><span class="line">191</span><br><span class="line">192</span><br><span class="line">193</span><br><span class="line">194</span><br><span class="line">195</span><br><span class="line">196</span><br><span class="line">197</span><br><span class="line">198</span><br><span class="line">199</span><br><span class="line">200</span><br><span class="line">201</span><br><span class="line">202</span><br><span class="line">203</span><br><span class="line">204</span><br><span class="line">205</span><br><span class="line">206</span><br><span class="line">207</span><br><span class="line">208</span><br><span class="line">209</span><br><span class="line">210</span><br><span class="line">211</span><br><span class="line">212</span><br><span class="line">213</span><br><span class="line">214</span><br><span class="line">215</span><br><span class="line">216</span><br><span class="line">217</span><br><span class="line">218</span><br><span class="line">219</span><br><span class="line">220</span><br><span class="line">221</span><br><span class="line">222</span><br><span class="line">223</span><br><span class="line">224</span><br><span class="line">225</span><br><span class="line">226</span><br><span class="line">227</span><br><span class="line">228</span><br><span class="line">229</span><br><span class="line">230</span><br><span class="line">231</span><br><span class="line">232</span><br><span class="line">233</span><br><span class="line">234</span><br><span class="line">235</span><br><span class="line">236</span><br><span class="line">237</span><br><span class="line">238</span><br><span class="line">239</span><br><span class="line">240</span><br><span class="line">241</span><br><span class="line">242</span><br><span class="line">243</span><br><span class="line">244</span><br><span class="line">245</span><br><span class="line">246</span><br><span class="line">247</span><br><span class="line">248</span><br><span class="line">249</span><br><span class="line">250</span><br><span class="line">251</span><br><span class="line">252</span><br><span class="line">253</span><br><span class="line">254</span><br><span class="line">255</span><br><span class="line">256</span><br><span class="line">257</span><br><span class="line">258</span><br><span class="line">259</span><br><span class="line">260</span><br><span class="line">261</span><br><span class="line">262</span><br><span class="line">263</span><br><span class="line">264</span><br><span class="line">265</span><br><span class="line">266</span><br><span class="line">267</span><br><span class="line">268</span><br><span class="line">269</span><br><span class="line">270</span><br><span class="line">271</span><br><span class="line">272</span><br><span class="line">273</span><br><span class="line">274</span><br><span class="line">275</span><br><span class="line">276</span><br><span class="line">277</span><br><span class="line">278</span><br><span class="line">279</span><br><span class="line">280</span><br><span class="line">281</span><br><span class="line">282</span><br><span class="line">283</span><br><span class="line">284</span><br><span class="line">285</span><br><span class="line">286</span><br><span class="line">287</span><br><span class="line">288</span><br><span class="line">289</span><br><span class="line">290</span><br><span class="line">291</span><br><span class="line">292</span><br><span class="line">293</span><br><span class="line">294</span><br><span class="line">295</span><br><span class="line">296</span><br><span class="line">297</span><br><span class="line">298</span><br><span class="line">299</span><br><span class="line">300</span><br><span class="line">301</span><br><span class="line">302</span><br><span class="line">303</span><br><span class="line">304</span><br><span class="line">305</span><br><span class="line">306</span><br><span class="line">307</span><br><span class="line">308</span><br><span class="line">309</span><br><span class="line">310</span><br><span class="line">311</span><br><span class="line">312</span><br><span class="line">313</span><br><span class="line">314</span><br><span class="line">315</span><br><span class="line">316</span><br><span class="line">317</span><br><span class="line">318</span><br><span class="line">319</span><br><span class="line">320</span><br><span class="line">321</span><br><span class="line">322</span><br><span class="line">323</span><br><span class="line">324</span><br><span class="line">325</span><br><span class="line">326</span><br><span class="line">327</span><br><span class="line">328</span><br><span class="line">329</span><br><span class="line">330</span><br><span class="line">331</span><br><span class="line">332</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line"></span><br><span class="line">// PC 背景</span><br><span class="line">window.CustomBackgroundImage = 'https://i.111666.best/image/F5M9rEF5XRjdJ2uqJ8v90F.jpeg';</span><br><span class="line"></span><br><span class="line">// 手机背景</span><br><span class="line">window.CustomMobileBackgroundImage = 'https://i.111666.best/image/nOM2DlBpXSxJcA4y9MO05H.jpg';</span><br><span class="line"></span><br><span class="line">// Logo</span><br><span class="line">window.CustomLogo = 'https://i.111666.best/image/aO68LlStwF4yeyhjWkDlDZ.png';</span><br><span class="line"></span><br><span class="line">window.CustomDesc = "It's the only NEET thing to do.";</span><br><span class="line">window.ShowNetTransfer = true;</span><br><span class="line">window.DisableAnimatedMan = true;</span><br><span class="line">window.FixedTopServerName = false;</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;!-- 烟花特效 --&gt;</span><br><span class="line">&lt;script src="https://cdn.jsdelivr.net/gh/kamanfaiz/Nezha-Dash-UI@main/js/fireworks.js"&gt;&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;style&gt;</span><br><span class="line"></span><br><span class="line">/* ===== 背景虚化 ===== */</span><br><span class="line"></span><br><span class="line">.dark .bg-cover::after{</span><br><span class="line">content:'';</span><br><span class="line">position:absolute;</span><br><span class="line">inset:0;</span><br><span class="line">backdrop-filter:blur(6px);</span><br><span class="line">background-color:rgba(0,0,0,0.6);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">.light .bg-cover::after{</span><br><span class="line">content:'';</span><br><span class="line">position:absolute;</span><br><span class="line">inset:0;</span><br><span class="line">backdrop-filter:blur(6px);</span><br><span class="line">background-color:rgba(255,255,255,0.3);</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 隐藏右上角按钮 */</span><br><span class="line">[id="radix-:r0:"],</span><br><span class="line">[id="radix-:r2:"]{</span><br><span class="line">display:none;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 控制按钮隐藏 */</span><br><span class="line">.server-overview-controls section.flex.items-center.gap-2.w-full.overflow-hidden button:nth-child(-n+3){</span><br><span class="line">display:none!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 隐藏 overview */</span><br><span class="line">p.text-base.font-semibold,</span><br><span class="line">p.text-sm.font-medium.opacity-50{</span><br><span class="line">display:none!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* ===== 时间样式修复 ===== */</span><br><span class="line"></span><br><span class="line">.flex.text-sm.font-medium.mt-0\.5{</span><br><span class="line">font-size:1.3rem!important;</span><br><span class="line">font-weight:bold;</span><br><span class="line">opacity:.9!important;</span><br><span class="line">justify-content:center!important;</span><br><span class="line">align-items:center!important;</span><br><span class="line">color:#222!important;</span><br><span class="line">line-height:1!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">html.dark .flex.text-sm.font-medium.mt-0\.5{</span><br><span class="line">color:#fff!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 数字居中 */</span><br><span class="line"></span><br><span class="line">.number__inner{</span><br><span class="line">display:inline-block!important;</span><br><span class="line">width:2ch!important;</span><br><span class="line">text-align:center!important;</span><br><span class="line">vertical-align:middle!important;</span><br><span class="line">line-height:1!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 冒号对齐 */</span><br><span class="line"></span><br><span class="line">.number-flow-react svg{</span><br><span class="line">height:1.3rem!important;</span><br><span class="line">vertical-align:middle!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 隐藏右下角图片按钮 */</span><br><span class="line"></span><br><span class="line">button:has(.lucide-image-minus),</span><br><span class="line">button.rounded-\[50px\][aria-haspopup="dialog"]{</span><br><span class="line">display:none!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 隐藏控制按钮 */</span><br><span class="line"></span><br><span class="line">.server-overview-controls{</span><br><span class="line">display:none!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* 隐藏 Theme - nezha-dash */</span><br><span class="line"></span><br><span class="line">.server-footer-theme{</span><br><span class="line">display:none!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">/* Powered by 右对齐 */</span><br><span class="line"></span><br><span class="line">footer{</span><br><span class="line">display:flex!important;</span><br><span class="line">justify-content:flex-end!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;style&gt;</span><br><span class="line"></span><br><span class="line">/* 抖音 Sans 字体 */</span><br><span class="line"></span><br><span class="line">@font-face{</span><br><span class="line">font-family:'Douyin Sans';</span><br><span class="line">src:url('https://cdn.jsdelivr.net/gh/bytedance/fonts@main/DouyinSans/DouyinSansBold.ttf') format('truetype');</span><br><span class="line">font-weight:bold;</span><br><span class="line">font-style:normal;</span><br><span class="line">font-display:swap;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">*{</span><br><span class="line">font-family:'Douyin Sans',sans-serif!important;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">&lt;/style&gt;</span><br><span class="line"></span><br><span class="line">&lt;script&gt;</span><br><span class="line"></span><br><span class="line">/* GPU卡片自动删除 */</span><br><span class="line"></span><br><span class="line">(function(){</span><br><span class="line"></span><br><span class="line">const containerSelector="#root &gt; div &gt; main &gt; div.mx-auto.w-full.max-w-5xl.px-0.flex.flex-col.gap-4.server-info &gt; div:nth-child(3) &gt; section &gt; div:nth-child(2)"</span><br><span class="line"></span><br><span class="line">const pRelativeSelector="div &gt; section &gt; div.flex.items-center.justify-between &gt; section.flex.flex-col.items-center.gap-2 &gt; p"</span><br><span class="line"></span><br><span class="line">function processOne(container){</span><br><span class="line"></span><br><span class="line">if(!container)return false</span><br><span class="line"></span><br><span class="line">const p=container.querySelector(pRelativeSelector)||container.querySelector("p")</span><br><span class="line"></span><br><span class="line">if(!p)return false</span><br><span class="line"></span><br><span class="line">const text=(p.textContent||"").trim()</span><br><span class="line"></span><br><span class="line">if(/gpu/i.test(text)){</span><br><span class="line"></span><br><span class="line">container.remove()</span><br><span class="line"></span><br><span class="line">return true</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">return false</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">function findAndProcess(){</span><br><span class="line"></span><br><span class="line">const container=document.querySelector(containerSelector)</span><br><span class="line"></span><br><span class="line">if(!container)return false</span><br><span class="line"></span><br><span class="line">return processOne(container)</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">findAndProcess()</span><br><span class="line"></span><br><span class="line">const mo=new MutationObserver(()=&gt;{</span><br><span class="line"></span><br><span class="line">findAndProcess()</span><br><span class="line"></span><br><span class="line">})</span><br><span class="line"></span><br><span class="line">mo.observe(document.body,{childList:true,subtree:true})</span><br><span class="line"></span><br><span class="line">})()</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br><span class="line"></span><br><span class="line">&lt;script&gt;</span><br><span class="line"></span><br><span class="line">/* UI布局脚本 */</span><br><span class="line"></span><br><span class="line">const selectorButton='#root &gt; div &gt; main &gt; div.mx-auto.w-full.max-w-5xl.px-0.flex.flex-col.gap-4.server-info &gt; section &gt; div.flex.justify-center.w-full.max-w-\\[200px\\] &gt; div &gt; div &gt; div.relative.cursor-pointer.rounded-3xl.px-2\\.5.py-\\[8px\\].text-\\[13px\\].font-\\[600\\].transition-all.duration-500.text-stone-400.dark\\:text-stone-500';</span><br><span class="line"></span><br><span class="line">const selectorSection='#root &gt; div &gt; main &gt; div.mx-auto.w-full.max-w-5xl.px-0.flex.flex-col.gap-4.server-info &gt; section';</span><br><span class="line"></span><br><span class="line">const selector3='#root &gt; div &gt; main &gt; div.mx-auto.w-full.max-w-5xl.px-0.flex.flex-col.gap-4.server-info &gt; div:nth-child(3)';</span><br><span class="line">const selector4='#root &gt; div &gt; main &gt; div.mx-auto.w-full.max-w-5xl.px-0.flex.flex-col.gap-4.server-info &gt; div:nth-child(4)';</span><br><span class="line"></span><br><span class="line">let hasClicked=false;</span><br><span class="line">let divVisible=false;</span><br><span class="line">let swapping=false;</span><br><span class="line"></span><br><span class="line">function forceBothVisible(){</span><br><span class="line"></span><br><span class="line">const div3=document.querySelector(selector3);</span><br><span class="line">const div4=document.querySelector(selector4);</span><br><span class="line"></span><br><span class="line">if(div3&amp;&amp;div4){</span><br><span class="line"></span><br><span class="line">div3.style.display='block';</span><br><span class="line">div4.style.display='block';</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">function hideSection(){</span><br><span class="line"></span><br><span class="line">const section=document.querySelector(selectorSection);</span><br><span class="line"></span><br><span class="line">if(section){</span><br><span class="line"></span><br><span class="line">section.style.display='none';</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">function tryClickButton(){</span><br><span class="line"></span><br><span class="line">const btn=document.querySelector(selectorButton);</span><br><span class="line"></span><br><span class="line">if(btn&amp;&amp;!hasClicked){</span><br><span class="line"></span><br><span class="line">btn.click();</span><br><span class="line"></span><br><span class="line">hasClicked=true;</span><br><span class="line"></span><br><span class="line">setTimeout(forceBothVisible,500);</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">function swapDiv3AndDiv4(){</span><br><span class="line"></span><br><span class="line">if(swapping)return;</span><br><span class="line"></span><br><span class="line">swapping=true;</span><br><span class="line"></span><br><span class="line">const div3=document.querySelector(selector3);</span><br><span class="line">const div4=document.querySelector(selector4);</span><br><span class="line"></span><br><span class="line">if(!div3||!div4){</span><br><span class="line"></span><br><span class="line">swapping=false;</span><br><span class="line">return;</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">const parent=div3.parentNode;</span><br><span class="line"></span><br><span class="line">if(parent!==div4.parentNode){</span><br><span class="line"></span><br><span class="line">swapping=false;</span><br><span class="line">return;</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">parent.insertBefore(div4,div3);</span><br><span class="line">parent.insertBefore(div3,div4.nextSibling);</span><br><span class="line"></span><br><span class="line">swapping=false;</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">const observer=new MutationObserver(()=&gt;{</span><br><span class="line"></span><br><span class="line">const div3=document.querySelector(selector3);</span><br><span class="line">const div4=document.querySelector(selector4);</span><br><span class="line"></span><br><span class="line">const isDiv3Visible=div3&amp;&amp;getComputedStyle(div3).display!=='none';</span><br><span class="line">const isDiv4Visible=div4&amp;&amp;getComputedStyle(div4).display!=='none';</span><br><span class="line"></span><br><span class="line">const isAnyDivVisible=isDiv3Visible||isDiv4Visible;</span><br><span class="line"></span><br><span class="line">if(isAnyDivVisible&amp;&amp;!divVisible){</span><br><span class="line"></span><br><span class="line">hideSection();</span><br><span class="line">tryClickButton();</span><br><span class="line">setTimeout(swapDiv3AndDiv4,100);</span><br><span class="line"></span><br><span class="line">}else if(!isAnyDivVisible&amp;&amp;divVisible){</span><br><span class="line"></span><br><span class="line">hasClicked=false;</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">divVisible=isAnyDivVisible;</span><br><span class="line"></span><br><span class="line">if(div3&amp;&amp;div4){</span><br><span class="line"></span><br><span class="line">if(!isDiv3Visible||!isDiv4Visible){</span><br><span class="line"></span><br><span class="line">forceBothVisible();</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">});</span><br><span class="line"></span><br><span class="line">const root=document.querySelector('#root');</span><br><span class="line"></span><br><span class="line">if(root){</span><br><span class="line"></span><br><span class="line">observer.observe(root,{</span><br><span class="line">childList:true,</span><br><span class="line">attributes:true,</span><br><span class="line">subtree:true,</span><br><span class="line">attributeFilter:['style','class']</span><br><span class="line">});</span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">&lt;/script&gt;</span><br></pre></td></tr></tbody></table></figure>]]>
    </content>
    <id>https://blog.noyu.moe/2026/02/02/na-zha-tan-zhen-v1mei-hua-dai-ma-bei-fen/</id>
    <link href="https://blog.noyu.moe/2026/02/02/na-zha-tan-zhen-v1mei-hua-dai-ma-bei-fen/"/>
    <published>2026-02-02T04:19:00.000Z</published>
    <summary>
      <![CDATA[<p>Demo：<a href="https://komari.noyu.moe/">komari.noyu.moe</a></p>
<p>虽然是哪吒的美化代码，但是Komari的Nezha主题也能用。</p>
<p>Komari的Nezha主题：<a href="https:/]]>
    </summary>
    <title>哪吒探针V1美化代码备份</title>
    <updated>2026-02-02T04:19:00.000Z</updated>
  </entry>
  <entry>
    <author>
      <name>油咖喱</name>
    </author>
    <category term="技术" scheme="https://blog.noyu.moe/categories/%E6%8A%80%E6%9C%AF/"/>
    <category term="转载" scheme="https://blog.noyu.moe/categories/%E8%BD%AC%E8%BD%BD/"/>
    <category term="技术" scheme="https://blog.noyu.moe/tags/%E6%8A%80%E6%9C%AF/"/>
    <category term="转载" scheme="https://blog.noyu.moe/tags/%E8%BD%AC%E8%BD%BD/"/>
    <content>
      <![CDATA[<p>转自：<a href="https://www.nodeseek.com/post-183694-1">https://www.nodeseek.com/post-183694-1</a></p><h2 id="1、DD重装脚本"><a href="#1、DD重装脚本" class="headerlink" title="1、DD重装脚本"></a>1、DD重装脚本</h2><p>史上最强脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh' &amp;&amp; chmod a+x InstallNET.sh &amp;&amp; bash InstallNET.sh -debian 12 -pwd 'password'</span><br></pre></td></tr></tbody></table></figure><p>萌咖大佬的脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 11 -v 64 -p 密码 -port 端口 -a -firmware</span><br></pre></td></tr></tbody></table></figure><p>beta.gs大佬的脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget --no-check-certificate -O NewReinstall.sh https://raw.githubusercontent.com/fcurrk/reinstall/master/NewReinstall.sh &amp;&amp; chmod a+x NewReinstall.sh &amp;&amp; bash NewReinstall.sh</span><br></pre></td></tr></tbody></table></figure><p>DD windows（使用史上最强DD脚本）</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sSL https://raw.githubusercontent.com/leitbogioro/Tools/master/Linux_reinstall/InstallNET.sh) -windows 10  -lang "cn"</span><br></pre></td></tr></tbody></table></figure><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">账户：Administrator</span><br><span class="line">密码：Teddysun.com</span><br></pre></td></tr></tbody></table></figure><p>使用Windows徽标+R快捷键打开运行框，输入powershell运行，弹出powershell命名输入窗口，输入以下命令：irm <a href="https://www.nodeseek.com/jump?to=https://get.activated.win">https://get.activated.win</a> | iex</p><h2 id="2、综合测试脚本"><a href="#2、综合测试脚本" class="headerlink" title="2、综合测试脚本"></a>2、综合测试脚本</h2><p><a href="https://www.nodeseek.com/jump?to=http://bench.sh">bench.sh</a></p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- bench.sh | bash</span><br></pre></td></tr></tbody></table></figure><p>LemonBench</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- https://raw.githubusercontent.com/LemonBench/LemonBench/main/LemonBench.sh | bash -s -- --fast</span><br></pre></td></tr></tbody></table></figure><p>融合怪</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(wget -qO- --no-check-certificate https://gitlab.com/spiritysdx/za/-/raw/main/ecs.sh)</span><br></pre></td></tr></tbody></table></figure><p>NodeBench</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL https://raw.githubusercontent.com/LloydAsp/NodeBench/main/NodeBench.sh)</span><br></pre></td></tr></tbody></table></figure><h2 id="3、性能测试"><a href="#3、性能测试" class="headerlink" title="3、性能测试"></a>3、性能测试</h2><p>yabs</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sL yabs.sh | bash</span><br></pre></td></tr></tbody></table></figure><p>跳过网络，测GB5</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sL yabs.sh | bash -s -- -i5</span><br></pre></td></tr></tbody></table></figure><p>跳过网络和磁盘，测GB5</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sL yabs.sh | bash -s -- -if5</span><br></pre></td></tr></tbody></table></figure><p>改测GB5不测GB6</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -sL yabs.sh | bash -s -- -5</span><br></pre></td></tr></tbody></table></figure><h2 id="4、流媒体及IP质量测试"><a href="#4、流媒体及IP质量测试" class="headerlink" title="4、流媒体及IP质量测试"></a>4、流媒体及IP质量测试</h2><p>最常用版本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -L -s check.unlock.media)</span><br></pre></td></tr></tbody></table></figure><p>原生检测脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL Media.Check.Place)</span><br></pre></td></tr></tbody></table></figure><p>准确度最高</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -L -s https://github.com/1-stream/RegionRestrictionCheck/raw/main/check.sh)</span><br></pre></td></tr></tbody></table></figure><p>IP质量体检脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL IP.Check.Place)</span><br></pre></td></tr></tbody></table></figure><p>一键修改解锁DNS</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://raw.githubusercontent.com/Jimmyzxk/DNS-Alice-Unlock/refs/heads/main/dns-unlock.sh &amp;&amp; bash dns-unlock.sh</span><br></pre></td></tr></tbody></table></figure><h2 id="5、测速脚本"><a href="#5、测速脚本" class="headerlink" title="5、测速脚本"></a>5、测速脚本</h2><p>Speedtest</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL bash.icu/speedtest)</span><br></pre></td></tr></tbody></table></figure><p>Taier</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL res.yserver.ink/taier.sh)</span><br></pre></td></tr></tbody></table></figure><p>hyperspeed</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -Lso- https://bench.im/hyperspeed)</span><br></pre></td></tr></tbody></table></figure><p>全球测速</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- nws.sh | bash</span><br></pre></td></tr></tbody></table></figure><p>区域速度测试</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- nws.sh | bash -s -- -r region_name</span><br></pre></td></tr></tbody></table></figure><p>Ping 和路由测试</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -qO- nws.sh | bash -s -- -rt [region]</span><br></pre></td></tr></tbody></table></figure><h2 id="6、回程测试"><a href="#6、回程测试" class="headerlink" title="6、回程测试"></a>6、回程测试</h2><p>直接显示回程（小白用这个）</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl https://raw.githubusercontent.com/ludashi2020/backtrace/main/install.sh -sSf | sh</span><br></pre></td></tr></tbody></table></figure><p>回程详细测试（推荐）</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N --no-check-certificate https://raw.githubusercontent.com/Chennhaoo/Shell_Bash/master/AutoTrace.sh &amp;&amp; chmod +x AutoTrace.sh &amp;&amp; bash AutoTrace.sh</span><br></pre></td></tr></tbody></table></figure><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://ghproxy.com/https://raw.githubusercontent.com/vpsxb/testrace/main/testrace.sh -O testrace.sh &amp;&amp; bash testrace.sh</span><br></pre></td></tr></tbody></table></figure><h2 id="7、功能脚本"><a href="#7、功能脚本" class="headerlink" title="7、功能脚本"></a>7、功能脚本</h2><p>添加SWAP</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget https://www.moerats.com/usr/shell/swap.sh &amp;&amp; bash swap.sh</span><br></pre></td></tr></tbody></table></figure><p>Fail2ban</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget --no-check-certificate https://raw.githubusercontent.com/FunctionClub/Fail2ban/master/fail2ban.sh &amp;&amp; bash fail2ban.sh 2&gt;&amp;1 | tee fail2ban.log</span><br></pre></td></tr></tbody></table></figure><p>一键开启BBR，适用于较新的Debian、Ubuntu</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">echo "net.core.default_qdisc=fq" &gt;&gt; /etc/sysctl.conf</span><br><span class="line">echo "net.ipv4.tcp_congestion_control=bbr" &gt;&gt; /etc/sysctl.conf</span><br><span class="line">sysctl -p</span><br><span class="line">sysctl net.ipv4.tcp_available_congestion_control</span><br><span class="line">lsmod | grep bbr</span><br></pre></td></tr></tbody></table></figure><p>多功能BBR安装脚本</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N --no-check-certificate "https://gist.github.com/zeruns/a0ec603f20d1b86de6a774a8ba27588f/raw/4f9957ae23f5efb2bb7c57a198ae2cffebfb1c56/tcp.sh" &amp;&amp; chmod +x tcp.sh &amp;&amp; ./tcp.sh</span><br></pre></td></tr></tbody></table></figure><p>锐速/BBRPLUS/BBR2/BBR3</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O tcpx.sh "https://github.com/ylx2016/Linux-NetSpeed/raw/master/tcpx.sh" &amp;&amp; chmod +x tcpx.sh &amp;&amp; ./tcpx.sh</span><br></pre></td></tr></tbody></table></figure><p>TCP窗口调优</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget http://sh.nekoneko.cloud/tools.sh -O tools.sh &amp;&amp; bash tools.sh</span><br></pre></td></tr></tbody></table></figure><p>添加warp</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh &amp;&amp; bash menu.sh [option] [lisence/url/token]</span><br></pre></td></tr></tbody></table></figure><p>25端口开放测试</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">telnet smtp.aol.com 25</span><br></pre></td></tr></tbody></table></figure><h2 id="8、一键安装常用环境及软件"><a href="#8、一键安装常用环境及软件" class="headerlink" title="8、一键安装常用环境及软件"></a>8、一键安装常用环境及软件</h2><p>docker</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL 'https://get.docker.com')</span><br></pre></td></tr></tbody></table></figure><p>Python</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -O https://raw.githubusercontent.com/lx969788249/lxspacepy/master/pyinstall.sh &amp;&amp; chmod +x pyinstall.sh &amp;&amp; ./pyinstall.sh</span><br></pre></td></tr></tbody></table></figure><p>iperf3</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt install iperf3</span><br></pre></td></tr></tbody></table></figure><p>realm</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -L https://raw.githubusercontent.com/zhouh047/realm-oneclick-install/main/realm.sh) -i</span><br></pre></td></tr></tbody></table></figure><p>gost</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget --no-check-certificate -O gost.sh https://raw.githubusercontent.com/qqrrooty/EZgost/main/gost.sh &amp;&amp; chmod +x gost.sh &amp;&amp; ./gost.sh</span><br></pre></td></tr></tbody></table></figure><p>极光面板</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -fsSL https://raw.githubusercontent.com/Aurora-Admin-Panel/deploy/main/install.sh)</span><br></pre></td></tr></tbody></table></figure><p>哪吒监控</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -L https://raw.githubusercontent.com/naiba/nezha/master/script/install.sh  -o nezha.sh &amp;&amp; chmod +x nezha.sh &amp;&amp; sudo ./nezha.sh</span><br></pre></td></tr></tbody></table></figure><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&lt;script&gt;</span><br><span class="line">window.ShowNetTransfer = true;</span><br><span class="line">window.FixedTopServerName = true;</span><br><span class="line">window.DisableAnimatedMan = true</span><br></pre></td></tr></tbody></table></figure><p>WARP</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N https://gitlab.com/fscarmen/warp/-/raw/main/menu.sh &amp;&amp; bash menu.sh</span><br></pre></td></tr></tbody></table></figure><p>Aria2</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -N git.io/aria2.sh &amp;&amp; chmod +x aria2.sh &amp;&amp; ./aria2.sh</span><br></pre></td></tr></tbody></table></figure><p>宝塔</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O install.sh http://v7.hostcli.com/install/install-ubuntu_6.0.sh &amp;&amp; sudo bash install.sh</span><br></pre></td></tr></tbody></table></figure><p>PVE虚拟化</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(wget -qO- --no-check-certificate https://raw.githubusercontent.com/oneclickvirt/pve/main/scripts/build_backend.sh)</span><br></pre></td></tr></tbody></table></figure><p>Argox</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(wget -qO- https://raw.githubusercontent.com/fscarmen/argox/main/argox.sh)</span><br></pre></td></tr></tbody></table></figure><h2 id="9、综合功能脚本"><a href="#9、综合功能脚本" class="headerlink" title="9、综合功能脚本"></a>9、综合功能脚本</h2><p>科技lion</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">apt update -y  &amp;&amp; apt install -y curl</span><br></pre></td></tr></tbody></table></figure><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">bash &lt;(curl -sL kejilion.sh)</span><br></pre></td></tr></tbody></table></figure><p>SKY-BOX</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh &amp;&amp; chmod +x box.sh &amp;&amp; clear &amp;&amp; ./box.sh</span><br></pre></td></tr></tbody></table></figure><h2 id="10、其它"><a href="#10、其它" class="headerlink" title="10、其它"></a>10、其它</h2><p>TG中文汉化</p><figure class="highlight plaintext"><table><tbody><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">https://t.me/setlanguage/classic-zh-cn</span><br></pre></td></tr></tbody></table></figure><p>送中报告地址，去Google的帮助中心，<a href="https://www.nodeseek.com/jump?to=https://support.google.com/websearch/contact/ip?hl=zh-CN">报告IP问题</a></p><p><a href="https://www.nodeseek.com/jump?to=https://omnitt.com">TCP 迷之调参</a></p><p><a href="https://www.nodeseek.com/jump?to=https://github.com/coracoo/awesome_docker_cn">awesome_docker</a></p><h2 id="11-VPS常备小命令【非脚本】"><a href="#11-VPS常备小命令【非脚本】" class="headerlink" title="11.VPS常备小命令【非脚本】"></a>11.VPS常备小命令【非脚本】</h2><p><a href="https://www.nodeseek.com/post-424648-1">https://www.nodeseek.com/post-424648-1</a></p>]]>
    </content>
    <id>https://blog.noyu.moe/2026/01/16/chang-yong-vpsjiao-ben/</id>
    <link href="https://blog.noyu.moe/2026/01/16/chang-yong-vpsjiao-ben/"/>
    <published>2026-01-16T09:26:00.000Z</published>
    <summary>
      <![CDATA[<p>转自：<a href="https://www.nodeseek.com/post-183694-1">https://www.nodeseek.com/post-183694-1</a></p>
<h2 id="1、DD重装脚本"><a href="#1、DD重装脚本"]]>
    </summary>
    <title>常用VPS脚本</title>
    <updated>2026-01-16T09:26:00.000Z</updated>
  </entry>
</feed>
