<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Workers on aloneowo's blog</title><link>https://blog.hatsune01.de/tags/workers/</link><description>Recent content in Workers on aloneowo's blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 28 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.hatsune01.de/tags/workers/index.xml" rel="self" type="application/rss+xml"/><item><title>SuperDoH：基于 Cloudflare Workers 的多上游 DNS over HTTPS 代理，支持ECH和路由注入</title><link>https://blog.hatsune01.de/p/superdoh%E5%9F%BA%E4%BA%8E-cloudflare-workers-%E7%9A%84%E5%A4%9A%E4%B8%8A%E6%B8%B8-dns-over-https-%E4%BB%A3%E7%90%86%E6%94%AF%E6%8C%81ech%E5%92%8C%E8%B7%AF%E7%94%B1%E6%B3%A8%E5%85%A5/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://blog.hatsune01.de/p/superdoh%E5%9F%BA%E4%BA%8E-cloudflare-workers-%E7%9A%84%E5%A4%9A%E4%B8%8A%E6%B8%B8-dns-over-https-%E4%BB%A3%E7%90%86%E6%94%AF%E6%8C%81ech%E5%92%8C%E8%B7%AF%E7%94%B1%E6%B3%A8%E5%85%A5/</guid><description>
 &lt;blockquote&gt;
 &lt;p&gt;先推销一下自己的项目（手动 doge）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div class="github-card-box" id="gh-3966376462666330306134643435316333316262336236373532613061323434"&gt;
 &lt;a class="github-card-link" href="https://github.com/aloneowo0/SuperDoH" target="_blank" rel="noopener noreferrer"&gt;
 &lt;div class="gc-header"&gt;
 &lt;div class="gc-title-wrap"&gt;
 &lt;div class="gc-avatar" id="gh-3966376462666330306134643435316333316262336236373532613061323434-avatar"&gt;
 &lt;svg viewBox="0 0 16 16" width="28" height="28" fill="currentColor"&gt;
 &lt;path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;div class="gc-name-text"&gt;
 &lt;span class="gc-owner"&gt;aloneowo0&lt;/span&gt;
 &lt;span class="gc-slash"&gt;/&lt;/span&gt;
 &lt;span class="gc-repo"&gt;SuperDoH&lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="gc-logo" title="View on GitHub"&gt;
 &lt;svg viewBox="0 0 16 16" width="36" height="36" fill="currentColor"&gt;
 &lt;path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;/div&gt;

 &lt;div class="gc-desc" id="gh-3966376462666330306134643435316333316262336236373532613061323434-desc"&gt;正在读取仓库简介...&lt;/div&gt;

 &lt;div class="gc-meta" id="gh-3966376462666330306134643435316333316262336236373532613061323434-meta"&gt;
 &lt;div class="gc-stats"&gt;
 &lt;span class="gc-item" id="gh-3966376462666330306134643435316333316262336236373532613061323434-stars"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;--&lt;/span&gt;
 &lt;/span&gt;
 &lt;span class="gc-item" id="gh-3966376462666330306134643435316333316262336236373532613061323434-forks"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;--&lt;/span&gt;
 &lt;/span&gt;
 &lt;span class="gc-item" id="gh-3966376462666330306134643435316333316262336236373532613061323434-license" style="display:none;"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="gc-lang-wrap"&gt;
 &lt;span class="gc-item" id="gh-3966376462666330306134643435316333316262336236373532613061323434-lang" style="display:none;"&gt;
 &lt;span class="gc-dot"&gt;&lt;/span&gt;
 &lt;span class="val"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/a&gt;

 &lt;style&gt;
 .github-card-box {
 margin: 1.8rem 0;
 width: 100%;
 max-width: 585px;
 box-sizing: border-box;
 }
 .github-card-box .github-card-link {
 display: block;
 padding: 1.7rem 1.9rem;
 border-radius: 18px;
 background: var(--card-background, rgba(125, 125, 125, 0.05));
 border: 1px solid rgba(125, 125, 125, 0.18);
 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
 text-decoration: none !important;
 color: inherit;
 transition: all 0.2s ease;
 box-sizing: border-box;
 }
 .github-card-box .github-card-link:hover {
 background: rgba(125, 125, 125, 0.09);
 border-color: rgba(99, 102, 241, 0.45);
 transform: translateY(-2px);
 box-shadow: 0 10px 28px rgba(0, 0, 0, 0.09);
 }
 .github-card-box .gc-header {
 display: flex;
 align-items: center;
 justify-content: space-between;
 margin-bottom: 1.05rem;
 }
 .github-card-box .gc-title-wrap {
 display: flex;
 align-items: center;
 gap: 0.9rem;
 font-size: 1.58rem;
 line-height: 1.35;
 overflow: hidden;
 }
 .github-card-box .gc-avatar {
 width: 48px;
 height: 48px;
 border-radius: 50%;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 background: rgba(125, 125, 125, 0.2);
 flex-shrink: 0;
 }
 .github-card-box .gc-avatar img {
 width: 100%;
 height: 100%;
 object-fit: cover;
 margin: 0 !important;
 display: block;
 }
 .github-card-box .gc-name-text {
 display: flex;
 align-items: center;
 gap: 0.55rem;
 white-space: nowrap;
 overflow: hidden;
 text-overflow: ellipsis;
 }
 .github-card-box .gc-owner {
 opacity: 0.75;
 font-weight: 400;
 }
 .github-card-box .gc-slash {
 opacity: 0.35;
 }
 .github-card-box .gc-repo {
 font-weight: 600;
 color: #3b82f6;
 }
 .github-card-box .gc-logo {
 opacity: 0.55;
 display: flex;
 align-items: center;
 flex-shrink: 0;
 }
 .github-card-box .gc-desc {
 font-size: 1.22rem;
 line-height: 1.65;
 opacity: 0.84;
 margin: 0 0 1.2rem 0;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;
 overflow: hidden;
 }
 .github-card-box .gc-meta {
 display: flex;
 align-items: center;
 justify-content: space-between;
 padding-top: 1.1rem;
 border-top: 1px solid rgba(125, 125, 125, 0.14);
 font-size: 1.14rem;
 opacity: 0.82;
 }
 .github-card-box .gc-stats {
 display: flex;
 align-items: center;
 gap: 1.75rem;
 }
 .github-card-box .gc-item {
 display: inline-flex;
 align-items: center;
 gap: 0.55rem;
 }
 .github-card-box .gc-dot {
 width: 14px;
 height: 14px;
 border-radius: 50%;
 background: #3b82f6;
 display: inline-block;
 }
 .github-card-box:not(.gc-loaded) .gc-desc {
 opacity: 0.4;
 animation: gc-pulse 1.5s infinite ease-in-out;
 }
 @keyframes gc-pulse {
 0% { opacity: 0.3; }
 50% { opacity: 0.65; }
 100% { opacity: 0.3; }
 }
 [data-scheme="dark"] .github-card-box .gc-repo {
 color: #60a5fa;
 }
 [data-scheme="dark"] .github-card-box .github-card-link {
 background: rgba(255, 255, 255, 0.04);
 border-color: rgba(255, 255, 255, 0.12);
 }
 [data-scheme="dark"] .github-card-box .github-card-link:hover {
 background: rgba(255, 255, 255, 0.08);
 border-color: rgba(96, 165, 250, 0.55);
 }
 [data-scheme="dark"] .github-card-box .gc-meta {
 border-top-color: rgba(255, 255, 255, 0.1);
 }
 &lt;/style&gt;

 &lt;script&gt;
 (function() {
 const box = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434");
 const desc = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-desc");
 const stars = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-stars");
 const forks = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-forks");
 const license = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-license");
 const lang = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-lang");
 const avatar = document.getElementById("gh-3966376462666330306134643435316333316262336236373532613061323434-avatar");

 fetch('https://api.github.com/repos/aloneowo0\/SuperDoH')
 .then(r =&gt; {
 if (!r.ok) throw new Error(r.status);
 return r.json();
 })
 .then(d =&gt; {
 desc.textContent = d.description || "暂无项目描述";
 if (d.stargazers_count != null) {
 stars.querySelector(".val").textContent = Intl.NumberFormat('en-US', { notation: "compact" }).format(d.stargazers_count);
 }
 if (d.forks_count != null) {
 forks.querySelector(".val").textContent = Intl.NumberFormat('en-US', { notation: "compact" }).format(d.forks_count);
 }
 if (d.license &amp;&amp; d.license.spdx_id &amp;&amp; d.license.spdx_id !== "NOASSERTION") {
 license.style.display = "inline-flex";
 license.querySelector(".val").textContent = d.license.spdx_id;
 }
 if (d.language) {
 lang.style.display = "inline-flex";
 lang.querySelector(".val").textContent = d.language;
 }
 if (d.owner &amp;&amp; d.owner.avatar_url) {
 avatar.innerHTML = '&lt;img src="' + d.owner.avatar_url + '" alt="aloneowo0" loading="lazy" /&gt;';
 }
 box.classList.add("gc-loaded");
 })
 .catch(() =&gt; {
 desc.textContent = "在 GitHub 上查看项目源码与文档";
 box.classList.add("gc-loaded");
 });
 })();
 &lt;/script&gt;
&lt;/div&gt;

&lt;h1 id="搭建一个个人-doh-服务"&gt;&lt;a href="#%e6%90%ad%e5%bb%ba%e4%b8%80%e4%b8%aa%e4%b8%aa%e4%ba%ba-doh-%e6%9c%8d%e5%8a%a1" class="header-anchor"&gt;&lt;/a&gt;搭建一个个人 DoH 服务
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;Cloudflare 免费计划有每日额度限制，请不要随便公开自己的 DoH 端点。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="前言"&gt;&lt;a href="#%e5%89%8d%e8%a8%80" class="header-anchor"&gt;&lt;/a&gt;前言
&lt;/h2&gt;&lt;p&gt;随便讲一下 DNS 的作用，和主题关系不大&lt;/p&gt;
&lt;p&gt;我们访问互联网时，通常会在浏览器里输入一个网址。但计算机真正用来连接网络资源的是 &lt;code&gt;IP 地址&lt;/code&gt;，而不是域名。因为 IP 地址不好记，所以才有了 &lt;code&gt;DNS&lt;/code&gt;：它负责把 &lt;code&gt;baidu.com&lt;/code&gt; 这样的域名转换成对应的 IP 地址。&lt;/p&gt;
&lt;p&gt;&lt;img alt="ipv6 真长……" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/workers-doh/01.webp"&gt;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;能硬背 32 位 IPv6 地址的也是个狠人&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;传统 DNS 通常运行在 &lt;code&gt;UDP 53&lt;/code&gt; 上，默认不加密，因此安全性和抗劫持能力都比较差。在早期 HTTP 环境下，DNS 劫持并不少见。为了解决这些问题，后来出现了几种加密 DNS 协议，比如 &lt;code&gt;DoT&lt;/code&gt;、&lt;code&gt;DoH&lt;/code&gt; 和 &lt;code&gt;DoQ&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id="doh-有什么用"&gt;&lt;a href="#doh-%e6%9c%89%e4%bb%80%e4%b9%88%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;DoH 有什么用
&lt;/h2&gt;&lt;p&gt;DoH 全称是 &lt;code&gt;DNS over HTTPS&lt;/code&gt;。简单来说，它会把 DNS 查询封装进 HTTPS 请求里，并通过 SSL/TLS 证书来保证传输过程的安全性。这里引用两段来自 Wiki 的数字身份认证说明：&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;“若注册者认定一个人的身份，是通过注册者信任的另外一个人来进行的。注册者信任的那个人就是身份认证机构（可以是一个自然人）。把数字身份比喻成一个证件，那么数字证书就是身份认证机构盖在数字身份证上的一个章或印（或者说加在数字身份证上的一个签名），这一行为表示身份认证机构已认定这个人。”&lt;/p&gt;

 &lt;/blockquote&gt;

 &lt;blockquote&gt;
 &lt;p&gt;“身份认证机构是人们注册公钥的机构。注册之后，身份认证机构就向注册者发一数字证书，也就是说在注册者的数字身份证上加签。服务有免费，也有收费。身份认证机构也可以是一个自然人，就如 PGP 和 GPG 系统所倡导的。”&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;简单来说，因为 DoH 使用 HTTPS 作为传输层，我们可以降低 DNS 查询被监听或篡改的风险。比如某些喜欢往 DNS 结果里“投毒”、把域名解析到 &lt;code&gt;localhost&lt;/code&gt; 的情况，DoH 就能在一定程度上缓解。&lt;/p&gt;
&lt;h2 id="项目实现的功能-推销"&gt;&lt;a href="#%e9%a1%b9%e7%9b%ae%e5%ae%9e%e7%8e%b0%e7%9a%84%e5%8a%9f%e8%83%bd-%e6%8e%a8%e9%94%80" class="header-anchor"&gt;&lt;/a&gt;项目实现的功能 &lt;del&gt;（推销）&lt;/del&gt;
&lt;/h2&gt;&lt;p&gt;这个项目主要实现了下面几个功能：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;通过 &lt;code&gt;cf-forward-ip&lt;/code&gt; 实现 &lt;code&gt;ECS&lt;/code&gt; 的手动注入。翻译成人话就是：解析结果会尽量根据用户所在地区进行优化。&lt;/li&gt;
&lt;li&gt;使用并发请求加速解析，并返回最快的上游结果。&lt;/li&gt;
&lt;li&gt;为cloudflare，Meta提供了完整的ECH注入&lt;/li&gt;
&lt;li&gt;带有简单过滤逻辑，可以识别错误的 DNS 返回；返回 &lt;code&gt;localhost&lt;/code&gt; 的结果也会被过滤。&lt;/li&gt;
&lt;li&gt;为google解析的内容引用了Sheas Cealing的规则使其可以在国内访问&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="部署"&gt;&lt;a href="#%e9%83%a8%e7%bd%b2" class="header-anchor"&gt;&lt;/a&gt;部署
&lt;/h2&gt;&lt;p&gt;搭建这个服务需要准备：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;一个 Cloudflare 账号&lt;/li&gt;
&lt;li&gt;一个托管到 Cloudflare 的域名&lt;/li&gt;
&lt;li&gt;一个 GitHub 账号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;部署步骤如下：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fork 我的项目。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;div class="github-card-box" id="gh-6239323836333039633332653433383137343065333366623731613163386239"&gt;
 &lt;a class="github-card-link" href="https://github.com/aloneowo0/Workers-DoH" target="_blank" rel="noopener noreferrer"&gt;
 &lt;div class="gc-header"&gt;
 &lt;div class="gc-title-wrap"&gt;
 &lt;div class="gc-avatar" id="gh-6239323836333039633332653433383137343065333366623731613163386239-avatar"&gt;
 &lt;svg viewBox="0 0 16 16" width="28" height="28" fill="currentColor"&gt;
 &lt;path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;div class="gc-name-text"&gt;
 &lt;span class="gc-owner"&gt;aloneowo0&lt;/span&gt;
 &lt;span class="gc-slash"&gt;/&lt;/span&gt;
 &lt;span class="gc-repo"&gt;Workers-DoH&lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="gc-logo" title="View on GitHub"&gt;
 &lt;svg viewBox="0 0 16 16" width="36" height="36" fill="currentColor"&gt;
 &lt;path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/&gt;
 &lt;/svg&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 
 &lt;div class="gc-desc" id="gh-6239323836333039633332653433383137343065333366623731613163386239-desc"&gt;正在读取仓库简介...&lt;/div&gt;
 
 &lt;div class="gc-meta" id="gh-6239323836333039633332653433383137343065333366623731613163386239-meta"&gt;
 &lt;div class="gc-stats"&gt;
 &lt;span class="gc-item" id="gh-6239323836333039633332653433383137343065333366623731613163386239-stars"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;--&lt;/span&gt;
 &lt;/span&gt;
 &lt;span class="gc-item" id="gh-6239323836333039633332653433383137343065333366623731613163386239-forks"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;--&lt;/span&gt;
 &lt;/span&gt;
 &lt;span class="gc-item" id="gh-6239323836333039633332653433383137343065333366623731613163386239-license" style="display:none;"&gt;
 &lt;svg viewBox="0 0 16 16" width="22" height="22" fill="currentColor"&gt;&lt;path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"/&gt;&lt;/svg&gt;
 &lt;span class="val"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="gc-lang-wrap"&gt;
 &lt;span class="gc-item" id="gh-6239323836333039633332653433383137343065333366623731613163386239-lang" style="display:none;"&gt;
 &lt;span class="gc-dot"&gt;&lt;/span&gt;
 &lt;span class="val"&gt;&lt;/span&gt;
 &lt;/span&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;/a&gt;
 
 &lt;style&gt;
 .github-card-box {
 margin: 1.8rem 0;
 width: 100%;
 max-width: 585px;
 box-sizing: border-box;
 }
 .github-card-box .github-card-link {
 display: block;
 padding: 1.7rem 1.9rem;
 border-radius: 18px;
 background: var(--card-background, rgba(125, 125, 125, 0.05));
 border: 1px solid rgba(125, 125, 125, 0.18);
 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.04);
 text-decoration: none !important;
 color: inherit;
 transition: all 0.2s ease;
 box-sizing: border-box;
 }
 .github-card-box .github-card-link:hover {
 background: rgba(125, 125, 125, 0.09);
 border-color: rgba(99, 102, 241, 0.45);
 transform: translateY(-2px);
 box-shadow: 0 10px 28px rgba(0, 0, 0, 0.09);
 }
 .github-card-box .gc-header {
 display: flex;
 align-items: center;
 justify-content: space-between;
 margin-bottom: 1.05rem;
 }
 .github-card-box .gc-title-wrap {
 display: flex;
 align-items: center;
 gap: 0.9rem;
 font-size: 1.58rem;
 line-height: 1.35;
 overflow: hidden;
 }
 .github-card-box .gc-avatar {
 width: 48px;
 height: 48px;
 border-radius: 50%;
 overflow: hidden;
 display: flex;
 align-items: center;
 justify-content: center;
 background: rgba(125, 125, 125, 0.2);
 flex-shrink: 0;
 }
 .github-card-box .gc-avatar img {
 width: 100%;
 height: 100%;
 object-fit: cover;
 margin: 0 !important;
 display: block;
 }
 .github-card-box .gc-name-text {
 display: flex;
 align-items: center;
 gap: 0.55rem;
 white-space: nowrap;
 overflow: hidden;
 text-overflow: ellipsis;
 }
 .github-card-box .gc-owner {
 opacity: 0.75;
 font-weight: 400;
 }
 .github-card-box .gc-slash {
 opacity: 0.35;
 }
 .github-card-box .gc-repo {
 font-weight: 600;
 color: #3b82f6;
 }
 .github-card-box .gc-logo {
 opacity: 0.55;
 display: flex;
 align-items: center;
 flex-shrink: 0;
 }
 .github-card-box .gc-desc {
 font-size: 1.22rem;
 line-height: 1.65;
 opacity: 0.84;
 margin: 0 0 1.2rem 0;
 display: -webkit-box;
 -webkit-line-clamp: 2;
 -webkit-box-orient: vertical;
 overflow: hidden;
 }
 .github-card-box .gc-meta {
 display: flex;
 align-items: center;
 justify-content: space-between;
 padding-top: 1.1rem;
 border-top: 1px solid rgba(125, 125, 125, 0.14);
 font-size: 1.14rem;
 opacity: 0.82;
 }
 .github-card-box .gc-stats {
 display: flex;
 align-items: center;
 gap: 1.75rem;
 }
 .github-card-box .gc-item {
 display: inline-flex;
 align-items: center;
 gap: 0.55rem;
 }
 .github-card-box .gc-dot {
 width: 14px;
 height: 14px;
 border-radius: 50%;
 background: #3b82f6;
 display: inline-block;
 }
 .github-card-box:not(.gc-loaded) .gc-desc {
 opacity: 0.4;
 animation: gc-pulse 1.5s infinite ease-in-out;
 }
 @keyframes gc-pulse {
 0% { opacity: 0.3; }
 50% { opacity: 0.65; }
 100% { opacity: 0.3; }
 }
 [data-scheme="dark"] .github-card-box .gc-repo {
 color: #60a5fa;
 }
 [data-scheme="dark"] .github-card-box .github-card-link {
 background: rgba(255, 255, 255, 0.04);
 border-color: rgba(255, 255, 255, 0.12);
 }
 [data-scheme="dark"] .github-card-box .github-card-link:hover {
 background: rgba(255, 255, 255, 0.08);
 border-color: rgba(96, 165, 250, 0.55);
 }
 [data-scheme="dark"] .github-card-box .gc-meta {
 border-top-color: rgba(255, 255, 255, 0.1);
 }
 &lt;/style&gt;
 
 &lt;script&gt;
 (function() {
 const box = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239");
 const desc = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-desc");
 const stars = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-stars");
 const forks = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-forks");
 const license = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-license");
 const lang = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-lang");
 const avatar = document.getElementById("gh-6239323836333039633332653433383137343065333366623731613163386239-avatar");
 
 fetch('https://api.github.com/repos/aloneowo0\/Workers-DoH')
 .then(r =&gt; {
 if (!r.ok) throw new Error(r.status);
 return r.json();
 })
 .then(d =&gt; {
 desc.textContent = d.description || "暂无项目描述";
 if (d.stargazers_count != null) {
 stars.querySelector(".val").textContent = Intl.NumberFormat('en-US', { notation: "compact" }).format(d.stargazers_count);
 }
 if (d.forks_count != null) {
 forks.querySelector(".val").textContent = Intl.NumberFormat('en-US', { notation: "compact" }).format(d.forks_count);
 }
 if (d.license &amp;&amp; d.license.spdx_id &amp;&amp; d.license.spdx_id !== "NOASSERTION") {
 license.style.display = "inline-flex";
 license.querySelector(".val").textContent = d.license.spdx_id;
 }
 if (d.language) {
 lang.style.display = "inline-flex";
 lang.querySelector(".val").textContent = d.language;
 }
 if (d.owner &amp;&amp; d.owner.avatar_url) {
 avatar.innerHTML = '&lt;img src="' + d.owner.avatar_url + '" alt="aloneowo0" loading="lazy" /&gt;';
 }
 box.classList.add("gc-loaded");
 })
 .catch(() =&gt; {
 desc.textContent = "在 GitHub 上查看项目源码与文档";
 box.classList.add("gc-loaded");
 });
 })();
 &lt;/script&gt;
 &lt;/div&gt;

2. 修改 &lt;code&gt;.env&lt;/code&gt; 文件里的内容并保存。如果没有特殊需求，保持默认配置即可。
3. 登录 Cloudflare，进入 &lt;strong&gt;Workers 和 Pages&lt;/strong&gt;，点击创建应用程序。
&lt;img alt="Cloudflare Workers 和 Pages 创建应用程序页面" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/workers-doh/02.webp"&gt;
4. 选择连接到 GitHub，并选择刚刚 Fork 的项目。保持默认配置，直接部署。
5. 绑定一个域名。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;设置的域名或子域名尽量不要出现敏感词汇，否则容易被阻断。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;等待部署完成后，就可以开始使用了。&lt;/p&gt;
&lt;h2 id="使用"&gt;&lt;a href="#%e4%bd%bf%e7%94%a8" class="header-anchor"&gt;&lt;/a&gt;使用
&lt;/h2&gt;&lt;p&gt;目前我确认 Chrome、Firefox 浏览器和 Windows 11 系统都支持配置 DoH。其他客户端是否支持，建议自行测试。&lt;/p&gt;
&lt;h3 id="ech实现的原理"&gt;&lt;a href="#ech%e5%ae%9e%e7%8e%b0%e7%9a%84%e5%8e%9f%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;ECH实现的原理
&lt;/h3&gt;&lt;p&gt;cloudflare的ECH其实是公开的，而且很离谱的是全部ECH的密钥是同一个，更离谱的是cf关闭ECH的方式是把DNS上HTTPS字段的解析里面的ECH给删掉，所以说如果我们通过构建一个带有正确ECH的DNS解析结果就可以实现通过ECH与网站链接&lt;/p&gt;
&lt;p&gt;Meta的情况会特殊一点。Meta本身是支持ECH的，但是由于不明的原因ECH没有公布在DNS中，跟cloudflare那些没有公布ECH的网站类似都是不公开ECH。问题是Meta的ECH是独立的，获取会比较麻烦。我在github的一个帖子中看到一个获取的方法，使用的是retry来实现ECH的获取。简单点说是如果你发送一个错误的ECH给服务器，如果服务器收到了会返回一个retry_config让你的浏览器重试，这个retry里面就包含正确的ECH字段，从而获取到正确的ECH。&lt;/p&gt;
&lt;p&gt;然后对上述网站进行dns结果重写并注入ECH就可以使用ECH访问了&lt;/p&gt;</description></item><item><title>如何搭建一个以Fuwari为框架的个人博客</title><link>https://blog.hatsune01.de/p/%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E4%BB%A5fuwari%E4%B8%BA%E6%A1%86%E6%9E%B6%E7%9A%84%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</link><pubDate>Fri, 19 Dec 2025 00:00:00 +0000</pubDate><guid>https://blog.hatsune01.de/p/%E5%A6%82%E4%BD%95%E6%90%AD%E5%BB%BA%E4%B8%80%E4%B8%AA%E4%BB%A5fuwari%E4%B8%BA%E6%A1%86%E6%9E%B6%E7%9A%84%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/</guid><description>&lt;h1 id="搭建fuwari博客"&gt;&lt;a href="#%e6%90%ad%e5%bb%bafuwari%e5%8d%9a%e5%ae%a2" class="header-anchor"&gt;&lt;/a&gt;搭建Fuwari博客
&lt;/h1&gt;&lt;h2 id="0-前言"&gt;&lt;a href="#0-%e5%89%8d%e8%a8%80" class="header-anchor"&gt;&lt;/a&gt;0. 前言
&lt;/h2&gt;&lt;p&gt;作为一个什么都不会的新手，我搭这个博客花了不少时间，也走了不少弯路。我在这里分享一下我搭建的过程。这是一篇新手向的文章。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;PS:如果出现网络问题导致下载失败或者缓慢请自行科学上网&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="1-配置环境以windows为例"&gt;&lt;a href="#1-%e9%85%8d%e7%bd%ae%e7%8e%af%e5%a2%83%e4%bb%a5windows%e4%b8%ba%e4%be%8b" class="header-anchor"&gt;&lt;/a&gt;1. 配置环境（以Windows为例）
&lt;/h2&gt;&lt;h3 id="11-安装vscode"&gt;&lt;a href="#11-%e5%ae%89%e8%a3%85vscode" class="header-anchor"&gt;&lt;/a&gt;1.1 安装VScode
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;访问&lt;a class="link" href="https://code.visualstudio.com/" target="_blank" rel="noopener"
 &gt;VScode&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下载windows版本&lt;/li&gt;
&lt;li&gt;点击VScode右上角这个按钮来调出终端&lt;br&gt;
&lt;img alt="屏幕截图 2025-12-27 160501.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/fuwari-setup/01.png"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="12-安装git"&gt;&lt;a href="#12-%e5%ae%89%e8%a3%85git" class="header-anchor"&gt;&lt;/a&gt;1.2 安装Git
&lt;/h3&gt;&lt;p&gt;windows输入以下指令到终端&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;--id&lt;/span&gt; &lt;span class="nf"&gt;Git.Git&lt;/span&gt; &lt;span class="nf"&gt;-e&lt;/span&gt; &lt;span class="nf"&gt;--source&lt;/span&gt; &lt;span class="nf"&gt;winget&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;安装完后输入以下指令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;--version&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;若返回 Git 版本号（如 git version 2.45.0）则表示安装成功。&lt;/p&gt;
&lt;h3 id="13-安装nodejs"&gt;&lt;a href="#13-%e5%ae%89%e8%a3%85nodejs" class="header-anchor"&gt;&lt;/a&gt;1.3 安装node.js
&lt;/h3&gt;&lt;p&gt;windows输入以下指令到终端&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;winget&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;-e&lt;/span&gt; &lt;span class="nf"&gt;--id&lt;/span&gt; &lt;span class="nf"&gt;OpenJS.NodeJS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;安装完后分别输入以下指令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;node&lt;/span&gt; &lt;span class="nf"&gt;-v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;npm&lt;/span&gt; &lt;span class="nf"&gt;-v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;若分别返回npm和node.js的版本号则表示安装成功&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;PS:此时可能会遇到powershell不允许执行脚本，此时打开&lt;strong&gt;管理员权限的&lt;/strong&gt;powershell执行命令&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;Set-ExecutionPolicy&lt;/span&gt; &lt;span class="nf"&gt;RemoteSigned&lt;/span&gt; &lt;span class="nf"&gt;-Scope&lt;/span&gt; &lt;span class="nf"&gt;LocalMachine&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;我就用cmd演示了
&lt;img alt="屏幕截图 2025-12-27 163611.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/fuwari-setup/02.png"&gt;&lt;/p&gt;
&lt;h3 id="14-安装pnpm"&gt;&lt;a href="#14-%e5%ae%89%e8%a3%85pnpm" class="header-anchor"&gt;&lt;/a&gt;1.4 安装pnpm
&lt;/h3&gt;&lt;p&gt;Fuwari官方强制要求用pnpm管理依赖，所以我们安装pnpm&lt;br&gt;
在终端中分别执行命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;npm&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt; &lt;span class="nf"&gt;-g&lt;/span&gt; &lt;span class="nf"&gt;pnpm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;pnpm&lt;/span&gt; &lt;span class="nf"&gt;-v&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;返回版本号就安装成功了&lt;/p&gt;
&lt;h2 id="2-构建fuwari项目"&gt;&lt;a href="#2-%e6%9e%84%e5%bb%bafuwari%e9%a1%b9%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;2 构建Fuwari项目
&lt;/h2&gt;&lt;h3 id="21-克隆项目"&gt;&lt;a href="#21-%e5%85%8b%e9%9a%86%e9%a1%b9%e7%9b%ae" class="header-anchor"&gt;&lt;/a&gt;2.1 克隆项目
&lt;/h3&gt;&lt;p&gt;先选一个存放位置，比如我存放在E:\Fuwari下，执行命令&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;cd&lt;/span&gt; &lt;span class="nf"&gt;E:\Fuwari&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后克隆Fuwari博客模版&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;clone&lt;/span&gt; &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/github.com/saicaca/fuwari.git&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;astro-blog-demo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这里我把目标文件夹命名为 &lt;code&gt;astro-blog-demo&lt;/code&gt;，你也可以换成 blog 或任意喜欢的名字。&lt;br&gt;
克隆完成后，终端会多出一段&lt;code&gt;Cloning into 'astro-blog-demo'...&lt;/code&gt;的输出。&lt;/p&gt;
&lt;h3 id="22-运行"&gt;&lt;a href="#22-%e8%bf%90%e8%a1%8c" class="header-anchor"&gt;&lt;/a&gt;2.2 运行
&lt;/h3&gt;&lt;p&gt;先&lt;code&gt;cd&lt;/code&gt;进项目的根文件夹&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nf"&gt;cd&lt;/span&gt; &lt;span class="nf"&gt;.\astro-blog-demo\&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后安装依赖&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;pnpm&lt;/span&gt; &lt;span class="nf"&gt;install&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;此时会出现一长串包名，只要没有报错就不管他&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;PS：建议先换源再安装依赖这样可以不用全局代理&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;输出&lt;code&gt;Done&lt;/code&gt;什么的就可以开始运行本地项目了&lt;br&gt;
执行&lt;code&gt;pnpm dev&lt;/code&gt;会输出这些东西&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PS E:\Fuwari\astro-blog-demo&amp;gt; pnpm dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; fuwari@0.0.1 dev E:\Fuwari\astro-blog-demo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;gt; astro dev
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 [types] Generated 1ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 [content] Syncing content
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 [content] Astro config changed 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 [content] Clearing content store
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 [content] Synced content
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; astro v5.13.10 ready in 3383 ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┃ Local http://localhost:4321/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;┃ Network use --host to expose
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;16:49:16 watching for file changes...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;用浏览器访问local那行的地址，会直接进入Fuwari的首页&lt;br&gt;
停止运行按下&lt;code&gt;Ctrl + C&lt;/code&gt;&lt;/p&gt;
&lt;h3 id="23-上传github"&gt;&lt;a href="#23-%e4%b8%8a%e4%bc%a0github" class="header-anchor"&gt;&lt;/a&gt;2.3 上传github
&lt;/h3&gt;&lt;p&gt;搭建blog一般会托管到cloudflare上，而在cf上一般是从github上直接clone仓库。又因为blog上会存些个人文件以及更改一些配置，以及git的特性会导致直接上传到仓库上会有问题，所以我们对原文件夹做一些操作。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;打开项目根文件夹删除&lt;code&gt;.git&lt;/code&gt;文件夹&lt;/li&gt;
&lt;li&gt;初始化新的 Git 仓库&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;commit&lt;/span&gt; &lt;span class="nf"&gt;-m&lt;/span&gt; &lt;span class="nf"&gt;&amp;#34;初始化&lt;/span&gt; &lt;span class="nf"&gt;Astro&lt;/span&gt; &lt;span class="nf"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;Fuwari&lt;/span&gt; &lt;span class="nf"&gt;博客（使用&lt;/span&gt; &lt;span class="nf"&gt;pnpm）&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;在github新建一个个人项目。我以&lt;code&gt;astro-blog-demo&lt;/code&gt;命名。&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;PS：github不支持中文，可以用翻译器翻一下&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;ol start="4"&gt;
&lt;li&gt;回到终端，分别执行&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;remote&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;origin&lt;/span&gt; &lt;span class="nf"&gt;https:&lt;/span&gt;&lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/github.com/你的用户名/astro-blog-demo.git&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;branch&lt;/span&gt; &lt;span class="nf"&gt;-M&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;push&lt;/span&gt; &lt;span class="nf"&gt;-u&lt;/span&gt; &lt;span class="nf"&gt;origin&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后应该会输出以下内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;To https://github.com/你的用户名/astro-blog-demo.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; * [new branch] main -&amp;gt; main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Branch &amp;#39;main&amp;#39; set up to track remote branch &amp;#39;main&amp;#39; from &amp;#39;origin&amp;#39;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="3-上传至cloudflare"&gt;&lt;a href="#3-%e4%b8%8a%e4%bc%a0%e8%87%b3cloudflare" class="header-anchor"&gt;&lt;/a&gt;3 上传至cloudflare
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;你需要：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;一个cloudflare账号&lt;/li&gt;
&lt;li&gt;一个域名&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;在右侧&lt;code&gt;计算与AI&lt;/code&gt;中找到&lt;code&gt;workers和pages&lt;/code&gt;
&lt;img alt="屏幕截图 2025-12-27 175559.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/fuwari-setup/03.png"&gt;&lt;/li&gt;
&lt;li&gt;创建
&lt;img alt="屏幕截图 2025-12-27 175803.png" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://blog.hatsune01.de/images/posts/fuwari-setup/04.png"&gt;&lt;/li&gt;
&lt;li&gt;点下面的小字&lt;code&gt;Get started&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;导入现有 Git 存储库&lt;/li&gt;
&lt;li&gt;没有绑定github的会让你绑定github，绑定后选择存储库&lt;code&gt;astro-blog-demo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;构建设置&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 构建设置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Build command: pnpm i &amp;amp;&amp;amp; pnpm build
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Build output directory: dist
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Root directory: /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;然后保存并部署。此时cf会自动生成一个域名：xxx.worker.dev，这个域名国内是不能直接访问的，此时我们要套一个cdn或者绑定域名才能访问。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;你已经完成了部署博客😆&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="4-后续操作"&gt;&lt;a href="#4-%e5%90%8e%e7%bb%ad%e6%93%8d%e4%bd%9c" class="header-anchor"&gt;&lt;/a&gt;4 后续操作
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;about目录下的md文件位于&lt;code&gt;.\src\content\spec\about.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;个性化内容在&lt;code&gt;.\src\config.ts&lt;/code&gt;，以下是我的代码内容：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;span class="lnt"&gt;65
&lt;/span&gt;&lt;span class="lnt"&gt;66
&lt;/span&gt;&lt;span class="lnt"&gt;67
&lt;/span&gt;&lt;span class="lnt"&gt;68
&lt;/span&gt;&lt;span class="lnt"&gt;69
&lt;/span&gt;&lt;span class="lnt"&gt;70
&lt;/span&gt;&lt;span class="lnt"&gt;71
&lt;/span&gt;&lt;span class="lnt"&gt;72
&lt;/span&gt;&lt;span class="lnt"&gt;73
&lt;/span&gt;&lt;span class="lnt"&gt;74
&lt;/span&gt;&lt;span class="lnt"&gt;75
&lt;/span&gt;&lt;span class="lnt"&gt;76
&lt;/span&gt;&lt;span class="lnt"&gt;77
&lt;/span&gt;&lt;span class="lnt"&gt;78
&lt;/span&gt;&lt;span class="lnt"&gt;79
&lt;/span&gt;&lt;span class="lnt"&gt;80
&lt;/span&gt;&lt;span class="lnt"&gt;81
&lt;/span&gt;&lt;span class="lnt"&gt;82
&lt;/span&gt;&lt;span class="lnt"&gt;83
&lt;/span&gt;&lt;span class="lnt"&gt;84
&lt;/span&gt;&lt;span class="lnt"&gt;85
&lt;/span&gt;&lt;span class="lnt"&gt;86
&lt;/span&gt;&lt;span class="lnt"&gt;87
&lt;/span&gt;&lt;span class="lnt"&gt;88
&lt;/span&gt;&lt;span class="lnt"&gt;89
&lt;/span&gt;&lt;span class="lnt"&gt;90
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;ExpressiveCodeConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;LicenseConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;NavBarConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;ProfileConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;SiteConfig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./types/config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;LinkPreset&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="nx"&gt;from&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./types/config&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;siteConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SiteConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aloneowo&amp;#39;s blog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;subtitle&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aloneowo&amp;#39;s site&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;zh_CN&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 语言代码，例如 &amp;#39;en&amp;#39;, &amp;#39;zh_CN&amp;#39;, &amp;#39;ja&amp;#39; 等
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;themeColor&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;hue&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;270&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 主题颜色的默认色相，范围为0到360。例如：红色:0, 青绿色:200, 青色:250, 粉色:345
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;fixed&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 隐藏主题颜色选择器，使访客无法更改
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;banner&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 是否启用横幅图片
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://random-api.czl.net/pic/ecy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 相对于 /src 目录的路径。如果以&amp;#39;/&amp;#39;开头，则相对于 /public 目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;top&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 等同于 object-position，仅支持 &amp;#39;top&amp;#39;, &amp;#39;center&amp;#39;, &amp;#39;bottom&amp;#39;。默认为 &amp;#39;center&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;credit&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 是否显示横幅图片的版权信息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 要显示的版权文字
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// (可选) 原始作品或艺术家页面的URL链接
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;toc&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 在文章右侧显示目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;depth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 目录中显示的最大标题深度，范围为1到3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;favicon&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// 将此数组留空以使用默认favicon
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		 &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/favicon/ico.jpg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// favicon路径，相对于/public目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		 &lt;span class="c1"&gt;//theme: &amp;#39;light&amp;#39;, // (可选) &amp;#39;light&amp;#39; 或 &amp;#39;dark&amp;#39;，仅在您有不同模式的favicon时设置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		 &lt;span class="c1"&gt;//sizes: &amp;#39;32x32&amp;#39;, // (可选) favicon尺寸，仅在您有不同尺寸的favicon时设置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;navBarConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;NavBarConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;LinkPreset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Home&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;LinkPreset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Archive&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;LinkPreset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;About&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Openlist&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://bilibili.com/ &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 内部链接不应包含基础路径，因为它会自动添加
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;external&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 显示外部链接图标，并在新标签页中打开
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;profileConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ProfileConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;avatar&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;assets/images/headimg.jpg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 相对于 /src 目录的路径。如果以&amp;#39;/&amp;#39;开头，则相对于 /public 目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aloneowo&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;bio&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;我不要上早八😭&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Bilibili&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fa6-brands:bilibili&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// 访问 https://icones.js.org/ 获取图标代码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// 如果图标集尚未包含，您需要安装相应的图标集
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// `pnpm add @iconify-json/&amp;lt;icon-set-name&amp;gt;`
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://space.bilibili.com/506074066 &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Steam&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fa6-brands:steam&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://store.steampowered.com &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;GitHub&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;icon&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fa6-brands:github&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://github.com/aloneqwq &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;licenseConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LicenseConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;enable&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;CC BY-NC-SA 4.0&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://creativecommons.org/licenses/by-nc-sa/4.0/ &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;export&lt;/span&gt; &lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;expressiveCodeConfig&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ExpressiveCodeConfig&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// 注意：某些样式（如背景颜色）正在被覆盖，请参见 astro.config.mjs 文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// 请选择深色主题，因为此博客主题目前仅支持深色背景
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;github-dark&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;在.\astro.config.mjs处可以编辑你blog的域名，位于此处：&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;.....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;astro&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="n"&gt;default&lt;/span&gt; &lt;span class="n"&gt;defineConfig&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;site&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://blog.aloneowo.dpdns.org/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;trailingSlash&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;always&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="n"&gt;integrations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="n"&gt;tailwind&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="n"&gt;nesting&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;.....&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="4"&gt;
&lt;li&gt;blog文件放在.\src\content\posts处，需具有以下开头&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-md" data-lang="md"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;title: &amp;#34;Hello Fuwari&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;published: yyyy-mm-dd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;#34;第一篇测试文章&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;tags: [&amp;#34;测试&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;category: &amp;#34;随笔&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;draft: false
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;git提交:分别执行&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ps" data-lang="ps"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt; &lt;span class="nf"&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;commit&lt;/span&gt; &lt;span class="nf"&gt;-m&lt;/span&gt; &lt;span class="nf"&gt;&amp;#34;update&amp;#34;&lt;/span&gt; &lt;span class="err"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;/&amp;#34;update&amp;#34;可替换&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nf"&gt;git&lt;/span&gt; &lt;span class="nf"&gt;push&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>