[{"data":1,"prerenderedAt":222},["ShallowReactive",2],{"\u002Fblog\u002Fhello-world":3,"\u002Fblog\u002Fhello-world-surround":131},{"id":4,"title":5,"body":6,"date":120,"description":121,"extension":122,"meta":123,"navigation":101,"path":124,"seo":125,"stem":126,"tags":127,"__hash__":130},"blog\u002Fblog\u002Fhello-world.md","你好，世界",{"type":7,"value":8,"toc":116},"minimark",[9,13,17,25,43,46,56,109,112],[10,11,12],"p",{},"欢迎来到我的博客！这是第一篇文章。",[14,15,16],"h2",{"id":16},"为什么是这个技术栈",[10,18,19,20,24],{},"这个博客用 ",[21,22,23],"strong",{},"Nuxt 4 + Nuxt Content v3"," 搭建：",[26,27,28,37,40],"ul",{},[29,30,31,32,36],"li",{},"文章就是 Markdown 文件，放在 ",[33,34,35],"code",{},"content\u002Fblog\u002F"," 目录下，用 Git 管理版本",[29,38,39],{},"Nuxt Content 负责解析 Markdown、生成列表和详情页",[29,41,42],{},"构建产物是纯静态文件，部署和迁移都很轻松",[14,44,45],{"id":45},"写一篇新文章",[10,47,48,49,51,52,55],{},"在 ",[33,50,35],{}," 下新建一个 ",[33,53,54],{},".md"," 文件，写上 frontmatter：",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-markdown shiki shiki-themes github-light","---\ntitle: 文章标题\ndescription: 一句话摘要\ndate: 2026-10-24\n---\n\n正文从这里开始……\n","markdown","",[33,64,65,73,79,85,91,96,103],{"__ignoreMap":62},[66,67,70],"span",{"class":68,"line":69},"line",1,[66,71,72],{},"---\n",[66,74,76],{"class":68,"line":75},2,[66,77,78],{},"title: 文章标题\n",[66,80,82],{"class":68,"line":81},3,[66,83,84],{},"description: 一句话摘要\n",[66,86,88],{"class":68,"line":87},4,[66,89,90],{},"date: 2026-10-24\n",[66,92,94],{"class":68,"line":93},5,[66,95,72],{},[66,97,99],{"class":68,"line":98},6,[66,100,102],{"emptyLinePlaceholder":101},true,"\n",[66,104,106],{"class":68,"line":105},7,[66,107,108],{},"正文从这里开始……\n",[10,110,111],{},"保存后开发服务器会自动热更新，首页和文章列表会自动收录。",[113,114,115],"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);}",{"title":62,"searchDepth":75,"depth":75,"links":117},[118,119],{"id":16,"depth":75,"text":16},{"id":45,"depth":75,"text":45},"2026-10-24","博客的第一篇文章：为什么选择 Nuxt 4 + Nuxt Content，以及这个站是怎么搭起来的。","md",{},"\u002Fblog\u002Fhello-world",{"title":5,"description":121},"blog\u002Fhello-world",[128,129],"nuxt","随笔","xazW6ryJ0bSXKJKx_EYXbtaQ7i7S5APFUMkeyb6AmDg",{"prev":132,"next":221},{"id":133,"title":134,"body":135,"date":120,"description":213,"extension":122,"meta":214,"navigation":101,"path":215,"seo":216,"stem":217,"tags":218,"__hash__":220},"blog\u002Fblog\u002Fdocker-migration.md","用 Docker 让博客随时可迁移",{"type":7,"value":136,"toc":209},[137,144,147,169,172,179,203,206],[10,138,139,140,143],{},"服务器不会一直用同一台，所以部署方案的第一原则是：",[21,141,142],{},"随时能搬走","。",[14,145,146],{"id":146},"思路",[148,149,150,156,159,162],"ol",{},[29,151,152,155],{},[33,153,154],{},"npm run generate"," 把整站构建成静态文件",[29,157,158],{},"静态文件由 nginx 容器托管，打成一个很小的镜像",[29,160,161],{},"Caddy 容器做反向代理，负责 HTTPS 证书的自动申请和续期",[29,163,164,165,168],{},"两个容器用一个 ",[33,166,167],{},"docker-compose.yml"," 声明",[14,170,171],{"id":171},"迁移时做什么",[10,173,174,175,178],{},"新服务器上只需要三样东西：代码仓库、",[33,176,177],{},"docker compose up -d","、把域名解析切过去。",[57,180,184],{"className":181,"code":182,"language":183,"meta":62,"style":62},"language-bash shiki shiki-themes github-light","docker compose up -d\n","bash",[33,185,186],{"__ignoreMap":62},[66,187,188,192,196,199],{"class":68,"line":69},[66,189,191],{"class":190},"s7eDp","docker",[66,193,195],{"class":194},"sYBdl"," compose",[66,197,198],{"class":194}," up",[66,200,202],{"class":201},"sYu0t"," -d\n",[10,204,205],{},"证书数据放在独立的 Docker volume 里，就算没搬过去，Caddy 也会在新机器上自动重新申请。",[113,207,208],{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}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);}",{"title":62,"searchDepth":75,"depth":75,"links":210},[211,212],{"id":146,"depth":75,"text":146},{"id":171,"depth":75,"text":171},"记录这个博客的部署思路：静态构建 + nginx + Caddy，全部装进 Docker Compose，换服务器只搬配置。",{},"\u002Fblog\u002Fdocker-migration",{"title":134,"description":213},"blog\u002Fdocker-migration",[191,219],"部署","Mhs2UIoTc8BRwptvTSWfX7-5SSEDuoOUloYSlB5zrcY",null,1793263167229]