<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>朝朝听雨</title><description>Demo site</description><link>http://rainzt.cn/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.13.5</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年7月10日 09:33:29</lastBuildDate><item><title>自动上架系统：为跨境电商打造的高端批量发布中枢</title><link>http://rainzt.cn/posts/auto-listing-system/</link><guid isPermaLink="true">http://rainzt.cn/posts/auto-listing-system/</guid><description>一套围绕 BigSeller、Shopee 和 TikTok Shop 打造的跨境电商自动上架系统，把表格、图库、视频、AI 标题、店铺状态和发布流程串成可监控、可复用、可扩展的自动化产品。</description><pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;项目定位&lt;a href=&quot;#项目定位&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自动上架系统不是一个简单的“点按钮脚本”，而是一套面向跨境电商运营场景设计的批量发布中枢。它把 Excel 表格、产品图库、视频素材、AI 标题生成、BigSeller 页面操作、店铺状态确认和运行历史记录串成一条完整链路，让重复、易错、耗时的上架工作变成可配置、可监控、可复盘的产品化流程。&lt;/p&gt;&lt;p&gt;目前系统已经落地到两个核心店铺/平台方向：Shopee 和 TikTok Shop。它们分别拥有独立 Worker、独立运行状态、独立日志和发布策略，能够针对不同平台的页面结构、编辑入口、保存逻辑和成功判定做定制处理。这个基础非常重要，因为真正的电商自动化从来不是“一套流程跑天下”，而是要让每个平台的差异被系统吸收，让运营人员面对的是统一、稳定、清晰的控制台。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;自动上架系统控制台&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/1.JR6WxdVT_1jPrg5.webp&quot; srcset=&quot;/_astro/1.JR6WxdVT_1V2osV.webp 640w, /_astro/1.JR6WxdVT_2mY4Tv.webp 750w, /_astro/1.JR6WxdVT_Z4CGYV.webp 828w, /_astro/1.JR6WxdVT_ZH3QB6.webp 1080w, /_astro/1.JR6WxdVT_Z7mnOs.webp 1280w, /_astro/1.JR6WxdVT_CpbOi.webp 1668w, /_astro/1.JR6WxdVT_1jPrg5.webp 1920w&quot; /&gt;&lt;figcaption&gt;自动上架系统控制台&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;已实现能力&lt;a href=&quot;#已实现能力&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;系统当前以 BigSeller 为核心操作入口，通过内置 Chromium 与 Playwright 自动化完成商品编辑、素材上传、标题生成、变体校验和最终发布。运营人员只需要准备表格和素材，系统就能按照预设模板把复杂步骤拆解执行。&lt;/p&gt;&lt;p&gt;它已经覆盖了批量上架中最容易出错的环节：自动搜索商品、进入编辑页、删除旧图、上传主图和详情图、上传视频、绑定变体图、生成或拼接商品标题、发布前截图留档、成功后关闭页面，并把每一次运行沉淀为历史记录。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;任务运行面板&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/2.aT3Spzt__Z1QlUkn.webp&quot; srcset=&quot;/_astro/2.aT3Spzt__ZiiOMh.webp 640w, /_astro/2.aT3Spzt__8CPDi.webp 750w, /_astro/2.aT3Spzt__Z2iXVg9.webp 828w, /_astro/2.aT3Spzt__1bUTBn.webp 1080w, /_astro/2.aT3Spzt__1LCno1.webp 1280w, /_astro/2.aT3Spzt__2woX2L.webp 1668w, /_astro/2.aT3Spzt__Z1QlUkn.webp 1920w&quot; /&gt;&lt;figcaption&gt;任务运行面板&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;模板化：把经验变成配置&lt;a href=&quot;#模板化把经验变成配置&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;平板套是当前最成熟的应用场景。系统内置了多套产品模板，例如 360 旋转壳、3Y 折叠壳、书本式保护壳、笔槽款、通用品牌模板等，并按品牌维护图片组、主图序号、变体图序号、AI 分析图片、视频策略、标题结构和机型关键词。&lt;/p&gt;&lt;p&gt;这意味着系统并不是把某一次上架动作写死，而是把“运营经验”沉淀成可调整的模板。今天它可以服务平板保护套，明天也可以扩展到手机壳、配件、家居小商品、数码周边、服饰配件，甚至任何存在规律化素材和规格组合的产品线。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;模板配置&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/3.C0F6AJm__FPMUk.webp&quot; srcset=&quot;/_astro/3.C0F6AJm__2oMPB2.webp 640w, /_astro/3.C0F6AJm__Z2erBLk.webp 750w, /_astro/3.C0F6AJm__o7J8a.webp 828w, /_astro/3.C0F6AJm__Z1l3uVQ.webp 1080w, /_astro/3.C0F6AJm__ZKm2ad.webp 1280w, /_astro/3.C0F6AJm__Zzrvs.webp 1668w, /_astro/3.C0F6AJm__FPMUk.webp 1920w&quot; /&gt;&lt;figcaption&gt;模板配置&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;AI 标题：让批量发布更像精细运营&lt;a href=&quot;#ai-标题让批量发布更像精细运营&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;系统接入 AI 标题生成能力，可以根据图片内容和模板规则生成更适合平台展示的英文标题。它不仅能做固定标题拼接，也支持 AI 分析图片、随机重排品牌和机型关键词、按平台字符限制控制输出。&lt;/p&gt;&lt;p&gt;这部分的价值不只是“省时间”，更重要的是让批量上架保持足够的内容差异和商品表达质量。对高 SKU、高频发布的跨境店铺来说，标题质量、关键词覆盖和可读性会直接影响商品点击、搜索曝光和后续转化。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;AI 与标题配置&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/4.DWyGhs_X_1EcBKQ.webp&quot; srcset=&quot;/_astro/4.DWyGhs_X_Zlo0NG.webp 640w, /_astro/4.DWyGhs_X_5xEBS.webp 750w, /_astro/4.DWyGhs_X_Z2m47hy.webp 828w, /_astro/4.DWyGhs_X_ZmGG6k.webp 1080w, /_astro/4.DWyGhs_X_cYLFj.webp 1280w, /_astro/4.DWyGhs_X_WLmk4.webp 1668w, /_astro/4.DWyGhs_X_1EcBKQ.webp 1920w&quot; /&gt;&lt;figcaption&gt;AI 与标题配置&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;运行可视化：自动化必须可控&lt;a href=&quot;#运行可视化自动化必须可控&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;一个高端自动化产品，不能只追求“跑得快”，还要让人知道它正在做什么、做到哪里、哪里可能有风险。这个系统提供实时日志、运行状态、暂停/恢复、店铺信息确认、截图留档、历史记录和 Token 消耗监控。&lt;/p&gt;&lt;p&gt;当任务进入高风险步骤，例如上传素材、匹配变体、发布商品之前，系统会保留关键过程信息，让运营人员可以追踪问题，而不是等任务失败后只看到一个模糊结果。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;实时运行状态&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/5.91yDM5JJ_Z18WrJq.webp&quot; srcset=&quot;/_astro/5.91yDM5JJ_ZAUd37.webp 640w, /_astro/5.91yDM5JJ_Z9XwBx.webp 750w, /_astro/5.91yDM5JJ_2sAOhW.webp 828w, /_astro/5.91yDM5JJ_1Tknck.webp 1080w, /_astro/5.91yDM5JJ_2u1PXX.webp 1280w, /_astro/5.91yDM5JJ_Z1PnHbd.webp 1668w, /_astro/5.91yDM5JJ_Z18WrJq.webp 1920w&quot; /&gt;&lt;figcaption&gt;实时运行状态&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;双平台基础：Shopee 与 TikTok Shop&lt;a href=&quot;#双平台基础shopee-与-tiktok-shop&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;目前已经实现的两个店铺/平台方向是 Shopee 和 TikTok Shop。Shopee 侧更强调 BigSeller 商品列表、编辑页、素材上传和“保存并发布”的完整链路；TikTok Shop 侧则针对 TK 页面入口、表格起始行、编辑按钮、更新按钮和成功判断做了独立适配。&lt;/p&gt;&lt;p&gt;两条链路共用系统级能力，例如配置中心、内置浏览器、素材管理、历史记录、截图、AI 标题、SSE 日志流，同时保留平台差异化逻辑。这种设计让后续扩展更自然：新增平台不需要推倒重来，而是在统一底座上接入新的 Worker、页面策略和模板规则。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;Shopee 与 TikTok Shop 工作区&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/6.UvQ4dgPZ_ZwxozK.webp&quot; srcset=&quot;/_astro/6.UvQ4dgPZ_Z1eJa9f.webp 640w, /_astro/6.UvQ4dgPZ_ZMMtHF.webp 750w, /_astro/6.UvQ4dgPZ_1OLRbO.webp 828w, /_astro/6.UvQ4dgPZ_2vJqm0.webp 1080w, /_astro/6.UvQ4dgPZ_Z1XKeFi.webp 1280w, /_astro/6.UvQ4dgPZ_Z1dXE1x.webp 1668w, /_astro/6.UvQ4dgPZ_ZwxozK.webp 1920w&quot; /&gt;&lt;figcaption&gt;Shopee 与 TikTok Shop 工作区&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;周边工具：从上架延伸到运营维护&lt;a href=&quot;#周边工具从上架延伸到运营维护&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;围绕上架主流程，系统还加入了批量上传表格、批量添加新型号、批量开启折扣、清空素材中心、视频中心、截图中心、历史海报等工具。这些功能看起来像“小工具”，实际是电商运营每天都会碰到的高频维护动作。&lt;/p&gt;&lt;p&gt;把这些动作统一在同一个系统里，能够减少来回切换工具、手动复制路径、重复打开页面带来的损耗，也让自动化从“单点功能”升级成“运营工作台”。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;批量工具&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/7.BNG7tEB2_PyQi8.webp&quot; srcset=&quot;/_astro/7.BNG7tEB2_Z1c1D9t.webp 640w, /_astro/7.BNG7tEB2_ZK4WHT.webp 750w, /_astro/7.BNG7tEB2_1RuobA.webp 828w, /_astro/7.BNG7tEB2_Z1bkrz3.webp 1080w, /_astro/7.BNG7tEB2_ZACXMp.webp 1280w, /_astro/7.BNG7tEB2_98AQl.webp 1668w, /_astro/7.BNG7tEB2_PyQi8.webp 1920w&quot; /&gt;&lt;figcaption&gt;批量工具&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;可定制方向&lt;a href=&quot;#可定制方向&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这套系统最有价值的地方，是它具备继续定制的空间。平板套只是第一个成熟行业模板，未来可以沿着三个方向继续升级。&lt;/p&gt;&lt;p&gt;第一是产品线定制。不同品类的 SKU 结构、图片规则、标题逻辑和规格字段不同，系统可以为手机壳、耳机配件、电脑包、服饰配件、家居百货等产品建立独立模板，把每个行业的上架经验沉淀成可复用模块。&lt;/p&gt;&lt;p&gt;第二是平台定制。除了 Shopee 和 TikTok Shop，后续可以继续接入 Lazada、Tokopedia、Shopify、WooCommerce、Amazon Seller、Temu 或本地化 ERP 后台。平台变化并不影响系统的核心价值：统一素材、统一配置、统一状态、统一历史，再用平台适配层处理差异。&lt;/p&gt;&lt;p&gt;第三是运营策略定制。未来可以继续加入标题 A/B 策略、价格与库存联动、自动翻译、多语言标题、违禁词检测、图片合规检查、店铺维度权限、任务队列调度、失败重试策略和团队协作审计。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;历史记录与复盘&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/8.g7baVxKT_Z1tUcuB.webp&quot; srcset=&quot;/_astro/8.g7baVxKT_Z1KDczy.webp 640w, /_astro/8.g7baVxKT_Z1jGw8Y.webp 750w, /_astro/8.g7baVxKT_1iROKv.webp 828w, /_astro/8.g7baVxKT_1ymCr9.webp 1080w, /_astro/8.g7baVxKT_2946dM.webp 1280w, /_astro/8.g7baVxKT_Z2blrVo.webp 1668w, /_astro/8.g7baVxKT_Z1tUcuB.webp 1920w&quot; /&gt;&lt;figcaption&gt;历史记录与复盘&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;产品愿景&lt;a href=&quot;#产品愿景&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;自动上架系统最终要打造的，不只是一个能替人点击页面的工具，而是一个可以交付给高强度跨境团队使用的专业产品：稳定、清晰、可扩展、可复盘，并且能跟着业务一起长大。&lt;/p&gt;&lt;p&gt;当平台变多、产品变多、店铺变多、素材变多，真正稀缺的不是单次操作速度，而是流程标准化能力。这个系统的方向，就是把复杂运营流程装进一个可靠的中枢里，让团队把精力放回选品、素材、定价和增长，而不是反复消耗在机械上架上。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;figure&gt;&lt;img alt=&quot;系统总览&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;911&quot; src=&quot;/_astro/9.3-vm2pmP_ZgAwEQ.webp&quot; srcset=&quot;/_astro/9.3-vm2pmP_SQiQQ.webp 640w, /_astro/9.3-vm2pmP_1kMYiq.webp 750w, /_astro/9.3-vm2pmP_Z16NMB1.webp 828w, /_astro/9.3-vm2pmP_Z2iuPx2.webp 1080w, /_astro/9.3-vm2pmP_Z1HNmKo.webp 1280w, /_astro/9.3-vm2pmP_ZX1M6D.webp 1668w, /_astro/9.3-vm2pmP_ZgAwEQ.webp 1920w&quot; /&gt;&lt;figcaption&gt;系统总览&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;&lt;/p&gt;&lt;/section&gt;</content:encoded></item><item><title>从零搭建 Rainzt.cn：我的个人博客上线流程</title><link>http://rainzt.cn/posts/build-rainzt-blog/</link><guid isPermaLink="true">http://rainzt.cn/posts/build-rainzt-blog/</guid><description>记录这个个人博客从本地运行、内容配置、生产构建到宝塔 Nginx 部署和 HTTPS 上线的完整流程。</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;section&gt;&lt;h2&gt;为什么要搭这个博客&lt;a href=&quot;#为什么要搭这个博客&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我想要一个真正属于自己的内容空间。它不只是用来发文章，也用来整理项目、记录折腾过程、放一些自己喜欢的页面和小工具。&lt;/p&gt;&lt;p&gt;最后选择的是基于 Astro 的 Firefly 主题。它的好处很直接：静态生成速度快，页面效果完整，文章用 Markdown 管理，部署后只需要一份 &lt;code&gt;dist&lt;/code&gt; 静态文件就能跑起来。对个人博客来说，这种结构足够轻，也足够自由。&lt;/p&gt;&lt;p&gt;这个站点最终部署在 &lt;code&gt;rainzt.cn&lt;/code&gt;，服务器侧使用宝塔面板和 Nginx，HTTPS 证书也已经配置好。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;项目准备&lt;a href=&quot;#项目准备&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;开始之前，先确认本地已经准备好 Node.js 和 pnpm。这个博客使用的是 Astro 项目结构，内容、配置和静态资源都放在源码目录中维护，生产环境只需要部署构建后的静态文件。&lt;/p&gt;&lt;p&gt;项目主要结构大概是这样：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/     文章目录&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/spec/      关于、友链、留言等特殊页面&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/config/            站点配置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;public/                静态资源&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dist/                  构建后的生产文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;package.json           项目脚本&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;wrangler.jsonc         Cloudflare Workers 静态资源配置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;vercel.json            Vercel 输出目录配置&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;其中最常用的是 &lt;code&gt;src/content/posts/&lt;/code&gt;。以后新文章基本都放在这里。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;本地运行&lt;a href=&quot;#本地运行&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;项目使用 pnpm 管理依赖。进入项目根目录后，先安装依赖：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;install&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;开发环境启动：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;本地开发服务会跑在类似下面的地址：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;http://127.0.0.1:4333/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;开发环境和生产环境有一个重要区别：开发环境会显示草稿文章，方便预览和调试；生产构建会自动过滤 &lt;code&gt;draft: true&lt;/code&gt; 的文章。所以本地看到的文章数量可能比线上多，这是正常现象。&lt;/p&gt;&lt;p&gt;这个逻辑在 &lt;code&gt;src/utils/content-utils.ts&lt;/code&gt; 里：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;return&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;meta&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;env&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;PROD&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;data&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;!==&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;也就是说，生产环境只展示非草稿文章。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;配置站点信息&lt;a href=&quot;#配置站点信息&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;站点的大部分基础信息都在 &lt;code&gt;src/config/siteConfig.ts&lt;/code&gt; 里配置，例如：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;站点标题&lt;/li&gt;
&lt;li&gt;副标题&lt;/li&gt;
&lt;li&gt;站点地址&lt;/li&gt;
&lt;li&gt;导航栏标题和 Logo&lt;/li&gt;
&lt;li&gt;页面开关&lt;/li&gt;
&lt;li&gt;分页数量&lt;/li&gt;
&lt;li&gt;壁纸、字体、主题色等显示配置&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;导航菜单在 &lt;code&gt;src/config/navBarConfig.ts&lt;/code&gt; 里维护。比如首页、文章、工具、更新日志、友链、留言、我的、关于等菜单，都是从这里生成的。&lt;/p&gt;&lt;p&gt;如果某个菜单带有子菜单，它会渲染成下拉框。比如“文章”下面有归档、分类、标签；“我的”下面有相册、追番、番组计划。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;写文章&lt;a href=&quot;#写文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;文章使用 Markdown 或 MDX。最简单的一篇文章格式如下：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;文章标题&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2026-07-08&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;文章简介&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;image&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;/assets/images/wallpaper/wallpaper-20.webp&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;博客搭建&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;Astro&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;博客指南&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;这里开始写正文。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;published&lt;/code&gt; 是发布时间。&lt;br /&gt;
&lt;code&gt;draft: false&lt;/code&gt; 表示会在生产环境发布。&lt;br /&gt;
&lt;code&gt;draft: true&lt;/code&gt; 表示只在本地开发时显示。&lt;/p&gt;&lt;p&gt;如果文章需要配图，可以像现在这样创建一个文章目录：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/build-rainzt-blog/index.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/build-rainzt-blog/cover.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/build-rainzt-blog/step-1.png&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;正文里可以直接引用同目录图片：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;部署截图&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;./step-1.png&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;生产构建&lt;a href=&quot;#生产构建&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;确认文章和配置没问题后，执行生产构建：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这个命令不是只跑 Astro，它会连续做几件事：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;node&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scripts/generate-icons.js&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tsx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scripts/generate-lqips.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;astro&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;npx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;tsx&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;scripts/subset-fonts.ts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pagefind&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--site&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;dist&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;分别对应：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;生成项目用到的图标常量&lt;/li&gt;
&lt;li&gt;为图片生成低质量占位图数据&lt;/li&gt;
&lt;li&gt;生成 Astro 静态站点&lt;/li&gt;
&lt;li&gt;处理字体子集&lt;/li&gt;
&lt;li&gt;生成 Pagefind 搜索索引&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;构建完成后，生产文件会出现在：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;dist/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;部署到服务器的就是这个目录里的内容。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;本地预览生产版本&lt;a href=&quot;#本地预览生产版本&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;开发环境正常不代表生产构建一定正常，所以部署前最好跑一次预览：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;也可以指定端口：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pnpm&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;preview&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--host&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;127.0.0.1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--port&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;4334&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这个预览服务读取的是 &lt;code&gt;dist&lt;/code&gt;，更接近线上效果。如果这里正常，线上不正常，问题通常就在部署目录、静态资源缓存或服务器配置上。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;服务器环境&lt;a href=&quot;#服务器环境&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;线上使用的是宝塔面板加 Nginx。当前站点配置里，&lt;code&gt;rainzt.cn&lt;/code&gt; 和 &lt;code&gt;www.rainzt.cn&lt;/code&gt; 都指向同一个网站根目录。&lt;/p&gt;&lt;p&gt;Nginx 配置里核心部分是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;root &lt;/span&gt;&lt;span&gt;/path/to/site;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;index &lt;/span&gt;&lt;span&gt;index.html;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;location&lt;/span&gt;&lt;span&gt; / {&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;   &lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;try_files &lt;/span&gt;&lt;span&gt;$&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt; $&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;/ $&lt;/span&gt;&lt;span&gt;uri&lt;/span&gt;&lt;span&gt;.html &lt;/span&gt;&lt;span&gt;=404&lt;/span&gt;&lt;span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;HTTPS 证书由宝塔管理。部署静态文件时，只需要操作网站根目录，不要动证书配置。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;部署流程&lt;a href=&quot;#部署流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;部署时的思路很简单：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;本地执行 &lt;code&gt;pnpm build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;把 &lt;code&gt;dist&lt;/code&gt; 打包上传到服务器&lt;/li&gt;
&lt;li&gt;备份旧站点目录&lt;/li&gt;
&lt;li&gt;清空网站根目录里的旧静态文件&lt;/li&gt;
&lt;li&gt;解压新的 &lt;code&gt;dist&lt;/code&gt; 到网站根目录&lt;/li&gt;
&lt;li&gt;检查 Nginx 配置并 reload&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;清空旧文件很重要。Astro 生成的 &lt;code&gt;_astro&lt;/code&gt; 资源带 hash，如果只覆盖不删除，旧 CSS、旧 JS 可能残留。浏览器或 Nginx 又会长期缓存这些带 hash 的资源，最后就容易出现“本地正常，线上某些交互异常”的情况。&lt;/p&gt;&lt;p&gt;部署前最好保留一份旧版本备份。这样就算新版本有问题，也可以快速回滚。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;线上验证&lt;a href=&quot;#线上验证&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;部署完成后，需要检查几个点：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://rainzt.cn/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://rainzt.cn/api/allPostMeta.json&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;https://rainzt.cn/_astro/&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;首页能打开，说明 Nginx root 和静态文件没问题。&lt;br /&gt;
&lt;code&gt;api/allPostMeta.json&lt;/code&gt; 正常，说明文章元数据构建出来了。&lt;br /&gt;
&lt;code&gt;_astro&lt;/code&gt; 里的 CSS 和 JS 能访问，说明资源路径没问题。&lt;/p&gt;&lt;p&gt;如果刚部署完页面样式或下拉框还是旧状态，可以先强制刷新：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Ctrl + F5&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果仍然不对，就要检查线上 HTML 引用的资源文件名是不是最新构建生成的文件。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;Git 管理&lt;a href=&quot;#git-管理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;项目已经初始化 Git。常用流程：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;status&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;add&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;commit&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;-m&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&quot;Add new post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;注意 &lt;code&gt;dist/&lt;/code&gt;、&lt;code&gt;node_modules/&lt;/code&gt;、日志文件等不需要提交。源码、配置、文章、静态资源才是应该进入 Git 的内容。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;后续更新文章&lt;a href=&quot;#后续更新文章&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;以后发新文章可以按这个流程：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;src/content/posts/&lt;/code&gt; 新建文章&lt;/li&gt;
&lt;li&gt;设置好 &lt;code&gt;published&lt;/code&gt;、&lt;code&gt;tags&lt;/code&gt;、&lt;code&gt;category&lt;/code&gt;、&lt;code&gt;draft&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;本地 &lt;code&gt;pnpm dev&lt;/code&gt; 预览&lt;/li&gt;
&lt;li&gt;确认无误后 &lt;code&gt;pnpm build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;上传新的 &lt;code&gt;dist&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;访问线上确认&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;如果只是草稿，就保持：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;等要发布时再改成：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;小结&lt;a href=&quot;#小结&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个博客的核心链路可以概括成一句话：&lt;/p&gt;&lt;p&gt;用 Markdown 写内容，用 Astro 生成静态站点，用宝塔 Nginx 托管 &lt;code&gt;dist&lt;/code&gt;，用 HTTPS 把它稳定地挂到 &lt;code&gt;rainzt.cn&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;它不是最复杂的部署方式，但对个人博客来说很舒服：本地写作足够快，线上访问足够轻，出问题时也容易定位。后面无论是加文章、加工具页、改导航、换壁纸，基本都能围绕这套流程继续迭代。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>