[{"data":1,"prerenderedAt":358},["ShallowReactive",2],{"site-settings":3,"navigation":21,"appearance-settings":49,"documents-navigation":59},{"id":4,"title":5,"author":6,"avatar":7,"description":8,"extension":9,"footerText":10,"github":11,"icp":12,"location":15,"meta":16,"nickname":17,"siteUrl":18,"stem":19,"__hash__":20},"site\u002Fsettings\u002Fsite.yml","臭狗的奇妙冒险","罗奇奇","\u002Fimages\u002Fguy.jpg","一个臭狗的奇妙冒险，有时求知，有时思考，有时疯癫。","yml","认真生活，偶尔发癫。","https:\u002F\u002Fgithub.com\u002Fshoumenchougou",{"text":13,"href":14},"粤ICP备2023086611号","https:\u002F\u002Fbeian.miit.gov.cn\u002F","中国，深圳",{},"守门臭狗","https:\u002F\u002Fshoumenchougou.top","settings\u002Fsite","T0Me2l6TVcfvoXbjq9ctbxA_K77Qw6dNu2ZgRi-V54Y",{"id":22,"extension":9,"items":23,"meta":46,"stem":47,"__hash__":48},"navigation\u002Fsettings\u002Fnavigation.yml",[24,28,31,34,37,40,43],{"label":25,"href":26,"external":27},"首页","\u002F",false,{"label":29,"href":30,"external":27},"思绪","\u002Fthoughts",{"label":32,"href":33,"external":27},"博客","\u002Fblog",{"label":35,"href":36,"external":27},"文档","\u002Fdocs",{"label":38,"href":39,"external":27},"项目","\u002Fprojects",{"label":41,"href":42,"external":27},"工具","\u002Ftools",{"label":44,"href":45,"external":27},"关于","\u002Fabout",{},"settings\u002Fnavigation","V2ED2mJOFBz8rfRM0nH3DyKf-L-IkPSJ7EuEtwj8Mbw",{"id":50,"accentColor":51,"contentWidth":52,"density":53,"extension":9,"headingScale":54,"meta":55,"preset":56,"stem":57,"__hash__":58},"appearance\u002Fsettings\u002Fappearance.yml","","wide","comfortable","compact",{},"mist","settings\u002Fappearance","iS1ojpIdwsSzZaYMcl2ONMyLyeU8t3Xegb_uDDMoAoc",[60,213],{"id":61,"title":62,"body":63,"category":203,"description":204,"draft":27,"extension":205,"meta":206,"navigation":133,"order":207,"path":208,"seo":209,"stem":210,"updatedAt":211,"__hash__":212},"documents\u002Fdocs\u002Fstart-here\u002Findex.md","从这里开始",{"type":64,"value":65,"toc":198},"minimark",[66,70,74,77,102,110,113,116,158,161,164,187,194],[67,68,69],"p",{},"这份文档记录网站最常用的维护流程。所有内容都保存在仓库里，编辑完成后再生成静态文件。",[71,72,73],"h2",{"id":73},"打开本地编辑器",[67,75,76],{},"在项目目录运行：",[78,79,83],"pre",{"className":80,"code":81,"language":82,"meta":51,"style":51},"language-bash shiki shiki-themes github-light github-dark","bun run edit\n","bash",[84,85,86],"code",{"__ignoreMap":51},[87,88,91,95,99],"span",{"class":89,"line":90},"line",1,[87,92,94],{"class":93},"sScJk","bun",[87,96,98],{"class":97},"sZZnC"," run",[87,100,101],{"class":97}," edit\n",[67,103,104,105,109],{},"浏览器打开本地站点后，进入右下角的“编辑内容”。第一次使用时选择 ",[106,107,108],"strong",{},"Work with Local Repository","，再授权当前项目目录。",[71,111,112],{"id":112},"编辑文档",[67,114,115],{},"后台中的“文档首页”和“文档内容”都使用原始 Markdown 模式。正文可以直接写：",[78,117,121],{"className":118,"code":119,"language":120,"meta":51,"style":51},"language-markdown shiki shiki-themes github-light github-dark","## 一个二级标题\n\n- 第一项\n- 第二项\n\n> 一段需要强调的说明。\n","markdown",[84,122,123,128,135,141,147,152],{"__ignoreMap":51},[87,124,125],{"class":89,"line":90},[87,126,127],{},"## 一个二级标题\n",[87,129,131],{"class":89,"line":130},2,[87,132,134],{"emptyLinePlaceholder":133},true,"\n",[87,136,138],{"class":89,"line":137},3,[87,139,140],{},"- 第一项\n",[87,142,144],{"class":89,"line":143},4,[87,145,146],{},"- 第二项\n",[87,148,150],{"class":89,"line":149},5,[87,151,134],{"emptyLinePlaceholder":133},[87,153,155],{"class":89,"line":154},6,[87,156,157],{},"> 一段需要强调的说明。\n",[67,159,160],{},"保存后，本地预览会自动刷新。",[71,162,163],{"id":163},"生成静态站点",[78,165,167],{"className":80,"code":166,"language":82,"meta":51,"style":51},"bun run typecheck\nbun run build\n",[84,168,169,178],{"__ignoreMap":51},[87,170,171,173,175],{"class":89,"line":90},[87,172,94],{"class":93},[87,174,98],{"class":97},[87,176,177],{"class":97}," typecheck\n",[87,179,180,182,184],{"class":89,"line":130},[87,181,94],{"class":93},[87,183,98],{"class":97},[87,185,186],{"class":97}," build\n",[67,188,189,190,193],{},"最终文件会出现在 ",[84,191,192],{},"dist\u002F","。如果没有启用服务器发布 API，只需要上传这个目录里的内容。",[195,196,197],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":51,"searchDepth":130,"depth":130,"links":199},[200,201,202],{"id":73,"depth":130,"text":73},{"id":112,"depth":130,"text":112},{"id":163,"depth":130,"text":163},"站点维护","本地编辑、预览和发布这个网站的最短路径。","md",{},"1","\u002Fdocs\u002Fstart-here",{"title":62,"description":204},"docs\u002Fstart-here\u002Findex","2026-08-29","xzET9ZqHta2oTBLcFuT11Potu5SfI2ZQ24wbJMHT_xA",{"id":214,"title":215,"body":216,"category":349,"description":350,"draft":27,"extension":205,"meta":351,"navigation":133,"order":352,"path":353,"seo":354,"stem":355,"updatedAt":356,"__hash__":357},"documents\u002Fdocs\u002Fpublishing\u002Findex.md","图文发布流程",{"type":64,"value":217,"toc":344},[218,221,224,266,269,287,309,316,319,322,337],[67,219,220],{},"手机通过独立的 Studio 发布台登录后发布图文。命令行工具可从服务器回环地址调用 Bun Publisher，或者通过 SSH 转发访问回环端口。",[71,222,223],{"id":223},"发布步骤",[225,226,227,235,252,259],"ol",{},[228,229,230,231,234],"li",{},"Studio 使用登录会话。回环客户端携带内部令牌和唯一的 ",[84,232,233],{},"Idempotency-Key","。",[228,236,237,238,241,242,245,246,241,249,234],{},"提交图文。Studio 使用同源 ",[84,239,240],{},"\u002Fapi\u002Fv1\u002Fthoughts"," 或 ",[84,243,244],{},"\u002Fapi\u002Fv1\u002Fposts","，回环客户端使用 ",[84,247,248],{},"\u002Fv1\u002Fthoughts",[84,250,251],{},"\u002Fv1\u002Fposts",[228,253,254,255,258],{},"服务返回 ",[84,256,257],{},"202 Accepted"," 和作业地址。",[228,260,261,262,265],{},"公开发布等待作业进入 ",[84,263,264],{},"published","。私有草稿保留在服务器，直到主动发布。",[71,267,268],{"id":268},"管理已有内容",[67,270,271,272,275,276,279,280,283,284,234],{},"手机应用等可信客户端可以通过 ",[84,273,274],{},"GET \u002Fapi\u002Fv1\u002Fthoughts"," 与 ",[84,277,278],{},"GET \u002Fapi\u002Fv1\u002Fposts"," 分页查询内容，再通过带 ID 或 slug 的详情地址读取完整正文。详情响应会同时返回 ",[84,281,282],{},"ETag"," 和 ",[84,285,286],{},"resource.version",[67,288,289,290,293,294,297,298,301,302,304,305,308],{},"编辑使用 ",[84,291,292],{},"PATCH","，删除使用 ",[84,295,296],{},"DELETE","。这两类请求必须同时携带原详情响应中的 ",[84,299,300],{},"If-Match: \u003CETag>"," 和新的 ",[84,303,233],{},"。若电脑、CMS 或另一台手机已先修改同一篇内容，旧版本提交会收到 ",[84,306,307],{},"412 version_conflict","，不会覆盖新内容。",[67,310,311,312,315],{},"删除的 Markdown 和能够确认归属的 API 图片会先进入 ",[84,313,314],{},".data\u002Fpublisher\u002Ftrash\u002F","，不会直接永久清除。",[67,317,318],{},"构建失败时，Nginx 仍然读取上一个完整版本，不会把生成一半的页面展示给访客。",[71,320,321],{"id":321},"安全边界",[323,324,325,328,331,334],"ul",{},[228,326,327],{},"正式 Publisher 令牌保存在服务器上，浏览器使用可撤销的登录会话。",[228,329,330],{},"Publisher 和会话网关只监听回环地址。",[228,332,333],{},"私有草稿及专属附件存放在公开构建目录之外。",[228,335,336],{},"API 发布会修改服务器源码，本地再次部署前要先同步这些新内容。",[67,338,339,340,343],{},"完整的服务器安装、Nginx 与 systemd 配置保存在仓库的 ",[84,341,342],{},"docs\u002Fstudio-deployment.md"," 中。",{"title":51,"searchDepth":130,"depth":130,"links":345},[346,347,348],{"id":223,"depth":130,"text":223},{"id":268,"depth":130,"text":268},{"id":321,"depth":130,"text":321},"发布","通过受信客户端调用 API，新建、查询、编辑或删除思绪与博客，并等待静态版本上线。",{},"2","\u002Fdocs\u002Fpublishing",{"title":215,"description":350},"docs\u002Fpublishing\u002Findex","2026-11-03","XiCjQjHenKdcrdvOuYjWLAKRJFtRWxqwhWtLWtKrEfY",1793725131418]