<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <id>https://blog.mooncc.cn/</id>
  <title type="text">MoonCC Blog</title>
  <subtitle type="text">Home</subtitle>
  <updated>2026-10-06T00:00:00.000Z</updated>
  <author><name>MoonCC</name></author>
  <link rel="alternate" href="https://blog.mooncc.cn/"/>
  <link rel="self" href="https://blog.mooncc.cn/atom.xml"/>
  <generator uri="https://github.com/CuteLeaf/Firefly">Firefly v6.16.8</generator>
    <entry>
      <id>https://blog.mooncc.cn/posts/theme-declaration/</id>
      <title type="text">主题使用声明</title>
      <published>2026-08-25T00:00:00.000Z</published>
      <updated>2026-08-25T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/theme-declaration/"/>
      <summary type="text">本站点基于 Firefly 主题构建，Firefly 衍生自 Fuwari。本文声明主题使用情况、开源协议并致谢原作者。</summary>
      <content type="html"><![CDATA[<section><h2>📌 主题使用情况<a href="#-主题使用情况"><span>#</span></a></h2><p>本站点（博客）基于 <strong>Firefly</strong> 主题构建。Firefly 是一款基于 <a href="https://astro.build/" target="_blank">Astro</a> 框架、衍生自 <a href="https://github.com/saicaca/fuwari" target="_blank">Fuwari</a> 的清新美观且现代化的个人博客主题模板，提供了丰富的功能模块与高度可定制的界面。</p><p>本站仅将 Firefly 作为主题模板使用，并根据自身需求进行了配置与内容创作，主题本身的版权仍归原作者所有。</p></section>
<section><h2>🙏 致谢与开源地址<a href="#-致谢与开源地址"><span>#</span></a></h2><p>感谢以下开源项目的作者为本站提供优秀的主题与基础框架：</p><p><strong>🖥️Firefly 在线预览： <a href="https://firefly.cuteleaf.cn/" target="_blank">Firefly - Demo site</a></strong></p><p><strong>📝Firefly 使用文档： <a href="https://docs-firefly.cuteleaf.cn/" target="_blank">https://docs-firefly.cuteleaf.cn</a></strong></p><p><strong>⭐Firefly 开源地址：<a href="https://github.com/CuteLeaf/Firefly" target="_blank">https://github.com/CuteLeaf/Firefly</a></strong></p><p><strong>⭐Fuwari 开源地址：<a href="https://github.com/saicaca/fuwari" target="_blank">https://github.com/saicaca/fuwari</a></strong></p><a href="https://github.com/CuteLeaf/Firefly" target="_blank"><div><div><div><div></div><div>CuteLeaf</div></div><div>/</div><div>Firefly</div></div><div></div></div><div>🍀Firefly, fresh and aesthetic Astro blog theme template. </div><div><div>—</div><div>—</div><div>MIT</div><span>Astro</span></div></a><a href="https://github.com/saicaca/fuwari" target="_blank"><div><div><div><div></div><div>saicaca</div></div><div>/</div><div>fuwari</div></div><div></div></div><div>✨A static blog template built with Astro. </div><div><div>—</div><div>—</div><div>MIT</div><span>Astro</span></div></a><p></p><figure><img alt="Firefly" loading="lazy" width="2192" height="1233" src="/_astro/1.BQ4-k1kz_Z17x8Xz.webp" /><figcaption>Firefly</figcaption></figure><p></p></section>
<section><h2>⚖️ 开源协议声明<a href="#️-开源协议声明"><span>#</span></a></h2><ul>
<li><strong>Firefly</strong> 主题采用 <a href="https://github.com/CuteLeaf/Firefly/blob/main/LICENSE" target="_blank">MIT License</a>，版权归 <strong>CuteLeaf (2025)</strong> 所有。</li>
<li><strong>Fuwari</strong> 主题采用 <a href="https://github.com/saicaca/fuwari/blob/main/LICENSE" target="_blank">MIT License</a>，版权归 <strong>saicaca (2024)</strong> 所有。</li>
</ul><blockquote><p>根据 MIT 协议，使用、修改、分发本主题时须保留原始版权声明与许可声明。本站已在此处对主题原作者及协议进行署名致谢。</p></blockquote></section>
<section><h2>📖 技术架构<a href="#-技术架构"><span>#</span></a></h2><p>本站所使用的主题具备以下技术特性：</p><ul>
<li><strong>静态站点生成</strong>：基于 Astro，提供极快的加载速度与优秀的 SEO 优化</li>
<li><strong>TypeScript 支持</strong>：完整的类型安全，提升开发体验与代码质量</li>
<li><strong>响应式设计</strong>：使用 Tailwind CSS 构建，完美适配桌面端与移动端</li>
<li><strong>组件化开发</strong>：支持 Astro、Svelte 组件，灵活可扩展</li>
</ul><blockquote><p>📚 <strong>详细配置文档</strong>：查看 <a href="https://docs-firefly.cuteleaf.cn/" target="_blank">Firefly 使用文档</a> 获取完整的主题配置指南。</p></blockquote></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/website-analytics/</id>
      <title type="text">网站访问统计服务选型指南：免费方案盘点与部署教程</title>
      <published>2026-10-06T00:00:00.000Z</published>
      <updated>2026-10-06T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/website-analytics/"/>
      <summary type="text">全面梳理目前主流的免费网站访问统计服务，按国内托管、国际托管、开源自部署三大类对比，帮你找到最适合自己站点的流量分析方案。</summary>
      <content type="html"><![CDATA[<p></p><figure><img alt="网站访问统计服务选型指南：免费方案盘点与部署教程" loading="lazy" width="2048" height="1152" src="/_astro/website-analytics.1zhXbAPx_Z28wly2.webp" /><figcaption>网站访问统计服务选型指南：免费方案盘点与部署教程</figcaption></figure><p></p>
<p>给网站加一套访问统计，是建站后最该做的事之一。但面对五花八门的统计服务，很多站长第一反应是”哪个好用”。更合理的问法是：<strong>我的用户在哪个地区、我需要哪些数据、我愿意把数据交给谁</strong>。</p>
<p>这篇文章把目前主流的免费方案按使用场景分成三类：国内托管、国际托管、开源自部署。每类会给出典型代表、优缺点、适用人群，最后附上部署步骤。</p>
<hr />
<section><h2>一、国内托管服务（部署简单，国内访问快）<a href="#一国内托管服务部署简单国内访问快"><span>#</span></a></h2><p>这类服务的共同点是：服务器在国内，脚本加载快，控制台全中文，一般不需要处理 Cookie 同意横幅。</p><section><h3>百度统计<a href="#百度统计"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://tongji.baidu.com/" target="_blank">tongji.baidu.com</a></li>
<li><strong>费用</strong>：完全免费</li>
<li><strong>优势</strong>：国内使用最广，免费版支持搜索词、渠道来源、用户画像、地域分布等多维度分析；与百度搜索生态打通，能看到用户从百度搜索什么词进来。</li>
<li><strong>劣势</strong>：界面相对老旧，数据有最长 24 小时的延迟；隐私政策较宽松，对数据出境敏感的站长需留意。</li>
<li><strong>适合</strong>：以国内用户为主的网站，尤其是依赖搜索引擎流量的站点。</li>
</ul></section><section><h3>友盟+ U-Web<a href="#友盟-u-web"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://www.umeng.com/" target="_blank">umeng.com</a></li>
<li><strong>费用</strong>：完全免费</li>
<li><strong>优势</strong>：老牌免费统计，功能完善，支持事件追踪、漏斗分析、用户留存；如果同时有 App，还能配合 U-App 做跨端数据打通。</li>
<li><strong>劣势</strong>：近年来产品重心偏向阿里生态，部分高级功能需要接入阿里系其他服务。</li>
<li><strong>适合</strong>：同时运营网站和 App 的团队。</li>
</ul></section><section><h3>51.LA<a href="#51la"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://www.51.la/" target="_blank">51.la</a></li>
<li><strong>费用</strong>：完全免费</li>
<li><strong>优势</strong>：传统站长工具，脚本极轻量，部署最简单；提供基础的 PV、UV、来源、设备等数据，够用就好。</li>
<li><strong>劣势</strong>：功能相对简单，没有复杂的漏斗或用户分群分析。</li>
<li><strong>适合</strong>：个人博客、小站，只想快速看到”今天来了多少人”。</li>
</ul><hr /></section></section>
<section><h2>二、国际托管服务（功能强，面向全球用户）<a href="#二国际托管服务功能强面向全球用户"><span>#</span></a></h2><p>如果你的受众包含海外用户，或者你在使用 Cloudflare、Vercel 等国际基础设施，国际托管服务通常是更好的选择。</p><section><h3>Google Analytics 4（GA4）<a href="#google-analytics-4ga4"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://analytics.google.com/" target="_blank">analytics.google.com</a></li>
<li><strong>费用</strong>：免费额度极宽裕（月均 1000 万次事件以内免费）</li>
<li><strong>优势</strong>：行业标准，功能最全——用户路径、转化漏斗、受众分层、实时数据、BigQuery 导出一应俱全；生态成熟，教程最多。</li>
<li><strong>劣势</strong>：上手复杂，新手的报告界面容易迷路；需要处理 Cookie 同意（GDPR、CCPA 合规成本）；国内访问不稳定，数据可能延迟或丢失。</li>
<li><strong>适合</strong>：有海外用户的商业站点、需要深度数据分析的团队。</li>
</ul></section><section><h3>Cloudflare Web Analytics<a href="#cloudflare-web-analytics"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://dash.cloudflare.com/" target="_blank">dash.cloudflare.com</a></li>
<li><strong>费用</strong>：完全免费</li>
<li><strong>优势</strong>：无需 Cookie，注重隐私，只采集必要指标；一段脚本搞定，无需处理同意横幅；如果你的 DNS 和 CDN 已经在用 Cloudflare，零额外成本。</li>
<li><strong>劣势</strong>：功能极简，只有 PV、UV、来源、设备、地理位置等基础数据，没有用户路径或事件追踪。</li>
<li><strong>适合</strong>：个人博客、静态站点、已经在用 Cloudflare 的网站。</li>
</ul></section><section><h3>Microsoft Clarity<a href="#microsoft-clarity"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://clarity.microsoft.com/" target="_blank">clarity.microsoft.com</a></li>
<li><strong>费用</strong>：完全免费</li>
<li><strong>优势</strong>：主打<strong>热力图</strong>和<strong>会话录屏</strong>，可以直观看到用户点了哪里、滚动到了哪里、在哪里卡住；与 GA 配合使用效果最好——GA 告诉你”来了多少人”，Clarity 告诉你”他们是怎么操作的”。</li>
<li><strong>劣势</strong>：不提供基础流量统计（PV/UV），必须搭配其他工具使用。</li>
<li><strong>适合</strong>：有转化目标的站点（落地页、产品页）、想优化用户体验的站长。</li>
</ul></section><section><h3>Statcounter<a href="#statcounter"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://statcounter.com/" target="_blank">statcounter.com</a></li>
<li><strong>费用</strong>：免费额度（单站点、有限事件量）</li>
<li><strong>优势</strong>：轻量、简洁，注册即用，数据面板直观。</li>
<li><strong>劣势</strong>：免费额度有上限，超过后需要付费；功能相对单一。</li>
<li><strong>适合</strong>：小站、学生项目，不想折腾复杂配置。</li>
</ul><hr /></section></section>
<section><h2>三、开源自部署（数据完全归自己）<a href="#三开源自部署数据完全归自己"><span>#</span></a></h2><p>如果你不想把访问数据交给第三方，或者受限于合规要求，自部署是最彻底的选择。下面几款是目前最受欢迎的隐私向方案。</p><section><h3>Umami<a href="#umami"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://umami.is/" target="_blank">umami.is</a></li>
<li><strong>协议</strong>：MIT（自部署免费）</li>
<li><strong>优势</strong>：轻量优雅，界面简洁美观；官方云版每月 100 万事件内免费；也可以白嫖 Vercel 免费额度一键部署，是目前最受欢迎的隐私向统计方案。</li>
<li><strong>劣势</strong>：功能相对克制，没有热力图或录屏。</li>
<li><strong>适合</strong>：注重隐私的个人博客、喜欢简洁工具的站长。</li>
</ul></section><section><h3>Matomo<a href="#matomo"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://matomo.org/" target="_blank">matomo.org</a></li>
<li><strong>协议</strong>：GPL（自部署免费）</li>
<li><strong>优势</strong>：功能最接近 GA 的开源替代，自带热图、录屏、A/B 测试、电商追踪；数据完全本地化，支持 PostgreSQL / MySQL。</li>
<li><strong>劣势</strong>：相对重，需要一台常驻服务器或 Docker 环境；初次配置项较多。</li>
<li><strong>适合</strong>：想要完整功能又不想数据出境的团队、企业站点。</li>
</ul></section><section><h3>Plausible<a href="#plausible"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://plausible.io/" target="_blank">plausible.io</a></li>
<li><strong>协议</strong>：AGPL（自部署免费）</li>
<li><strong>优势</strong>：极简、无 Cookie、GDPR 友好；界面清爽，只有核心指标；自部署免费，云版收费（无永久免费档）。</li>
<li><strong>劣势</strong>：功能极简，没有事件追踪或漏斗分析。</li>
<li><strong>适合</strong>：重视隐私的博主、只需要基础数据的站点。</li>
</ul></section><section><h3>GoatCounter<a href="#goatcounter"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://goatcounter.com/" target="_blank">goatcounter.com</a></li>
<li><strong>协议</strong>：AGPL（自部署免费）</li>
<li><strong>优势</strong>：极其轻量，树莓派都能跑；云版对非商业用途免费。</li>
<li><strong>劣势</strong>：功能和界面都比较简单。</li>
<li><strong>适合</strong>：轻量级个人项目、嵌入式设备上的小站点。</li>
</ul></section><section><h3>GoAccess<a href="#goaccess"><span>#</span></a></h3><ul>
<li><strong>官网</strong>：<a href="https://goaccess.io/" target="_blank">goaccess.io</a></li>
<li><strong>协议</strong>：MIT（自部署免费）</li>
<li><strong>优势</strong>：<strong>不需要在页面埋点</strong>，直接分析 Nginx/Apache 的访问日志；可以生成终端或 HTML 报表，零侵入。</li>
<li><strong>劣势</strong>：只能看到服务器日志里的内容，看不到前端事件（按钮点击、页面元素曝光等）；需要服务器有日志访问权限。</li>
<li><strong>适合</strong>：已经有服务器权限、不想改网站代码的站长。</li>
</ul><hr /></section></section>
<section><h2>四、怎么选：一张速查表<a href="#四怎么选一张速查表"><span>#</span></a></h2>

<table><thead><tr><th>方案</th><th>费用</th><th>数据归属</th><th>国内访问</th><th>上手难度</th><th>功能丰富度</th><th>适合场景</th></tr></thead><tbody><tr><td>百度统计</td><td>免费</td><td>百度</td><td>快</td><td>低</td><td>中</td><td>国内流量为主</td></tr><tr><td>友盟+</td><td>免费</td><td>阿里</td><td>快</td><td>中</td><td>中</td><td>网站+App 跨端</td></tr><tr><td>51.LA</td><td>免费</td><td>51.LA</td><td>快</td><td>极低</td><td>低</td><td>个人博客快速上手</td></tr><tr><td>GA4</td><td>免费</td><td>Google</td><td>不稳定</td><td>高</td><td>高</td><td>全球商业站点</td></tr><tr><td>Cloudflare Analytics</td><td>免费</td><td>Cloudflare</td><td>快</td><td>低</td><td>低</td><td>CF 用户、静态站</td></tr><tr><td>Microsoft Clarity</td><td>免费</td><td>Microsoft</td><td>中</td><td>低</td><td>中</td><td>行为分析（配合 GA）</td></tr><tr><td>Statcounter</td><td>免费额度</td><td>Statcounter</td><td>中</td><td>低</td><td>低</td><td>小站</td></tr><tr><td>Umami</td><td>自部署免费</td><td>自己</td><td>取决于部署地</td><td>低</td><td>中</td><td>隐私优先个人站</td></tr><tr><td>Matomo</td><td>自部署免费</td><td>自己</td><td>取决于部署地</td><td>高</td><td>高</td><td>完整功能自托管</td></tr><tr><td>Plausible</td><td>自部署免费</td><td>自己</td><td>取决于部署地</td><td>低</td><td>低</td><td>极简隐私站</td></tr><tr><td>GoatCounter</td><td>自部署免费</td><td>自己</td><td>取决于部署地</td><td>低</td><td>低</td><td>轻量项目</td></tr><tr><td>GoAccess</td><td>自部署免费</td><td>自己</td><td>-</td><td>中</td><td>中</td><td>日志分析</td></tr></tbody></table><hr /></section>
<section><h2>五、部署示例：用 Cloudflare Pages 一键部署 Umami<a href="#五部署示例用-cloudflare-pages-一键部署-umami"><span>#</span></a></h2><p>以目前最热门的隐私向方案 <strong>Umami</strong> 为例，演示自部署的完整流程。这里用 Cloudflare Pages 的免费额度，无需购买服务器。</p><section><h3>前置条件<a href="#前置条件"><span>#</span></a></h3><ul>
<li>一个 Cloudflare 账号（免费版即可）</li>
<li>一个 Git 仓库（GitHub / GitLab）</li>
</ul></section><section><h3>1. Fork 官方仓库<a href="#1-fork-官方仓库"><span>#</span></a></h3><p>访问 <a href="https://github.com/umami-software/umami" target="_blank">umami-software/umami</a>，点击 Fork 到你自己的 GitHub 账号。</p><a href="https://github.com/umami-software/umami" target="_blank"><div><div><div><div></div><div>umami-software</div></div><div>/</div><div>umami</div></div><div></div></div><div>Umami is a privacy-first analytics platform. Traffic, campaigns, behavior, conversions, and revenue in one place — no cookies, no surveillance, self-hosted or in the cloud.</div><div><div>—</div><div>—</div><div>MIT</div><span>TypeScript</span></div></a></section><section><h3>2. 创建 Cloudflare Pages 项目<a href="#2-创建-cloudflare-pages-项目"><span>#</span></a></h3><ol>
<li>
<p>登录 <a href="https://dash.cloudflare.com/" target="_blank">Cloudflare Dashboard</a></p>
</li>
<li>
<p>进入 <strong>Workers &amp; Pages</strong> → <strong>Pages</strong> → <strong>创建项目</strong> → <strong>连接到 Git</strong></p>
</li>
<li>
<p>选择刚才 Fork 的仓库，授权 Cloudflare 访问</p>
</li>
<li>
<p>构建设置保持默认：</p>

<table><thead><tr><th>配置项</th><th>值</th></tr></thead><tbody><tr><td>构建命令</td><td><code>pnpm install --frozen-lockfile &amp;&amp; pnpm run build</code></td></tr><tr><td>构建输出目录</td><td><code>dist</code></td></tr><tr><td>Node.js 版本</td><td><code>20</code> 或更高</td></tr></tbody></table>
</li>
<li>
<p>点击 <strong>保存并部署</strong>，等待 1～2 分钟完成构建</p>
</li>
</ol></section><section><h3>3. 配置数据库<a href="#3-配置数据库"><span>#</span></a></h3><p>Umami 需要 PostgreSQL 数据库。推荐使用 <strong>Neon</strong> 或 <strong>Supabase</strong> 的免费 PostgreSQL 实例。</p><p>以 Neon 为例：</p><ol>
<li>
<p>访问 <a href="https://neon.tech/" target="_blank">neon.tech</a>，用 GitHub 账号注册</p>
</li>
<li>
<p>创建一个新项目，选择 <strong>Free Plan</strong></p>
</li>
<li>
<p>创建完成后，复制连接字符串（Connection string），格式类似：</p>
<div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>postgres://username:password@ep-xxxx.region.neon.tech/dbname?sslmode</span><span>=require</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div>
</li>
<li>
<p>回到 Cloudflare Pages 项目，进入 <strong>设置</strong> → <strong>环境变量</strong>，添加：</p>

<table><thead><tr><th>变量</th><th>值</th></tr></thead><tbody><tr><td><code>DATABASE_URL</code></td><td>刚才复制的 Neon 连接字符串</td></tr><tr><td><code>HASH_SALT</code></td><td>运行以下命令生成：<code>openssl rand -base64 32</code></td></tr></tbody></table>
</li>
</ol></section><section><h3>4. 重新部署<a href="#4-重新部署"><span>#</span></a></h3><p>环境变量添加完成后，回到 <strong>部署</strong> 页面，点击 <strong>重试部署</strong>。构建成功后，访问 Cloudflare 分配的域名（如 <code>umami-xxx.pages.dev</code>）。</p></section><section><h3>5. 初始化管理员账号<a href="#5-初始化管理员账号"><span>#</span></a></h3><p>访问 <code>https://你的域名/api/setup</code>，在请求体里发送：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"username"</span><span>: </span><span>"admin"</span><span>,</span></div></div><div><div><div>3</div></div><div><span>  </span><span>"password"</span><span>: </span><span>"你的密码"</span></div></div><div><div><div>4</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>可以用 <code>curl</code> 或 Postman 完成这一步：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>curl</span><span> </span><span>-X</span><span> </span><span>POST</span><span> </span><span>https://你的域名/api/setup</span><span> </span><span>\</span></div></div><div><div><div>2</div></div><div><span>  </span><span>-H</span><span> </span><span>"Content-Type: application/json"</span><span> </span><span>\</span></div></div><div><div><div>3</div></div><div><span>  </span><span>-d</span><span> </span><span>'{"username":"admin","password":"你的密码"}'</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div></section><section><h3>6. 添加网站并获取追踪代码<a href="#6-添加网站并获取追踪代码"><span>#</span></a></h3><ol>
<li>登录 <code>https://你的域名/login</code>，输入刚才创建的管理员账号</li>
<li>进入 ** Websites → Add Website**</li>
<li>填入网站名称和域名，保存</li>
<li>复制生成的追踪代码：</li>
</ol><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>&lt;</span><span>script</span><span> </span><span>async</span><span> </span><span>defer</span><span> </span><span>data-website-id</span><span>=</span><span>"你的网站ID"</span><span> </span><span>src</span><span>=</span><span>"https://你的域名/script.js"</span><span>&gt;&lt;/</span><span>script</span><span>&gt;</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><ol>
<li>把这段代码粘贴到你网站的 <code>&lt;/head&gt;</code> 之前即可。</li>
</ol><hr /></section></section>
<section><h2>六、各方案部署要点速记<a href="#六各方案部署要点速记"><span>#</span></a></h2>

<table><thead><tr><th>方案</th><th>部署方式</th><th>关键步骤</th></tr></thead><tbody><tr><td>百度统计</td><td>注册获取代码 → 粘贴到网站</td><td>1. 注册账号；2. 添加站点；3. 复制 JS 代码到 <code>&lt;head&gt;</code></td></tr><tr><td>友盟+</td><td>注册获取代码 → 粘贴到网站</td><td>1. 注册并实名；2. 创建站点；3. 获取代码嵌入</td></tr><tr><td>51.LA</td><td>注册获取代码 → 粘贴到网站</td><td>1. 注册；2. 添加站点；3. 复制代码到 <code>&lt;head&gt;</code></td></tr><tr><td>GA4</td><td>创建媒体资源 → 获取测量 ID → 粘贴代码或 GTM</td><td>1. 创建 GA4 媒体资源；2. 获取 Measurement ID；3. 通过 gtag.js 或 GTM 部署</td></tr><tr><td>Cloudflare Analytics</td><td>控制台开启 → 添加域名</td><td>1. 进入 Cloudflare Dashboard；2. 开启 Web Analytics；3. 添加域名，复制脚本</td></tr><tr><td>Microsoft Clarity</td><td>注册项目 → 粘贴代码</td><td>1. 注册并创建项目；2. 复制 Clarity 代码到 <code>&lt;head&gt;</code></td></tr><tr><td>Statcounter</td><td>注册项目 → 粘贴代码</td><td>1. 注册；2. 添加项目；3. 复制代码片段</td></tr><tr><td>Umami</td><td>自部署或官方云</td><td>自部署：1. 部署到 Vercel/CF Pages；2. 配置数据库；3. 初始化管理员；4. 添加网站获取代码</td></tr><tr><td>Matomo</td><td>Docker 或云托管</td><td>1. 准备服务器或 Docker；2. 安装 Matomo；3. 配置数据库；4. 创建站点获取追踪代码</td></tr><tr><td>Plausible</td><td>自部署或官方云</td><td>自部署：1. Docker 或 VPS 部署；2. 配置域名和数据库；3. 添加站点</td></tr><tr><td>GoatCounter</td><td>自部署或官方云</td><td>自部署：1. 安装 GoatCounter；2. 初始化数据库；3. 配置 Nginx 反代</td></tr><tr><td>GoAccess</td><td>服务器安装 → 配置日志路径</td><td>1. <code>apt install goaccess</code>；2. 指定 Nginx/Apache 日志路径；3. 生成 HTML 报告</td></tr></tbody></table><hr /></section>
<section><h2>七、常见问题<a href="#七常见问题"><span>#</span></a></h2><p><strong>Q：这些统计脚本会影响网站性能吗？</strong>
A：会有轻微影响。国内脚本（百度统计、51.LA）一般 10～30 KB，异步加载影响较小。GA4 最重（~50 KB），建议用 gtag.js 异步模式或通过 Google Tag Manager 按需加载。自部署的 Umami/Plausible 脚本通常只有 2～5 KB，性能友好。</p><p><strong>Q：隐私合规（GDPR、个人信息保护法）怎么办？</strong>
A：如果面向欧盟用户，需要 Cookie 同意的方案（GA4、友盟+）必须部署同意横幅。隐私优先的无 Cookie 方案（Cloudflare Analytics、Plausible、Umami）在这方面有天然优势。国内目前尚无强制 Cookie 同意要求，但建议关注《个人信息保护法》的动态。</p><p><strong>Q：可以同时使用多个统计服务吗？</strong>
A：可以，但不建议超过 2～3 个。每个脚本都会增加页面加载时间，而且数据容易混淆。推荐组合：</p><ul>
<li><strong>GA4 + Microsoft Clarity</strong>：功能互补，GA4 看数据，Clarity 看行为</li>
<li><strong>Cloudflare Analytics + Umami</strong>：双保险，一个在边缘统计，一个做详细分析</li>
</ul><p><strong>Q：自部署的数据安全性如何？</strong>
A：自部署把数据完全掌握在自己手里，但同时也意味着你需要负责备份、升级和安全维护。建议定期导出数据库，关注官方安全公告。</p><p><strong>Q：GitHub Pages / Vercel 等静态托管能跑统计服务吗？</strong>
A：可以。Umami、Plausible、GoatCounter 的官方文档都提供了在 Vercel / Cloudflare Pages / Netlify 上的一键部署教程，利用免费额度就能跑起来。</p><hr /></section>
<section><h2>小结<a href="#小结"><span>#</span></a></h2><p>选统计服务，本质上是在<strong>数据丰富度、部署成本、隐私控制、访问速度</strong>之间做取舍：</p><ul>
<li>国内用户为主 → 百度统计、友盟+、51.LA</li>
<li>全球用户且需要深度分析 → GA4</li>
<li>隐私优先、个人博客 → Cloudflare Analytics、Umami、Plausible</li>
<li>想看用户怎么操作 → Microsoft Clarity（配合其他工具）</li>
<li>完全不想数据出境 → Umami、Matomo 自部署</li>
</ul><p>先把统计代码加上，比纠结”哪个最好”更重要。一个持续运行、积累了真实数据的统计系统，价值远大于一套完美但迟迟未上线的方案。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/memos-on-edgeone-deploy/</id>
      <title type="text">Memos on EdgeOne 部署教程：零数据库，纯 Blob 存储</title>
      <published>2026-10-05T00:00:00.000Z</published>
      <updated>2026-10-05T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/memos-on-edgeone-deploy/"/>
      <summary type="text">手把手把 Memos 笔记应用部署到 EdgeOne Makers：Fork 仓库、关联 Git、配置环境变量、绑定自定义域名，并说明为什么用户与配置数据选择 Blob 而不是 KV 存储。</summary>
      <content type="html"><![CDATA[<p></p><figure><img alt="Memos on EdgeOne 部署教程：零数据库，纯 Blob 存储" loading="lazy" width="1536" height="1024" src="/_astro/memos-on-edgeone-deploy.DWrFRzQU_1WV4Ne.webp" /><figcaption>Memos on EdgeOne 部署教程：零数据库，纯 Blob 存储</figcaption></figure><p></p>
<p>Memos 是一个轻量的自托管笔记应用，数据全部留在自己手里。问题是，传统玩法都要先有一台服务器：装 Docker、跑 SQLite、配反向代理。</p>
<p>如果你手上只有腾讯云 EdgeOne 账号，这篇文章就是为你准备的。<a href="https://github.com/MoonCC233/memos-on-edgeone" target="_blank">memos-on-edgeone</a> 把 Memos 迁移到了 EdgeOne Makers：<strong>不建库、不初始化、不运维</strong>，关联 GitHub 仓库推送即部署，所有数据落在 EdgeOne Blob 里。</p>
<a href="https://github.com/MoonCC233/memos-on-edgeone" target="_blank"><div><div><div><div></div><div>MoonCC233</div></div><div>/</div><div>memos-on-edgeone</div></div><div></div></div><div>将 Memos 笔记应用迁移到 EdgeOne Makers 全栈部署平台，所有数据（包括配置、用户、备忘录等）全部存储在 EdgeOne Blob，也可选配置 S3 兼容存储。零外部依赖，纯 Blob 存储架构。</div><div><div>—</div><div>—</div><div>no-license</div><span>TypeScript</span></div></a>
<section><h2>项目简介<a href="#项目简介"><span>#</span></a></h2>

<table><thead><tr><th>层级</th><th>技术</th></tr></thead><tbody><tr><td>运行时</td><td>EdgeOne Makers Cloud Functions（Node.js 22.11.0）</td></tr><tr><td>后端框架</td><td>Hono</td></tr><tr><td>数据存储</td><td>EdgeOne Blob（默认）/ S3 兼容存储（可选）</td></tr><tr><td>前端</td><td>React + Vite + TailwindCSS</td></tr><tr><td>认证</td><td>JWT（HS256）+ bcrypt</td></tr></tbody></table><p>它做的事情可以概括成一句话：<strong>把这个应用需要的所有东西都变成 Blob 里的几个 key</strong>。</p><ul>
<li>用户、备忘录、附件、实例设置，全部存储在 Blob</li>
<li>数据库是纯 JSON 文档，命名空间首次访问时自动创建，不需要跑迁移脚本</li>
<li>也可以整体切换到任意 S3 兼容存储（MinIO、AWS S3、Cloudflare R2、阿里云 OSS、腾讯云 COS、七牛 Kodo、又拍 USS、华为云OBS）</li>
<li>AI 语音转写走任意 OpenAI 兼容接口，自行填 endpoint 和 API Key</li>
</ul></section>
<section><h2>数据是怎么存的<a href="#数据是怎么存的"><span>#</span></a></h2><p>理解这一点，你就明白它为什么能”零初始化”了。</p><div><div><div><div><span><p>HTTPS</p></span></div><div><span><p>静态资源</p></span></div><div><span><p>/api/* /file /u/*/rss</p></span></div><div><span><p>db/*.json、instance/settings/*、attachments/*</p></span></div><div><span><p>可选：仅新附件</p></span></div><div><span><p>浏览器</p></span></div><div><span><p>EdgeOne Pages 边缘节点</p></span></div><div><span><p>前端 SPA<br /><br />React + Vite</p></span></div><div><span><p>Cloud Functions<br /><br />Node.js + Hono</p></span></div><div><span><p>EdgeOne Blob<br /><br />命名空间 memos</p></span></div><div><span><p>S3 兼容存储</p></span></div>
</div><div><div><span><p>HTTPS</p></span></div><div><span><p>静态资源</p></span></div><div><span><p>/api/* /file /u/*/rss</p></span></div><div><span><p>db/*.json、instance/settings/*、attachments/*</p></span></div><div><span><p>可选：仅新附件</p></span></div><div><span><p>浏览器</p></span></div><div><span><p>EdgeOne Pages 边缘节点</p></span></div><div><span><p>前端 SPA<br /><br />React + Vite</p></span></div><div><span><p>Cloud Functions<br /><br />Node.js + Hono</p></span></div><div><span><p>EdgeOne Blob<br /><br />命名空间 memos</p></span></div><div><span><p>S3 兼容存储</p></span></div>
</div></div></div><p>Blob 里的 key 布局非常直白：</p>

<table><thead><tr><th>Key</th><th>内容</th></tr></thead><tbody><tr><td><code>db/user.json</code>、<code>db/memo.json</code>、<code>db/attachment.json</code> …</td><td>十二张表，每张表是一个 <code>{ rows: [...], nextId }</code> 的 JSON 文档</td></tr><tr><td><code>instance/settings/GENERAL</code>、<code>instance/settings/STORAGE</code>、<code>instance/settings/AI</code></td><td>实例设置（站点名、注册开关、存储与 AI 配置）</td></tr><tr><td><code>attachments/&lt;uid&gt;/&lt;filename&gt;</code></td><td>附件原始文件</td></tr></tbody></table><p>后端没有换掉 Memos 的 SQL，而是实现了一个覆盖实际查询范围的 SQL 子集引擎（<code>SELECT/INSERT/UPDATE/DELETE</code>、<code>WHERE</code>、<code>ORDER BY</code>、<code>LIMIT/OFFSET</code>、<code>COUNT/SUM</code>、<code>ON CONFLICT</code> 等），把每条语句翻译成对内存里的行数组做过滤与写回。数据量小的时候，这套方案的读取速度和写放大都可以接受——因为个人笔记通常也就几百上千条。</p></section>
<section><h2>为什么不用 EdgeOne KV 存储用户和配置数据<a href="#为什么不用-edgeone-kv-存储用户和配置数据"><span>#</span></a></h2><p>这是很多人看到”数据存 Blob”时会问的问题：EdgeOne 不是自带 KV 吗？答案很直接——<strong>国内版 EdgeOne 的 KV 存储需要提交申请、人工审核后才能使用</strong>，因此这个项目把用户、备忘录与配置数据统一放进了 Blob。理由不止一条：</p><section><h3>1. KV 需要申请开通，Blob 不用<a href="#1-kv-需要申请开通blob-不用"><span>#</span></a></h3><p>KV 存储的开通流程是：控制台顶部导航栏 → <code>KV Storage</code> → <code>Apply now</code>，然后<strong>填写申请理由、提交申请表、等待工作人员审核</strong>。也就是说，想用 KV 的部署者要先卡在一个人工审批环节，审核结果和时长不可控。</p><p>而 Blob 是零配置的：代码里第一次 <code>getStore("memos")</code> 调用时，平台会<strong>自动为当前项目创建同名命名空间</strong>，后续调用直接复用。既不用申请，也不用在控制台点”创建命名空间”再”绑定变量名”。</p><p>对于一个”点几下就能用起来”的部署教程，把申请审核写进前置条件是体验最差的一环。</p></section><section><h3>2. KV 当前仅在 Edge Functions 运行时可用<a href="#2-kv-当前仅在-edge-functions-运行时可用"><span>#</span></a></h3><p>官方存储对比文档里写得很清楚：KV 的运行时环境是 <strong>Edge Functions only</strong>，而 Blob 支持 <strong>Edge Functions / Cloud Functions</strong>。</p><p>memos-on-edgeone 的后端是 <strong>Node.js Cloud Functions</strong>（依赖 <code>@edgeone/pages-blob</code> 这个 Node.js SDK，<code>edgeone.json</code> 里也配置了 <code>cloudFunctions.maxDuration</code> 与 <code>externalNodeModules</code>）。即使申请到了 KV 命名空间，也无法在这个运行时里直接访问——最后还是要绕回 Blob。</p></section><section><h3>3. 一致性模型：用户和配置需要读后立即一致<a href="#3-一致性模型用户和配置需要读后立即一致"><span>#</span></a></h3>

<table><thead><tr><th>能力</th><th>KV 存储</th><th>Blob 存储</th></tr></thead><tbody><tr><td>一致性</td><td>最终一致性，60s 内全球同步</td><td>默认最终一致，<strong>单次读可切换强一致</strong></td></tr><tr><td>运行时</td><td>仅 Edge Functions</td><td>Edge Functions / Cloud Functions</td></tr><tr><td>启用方式</td><td>控制台创建命名空间 → 绑定项目</td><td><code>getStore('name')</code> 直接可用</td></tr><tr><td>免费版存储空间</td><td>1 GB</td><td>1 GB</td></tr><tr><td>单值大小</td><td>25 MB</td><td>25 MB</td></tr></tbody></table><p>KV 只有最终一致性，没有”读最新值”的选项。用户表、实例设置这类权威数据必须读到刚写入的内容——比如注册后立刻登录、刚改完设置就刷新页面——不能容忍最长 60 秒的延迟。</p><p>Blob 则可以在每次读取时指定 <code>{ consistency: "strong" }</code> 绕过边缘缓存直读主存储。本项目正是这么做的：所有对 JSON 表的读取都<strong>强制强一致</strong>（<code>worker/src/storage/index.ts</code> 中的 <code>EdgeOneBlobProvider</code> 每次 <code>get</code> 都带 <code>consistency: 'strong'</code>），保证读后写成立。</p><div><div><div></div><div>Note</div></div><div><p>容量并不是原因——两者免费版都是 1 GB、单值 25 MB。真正的差别是<strong>开通门槛、运行时可用性和一致性语义</strong>。</p></div></div></section><section><h3>顺带一提：以后想换回 KV 也不难<a href="#顺带一提以后想换回-kv-也不难"><span>#</span></a></h3><p>Blob 里是纯粹的 key → JSON 文档，<code>db/user.json</code> 这类 key 天然可以一对一映射成 KV 的 key。也就是说，如果哪天 KV 申请下来了，把 <code>worker/src/db/blob-database.ts</code> 里的存储实现换成 KV 后端即可，业务层 SQL 和表结构都不用动。这也是这个项目坚持把存储收敛到一层抽象接口的原因。</p></section></section>
<section><h2>部署方式一：控制台关联 Git 仓库（推荐）<a href="#部署方式一控制台关联-git-仓库推荐"><span>#</span></a></h2><p>这是最省事的路径，不需要装任何 CLI，也不需要本地构建。</p><section><h3>1. Fork 仓库<a href="#1-fork-仓库"><span>#</span></a></h3><p>把 <a href="https://github.com/MoonCC233/memos-on-edgeone" target="_blank">memos-on-edgeone</a> Fork 到你自己的 GitHub 账号。</p></section><section><h3>2. 从 Git 仓库导入项目<a href="#2-从-git-仓库导入项目"><span>#</span></a></h3><ol>
<li>登录 <a href="https://console.cloud.tencent.com/edgeone" target="_blank">EdgeOne 国内版控制台</a> | <a href="https://console.edgeone.ai/" target="_blank">EdgeOne 国际版控制台</a></li>
<li>进入 <strong>边缘应用 → Pages（Makers）→ 创建项目</strong></li>
<li>选择 <strong>从 Git 仓库导入</strong></li>
<li>授权 GitHub，选择刚才 Fork 的仓库</li>
<li>构建配置会自动读取仓库根目录的 <code>edgeone.json</code>，一般不需要手改</li>
</ol><p><code>edgeone.json</code> 里的关键配置如下：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>{</span></div></div><div><div><div>2</div></div><div><span>  </span><span>"buildCommand"</span><span>: </span><span>"npm run build:web"</span><span>,</span></div></div><div><div><div>3</div></div><div><span>  </span><span>"installCommand"</span><span>: </span><span>"npm install &amp;&amp; cd web &amp;&amp; npm install"</span><span>,</span></div></div><div><div><div>4</div></div><div><span>  </span><span>"outputDirectory"</span><span>: </span><span>"./web/dist"</span><span>,</span></div></div><div><div><div>5</div></div><div><span>  </span><span>"nodeVersion"</span><span>: </span><span>"22.11.0"</span><span>,</span></div></div><div><div><div>6</div></div><div><span>  </span><span>"cloudFunctions"</span><span>: {</span></div></div><div><div><div>7</div></div><div><span>    </span><span>"maxDuration"</span><span>: </span><span>120</span><span>,</span></div></div><div><div><div>8</div></div><div><span>    </span><span>"externalNodeModules"</span><span>: [</span><span>"@aws-sdk/client-s3"</span><span>, </span><span>"@aws-sdk/s3-request-presigner"</span><span>]</span></div></div><div><div><div>9</div></div><div><span><span>  </span></span><span>},</span></div></div><div><div><div>10</div></div><div><span>  </span><span>"rewrites"</span><span>: [{ </span><span>"source"</span><span>: </span><span>"/*"</span><span>, </span><span>"destination"</span><span>: </span><span>"/index.html"</span><span> }]</span></div></div><div><div><div>11</div></div><div><span>}</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>注意 <code>rewrites</code>：前端是 SPA，所有未知路径都要回退到 <code>index.html</code>，<code>/u/&lt;username&gt;</code> 这类页面靠它才能正常打开。</p></section><section><h3>3. 配置环境变量<a href="#3-配置环境变量"><span>#</span></a></h3><p>在 <strong>项目设置 → 环境变量</strong> 中添加：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>JWT_SECRET</span><span>=</span><span>&lt;你的密钥&gt;</span></div></div><div><div><div>2</div></div><div><span>INSTANCE_NAME</span><span>=</span><span>memos-on-edgeone</span></div></div><div><div><div>3</div></div><div><span>APP_VERSION</span><span>=</span><span>1.0.0</span></div></div><div><div><div>4</div></div><div><span>BLOB_STORE_NAME</span><span>=</span><span>memos</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p><code>JWT_SECRET</code> 是唯一必填项，用来签发登录态。生成一个足够随机的值：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># macOS / Linux</span></div></div><div><div><div>2</div></div><div><span>openssl</span><span> </span><span>rand</span><span> </span><span>-base64</span><span> </span><span>32</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># Windows PowerShell</span></div></div><div><div><div>5</div></div><div><span>[Convert]::ToBase64String([System.Security.Cryptography.RandomNumberGenerator]::GetBytes(</span><span>32</span><span>))</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><div><div><div></div><div>Warning</div></div><div><p>不要用示例值或短字符串。<code>JWT_SECRET</code> 泄露等于任何人都能伪造登录令牌。</p></div></div></section><section><h3>4. 访问并注册管理员<a href="#4-访问并注册管理员"><span>#</span></a></h3><p>部署成功后（通常 2～5 分钟），打开 EdgeOne 分配的默认域名。</p><p><strong>第一个完成注册的用户会自动成为管理员（ADMIN）</strong>，之后的注册才是普通用户。所以部署完成后请立刻完成管理员注册，再到「设置 → 实例设置」里打开「禁止用户注册」，避免被别人抢先注册成管理员。</p><div><div><div></div><div>Tip</div></div><div><p>访问 <code>https://你的域名/api/v1/health</code>，返回 <code>{"status":"ok"}</code> 说明 Cloud Functions 已经正常工作；如果返回 HTML 页面或 404，说明 Functions 还没部署成功或路由没命中。</p></div></div></section><section><h3>5. 绑定自定义域名（可选）<a href="#5-绑定自定义域名可选"><span>#</span></a></h3><p>在 <strong>项目 → 域名管理 → 添加自定义域名</strong> 中填入你的域名，按提示在 DNS 服务商处添加对应的 CNAME 记录，证书可在控制台申请免费证书或使用托管证书。</p></section></section>
<section><h2>部署方式二：本地开发 + 推送自动部署<a href="#部署方式二本地开发--推送自动部署"><span>#</span></a></h2><p>想在本地改代码再部署，按这套流程走。</p><section><h3>1. 安装 EdgeOne CLI 并登录<a href="#1-安装-edgeone-cli-并登录"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>npm</span><span> </span><span>install</span><span> </span><span>-g</span><span> </span><span>edgeone</span></div></div><div><div><div>2</div></div><div><span>edgeone</span><span> </span><span>-v</span><span>          </span><span># 确认安装成功</span></div></div><div><div><div>3</div></div><div><span>edgeone</span><span> </span><span>login</span><span>       </span><span># 浏览器弹窗授权；命令行会询问站点，选 China 或 Global</span></div></div><div><div><div>4</div></div><div><span>edgeone</span><span> </span><span>whoami</span><span>      </span><span># 查看当前账号</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div></section><section><h3>2. 克隆并安装依赖<a href="#2-克隆并安装依赖"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git</span><span> </span><span>clone</span><span> </span><span>https://github.com/你的用户名/memos-on-edgeone.git</span></div></div><div><div><div>2</div></div><div><span>cd</span><span> </span><span>memos-on-edgeone</span></div></div><div><div><div>3</div></div><div><span>npm</span><span> </span><span>install</span></div></div><div><div><div>4</div></div><div><span>cd</span><span> </span><span>web</span><span> &amp;&amp; </span><span>npm</span><span> </span><span>install</span><span> &amp;&amp; </span><span>cd</span><span> </span><span>..</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>根目录和 <code>web</code> 是两个独立的 npm 工程，EdgeOne 的安装命令也正是分两步安装的。</p></section><section><h3>3. 配置本地环境变量<a href="#3-配置本地环境变量"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>cp</span><span> </span><span>.dev.vars.example</span><span> </span><span>.dev.vars</span><span>    </span><span># Windows: copy .dev.vars.example .dev.vars</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>编辑 <code>.dev.vars</code>，至少填入 <code>JWT_SECRET</code>：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>BLOB_STORE_NAME</span><span><span>=</span><span>memos</span></span></div></div><div><div><div>2</div></div><div><span>JWT_SECRET</span><span><span>=</span><span>your-super-secret-jwt-key-here</span></span></div></div><div><div><div>3</div></div><div><span>INSTANCE_NAME</span><span><span>=</span><span>memos-on-edgeone</span></span></div></div><div><div><div>4</div></div><div><span>APP_VERSION</span><span><span>=</span><span>1.0.0</span></span></div></div></code></pre><div><div></div><div></div></div></figure></div><p><code>.dev.vars</code> 已在 <code>.gitignore</code> 中，不要把它提交到仓库。</p></section><section><h3>4. 启动本地开发服务<a href="#4-启动本地开发服务"><span>#</span></a></h3><p>需要两个终端：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span># 终端 1：后端 Cloud Functions</span></div></div><div><div><div>2</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>dev</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 终端 2：前端 Vite 开发服务器</span></div></div><div><div><div>5</div></div><div><span>npm</span><span> </span><span>run</span><span> </span><span>dev:web</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p><code>edgeone makers dev</code> 默认在 <strong>8088</strong> 端口同时提供前端页面与 Functions 服务。如果想把控制台已配置的环境变量同步到本地，可以执行 <code>edgeone makers link</code> 关联项目，或者用 <code>edgeone makers env pull</code> 拉取环境变量。</p></section><section><h3>5. 推送触发自动部署<a href="#5-推送触发自动部署"><span>#</span></a></h3><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>git</span><span> </span><span>push</span><span> </span><span>origin</span><span> </span><span>main</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>EdgeOne 检测到推送后会自动安装依赖、执行 <code>npm run build:web</code>、把前端部署到 CDN、把 Functions 部署到边缘节点，并更新域名指向。</p></section></section>
<section><h2>部署方式三：CLI 直接上传<a href="#部署方式三cli-直接上传"><span>#</span></a></h2><p>不想每次都推 Git，也可以直接从本地上传构建产物：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>edgeone</span><span> </span><span>makers</span><span> </span><span>deploy</span><span>                 </span><span># 生产环境</span></div></div><div><div><div>2</div></div><div><span>edgeone</span><span> </span><span>makers</span><span> </span><span>deploy</span><span> </span><span>-e</span><span> </span><span>preview</span><span>      </span><span># 预览环境</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>CI 里也可以用 API Token 免交互部署：</p><div><figure><figcaption><span></span><span>Terminal window</span></figcaption><pre><code><div><div><div>1</div></div><div><span>edgeone</span><span> </span><span>makers</span><span> </span><span>deploy</span><span> </span><span>-n</span><span> </span><span>my-memos</span><span> </span><span>-t</span><span> </span><span>$EDGEONE_API_TOKEN</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div></section>
<section><h2>部署后的常用配置<a href="#部署后的常用配置"><span>#</span></a></h2><p>这些都在前端的「设置」里完成，不需要重新部署。</p><section><h3>附件存储<a href="#附件存储"><span>#</span></a></h3><p>默认附件也存在 Blob 里（key 为 <code>attachments/&lt;uid&gt;/&lt;filename&gt;</code>）。需要注意 Cloud Functions 对<strong>请求体超过 6 MB</strong> 会直接拒绝，所以大附件走的是预签名 URL 直传：函数只签发一个短期令牌，浏览器把文件字节直接 PUT 到存储，再回调 <code>POST /api/v1/attachments/complete</code> 落库，绕开了函数体积限制。</p><p>想把附件搬到自己的 S3 兼容存储，可以在 <strong>设置 → 存储</strong> 里选择 S3 并填写 endpoint、region、bucket、Access Key / Secret Key。切换后新旧附件都能正常读取：每条附件记录都会写入 <code>storage_type</code> 标记（<code>BLOB</code> 或 <code>S3</code>），读写时据此解析到对应后端。</p><p>如果连数据库也要一起搬到 S3，那就在环境变量里设置 <code>STORAGE_TYPE=s3</code> 加上一组 <code>S3_*</code> 变量，此时 Blob 不再承担任何数据：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>STORAGE_TYPE</span><span><span>=</span><span>s3</span></span></div></div><div><div><div>2</div></div><div><span>S3_ENDPOINT</span><span><span>=</span><span>https://s3.your-provider.com</span></span></div></div><div><div><div>3</div></div><div><span>S3_REGION</span><span><span>=</span><span>auto</span></span></div></div><div><div><div>4</div></div><div><span>S3_BUCKET</span><span><span>=</span><span>your-bucket-name</span></span></div></div><div><div><div>5</div></div><div><span>S3_ACCESS_KEY_ID</span><span><span>=</span><span>your-access-key</span></span></div></div><div><div><div>6</div></div><div><span>S3_SECRET_ACCESS_KEY</span><span><span>=</span><span>your-secret-key</span></span></div></div><div><div><div>7</div></div><div><span>S3_FORCE_PATH_STYLE</span><span><span>=</span><span>true   </span></span><span># MinIO 等需要路径风格的服务保持 true</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>AI 语音转写<a href="#ai-语音转写"><span>#</span></a></h3><p>在 <strong>设置 → AI</strong> 里新增一个 OpenAI 兼容的自定义 API（endpoint + API Key），指定为转写模型（如 <code>whisper-1</code>），录音文件就能直接转成文字写进备忘录。API Key 存在 Blob 的 <code>instance/settings/AI</code> 里，接口返回时会做脱敏。</p></section><section><h3>关闭注册<a href="#关闭注册"><span>#</span></a></h3><p><strong>设置 → 实例设置</strong> 中打开「禁止用户注册」和「禁止密码登录」（如需配合 OAuth 登录）。</p></section></section>
<section><h2>环境变量速查<a href="#环境变量速查"><span>#</span></a></h2>

<table><thead><tr><th>变量</th><th>说明</th><th>必填</th><th>默认值</th></tr></thead><tbody><tr><td><code>JWT_SECRET</code></td><td>JWT 签名密钥</td><td>是</td><td>-</td></tr><tr><td><code>BLOB_STORE_NAME</code></td><td>Blob 命名空间名</td><td>否</td><td><code>memos</code></td></tr><tr><td><code>STORAGE_TYPE</code></td><td><code>blob</code> | <code>s3</code></td><td>否</td><td><code>blob</code></td></tr><tr><td><code>S3_ENDPOINT</code></td><td>S3 端点</td><td>S3 模式必填</td><td>-</td></tr><tr><td><code>S3_REGION</code></td><td>S3 区域</td><td>否</td><td><code>auto</code></td></tr><tr><td><code>S3_BUCKET</code></td><td>桶名</td><td>S3 模式必填</td><td>-</td></tr><tr><td><code>S3_ACCESS_KEY_ID</code></td><td>Access Key</td><td>S3 模式必填</td><td>-</td></tr><tr><td><code>S3_SECRET_ACCESS_KEY</code></td><td>Secret Key</td><td>S3 模式必填</td><td>-</td></tr><tr><td><code>S3_FORCE_PATH_STYLE</code></td><td>强制路径风格</td><td>否</td><td><code>true</code></td></tr><tr><td><code>INSTANCE_NAME</code></td><td>实例名称</td><td>否</td><td><code>memos-on-edgeone</code></td></tr><tr><td><code>APP_VERSION</code></td><td>应用版本</td><td>否</td><td><code>1.0.0</code></td></tr></tbody></table></section>
<section><h2>备份与迁移<a href="#备份与迁移"><span>#</span></a></h2><p>因为所有表就是 Blob 里的 JSON 文档，备份特别直白：把 <code>db/*.json</code> 和 <code>instance/settings/*</code> 原样导出来存好，恢复时再传回去即可——不用像 SQLite 那样做一致性快照。</p><div><div><div></div><div>Note</div></div><div><p>Blob 官方定位是”运行时数据存储”，控制台只提供只读浏览（看得到命名空间和目录结构，但不能下载），命名空间创建和数据操作都要通过 SDK 完成。也就是说大批量导出/迁移建议用 <code>@edgeone/pages-blob</code> 配合 <code>projectId</code> + API Token 从外部脚本访问。</p></div></div><p>Blob 免费版单值上限 25 MB，<code>db/memo.json</code> 会随着笔记数量增长而变大。个人使用几千条笔记完全没问题；如果要放大量带附件的内容，建议尽早按上面的方式把存储切到 S3。</p></section>
<section><h2>常见问题<a href="#常见问题"><span>#</span></a></h2><p><strong>Q：一定要用 EdgeOne 吗？能用 Cloudflare 吗？</strong>
A：可以，这是两个独立项目。Cloudflare 版用 D1 + R2，EdgeOne 版用 Blob。</p><p><strong>Q：构建失败了怎么办？</strong>
A：先看部署日志。常见原因是 Node 版本（必须是 22.11.0）或依赖没装全——根目录和 <code>web</code> 都要 <code>npm install</code>。如果日志里出现 <code>@aws-sdk/*</code> 相关的打包错误，注意 <code>edgeone.json</code> 里已经把它们放进 <code>cloudFunctions.externalNodeModules</code>，不要删掉。</p><p><strong>Q：页面刷新后 404？</strong>
A：<code>edgeone.json</code> 里的 <code>rewrites</code> 被覆盖了。SPA 需要 <code>/* → /index.html</code> 的回退规则。</p><p><strong>Q：注册接口报 500？</strong>
A：多半是 <code>JWT_SECRET</code> 没配或为空。</p><p><strong>Q：为什么我的 KV 明明申请通过了却用不了？</strong>
A：回到 <a href="#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%8D%E7%94%A8-edgeone-kv-%E5%AD%98%E5%82%A8%E7%94%A8%E6%88%B7%E5%92%8C%E9%85%8D%E7%BD%AE%E6%95%B0%E6%8D%AE">为什么不用 KV</a> 那一节——KV 当前仅在 Edge Functions 运行时可用，而这个项目的后端跑在 Cloud Functions 上。</p></section>
<section><h2>小结<a href="#小结"><span>#</span></a></h2><p>memos-on-edgeone 的价值在于把部署成本压到了最低：不用买服务器，不用建数据库，不用初始化，关联 GitHub、填一个 <code>JWT_SECRET</code> 就能跑。存储选型上的取舍也很明确——<strong>因为国内版 KV 需要申请审核、且仅限 Edge Functions、只有最终一致性，所以用户与配置数据统一放进了零申请、Cloud Functions 可用、支持单次强一致读的 Blob</strong>。</p><p>如果你喜欢这种”能托管就不运维”的思路，可以看看我博客里的其他 EdgeOne 折腾记录。项目开源，MIT 协议，欢迎提 Issue 和 PR。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/boc-bilibili-2233-debit-card/</id>
      <title type="text">中行哔哩哔哩 2233 联名借记卡网申教程</title>
      <published>2026-10-02T00:00:00.000Z</published>
      <updated>2026-10-02T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/boc-bilibili-2233-debit-card/"/>
      <summary type="text">手把手教你在线申请中国银行哔哩哔哩 2233 联名借记卡（万事达版 BIN 223300 / 银联版 621790）：申请入口、个性化选号规则、网申校验限制、领卡激活流程，以及配套的新客礼与支付礼活动。</summary>
      <content type="html"><![CDATA[<section><h2>一、卡长什么样<a href="#一卡长什么样"><span>#</span></a></h2><p>中国银行哔哩哔哩 2233 联名借记卡分<strong>万事达版</strong>和<strong>银联版</strong>两个版本，卡面设计基本一致，卡片等级都是普卡，卡号 16 位，有效期 6 年。</p>

<table><thead><tr><th>版本</th><th>卡 BIN</th><th>特点</th></tr></thead><tbody><tr><td>万事达版</td><td><code>223300</code></td><td>境内走万事网联受理，境外走万事达网络；境内首张 2 字头万事达借记卡</td></tr><tr><td>银联版</td><td><code>621790</code></td><td>偏日常通用，线下受理点更常见</td></tr></tbody></table><p>万事达版的记忆点就是 <code>2233</code> 开头的卡号，前四位对应 B 站 22 娘和 33 娘；不过 <code>223300</code> 之后两位通常是地区码，所以真正能自己挑的是后面几位。</p><p>除了「可以定制卡号」，这张卡在权益上就是一张普卡：免年费、免账户管理费、免境内 ATM 查询 / 取现手续费，<strong>2026 年底前免收开卡工本费</strong>。所以收藏成本基本为零，但别指望它比普通中行借记卡多出什么金融权益。</p><section><h3>卡面（横版 / 竖版）<a href="#卡面横版--竖版"><span>#</span></a></h3><p>两个版本各有横版和竖版两种卡面，卡面设计基本一致，差别只在卡组织标识和排版。</p><p><strong>万事达版 <code>223300</code></strong></p><p>横版</p><p></p><figure><img src="https://pic.bankofchina.com/bcservice/202609/W020260922369166744685.jpg" alt="万事达哔哩哔哩 2233 联名借记卡 横版" /><figcaption>万事达哔哩哔哩 2233 联名借记卡 横版</figcaption></figure><p></p><p>竖版</p><p></p><figure><img src="https://pic.bankofchina.com/bcservice/202609/W020260922369168415813.jpg" alt="万事达哔哩哔哩 2233 联名借记卡 竖版" /><figcaption>万事达哔哩哔哩 2233 联名借记卡 竖版</figcaption></figure><p></p><p><strong>银联版 <code>621790</code></strong></p><p>横版</p><p></p><figure><img src="https://pic.bankofchina.com/bcservice/202609/W020260922370249664674.jpg" alt="银联哔哩哔哩 2233 联名借记卡 横版" /><figcaption>银联哔哩哔哩 2233 联名借记卡 横版</figcaption></figure><p></p><p>竖版</p><p></p><figure><img src="https://pic.bankofchina.com/bcservice/202609/W020260922370251115890.jpg" alt="银联哔哩哔哩 2233 联名借记卡 竖版" /><figcaption>银联哔哩哔哩 2233 联名借记卡 竖版</figcaption></figure><p></p></section><section><h3>卡面怎么选<a href="#卡面怎么选"><span>#</span></a></h3><p><strong>网申（线上预约）只有竖版卡面。</strong> 横版属于隐藏卡面，只能去线下网点开非预制卡，对应的可售产品编号如下：</p>

<table><thead><tr><th>版本</th><th>卡面</th><th>可售产品代码</th><th>申请渠道</th></tr></thead><tbody><tr><td>万事达联名卡</td><td>竖版</td><td><code>500000249</code></td><td>线上网申默认款式 / 线下均可</td></tr><tr><td>万事达联名卡</td><td>横版</td><td><code>501000249</code></td><td>隐藏卡面，仅限线下开非预制卡</td></tr><tr><td>银联联名卡</td><td>竖版</td><td><code>500000234</code></td><td>线上 / 线下均可</td></tr><tr><td>银联联名卡</td><td>横版</td><td><code>501000234</code></td><td>隐藏卡面，仅限线下开非预制卡</td></tr></tbody></table><blockquote><p>已经拿到竖版又想要横版的，可以去柜面用交易代码 <code>8103316</code>（个人换非预制卡），报上目标可售产品编号，在<strong>同一个 BIN 内</strong>换卡；跨 BIN 换卡就得换预制卡或重新开户了。线上申请的卡默认发竖版，这一条不影响网申。</p></blockquote></section></section>
<section><h2>二、申请入口<a href="#二申请入口"><span>#</span></a></h2><p>线上预约有两个入口，任选其一：</p><ul>
<li>中国银行 App 首页 → B 站专区 → <strong>借记卡线上预约</strong>（推荐，页面和 App 内活动是打通的）</li>
<li>中行线上预约页直连：<a href="https://open.boc.cn/bankcard/cardReserve/index.html#/?appId=8AFAF8C546EB63E9AE3202BC13DB46FC&amp;prodId=P260802MYZGWK2025060515073600001&amp;subProdId=JJKYY&amp;funcId=cardIntroduce&amp;chanId=bili_bzapp" target="_blank">open.boc.cn 借记卡线上预约</a></li>
</ul><blockquote><p>领卡网点信息维护有误，部分地区能选到私人银行中心、个人金融部、FTU 虚拟网点这类非常规网点，选了可能领不到卡，提交前留个心眼。</p></blockquote></section>
<section><h2>三、网申流程<a href="#三网申流程"><span>#</span></a></h2><p>线上申请一共四步，五分钟能填完：</p><ol>
<li><strong>填基本信息</strong>：姓名、身份证号、手机号。手机号尽量填本人实名手机号，后面领卡和短信通知都用得上。</li>
<li><strong>选预约网点</strong>：默认显示的网点不一定是离你最近的那个，<strong>提交前手动换成方便领卡的网点</strong>，并且这个网点就是该卡的开户行。</li>
<li><strong>个性化定制卡号</strong>：进「个性化定制」页面挑后 6 位，这是整张卡最热闹的环节，规则见下一节。</li>
<li><strong>提交预约</strong>：提交后可在申请进度页查询制卡进度（<a href="https://open.boc.cn/bankcard/cardReserve/index.html#/?applyProgressFill" target="_blank">进度查询入口</a>）。</li>
</ol></section>
<section><h2>四、选号规则（重点）<a href="#四选号规则重点"><span>#</span></a></h2><p>页面支持免费定制卡号后 5~6 位，规则如下：</p><ul>
<li><strong>不能出现三个及以上相同数字</strong>。<code>888</code>、<code>000</code> 这类组合会被输入框直接拦下；每个数字重复两次是可以的，比如 <code>223300</code>。</li>
<li><strong>每天 5 次机会</strong>，搜索和「换一换」刷新共用这 5 次，用完只能等第二天。所以先在心里把尾号排好序再动手，别随手乱点。</li>
<li><strong>先到先得</strong>。靓号当天就会被抢走，目前大部分吉祥号已经没了，想碰运气可以每天来看看。</li>
</ul><p>比较稳的思路是顺着 BIN 走：优先选和 <code>2233</code>、<code>3322</code> 呼应的尾号（这类最先被扫），或者生日、纪念日、顺子号。如果这些都没了，往「带 22 / 33」的组合或者带 <code>00</code> 的对称号退一步，成功率会高不少。</p></section>
<section><h2>五、网申会被校验什么<a href="#五网申会被校验什么"><span>#</span></a></h2><p>提交时系统会做几项校验，任意一项不满足就会直接拦下来：</p>

<table><thead><tr><th>校验项</th><th>说明</th></tr></thead><tbody><tr><td>在途订单</td><td>同时只能有一个网申订单，没完成前不能再提交</td></tr><tr><td>实体卡数量</td><td>已开立满 4 张实体卡后无法再提交</td></tr><tr><td>年龄</td><td>网申通道要求年满 18 周岁</td></tr><tr><td>配送方式</td><td><strong>不邮寄到家</strong>，只能邮寄到你选择的领卡网点</td></tr></tbody></table><p>另外，<strong>只能同时申请一张</strong>：申请了万事达版就不能同时申请银联版，想两张都收的话建议先申万事达版（223300），等这一张落地之后再申另一张。</p></section>
<section><h2>六、领卡与激活<a href="#六领卡与激活"><span>#</span></a></h2><p>提交成功后，卡片预计 <strong>7~15 个工作日</strong>制妥并邮寄到指定领卡网点，期间留意中行 App / 短信通知。制卡到网点后，带本人有效身份证件去该网点领卡并办理开户，<strong>不去网点是拿不到卡的</strong>。</p><p>这里要分清账户类型：</p><ul>
<li>同一家银行只能有一个<strong>一类账户</strong>。</li>
<li>如果你已经有中行一类卡且原卡不降级，这张联名卡大概率只能开成<strong>二类户</strong>，领卡时柜面也会问你要开一类还是二类。</li>
<li>二类户在限额和功能上会有差别，办之前先想清楚自己是收藏还是要当主力卡用。</li>
</ul><p>拿到卡以后：</p><ul>
<li>领卡后<strong>立即修改密码</strong>，登录手机银行顺便设置好限额、支付限额、动账通知、一键绑卡。</li>
<li>想及时收到境外消费短信提醒，出国前记得开通手机境外漫游，也可以关注「中国银行微银行」公众号并绑定借记卡接收微信交易提醒。</li>
</ul></section>
<section><h2>七、进阶技巧：控制台直接获取卡号与制卡状态<a href="#七进阶技巧控制台直接获取卡号与制卡状态"><span>#</span></a></h2><p>进度查询页面上显示的卡号有时会脱敏，想看完整卡号和实时制卡状态，可以直接在浏览器控制台里取。进入<a href="https://open.boc.cn/bankcard/cardReserve/index.html#/?applyProgressFill" target="_blank">申请进度查询页面</a>，输入信息查询后点开你要查的那张卡，按 <strong>F12</strong> 打开 Console，粘贴下面的表达式回车即可。</p><section><h3>直接输出卡号 + 制卡状态<a href="#直接输出卡号--制卡状态"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span><span>document</span><span>.</span></span><span>getElementsByClassName</span><span>(</span><span>"progress-result-wrap"</span><span>)[</span><span>0</span><span>].</span><span>__vue__</span><span>.</span><span>$parent</span><span>.</span><span>recordInfo</span><span>.</span><span>cardNo</span><span>.</span><span>replace</span><span>(</span><span>/</span><span>\s</span><span><span>+</span><span>/</span></span><span>g</span><span>, </span><span>''</span><span>) </span><span>+</span><span> </span><span>" | "</span><span> </span><span>+</span><span><span> </span><span>document</span><span>.</span></span><span>getElementsByClassName</span><span>(</span><span>"progress-result-wrap"</span><span>)[</span><span>0</span><span>].</span><span>__vue__</span><span>.</span><span>$parent</span><span>.</span><span>recordInfo</span><span>.</span><span>mkcrdProgreSts</span><span> </span><span>+</span><span> </span><span>" ("</span><span> </span><span>+</span><span> ({</span><span>'00'</span><span>:</span><span>'待制卡'</span><span>,</span><span>'01'</span><span>:</span><span>'制卡中'</span><span>,</span><span>'03'</span><span>:</span><span>'寄送中'</span><span>,</span><span>'04'</span><span>:</span><span>'待领卡'</span><span>,</span><span>'06'</span><span>:</span><span>'已领卡'</span><span>,</span><span>'02'</span><span>:</span><span>'流程异常'</span><span>,</span><span>'05'</span><span>:</span><span>'流程异常'</span><span>,</span><span>'07'</span><span>:</span><span>'流程异常'</span><span><span>}[</span><span>document</span><span>.</span></span><span>getElementsByClassName</span><span>(</span><span>"progress-result-wrap"</span><span>)[</span><span>0</span><span>].</span><span>__vue__</span><span>.</span><span>$parent</span><span>.</span><span>recordInfo</span><span>.</span><span>mkcrdProgreSts</span><span>] </span><span>||</span><span> </span><span>"未知"</span><span>) </span><span>+</span><span> </span><span>")"</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>状态码对照：</p>

<table><thead><tr><th>状态码</th><th>含义</th></tr></thead><tbody><tr><td><code>00</code></td><td>待制卡（已提交申请）</td></tr><tr><td><code>01</code></td><td>制卡中</td></tr><tr><td><code>03</code></td><td>寄送中</td></tr><tr><td><code>04</code></td><td>待领卡（卡片已寄达网点并完成入库）</td></tr><tr><td><code>06</code></td><td>已领卡</td></tr><tr><td><code>02</code> / <code>05</code> / <code>07</code></td><td>流程异常</td></tr></tbody></table></section><section><h3>导出完整订单信息（JSON）<a href="#导出完整订单信息json"><span>#</span></a></h3><p>不想看上面那串拼接结果，也可以直接把整份 <code>recordInfo</code> 序列化出来，卡号、状态、网点、时间戳等字段一次看全：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>JSON</span><span>.</span><span>stringify</span><span><span>(</span><span>document</span><span>.</span></span><span>getElementsByClassName</span><span>(</span><span>"progress-result-wrap"</span><span>)[</span><span>0</span><span>].</span><span>__vue__</span><span>.</span><span>$parent</span><span>.</span><span>recordInfo</span><span>)</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure></div><p>控制台输出的结果本身就是一行 JSON 字符串，直接复制走即可；想让它格式化得好看一点，可以在末尾补一个空格参数变成 <code>JSON.stringify(obj, null, 2)</code>。</p><blockquote><p>只有网点把卡片扫描入库之后，后台状态才会转成 <code>04 待领卡</code>。如果卡早该到了状态却一直不变，可能是卡片已到网点但没及时入库，可以联系网点人工核查。新网申系统前端有时会做脱敏屏蔽，想在柜面核对完整卡号，可以让柜员用查询代码 <code>9071123</code>（线上预约制卡进度查询）。</p></blockquote><p>这套技巧来自<a href="https://www.lengchuan.cn/2026/09/22/boc-bilibili-card/" target="_blank">冷川档案馆</a>的整理（原始 DP 来自 encmasuta 与 DocOfCard），页面结构改动后表达式可能失效，报错就先在 Console 里 <code>dir()</code> 一下 <code>recordInfo</code> 看看字段名。</p></section></section>
<section><h2>八、两个配套活动<a href="#八两个配套活动"><span>#</span></a></h2><p>活动入口都在中国银行 App 的 B 站专区，具体规则和库存以 App 内活动页面为准。</p><section><h3>活动一：一键三连，新客有礼<a href="#活动一一键三连新客有礼"><span>#</span></a></h3><p>面向「新开立联名卡客户」，达标需要完成三步：</p><ol>
<li>实名注册中国银行手机银行；</li>
<li>转入资金到联名卡账户，<strong>单笔金额 ≥ 100 元</strong>；</li>
<li>用这张卡做一次快捷支付，<strong>单笔金额 ≥ 100 元</strong>。</li>
</ol><p>三步完成后奖品任选其一：哔哩哔哩大会员月卡、2233 版限量周边卡套、千里江山版限量周边卡套等。</p><blockquote><p>注意活动写的是「新开立联名卡客户」，不等于中行全新客户，只是新办这张联名卡理论上也可能符合，最终资格以活动页面判定为准。</p></blockquote></section><section><h3>活动二：前方高能，支付有礼<a href="#活动二前方高能支付有礼"><span>#</span></a></h3><p>报名当月，通过微信、支付宝、京东、美团、抖音、拼多多、携程、唯品会等平台绑定这张卡做快捷支付，<strong>单笔交易金额 ≥ 223.3 元</strong>即达标。消费、转账、充值、发红包都算，不含退款。</p><p>每达标一笔获得一次抽奖机会，次数不限，但<strong>不是百分百中奖，每名客户每月最多中奖 1 次</strong>，奖品是哔哩哔哩大会员年卡或故宫千里江山立体文具套装二选一。</p></section></section>
<section><h2>九、常见问题<a href="#九常见问题"><span>#</span></a></h2><p><strong>Q：这张卡适合我吗？</strong></p><p>适合 B 站粉丝、卡号玩家、喜欢收藏联名卡的人，以及本来就打算在中行开一张普通借记卡的人。如果你要的是一张功能强大的主力借记卡，它比普通中行卡多不了太多东西。</p><p><strong>Q：万事达版和银联版怎么选？</strong></p><p>想要 2233 卡号和收藏意义选万事达版；更在意线下受理点覆盖、日常使用顺手选银联版。万事达线下受理不如银联普及，这是它的短板。</p><p><strong>Q：未成年能办吗？</strong></p><p>借记卡产品本身对年龄无特殊限制，未成年人可由监护人代办，但<strong>网申通道要求年满 18 周岁</strong>，未成年只能走线下网点。</p><p><strong>Q：境外怎么用？</strong></p><p>境内境外交易都用人民币扣款，不需要提前购汇、不占用购汇额度，但境外消费或取现<strong>只支持人民币扣款，不支持外币</strong>，具体金额以万事达清算金额为准，汇率可在 <a href="https://www.mastercard.com/cn/zh/personal/get-support/currency-exchange-rate-converter.html" target="_blank">Mastercard 汇率查询页</a> 查看。记得保证卡内人民币余额充足。</p><p><strong>Q：卡丢了怎么办？</strong></p><p>持有效身份证件到发卡行办理正式挂失，挂失期满后办理换卡或换密码；也可以先通过电话银行或就近网点办临时挂失，并在五天内到原发卡行补办书面正式挂失。挂失和换卡会按当日标准收取挂失手续费和制卡工本费。</p></section>
<section><h2>十、写在最后<a href="#十写在最后"><span>#</span></a></h2><p>这张卡的正确打开方式：申请前先想好尾号，别浪费每天 5 次选号机会；预约网点提交前手动改掉；领卡时问清一类 / 二类户规则；顺手把新客礼和支付礼报了。做到这四步，基本就没什么坑了。</p><p>以上信息整理自中国银行官网产品页与实际网申流程，活动规则和费率会调整，办理前建议详询网点或拨打 95566 确认。</p></section>
<section><h2>参考<a href="#参考"><span>#</span></a></h2><ul>
<li><a href="https://www.boc.cn/bcservice/bc2/202609/t20260922_25693703.html" target="_blank">万事达哔哩哔哩 2233 联名借记卡 - 中国银行</a></li>
<li><a href="https://www.bankofchina.com/big5/bcservice/bc2/202609/t20260922_25693704.html" target="_blank">银联哔哩哔哩 2233 联名借记卡 - 中国银行</a></li>
<li><a href="https://post.smzdm.com/p/a03qwx79/" target="_blank">中国银行 b 站专区活动与入口说明</a></li>
</ul></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/rainyun-autocheckin/</id>
      <title type="text">关于雨云自动签到脚本失灵的解决方法</title>
      <published>2025-01-06T00:00:00.000Z</published>
      <updated>2025-01-06T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/rainyun-autocheckin/"/>
      <summary type="text">雨云签到新增人机验证导致传统 Python 脚本失效？本文介绍可用的 Telegram 自动签到机器人（@fuckrainyun）及绑定方法，并附上旧版 Python 脚本供参考。</summary>
      <content type="html"><![CDATA[<section><h2>事件简述<a href="#事件简述"><span>#</span></a></h2><p>近日，雨云开始签到需进行人机验证，使得网络上绝大部分Python脚本失灵，但好消息，博主找到了一个自动签到机器人（电报(Telegram)机器人，<strong>劝退无法科学上网和无法注册电报的小伙伴</strong>了，但这已经是博主目前找到的唯一可行方案了），可以帮助小伙伴们重新解放双手，自动签到！</p></section>
<section><h2>解决方法<a href="#解决方法"><span>#</span></a></h2><p><strong>雨云自动签到机器人：</strong></p><p><a href="https://t.me/fuckrainyun_bot" target="_blank">Telegram: Contact @fuckrainyun</a></p><p><strong>机器人使用方法：</strong></p><p><a href="https://bot.rainyun.space/" target="_blank">总览 | Rainyun Account Bot Docs</a></p><p>对话框发送指令：<strong><code>/crontab create checkin 你的雨云API-Key</code></strong> 即可完成绑定</p><blockquote><p>支持绑定多号，绑定完成就可以实现自动签到啦~</p></blockquote><section><h3>详细介绍<a href="#详细介绍"><span>#</span></a></h3><p>雨云自动签到机器人是指一种通过电报（Telegram）平台运行的自动化工具，帮助用户实现雨云网站的自动签到功能。这种机器人可以解决由于人机验证导致的传统脚本失效的问题。</p><ul>
<li>机器人功能：
<ul>
<li>自动执行签到任务：用户无需手动操作，机器人会定时或按设定的时间节点自动登录雨云账户并完成签到。</li>
<li>多账号支持：用户可以通过同一个机器人绑定多个雨云账户，实现批量管理不同账户的签到需求。</li>
</ul>
</li>
<li>使用方法：
<ul>
<li>绑定账户：用户需要发送特定指令（如 /crontab create checkin 你的雨云API-Key）给机器人，以将机器人的服务与自己的雨云账户关联起来。</li>
<li>确认绑定：一旦绑定成功，机器人就会按照预设的时间周期自动执行签到动作，并为每个账户单独记录和执行签到任务。</li>
</ul>
</li>
<li>技术背景：
<ul>
<li>人机验证机制：近期，雨云网站增加了人机验证步骤，使得传统的Python脚本难以直接模拟用户的登录和签到行为。</li>
<li>电报机器人优势：电报机器人能够通过Telegram平台提供的API接口，与雨云服务器进行交互，从而绕过人机验证的限制，实现自动化签到。</li>
</ul>
</li>
<li>用户群体：
<ul>
<li>面向无法科学上网或无法注册电报的用户：尽管存在一些技术障碍，但博主认为这是目前唯一可行的解决方案。</li>
<li>对于能够正常使用电报的用户来说，这是一个高效且便捷的选择，能够显著减少手动操作的时间和精力消耗。</li>
</ul>
</li>
</ul></section></section>
<section><h2>脚本解决方法“众筹”<a href="#脚本解决方法众筹"><span>#</span></a></h2><p>为了让更多小伙伴可以自动签到，还希望有精通Python的大佬更新一下代码，以下提供一下博主之前使用的Python自动签到脚本：</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>import</span><span> requests</span></div></div><div><div><div>2</div></div><div><span>import</span><span> json</span></div></div><div><div><div>3</div></div><div><span>import</span><span> time</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span><span>api_keys </span><span>=</span><span> [</span></span></div></div><div><div><div>6</div></div><div><span>    </span><span>"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"</span><span>,</span></div></div><div><div><div>7</div></div><div><span>    </span><span>"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"</span></div></div><div><div><div>8</div></div><div><span>    </span><span># 在这里放置 "&lt;X-API-KEY&gt;"，可放置多项</span></div></div><div><div><div>9</div></div><div><span>]</span></div></div><div><div><div>10</div></div><div><span><span>url </span><span>=</span><span> </span></span><span>"https://api.v2.rainyun.com/user/reward/tasks"</span></div></div><div><div><div>11</div></div><div>
</div></div><div><div><div>12</div></div><div><span>print</span><span>(</span><span>"Rainyun-AutoSignin-V2 script, by CodeZhangBorui</span><span>\n</span><span>[Time] "</span><span>, </span><span>end</span><span>=</span><span>''</span><span>)</span></div></div><div><div><div>13</div></div><div><span>print</span><span><span>(time.</span><span>ctime</span><span>())</span></span></div></div><div><div><div>14</div></div><div>
</div></div><div><div><div>15</div></div><div><span>for</span><span> key </span><span>in</span><span> api_keys:</span></div></div><div><div><div>16</div></div><div><span>    </span><span>print</span><span>(</span><span>"# 用 X-API-KEY 登录: "</span><span><span> </span><span>+</span><span> key[:</span></span><span>10</span><span><span>] </span><span>+</span><span> </span></span><span>"*"</span><span>*</span><span>22</span><span>)</span></div></div><div><div><div>17</div></div><div><span><span>    </span></span><span>headers </span><span>=</span><span> {</span></div></div><div><div><div>18</div></div><div><span>       </span><span>'x-api-key'</span><span>: key,</span></div></div><div><div><div>19</div></div><div><span>       </span><span>'User-Agent'</span><span>: </span><span>'Rainyun-AutoSignin/2.0 (https://codezhangborui.eu.org/2023/06/rainyun-auto-python-scripts/)'</span></div></div><div><div><div>20</div></div><div><span><span>    </span></span><span>}</span></div></div><div><div><div>21</div></div><div><span><span>    </span></span><span>response </span><span>=</span><span> requests.</span><span>request</span><span>(</span><span>"GET"</span><span>, url, </span><span>headers</span><span><span>=</span><span>headers, </span></span><span>data</span><span><span>=</span><span>{})</span></span></div></div><div><div><div>22</div></div><div><span><span>    </span></span><span>result </span><span>=</span><span> json.</span><span>loads</span><span>(response.text)</span></div></div><div><div><div>23</div></div><div><span>    </span><span>print</span><span>(</span><span>"# 获取可领取任务列表"</span><span>)</span></div></div><div><div><div>24</div></div><div><span><span>    </span></span><span>undone </span><span>=</span><span> []</span></div></div><div><div><div>25</div></div><div><span>    </span><span>for</span><span> task </span><span>in</span><span> result[</span><span>'data'</span><span>]:</span></div></div><div><div><div>26</div></div><div><span>        </span><span>if</span><span>(task[</span><span>'Status'</span><span><span>] </span><span>==</span><span> </span></span><span>0</span><span>):</span></div></div><div><div><div>27</div></div><div><span>            </span><span>print</span><span>(</span><span>"## - 未完成："</span><span><span> </span><span>+</span><span> task[</span></span><span>'Name'</span><span>])</span></div></div><div><div><div>28</div></div><div><span>        </span><span>elif</span><span>(task[</span><span>'Status'</span><span><span>] </span><span>==</span><span> </span></span><span>1</span><span>):</span></div></div><div><div><div>29</div></div><div><span>            </span><span>print</span><span>(</span><span>"## &gt; 可领取："</span><span><span> </span><span>+</span><span> task[</span></span><span>'Name'</span><span><span>] </span><span>+</span><span> </span></span><span>" | 可获得积分："</span><span><span> </span><span>+</span><span> </span></span><span>str</span><span>(task[</span><span>'Points'</span><span>]))</span></div></div><div><div><div>30</div></div><div><span><span>            </span></span><span>undone.</span><span>append</span><span>(task[</span><span>'Name'</span><span>])</span></div></div><div><div><div>31</div></div><div><span>        </span><span>elif</span><span>(task[</span><span>'Status'</span><span><span>] </span><span>==</span><span> </span></span><span>2</span><span>):</span></div></div><div><div><div>32</div></div><div><span>            </span><span>print</span><span>(</span><span>"## V 已领取："</span><span><span> </span><span>+</span><span> task[</span></span><span>'Name'</span><span>])</span></div></div><div><div><div>33</div></div><div><span>        </span><span>else</span><span>:</span></div></div><div><div><div>34</div></div><div><span>            </span><span>print</span><span>(</span><span>"## ? 未知状态："</span><span><span> </span><span>+</span><span> task[</span></span><span>'Name'</span><span><span>] </span><span>+</span><span> </span></span><span>" | 服务器 DATA："</span><span><span> </span><span>+</span><span> </span></span><span>str</span><span>(task))</span></div></div><div><div><div>35</div></div><div><span>    </span><span># undone.append("每日签到")</span></div></div><div><div><div>36</div></div><div><span>    </span><span>if</span><span><span>(undone </span><span>==</span><span> []):</span></span></div></div><div><div><div>37</div></div><div><span>        </span><span>print</span><span>(</span><span>"# 没有可领取任务！"</span><span>)</span></div></div><div><div><div>38</div></div><div><span>    </span><span>else</span><span>:</span></div></div><div><div><div>39</div></div><div><span>        </span><span>for</span><span> task </span><span>in</span><span> undone:</span></div></div><div><div><div>40</div></div><div><span>            </span><span>try</span><span>:</span></div></div><div><div><div>41</div></div><div><span>                </span><span>print</span><span>(</span><span>"## 请求完成任务："</span><span><span> </span><span>+</span><span> task, </span></span><span>end</span><span>=</span><span>''</span><span>)</span></div></div><div><div><div>42</div></div><div><span><span>                </span></span><span>response </span><span>=</span><span> requests.</span><span>request</span><span>(</span><span>"POST"</span><span>, url, </span><span>headers</span><span><span>=</span><span>headers, </span></span><span>json</span><span><span>=</span><span>{</span></span><span>"task_name"</span><span>: task})</span></div></div><div><div><div>43</div></div><div><span><span>                </span></span><span>result </span><span>=</span><span> json.</span><span>loads</span><span>(response.text)</span></div></div><div><div><div>44</div></div><div><span>                </span><span>print</span><span>(</span><span>" | 服务器 DATA："</span><span><span> </span><span>+</span><span> </span></span><span>str</span><span>(result))</span></div></div><div><div><div>45</div></div><div><span>            </span><span>except</span><span>:</span></div></div><div><div><div>46</div></div><div><span>                </span><span>print</span><span>(</span><span>":( Something went wrong, retry in 10 seconds..."</span><span>)</span></div></div><div><div><div>47</div></div><div><span><span>                </span></span><span>time.</span><span>sleep</span><span>(</span><span>10</span><span>)</span></div></div><div><div><div>48</div></div><div><span>                </span><span>try</span><span>:</span></div></div><div><div><div>49</div></div><div><span>                    </span><span>print</span><span>(</span><span>"## 请求完成任务："</span><span><span> </span><span>+</span><span> task, </span></span><span>end</span><span>=</span><span>''</span><span>)</span></div></div><div><div><div>50</div></div><div><span><span>                    </span></span><span>response </span><span>=</span><span> requests.</span><span>request</span><span>(</span><span>"POST"</span><span>, url, </span><span>headers</span><span><span>=</span><span>headers, </span></span><span>json</span><span><span>=</span><span>{</span></span><span>"task_name"</span><span>: task})</span></div></div><div><div><div>51</div></div><div><span><span>                    </span></span><span>result </span><span>=</span><span> json.</span><span>loads</span><span>(response.text)</span></div></div><div><div><div>52</div></div><div><span>                    </span><span>print</span><span>(</span><span>" | 服务器 DATA："</span><span><span> </span><span>+</span><span> </span></span><span>str</span><span>(result))</span></div></div><div><div><div>53</div></div><div><span>                </span><span>except</span><span>:</span></div></div><div><div><div>54</div></div><div><span>                    </span><span>print</span><span>(</span><span>":( Something went wrong, retry in 30 seconds..."</span><span>)</span></div></div><div><div><div>55</div></div><div><span><span>                    </span></span><span>time.</span><span>sleep</span><span>(</span><span>30</span><span>)</span></div></div><div><div><div>56</div></div><div><span>                    </span><span>try</span><span>:</span></div></div><div><div><div>57</div></div><div><span>                        </span><span>print</span><span>(</span><span>"## 请求完成任务："</span><span><span> </span><span>+</span><span> task, </span></span><span>end</span><span>=</span><span>''</span><span>)</span></div></div><div><div><div>58</div></div><div><span><span>                        </span></span><span>response </span><span>=</span><span> requests.</span><span>request</span><span>(</span><span>"POST"</span><span>, url, </span><span>headers</span><span><span>=</span><span>headers, </span></span><span>json</span><span><span>=</span><span>{</span></span><span>"task_name"</span><span>: task})</span></div></div><div><div><div>59</div></div><div><span><span>                        </span></span><span>result </span><span>=</span><span> json.</span><span>loads</span><span>(response.text)</span></div></div><div><div><div>60</div></div><div><span>                        </span><span>print</span><span>(</span><span>" | 服务器 DATA："</span><span><span> </span><span>+</span><span> </span></span><span>str</span><span>(result))</span></div></div><div><div><div>61</div></div><div><span>                    </span><span>except</span><span>:</span></div></div><div><div><div>62</div></div><div><span>                        </span><span>print</span><span>(</span><span>":( Something went wrong, skip this task"</span><span>)</span></div></div><div><div><div>63</div></div><div><span>                        </span><span>continue</span></div></div><div><div><div>64</div></div><div><span>    </span><span>print</span><span>(</span><span>""</span><span>)</span></div></div><div><div><div>65</div></div><div><span>print</span><span>(</span><span>"# 程序已结束！"</span><span>)</span></div></div><div><div><div>66</div></div><div><span><span>time.</span><span>sleep</span><span>(</span></span><span>10</span><span>)</span></div></div></code></pre><div><div></div><div></div></div><div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div><p>如有新脚本出现，博主也会第一时间更新文章！</p></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/free-mcserver-rainyun/</id>
      <title type="text">免费领取我的世界游戏云服务器及一键开服教程</title>
      <published>2025-01-05T00:00:00.000Z</published>
      <updated>2025-01-05T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/free-mcserver-rainyun/"/>
      <summary type="text">手把手教你免费领取雨云游戏云服务器并一键开服 Minecraft（Paper 1.21.3），含积分获取、优惠注册链接与 MCSM 面板配置全流程。</summary>
      <content type="html"><![CDATA[<section><h2><strong>游戏简介</strong><a href="#游戏简介"><span>#</span></a></h2><p>我的世界(Minecraft)是一款极具创意和自由度的沙盒游戏，吸引了全球数百万玩家。为了获得更好的游戏体验，许多玩家希望能够自行搭建MC服务器，本文将为大家分享免费领取我的世界(Minecraft)游戏云服务器及一键开服教程。</p><p></p><figure><img src="https://pic4.zhimg.com/v2-1b037be3b59918863692701f369ec745_1440w.jpg" alt="Minecraft(我的世界)" /><figcaption>Minecraft(我的世界)</figcaption></figure><p></p></section>
<section><h2><strong>服务商简介</strong><a href="#服务商简介"><span>#</span></a></h2><p>雨云是一家国内的云计算服务提供商，推出了免费游戏云兑换活动，只需要完成简单的积分任务就可以获得积分，积分可以用来兑换游戏云，后续还可以用积分进行续期操作。</p><p></p><figure><img src="https://pic1.zhimg.com/v2-4bf5f0d3993dc6e4845d2f2578cb8f2c_1440w.jpg" alt="雨云(RainYun)" /><figcaption>雨云(RainYun)</figcaption></figure><p></p><hr /></section>
<section><h2><strong>操作步骤</strong><a href="#操作步骤"><span>#</span></a></h2><section><h3>1. 首先，需要注册一个雨云账号，通过雨云优惠注册链接注册并绑定微信即可获得2000积分。<a href="#1-首先需要注册一个雨云账号通过雨云优惠注册链接注册并绑定微信即可获得2000积分"><span>#</span></a></h3><p>优惠注册链接：</p><p><a href="https://www.rainyun.com/MoonCC_" target="_blank">雨云 - 新一代云服务提供商</a></p><p>优惠码：<strong>MoonCC</strong></p><blockquote><p><strong>使用优惠注册链接或使用优惠码注册</strong>可获得一张<em><strong>新人首月5折券</strong></em>和一张<em><strong>新人半年7折券</strong></em>，可节省大笔费用哦~</p></blockquote><p></p><figure><img src="https://pic1.zhimg.com/v2-c8b121247f0003ad92bf4061775f1dca_1440w.jpg" alt="我的优惠券 | 雨云" /><figcaption>我的优惠券 | 雨云</figcaption></figure><p></p></section><section><h3>2. 注册完成之后，进入控制台，打开菜单栏积分中心的赚取积分页面，完成积分任务获得积分。<a href="#2-注册完成之后进入控制台打开菜单栏积分中心的赚取积分页面完成积分任务获得积分"><span>#</span></a></h3><p></p><figure><img src="https://pic2.zhimg.com/v2-21ecf73e8d041c55c27052a479f1126f_1440w.jpg" alt="控制台页面 | 雨云" /><figcaption>控制台页面 | 雨云</figcaption></figure><p></p><p></p><figure><img src="https://pic1.zhimg.com/v2-bc31222fe6828360f533b81bb811d364_1440w.jpg" alt="积分中心 | 雨云" /><figcaption>积分中心 | 雨云</figcaption></figure><p></p><p>完成以上任务即可获得大量积分，获取到的积分可以用于兑换游戏云，即可开MC服务器。当然，这也积分也可以用于提现，当积分≥60000即可进行一次提现（2000积分=1元）。下面是完整的积分任务表（有点攻略哦）：</p>

<table><thead><tr><th>任务名称</th><th>任务秘诀</th><th>积分报酬</th><th>一次性否</th></tr></thead><tbody><tr><td>每日签到</td><td>签到就完事了！</td><td>+500</td><td>每日</td></tr><tr><td>绑定邮箱</td><td>绑定自己的邮箱</td><td>+1000</td><td>一次性</td></tr><tr><td>绑定手机</td><td>绑定自己的手机</td><td>+1000</td><td>一次性</td></tr><tr><td>绑定QQ</td><td>绑定自己的QQ</td><td>+500</td><td>一次性</td></tr><tr><td>绑定微信</td><td>绑定自己的微信</td><td>+2000</td><td>一次性</td></tr><tr><td>加入Q群</td><td>任务密码：我爱雨云</td><td>+1500</td><td>一次性</td></tr><tr><td>关注雨云B站号</td><td>任务密码：雨云爱你</td><td>+1000</td><td>一次性</td></tr><tr><td>关注雨云淘宝店</td><td>任务密码：成功加入</td><td>+1000</td><td>一次性</td></tr><tr><td>在淘宝渠道下单</td><td>下单（？）</td><td>+8000</td><td>一次性</td></tr></tbody></table></section><section><h3>3. 完成积分任务获得积分之后，打开菜单栏积分中心的积分商城页面，可以用积分兑换游戏云、对象存储或者虚拟主机。这里我们选择游戏云，点击领取即可。<a href="#3-完成积分任务获得积分之后打开菜单栏积分中心的积分商城页面可以用积分兑换游戏云对象存储或者虚拟主机这里我们选择游戏云点击领取即可"><span>#</span></a></h3><p></p><figure><img src="https://pica.zhimg.com/v2-4b0149787f473782771f75162f1959bc_1440w.jpg" alt="积分商城 | 雨云" /><figcaption>积分商城 | 雨云</figcaption></figure><p></p><p>PS：如遇到无货情况，可以等每晚20&lt;00随机刷新&gt;，不定期根据活动上新（例如春节国庆等<strong>重大节日或者雨云周年庆</strong>会有海量积分可以活得哦）！所有产品（<strong>无论<em>免费</em>获得还是<em>付费</em>购买</strong>）<strong>均可用积分进行续期</strong>，积分可通过签到/任务等途径获得。</p></section><section><h3>4. 游戏云兑换成功之后，打开菜单栏的云产品页面找到游戏云，即可看到免费领取的游戏云。<a href="#4-游戏云兑换成功之后打开菜单栏的云产品页面找到游戏云即可看到免费领取的游戏云"><span>#</span></a></h3><p></p><figure><img src="https://pic2.zhimg.com/v2-971f1c5931a8c694bb7b5e609abe8d1d_1440w.jpg" alt="云产品 | 雨云" /><figcaption>云产品 | 雨云</figcaption></figure><p></p><p></p><figure><img src="https://pic4.zhimg.com/v2-18435e12b1c959e6514eb20ae3fed021_1440w.jpg" alt="我的游戏云 | 雨云" /><figcaption>我的游戏云 | 雨云</figcaption></figure><p></p></section><section><h3>5. 点击管理进入游戏云管理页面，选择重装/切换游戏。<a href="#5-点击管理进入游戏云管理页面选择重装切换游戏"><span>#</span></a></h3><p>这里我演示的是搭建Paper服务端，1.21.3版本MC服务器，然后点击执行操作，然后确认完成验证操作，稍微等待几分钟。</p><p></p><figure><img src="https://pic2.zhimg.com/v2-6ebc7388ea9c45c1314e8f2665e895e7_1440w.jpg" alt="管理游戏云 | 雨云" /><figcaption>管理游戏云 | 雨云</figcaption></figure><p></p></section><section><h3>6. 再次回到游戏云管理页面，点击进入MCSM管理面板，会出现一个弹窗，复制用户名和密码，点击进入网页，输入复制的用户名和密码登录。<a href="#6-再次回到游戏云管理页面点击进入mcsm管理面板会出现一个弹窗复制用户名和密码点击进入网页输入复制的用户名和密码登录"><span>#</span></a></h3><p></p><figure><img src="https://picx.zhimg.com/v2-fb4306c5cd318c946f9267f15f5acad5_1440w.jpg" alt="进入MCSM面板 | 雨云" /><figcaption>进入MCSM面板 | 雨云</figcaption></figure><p></p></section><section><h3>7. 进入MCSM管理面板之后，点击实例右边的管理，进到实例控制台。<a href="#7-进入mcsm管理面板之后点击实例右边的管理进到实例控制台"><span>#</span></a></h3><p></p><figure><img src="https://pica.zhimg.com/v2-4d80202c66f7b62e111ca7b8a6578628_1440w.jpg" alt="MCSManager Panel" /><figcaption>MCSManager Panel</figcaption></figure><p></p></section><section><h3>8. 进到实例控制台之后，点击右上角的开启实例就完成操作了。<a href="#8-进到实例控制台之后点击右上角的开启实例就完成操作了"><span>#</span></a></h3><p></p><figure><img src="https://pic4.zhimg.com/v2-1c30e7c1efa72de76cfcf0b7c9c65853_1440w.jpg" alt="MCSManager Panel" /><figcaption>MCSManager Panel</figcaption></figure><p></p><p>至此，恭喜您，完成了最最基本的开服操作，如需加插件可自行在文件管理中plugins文件夹上传插件。</p></section></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/choose-high-quality-fruits-and-vegetables/</id>
      <title type="text">挑选优质的水果和蔬菜(持续更新中...)</title>
      <published>2023-07-17T00:00:00.000Z</published>
      <updated>2026-08-26T00:00:00.000Z</updated>
      <author><name>YouM &amp; MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/choose-high-quality-fruits-and-vegetables/"/>
      <summary type="text">一篇持续更新的生活实用指南，手把手教你通过观察、掂重、闻香、按压等简单方法，挑选西瓜、苹果、香蕉、橙子等数种常见水果和蔬菜，避开催熟、过熟、失水与变质的坑，买得新鲜、吃得安心。</summary>
      <content type="html"><![CDATA[本文已加密保护，请访问网站查看。]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/how-to-sign-up-different-outlook-email/</id>
      <title type="text">不仅是 outlook.com | 申请与众不同的 Outlook 邮箱</title>
      <published>2022-06-13T00:00:00.000Z</published>
      <updated>2022-06-13T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/how-to-sign-up-different-outlook-email/"/>
      <summary type="text">不想用千篇一律的 outlook.com？教你申请 outlook.it / outlook.ie / outlook.fr 等地区后缀的与众不同 Outlook 邮箱，附各国申请地址与设置技巧。</summary>
      <content type="html"><![CDATA[<p>不拘泥于传统 Outlook，申请一个与众不同的 Outlook.it/Outlook.ie/Outlook.fr 邮箱。</p>
<p>可能你见惯了类似于 <a href="#">abc@outlook.com</a> 的邮箱地址，都是千篇一律的 outlook.com 结尾，但是你看见过类似 <a href="#">abc@outlook.it</a>, <a href="#">abc@outlook.ie</a> 以地区域名为结尾的邮箱吗？现在微软官网开放注册特殊域名的邮箱可以申请注册。</p>
<blockquote><p>据说之前在早期注册时可以注册到超短前缀的邮箱如 <a href="#">nb@outlook.ie</a> 但是现在注册提示无法注册</p></blockquote>
<section><h2>申请链接<a href="#申请链接"><span>#</span></a></h2>

<table><thead><tr><th>所属国家</th><th>邮箱后缀</th><th>申请地址</th></tr></thead><tbody><tr><td>日本</td><td>outlook.jp</td><td><a href="https://signup.live.com/signup.aspx?mkt=JA-JP&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=JA-JP&amp;lic=1</a></td></tr><tr><td>韩国</td><td>outlook.kr</td><td><a href="https://signup.live.com/signup.aspx?mkt=KO-KR&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=KO-KR&amp;lic=1</a></td></tr><tr><td>沙特阿拉伯</td><td>outlook.sa</td><td><a href="https://signup.live.com/signup.aspx?mkt=AR-AR&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=AR-AR&amp;lic=1</a></td></tr><tr><td>阿根廷</td><td>outlook.com.ar</td><td><a href="https://signup.live.com/signup.aspx?mkt=AU-AR&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=AU-AR&amp;lic=1</a></td></tr><tr><td>澳大利亚</td><td>outlook.com.au</td><td><a href="https://signup.live.com/signup.aspx?mkt=AU-AU&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=AU-AU&amp;lic=1</a></td></tr><tr><td>奥地利</td><td>outlook.at</td><td><a href="https://signup.live.com/signup.aspx?mkt=AT-AT&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=AT-AT&amp;lic=1</a></td></tr><tr><td>比利时</td><td>outlook.be</td><td><a href="https://signup.live.com/signup.aspx?mkt=BA-BE&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=BA-BE&amp;lic=1</a></td></tr><tr><td>巴西</td><td>outlook.com.br</td><td><a href="https://signup.live.com/signup.aspx?mkt=Br-Br&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=Br-Br&amp;lic=1</a></td></tr><tr><td>智利</td><td>outlook.cl</td><td><a href="https://signup.live.com/signup.aspx?mkt=cl-cl&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=cl-cl&amp;lic=1</a></td></tr><tr><td>捷克</td><td>outlook.cz</td><td><a href="https://signup.live.com/signup.aspx?mkt=cz-cz&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=cz-cz&amp;lic=1</a></td></tr><tr><td>法国</td><td>outlook.fr</td><td><a href="https://signup.live.com/signup.aspx?mkt=fr-fr&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=fr-fr&amp;lic=1</a></td></tr><tr><td>德国</td><td>outlook.de</td><td><a href="https://signup.live.com/signup.aspx?mkt=de-de&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=de-de&amp;lic=1</a></td></tr><tr><td>希腊</td><td>outlook.com.gr</td><td><a href="https://signup.live.com/signup.aspx?mkt=gr-gr&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=gr-gr&amp;lic=1</a></td></tr><tr><td>以色列</td><td>outlook.co.il</td><td><a href="https://signup.live.com/signup.aspx?mkt=il-il&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=il-il&amp;lic=1</a></td></tr><tr><td>印度</td><td>outlook.in</td><td><a href="https://signup.live.com/signup.aspx?mkt=in-in&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=in-in&amp;lic=1</a></td></tr><tr><td>印尼</td><td>outlook.co.id</td><td><a href="https://signup.live.com/signup.aspx?mkt=iD-iD&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=iD-iD&amp;lic=1</a></td></tr><tr><td>爱尔兰</td><td>outlook.ie</td><td><a href="https://signup.live.com/signup.aspx?mkt=ie-ie&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=ie-ie&amp;lic=1</a></td></tr><tr><td>意大利</td><td>outlook.it</td><td><a href="https://signup.live.com/signup.aspx?mkt=it-it&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=it-it&amp;lic=1</a></td></tr><tr><td>匈牙利</td><td>outlook.hu</td><td><a href="https://signup.live.com/signup.aspx?mkt=hu-hu&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=hu-hu&amp;lic=1</a></td></tr><tr><td>拉脱维亚</td><td>outlook.lv</td><td><a href="https://signup.live.com/signup.aspx?mkt=lv-lv&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=lv-lv&amp;lic=1</a></td></tr><tr><td>马来西亚</td><td>outlook.my</td><td><a href="https://signup.live.com/signup.aspx?mkt=my-my&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=my-my&amp;lic=1</a></td></tr><tr><td>新西兰</td><td>outlook.co.nz</td><td><a href="https://signup.live.com/signup.aspx?mkt=nz-nz&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=nz-nz&amp;lic=1</a></td></tr><tr><td>菲律宾</td><td>outlook.ph</td><td><a href="https://signup.live.com/signup.aspx?mkt=ph-ph&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=ph-ph&amp;lic=1</a></td></tr><tr><td>葡萄牙</td><td>outlook.pt</td><td><a href="https://signup.live.com/signup.aspx?mkt=pt-pt&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=pt-pt&amp;lic=1</a></td></tr><tr><td>新加坡</td><td>outlook.sg</td><td><a href="https://signup.live.com/signup.aspx?mkt=sg-sg&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=sg-sg&amp;lic=1</a></td></tr><tr><td>斯洛伐克</td><td>outlook.sk</td><td><a href="https://signup.live.com/signup.aspx?mkt=sk-sk&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=sk-sk&amp;lic=1</a></td></tr><tr><td>西班牙</td><td>outlook.es</td><td><a href="https://signup.live.com/signup.aspx?mkt=es-es&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=es-es&amp;lic=1</a></td></tr><tr><td>泰国</td><td>outlook.co.th</td><td><a href="https://signup.live.com/signup.aspx?mkt=th-th&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=th-th&amp;lic=1</a></td></tr><tr><td>土耳其</td><td>outlook.com.tr</td><td><a href="https://signup.live.com/signup.aspx?mkt=tr-tr&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=tr-tr&amp;lic=1</a></td></tr><tr><td>越南</td><td>outlook.com.vn</td><td><a href="https://signup.live.com/signup.aspx?mkt=vn-vn&amp;lic=1" target="_blank">https://signup.live.com/signup.aspx?mkt=vn-vn&amp;lic=1</a></td></tr></tbody></table><p>但不知道为什么，就是没有中国类似于outlook.com.cn的（</p></section>
<section><h2>申请邮箱<a href="#申请邮箱"><span>#</span></a></h2><p>以 outlook.ie 为例，打开对应的申请地址，点击 Get a new email address。输入你想要的前缀。并录入你的信息和密码（请务必确认你的密码输入正确，不然根本找不回来），会有一个认证。
</p><figure><img src="https://pic.rmb.bdstatic.com/bjh/172377eab3608c65fd87290078938c88.png" alt="认证人机" /><figcaption>认证人机</figcaption></figure>
一般这种只需要点击3-5次即可完成。
<img src="https://pic.rmb.bdstatic.com/bjh/3dc1afd7db7f39142a481b415b537deb.png" alt="" />
至此，你已经注册了一个与众不同的 Outlook 账户，这里只是以 outlook.ie 作示范，其他邮箱的注册大同小异。和普通的一样，有基本的 Microsoft 服务，是一个正儿八经的微软账户。
<figure><img src="https://pic.rmb.bdstatic.com/bjh/794ae43aad42daf1faa6883281062fb6.png" alt="Outlook 邮箱" /><figcaption>Outlook 邮箱</figcaption></figure>
如果要更换语言，<a href="https://outlook.live.com/mail/0/options/general/timeAndLanguage" target="_blank">点击链接</a>，把 Language 选项往下找到 中文（中国），然后保存即可。<p></p></section>
<section><h2>保护你的邮箱<a href="#保护你的邮箱"><span>#</span></a></h2><p>因为这种地区邮箱微软对于初次注册的验证比较弱，有没有验证手机也没有备用邮箱的，所以说注册时提交的密码很重要。但是也不是没办法，你可以打开<a href="https://account.live.com/proofs/Add?mkt=ZH-CN&amp;uiflavor=web&amp;mpcxt=CATB&amp;ocxt=TFA" target="_blank">这个链接</a>设置备用电子邮箱地址或手机号。</p></section>]]></content>
    </entry>
    <entry>
      <id>https://blog.mooncc.cn/posts/useful-script/</id>
      <title type="text">整理亿些常用的脚本（持续更新中）</title>
      <published>2022-06-10T00:00:00.000Z</published>
      <updated>2022-06-10T00:00:00.000Z</updated>
      <author><name>MoonCC</name></author>
      <link rel="alternate" href="https://blog.mooncc.cn/posts/useful-script/"/>
      <summary type="text">持续更新整理常用的 Linux 服务器一键脚本：DD 重装系统、机器测速、流媒体解锁测试、WARP、BBR 加速、Docker 安装等实用合集。</summary>
      <content type="html"><![CDATA[<section><h2>综合工具箱（强烈推荐，集成了很多脚本）<a href="#综合工具箱强烈推荐集成了很多脚本"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>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></div></div></code></pre><div><div></div><div></div></div></figure></div></section>
<section><h2>DD相关<a href="#dd相关"><span>#</span></a></h2><section><h3>甲骨文DD脚本<a href="#甲骨文dd脚本"><span>#</span></a></h3><section><h4>DD成Debian 10<a href="#dd成debian-10"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 10 -v 64 -p "自定义root密码" -port "自定义ssh端口"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>DD成Ubuntu 20.04<a href="#dd成ubuntu-2004"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -u 20.04 -v 64 -p "自定义root密码" -port "自定义ssh端口"</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>MoeClub脚本<a href="#moeclub脚本"><span>#</span></a></h3><p><strong>重点推荐:</strong></p><p>时间：22/11/2021 15&lt;21&gt; 萌咖更新脚本：</p><p>1.新增对 Oracle AMD，Oracle ARM全面支持. 可支持从 Ubuntu, Oracle Linux 等系统网络重装. 2.更新 dd 镜像的基础系统版本. 3.移除对外部 wget 的依赖. 4.新增 -port 参数, 可更改默认SSH端口. 5.更新 内置的网络参数计算 逻辑. 6.更新 grub 配置文件定位逻辑, 可支持任意引导grub的系统.</p><p>以下系统已通过测试(其他自测):
Debian: 9, 10, 11;
Ubuntu: 18.04, 20.04;
CentOS: 6.10;
以下平台已通过测试(其他自测):
Oracle、Do、Azure</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(wget --no-check-certificate -qO- 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh') -d 10 -v 64 -p "自定义root密码" -port "自定义ssh端口"</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>-d 10 -v 64
-d 9 -v 64
-u 20.04 -v 64
-u 18.04 -v 64</p><p>开机改密码脚本：</p><p>开机改密：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>#!/bin/bash</span></div></div><div><div><div>2</div></div><div><span>echo root:Vicer |sudo chpasswd root</span></div></div><div><div><div>3</div></div><div><span>sudo sed -i 's/^#\?PermitRootLogin.*/PermitRootLogin yes/g' /etc/ssh/sshd_config;</span></div></div><div><div><div>4</div></div><div><span>sudo sed -i 's/^#\?PasswordAuthentication.*/PasswordAuthentication yes/g' /etc/ssh/sshd_config;</span></div></div><div><div><div>5</div></div><div><span>sudo reboot</span></div></div></code></pre><div><div></div><div></div></div></figure></div><section><h4>另一位大佬的脚本<a href="#另一位大佬的脚本"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget --no-check-certificate -O AutoReinstall.sh https://git.io/AutoReinstall.sh &amp;&amp; bash AutoReinstall.sh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>CentOS默认密码Pwd@CentOS 其它系统Pwd@Linux</p><p>OpenVZ / LXC 架构系统不适用</p><p>来源：<a href="https://blog.hicasper.com/post/135.html" target="_blank">https://blog.hicasper.com/post/135.html</a> 参考：<a href="https://www.ydyno.com/archives/1245.html" target="_blank">https://www.ydyno.com/archives/1245.html</a> 感谢大佬的付出！</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(wget --no-check-certificate -qO- 'https://file.geekn.net/CNODnjau/InstallNET.sh') -d 11 -v 64 -a -firmware</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>-firmware 额外的驱动支持
-d 后面是系统版本号
-v 后面写64位 32位
-a （不清楚这个干啥的但是每个脚本都带）
–mirror 后面是镜像源地址</p><p>-p 后面写自定义密码</p><div><div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>官方给出的地址列表：https://www.debian.org/mirror/list</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>一些国内的</span></div></div><div><div><div>4</div></div><div><span>ftp.cn.debian.org</span></div></div><div><div><div>5</div></div><div><span>mirror.bjtu.edu.cn</span></div></div><div><div><div>6</div></div><div><span>mirror.lzu.edu.cn</span></div></div><div><div><div>7</div></div><div><span>mirror.nju.edu.cn</span></div></div><div><div><div>8</div></div><div><span>mirrors.163.com</span></div></div><div><div><div>9</div></div><div><span>mirrors.bfsu.edu.cn</span></div></div><div><div><div>10</div></div><div><span>mirrors.hit.edu.cn</span></div></div><div><div><div>11</div></div><div><span>mirrors.huaweicloud.com</span></div></div><div><div><div>12</div></div><div><span>mirror.sjtu.edu.cn</span></div></div><div><div><div>13</div></div><div><span>mirrors.tuna.tsinghua.edu.cn</span></div></div><div><div><div>14</div></div><div><span>mirrors.ustc.edu.cn</span></div></div><div><div><div>15</div></div><div>
</div></div><div><div><div>16</div></div><div><span>使用方法：（大致都是一样的）</span></div></div><div><div><div>17</div></div><div>
</div></div><div><div><div>18</div></div><div><span>清华源</span></div></div><div><div><div>19</div></div><div><span>--mirror 'https://mirrors.ustc.edu.cn/debian/'</span></div></div><div><div><div>20</div></div><div>
</div></div><div><div><div>21</div></div><div><span>腾讯源</span></div></div><div><div><div>22</div></div><div><span>--mirror 'https://mirrors.aliyun.com/debian/'</span></div></div><div><div><div>23</div></div><div>
</div></div><div><div><div>24</div></div><div><span>阿里源</span></div></div><div><div><div>25</div></div><div><span>--mirror 'https://mirrors.aliyun.com/debian/'</span></div></div><div><div><div>26</div></div><div>
</div></div><div><div><div>27</div></div><div><span>华为源</span></div></div><div><div><div>28</div></div><div><span>--mirror 'https://mirrors.huaweicloud.com/debian/'</span></div></div></code></pre><div><div></div><div></div></div></figure><div></div></div><span>展开</span><span>收起</span></div></div></section></section></section>
<section><h2>测试相关<a href="#测试相关"><span>#</span></a></h2><section><h3>机器测试<a href="#机器测试"><span>#</span></a></h3><section><h4>最全测速脚本<a href="#最全测速脚本"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>curl -fsL https://ilemonra.in/LemonBenchIntl | bash -s fast</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>superbench<a href="#superbench"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -qO- git.io/superbench.sh | bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>Bench.sh<a href="#benchsh"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -qO- bench.sh | bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section><section><h3>速度测试<a href="#速度测试"><span>#</span></a></h3><section><h4>直接显示回程线路<a href="#直接显示回程线路"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>curl https://raw.githubusercontent.com/zhucaidan/mtr_trace/main/mtr_trace.sh|bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -q route.f2k.pub -O route &amp;&amp; bash route</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span># 第一个</span></div></div><div><div><div>2</div></div><div><span>wget https://raw.githubusercontent.com/nanqinlang-script/testrace/master/testrace.sh</span></div></div><div><div><div>3</div></div><div><span>bash testrace.sh</span></div></div><div><div><div>4</div></div><div>
</div></div><div><div><div>5</div></div><div><span># 第二个</span></div></div><div><div><div>6</div></div><div><span>wget -qO- git.io/besttrace | bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>四网测速<a href="#四网测速"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -O jcnf.sh https://raw.githubusercontent.com/Netflixxp/jcnfbesttrace/main/jcnf.sh</span></div></div><div><div><div>2</div></div><div>
</div></div><div><div><div>3</div></div><div><span>bash jcnf.sh</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>三网测速<a href="#三网测速"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(curl -Lso- http://yun.789888.xyz/speedtest.sh)</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>测试25端口是否开放<a href="#测试25端口是否开放"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>telnet smtp.aol.com 25</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>测试IPv4优先还是IPv6优先<a href="#测试ipv4优先还是ipv6优先"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>curl ip.p3terx.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>流媒体测试<a href="#流媒体测试"><span>#</span></a></h4><section><h5>全媒体测试<a href="#全媒体测试"><span>#</span></a></h5><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>bash &lt;(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h5>奈飞测试<a href="#奈飞测试"><span>#</span></a></h5><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -O nf https://github.com/sjlleo/netflix-verify/releases/download/2.5/nf_2.5_linux_amd64 &amp;&amp; chmod +x nf &amp;&amp; clear &amp;&amp; ./nf</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>#第一个</span></div></div><div><div><div>2</div></div><div><span>bash &lt;(curl -L -s https://raw.githubusercontent.com/lmc999/RegionRestrictionCheck/main/check.sh)</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span># 第二个</span></div></div><div><div><div>5</div></div><div><span>bash &lt;(curl -sSL "https://github.com/CoiaPrant/MediaUnlock_Test/raw/main/check.sh")</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section></section></section>
<section><h2>WARP<a href="#warp"><span>#</span></a></h2><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -N --no-check-certificate https://cdn.jsdelivr.net/gh/YG-tsj/CFWarp-Pro/multi.sh &amp;&amp; chmod +x multi.sh &amp;&amp; ./multi.sh</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>之后进入脚本快捷方式为 <code>bash multi.sh</code></p></section>
<section><h2>服务器时间<a href="#服务器时间"><span>#</span></a></h2><section><h3>CentOS 同步时间<a href="#centos-同步时间"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>yum -y install ntpdate</span></div></div><div><div><div>2</div></div><div><span>timedatectl set-timezone Asia/Shanghai</span></div></div><div><div><div>3</div></div><div><span>ntpdate ntp1.aliyun.com</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>BBR<a href="#bbr"><span>#</span></a></h2><section><h3>CentOS 7 BBR<a href="#centos-7-bbr"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -N --no-check-certificate "https://raw.githubusercontent.com/chiakge/Linux-NetSpeed/master/tcp.sh" &amp;&amp; chmod +x tcp.sh &amp;&amp; ./tcp.sh</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>一键开启BBR<a href="#一键开启bbr"><span>#</span></a></h3><p>注意：需要Linux Kernel 内核升级到 4.9 及以上版本可以实现 BBR 加速</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>uname -srm</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>输出结果：</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>Linux 3.10.0-957.12.2.el7.x86_64 x86_64</span></div></div><div><div><div>2</div></div><div><span>3 - 内核版本.</span></div></div><div><div><div>3</div></div><div><span>10 - 主修订版本.</span></div></div><div><div><div>4</div></div><div><span>0-957 - 次要修订版本.</span></div></div><div><div><div>5</div></div><div><span>12 - 补丁版本.</span></div></div></code></pre><div><div></div><div></div></div></figure></div><p>一般来说，Ubuntu18.04以上就可以(默认的内核4.15)</p><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>echo "net.core.default_qdisc=fq" &gt;&gt; /etc/sysctl.conf</span></div></div><div><div><div>2</div></div><div><span>echo "net.ipv4.tcp_congestion_control=bbr" &gt;&gt; /etc/sysctl.conf</span></div></div><div><div><div>3</div></div><div>
</div></div><div><div><div>4</div></div><div><span>sysctl -p</span></div></div><div><div><div>5</div></div><div>
</div></div><div><div><div>6</div></div><div><span>sysctl net.ipv4.tcp_available_congestion_control</span></div></div><div><div><div>7</div></div><div>
</div></div><div><div><div>8</div></div><div><span>lsmod | grep bbr</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section>
<section><h2>Docker相关<a href="#docker相关"><span>#</span></a></h2><section><h3>更新、安装必备软件<a href="#更新安装必备软件"><span>#</span></a></h3><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>apt-get update &amp;&amp; apt-get install -y wget vim</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h3>海外服务器<a href="#海外服务器"><span>#</span></a></h3><section><h4>非大陆Docker安装<a href="#非大陆docker安装"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>wget -qO- get.docker.com | bash</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>卸载Docker<a href="#卸载docker"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo apt-get purge docker-ce docker-ce-cli containerd.io</span></div></div></code></pre><div><div></div><div></div></div></figure></div><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo rm -rf /var/lib/docker</span></div></div><div><div><div>2</div></div><div><span>sudo rm -rf /var/lib/containerd</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section><section><h4>非大陆Docker-compose安装<a href="#非大陆docker-compose安装"><span>#</span></a></h4><div><figure><figcaption></figcaption><pre><code><div><div><div>1</div></div><div><span>sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose</span></div></div></code></pre><div><div></div><div></div></div></figure></div></section></section></section>]]></content>
    </entry>
</feed>
