<?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>记录各种折腾记录</description><link>https://kilomilo.top/</link><language>zh_CN</language><item><title>Astro 博客安装、目录布局与 Fuwari 主题接入记录</title><link>https://kilomilo.top/posts/astro-fuwari-setup-notes/</link><guid isPermaLink="true">https://kilomilo.top/posts/astro-fuwari-setup-notes/</guid><description>记录今天从本地 Astro 博客初始化、生产版 Docker Compose 与 Nginx 部署，到切换 Fuwari 主题的完整过程，并补充几个实用小技巧。</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;今天把本地博客从一个最小可用的 Astro 版本，整理成了适合正式部署的结构，并进一步切换到了 &lt;code&gt;Fuwari&lt;/code&gt; 主题。整个过程的重点不只是把页面跑起来，而是把目录、构建方式和后续写作方式一起固定下来，这样后面维护会轻松很多。&lt;/p&gt;
&lt;h2&gt;这次最终采用的方案&lt;/h2&gt;
&lt;p&gt;现在的博客结构可以概括成三层：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;用 &lt;code&gt;Astro&lt;/code&gt; 负责内容组织和静态页面生成。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;Fuwari&lt;/code&gt; 提供博客主题、归档、搜索、RSS 和整体样式。&lt;/li&gt;
&lt;li&gt;用 &lt;code&gt;Docker Compose + Nginx&lt;/code&gt; 作为生产部署方式。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样拆开的好处是很明确的。Astro 负责生成静态文件，Nginx 只负责托管这些静态文件，运行时足够简单；而主题层则由 Fuwari 提供，不需要自己从零写页面结构。&lt;/p&gt;
&lt;h2&gt;现在的目录布局&lt;/h2&gt;
&lt;p&gt;当前最重要的目录是这些：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;WechatWorkspace/
├── astro-blog/
│   ├── src/
│   │   ├── content/
│   │   │   ├── posts/
│   │   │   └── spec/
│   │   ├── components/
│   │   ├── layouts/
│   │   ├── pages/
│   │   └── config.ts
│   ├── public/
│   ├── Dockerfile
│   ├── Dockerfile.dev
│   ├── astro.config.mjs
│   ├── package.json
│   └── pnpm-lock.yaml
├── docker-compose.yml
└── docker-compose.dev.yml
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这里面最关键的是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;astro-blog/src/content/posts/&lt;/code&gt;
以后新文章都放这里。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;astro-blog/src/config.ts&lt;/code&gt;
管站点标题、简介、头像、导航栏和主题色。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;
生产版启动方式。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;docker-compose.dev.yml&lt;/code&gt;
开发预览方式。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;这次安装和改造的流程&lt;/h2&gt;
&lt;h3&gt;1. 先搭一个最小 Astro 博客&lt;/h3&gt;
&lt;p&gt;一开始先做的是一个很轻的 Astro 站点，只需要文章列表页和文章详情页，目的是先确认现有 Markdown 能正常导入和阅读。&lt;/p&gt;
&lt;p&gt;当时的重点不是主题，而是验证两件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;现有 Markdown 能不能顺利迁进去。&lt;/li&gt;
&lt;li&gt;Docker Compose 在本地能不能稳定跑起来。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样做的好处是，先把内容迁移链路打通，再换主题，问题会少很多。&lt;/p&gt;
&lt;h3&gt;2. 再切成生产版部署结构&lt;/h3&gt;
&lt;p&gt;确认内容能跑以后，把部署方式改成了正式一点的模式：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;构建阶段使用 Node 容器执行 &lt;code&gt;astro build&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;输出 &lt;code&gt;dist/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Nginx 镜像只负责托管 &lt;code&gt;dist/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;对应思路就是典型的多阶段构建：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;FROM node:20-alpine AS builder
# 安装依赖并构建 dist

FROM nginx:1.27-alpine
# 复制 dist 到 nginx html 目录
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这种方式比直接跑 &lt;code&gt;astro dev&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;更接近静态站的标准部署方式&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;3. 最后切到 Fuwari 主题&lt;/h3&gt;
&lt;p&gt;后面把博客模板层整体替换成了 &lt;code&gt;Fuwari&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;要注意的是，&lt;code&gt;Fuwari&lt;/code&gt; 不是简单的“换一套 CSS”，它本身就是一套完整的 Astro 博客模板，包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自己的内容 schema&lt;/li&gt;
&lt;li&gt;自己的路由结构&lt;/li&gt;
&lt;li&gt;搜索功能&lt;/li&gt;
&lt;li&gt;RSS&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;/p&gt;
&lt;ol&gt;
&lt;li&gt;用 &lt;code&gt;Fuwari&lt;/code&gt; 作为新的模板底座。&lt;/li&gt;
&lt;li&gt;把原来的文章内容迁移到它的 &lt;code&gt;src/content/posts/&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;按它要求的 frontmatter 改字段。&lt;/li&gt;
&lt;li&gt;再把 Docker/Nginx 生产构建接回去。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;文章格式现在怎么写&lt;/h2&gt;
&lt;p&gt;现在文章不是随便一个 Markdown 就能直接识别，必须符合 &lt;code&gt;Fuwari&lt;/code&gt; 的 frontmatter 格式。&lt;/p&gt;
&lt;p&gt;最常用的最小模板是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
title: 文章标题
published: 2026-04-02
description: 一句话描述文章内容
tags: [Astro, Docker]
category: 建站
draft: false
---

这里开始写正文。
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;注意几个字段：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt;
文章标题。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;published&lt;/code&gt;
发布时间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt;
首页和 SEO 描述常用。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt;
标签列表。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;category&lt;/code&gt;
分类。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft&lt;/code&gt;
如果写成 &lt;code&gt;true&lt;/code&gt;，生产构建时通常不会出现在正式页面里。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;以后文章放哪里&lt;/h2&gt;
&lt;p&gt;以后新文章统一放在：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;astro-blog/src/content/posts/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;比如你写一篇：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;astro-blog/src/content/posts/astro-notes.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最终路径会是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/posts/astro-notes/
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你放在子目录里，例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;astro-blog/src/content/posts/docker/nginx.md
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;那路径就会变成：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/posts/docker/nginx/
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;本地预览和生产预览&lt;/h2&gt;
&lt;p&gt;这次也顺手把开发和生产两种运行方式分开了。&lt;/p&gt;
&lt;h3&gt;开发模式&lt;/h3&gt;
&lt;p&gt;开发时更适合用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose -f docker-compose.dev.yml up --build -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;它启动的是 Astro 开发服务器，适合边改边看。&lt;/p&gt;
&lt;h3&gt;生产模式&lt;/h3&gt;
&lt;p&gt;正式预览或准备上线时用：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose up --build -d
&lt;/code&gt;&lt;/pre&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;/li&gt;
&lt;li&gt;用 Nginx 对外提供服务&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;这次踩到的一个小问题&lt;/h2&gt;
&lt;p&gt;切到 &lt;code&gt;Fuwari&lt;/code&gt; 之后，开始时首页里多出了一篇主题自带的演示文章。这个问题不是构建错误，而是因为主题仓库里还有一个默认示例内容目录没有清掉。&lt;/p&gt;
&lt;p&gt;这类问题很典型，也提醒了一点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;换主题时，除了看 &lt;code&gt;src/content/posts/*.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;也要检查有没有 &lt;code&gt;src/content/posts/**/index.md&lt;/code&gt; 这种子目录文章&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;否则你以为自己只保留了 4 篇文章，结果页面上还会冒出主题自带的内容。&lt;/p&gt;
&lt;h2&gt;Astro 的几个实用小技巧&lt;/h2&gt;
&lt;h3&gt;1. 先把内容链路打通，再折腾主题&lt;/h3&gt;
&lt;p&gt;如果一开始就同时换主题、改部署、迁内容，问题会缠在一起。更稳的顺序是：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;先用最小 Astro 站点确认 Markdown 能正常显示&lt;/li&gt;
&lt;li&gt;再确定生产部署方式&lt;/li&gt;
&lt;li&gt;最后再替换成正式主题&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这样定位问题非常快。&lt;/p&gt;
&lt;h3&gt;2. 静态博客尽量用生产构建验证&lt;/h3&gt;
&lt;p&gt;开发模式只是方便写作，真正决定是否能上线的是生产构建能不能成功。&lt;/p&gt;
&lt;p&gt;所以每次改完结构、依赖或主题，最好都跑一次：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker compose up --build -d
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;只要生产构建能过，基本就说明这次改动是可部署的。&lt;/p&gt;
&lt;h3&gt;3. frontmatter 要尽量固定&lt;/h3&gt;
&lt;p&gt;静态博客最怕的不是页面丑，而是文章格式今天一个样、明天一个样。后面一旦多了十几篇、几十篇，就很难统一整理。&lt;/p&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;描述&lt;/li&gt;
&lt;li&gt;标签&lt;/li&gt;
&lt;li&gt;分类&lt;/li&gt;
&lt;li&gt;draft 状态&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样后面自动生成归档、搜索和 RSS 都会更稳定。&lt;/p&gt;
&lt;h3&gt;4. 主题仓库不要直接当成“黑盒”&lt;/h3&gt;
&lt;p&gt;像 &lt;code&gt;Fuwari&lt;/code&gt; 这种主题本质上是完整项目，不是一个单独样式包。所以接入前最好先确认：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;package.json&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/content/config.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/config.ts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;src/pages/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&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;站点信息在哪改&lt;/li&gt;
&lt;li&gt;页面路由怎么组织&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;5. 写博客时把“部署信息”也记进文章&lt;/h3&gt;
&lt;p&gt;今天这次迁移里最有价值的部分之一，其实不是主题，而是把部署方式也固定进了代码结构。&lt;/p&gt;
&lt;p&gt;比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;开发版 Compose&lt;/li&gt;
&lt;li&gt;生产版 Compose&lt;/li&gt;
&lt;li&gt;Dockerfile&lt;/li&gt;
&lt;li&gt;Nginx 配置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以后就算隔一段时间不碰这个博客，回来时也能很快接上。&lt;/p&gt;
&lt;h2&gt;这套结构接下来怎么用&lt;/h2&gt;
&lt;p&gt;后面写文章时，流程可以很简单：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;在 &lt;code&gt;astro-blog/src/content/posts/&lt;/code&gt; 新建一个 &lt;code&gt;.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;按固定 frontmatter 填好标题、日期、描述和标签&lt;/li&gt;
&lt;li&gt;写正文&lt;/li&gt;
&lt;li&gt;本地预览&lt;/li&gt;
&lt;li&gt;确认没问题后提交 Git&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如果只是写内容，基本不需要再碰页面结构；只有在想改主题风格、导航、SEO 或部署方式时，才需要去动模板层和配置层。&lt;/p&gt;
&lt;h2&gt;小结&lt;/h2&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;Docker 怎么跑&lt;/li&gt;
&lt;li&gt;Nginx 怎么托管&lt;/li&gt;
&lt;li&gt;Git 怎么留版本切换点&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;后面无论继续用 &lt;code&gt;Fuwari&lt;/code&gt;，还是再换别的 Astro 主题，都已经有了一个比较稳的基础。&lt;/p&gt;
</content:encoded></item><item><title>新服务器配置记录</title><link>https://kilomilo.top/posts/new_server/</link><guid isPermaLink="true">https://kilomilo.top/posts/new_server/</guid><description>记录一台 Ubuntu 云服务器的基础环境搭建、ZeroTier、Dockge 和 Codex CLI 配置过程。</description><pubDate>Tue, 31 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;服务器信息&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;IP: &lt;code&gt;${ip}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;系统: &lt;code&gt;Ubuntu 24.04.2 LTS&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;内核: &lt;code&gt;6.8.0-63-generic&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;服务访问地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dockge: &lt;code&gt;http://${ip}:5001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;配置步骤&lt;/h2&gt;
&lt;h3&gt;1. 系统更新&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;apt update
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. SSH 免密码登录配置&lt;/h3&gt;
&lt;h4&gt;2.1 创建 .ssh 目录并设置权限&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p ~/.ssh
chmod 700 ~/.ssh
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.2 添加 Mac Mini 公钥到 authorized_keys&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;echo &apos;ssh-ed25519 ${key} Mac Mini&apos; &amp;gt;&amp;gt; ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.3 验证 SSH 配置&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;cat ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;2.4 测试免密码登录&lt;/h4&gt;
&lt;p&gt;从 Mac Mini 执行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;ssh root@${ip}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;ZeroTier&lt;/h3&gt;
&lt;p&gt;安装并启动：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;curl -s https://install.zerotier.com | bash
systemctl enable --now zerotier-one
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;加入网络：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zerotier-cli join ${networkId}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;检查状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zerotier-cli info
zerotier-cli listnetworks
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当前记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ZeroTier 版本：&lt;code&gt;1.16.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;节点 ID：&lt;code&gt;${moonId}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;网络 ID：&lt;code&gt;${networkId}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;当前状态：&lt;code&gt;REQUESTING_CONFIGURATION&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;服务状态：&lt;code&gt;ONLINE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Moon ID：&lt;code&gt;000000${moonId}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Moon 稳定端点：&lt;code&gt;${ip}/9993&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;REQUESTING_CONFIGURATION&lt;/code&gt; 表示已经成功发起入网请求。&lt;/li&gt;
&lt;li&gt;还需要在 ZeroTier Central 或控制器中授权节点 &lt;code&gt;${moonId}&lt;/code&gt;，授权后才会分配虚拟 IP。&lt;/li&gt;
&lt;li&gt;当前服务器已经可作为 Moon 节点被其他客户端 orbit。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;ZeroTier Moon&lt;/h4&gt;
&lt;p&gt;客户端接入 Moon：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zerotier-cli orbit ${moonId} ${moonId}
zerotier-cli listmoons
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;服务器验证：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;zerotier-cli listmoons
zerotier-cli info
ss -lunp | grep 9993
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当前记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;zerotier-cli listmoons&lt;/code&gt; 已返回本机 Moon 信息&lt;/li&gt;
&lt;li&gt;Moon 稳定端点：&lt;code&gt;${ip}/9993&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zerotier-one&lt;/code&gt; 服务状态：&lt;code&gt;active&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;外部检查项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;云安全组需要放行 &lt;code&gt;UDP 9993&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果云侧未放行，即使本机服务正常监听，外部节点仍然无法通过 Moon 建立连接&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dockge&lt;/h3&gt;
&lt;p&gt;目录：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir -p /root/docker/dockage
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;编排文件：
&lt;code&gt;/root/docker/dockage/docker-compose.yml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;内容如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;services:
  dockge:
    image: louislam/dockge:1
    container_name: dockge
    restart: always
    ports:
      - &quot;5001:5001&quot;
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data:/app/data
      - /root/docker:/root/docker
    environment:
      - DOCKGE_STACKS_DIR=/root/docker
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;启动命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /root/docker/dockage
docker compose up -d
docker compose ps
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;停止 / 重启：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd /root/docker/dockage
docker compose stop
docker compose restart
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;访问地址：
&lt;code&gt;http://${ip}:5001&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;当前记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;容器名：&lt;code&gt;dockge&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;镜像：&lt;code&gt;louislam/dockge:1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;端口映射：&lt;code&gt;5001:5001&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;补充说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dockge 使用宿主机目录 &lt;code&gt;/root/docker&lt;/code&gt; 作为 stack 目录。&lt;/li&gt;
&lt;li&gt;Dockge 数据目录为 &lt;code&gt;/root/data/dockge&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Codex CLI&lt;/h3&gt;
&lt;p&gt;安装前检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;command -v node
command -v npm
command -v codex
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;安装命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;apt-get update
apt-get install -y nodejs npm
npm i -g @openai/codex
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;验证命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;node -v
npm -v
which codex
codex -V
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当前记录：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node.js 版本：&lt;code&gt;v18.19.1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;npm 版本：&lt;code&gt;9.2.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Codex CLI 版本：&lt;code&gt;0.117.0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Codex 路径：&lt;code&gt;/usr/local/bin/codex&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;全局 npm 模块目录：&lt;code&gt;/usr/local/lib/node_modules&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;npm 包：&lt;code&gt;@openai/codex@0.117.0&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;登录方式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;codex login --device-auth
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;常用命令&lt;/h2&gt;
&lt;h3&gt;ZeroTier&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;zerotier-cli info
zerotier-cli listnetworks
zerotier-cli listmoons
zerotier-cli orbit ${moonId} ${moonId}
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item></channel></rss>