<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
    <title>𝐗𝐒𝐈</title>
    <subtitle>The Unified Interface For LLMs - 大语言模型统一API</subtitle>
    <link rel="self" type="application/atom+xml" href="https://xsirouter.com/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://xsirouter.com"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-06T00:00:00+00:00</updated>
    <id>https://xsirouter.com/atom.xml</id>
    <entry xml:lang="zh">
        <title>进阶：子代理与技能</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/agents-skills/"/>
        <id>https://xsirouter.com/claude/agents-skills/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/agents-skills/">&lt;h2 id=&quot;zi-dai-li-zhuan-men-de-bang-shou&quot;&gt;子代理：专门的帮手&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;子代理&lt;&#x2F;strong&gt;（subagent）是一个有专门职责的助手，比如“代码审查员”“测试员”。Claude Code 可以把一部分任务交给它，它在自己独立的上下文里工作，做完把结果交回来。好处是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;主对话不会被大量中间过程塞满；&lt;&#x2F;li&gt;
&lt;li&gt;每个子代理可以有自己的指令、可用工具和模型。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;子代理是一个 Markdown 文件，放在：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;位置&lt;&#x2F;th&gt;&lt;th&gt;作用范围&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude&#x2F;agents&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你所有的项目&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;.claude&#x2F;agents&#x2F;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，可以提交到 Git 共享&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;最简单的创建方法是直接让 Claude Code 帮你写：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;在 ~&#x2F;.claude&#x2F;agents&#x2F; 创建一个名叫 reviewer 的子代理：只读，负责检查改动里有没有明显的错误、遗漏的边界情况和泄露的密钥，用中文列出问题。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;生成的文件大致是这样：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #85E89D;&quot;&gt;name&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; reviewer&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #85E89D;&quot;&gt;description&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 检查改动中的错误、遗漏和泄露的密钥。修改代码后使用。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #85E89D;&quot;&gt;tools&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; Read, Grep, Glob&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #85E89D;&quot;&gt;model&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; sonnet&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;你是一名代码审查员。逐条列出发现的问题，说明原因并给出修改建议，用中文回答。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;description&lt;&#x2F;code&gt; 决定 Claude 什么时候会把任务交给它，写清楚“做什么、什么时候用”。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;tools&lt;&#x2F;code&gt; 限制它能用的工具，上例只能读、不能改。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;使用时直接说“用 reviewer 子代理检查这次改动”。输入 &lt;code&gt;&#x2F;agents&lt;&#x2F;code&gt; 可以查看可用的子代理。如果刚新建了 &lt;code&gt;~&#x2F;.claude&#x2F;agents&#x2F;&lt;&#x2F;code&gt; 目录，需要重启 Claude Code 才能识别。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ji-neng-ke-fu-yong-de-zuo-fa&quot;&gt;技能：可复用的做法&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;技能&lt;&#x2F;strong&gt;（skill）是一份写好的操作说明。Claude 会在合适的时候自动使用它，你也可以输入 &lt;code&gt;&#x2F;技能名&lt;&#x2F;code&gt; 直接调用。适合固定流程，比如“按公司模板写周报”“发版前检查清单”。&lt;&#x2F;p&gt;
&lt;p&gt;技能是一个文件夹，里面放一个 &lt;code&gt;SKILL.md&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;位置&lt;&#x2F;th&gt;&lt;th&gt;作用范围&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude&#x2F;skills&#x2F;技能名&#x2F;SKILL.md&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你所有的项目&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;.claude&#x2F;skills&#x2F;技能名&#x2F;SKILL.md&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，可以提交到 Git 共享&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;例子：创建一个周报技能。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.claude&#x2F;skills&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;code&gt;~&#x2F;.claude&#x2F;skills&#x2F;weekly-report&#x2F;SKILL.md&lt;&#x2F;code&gt; 写入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;markdown&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #85E89D;&quot;&gt;description&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 把零散的工作记录整理成周报。用户要求写周报、周总结或工作汇报时使用。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;---&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;font-weight: bold;&quot;&gt;## 格式&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;1.&lt;&#x2F;span&gt;&lt;span&gt; 本周完成：按项目分组，每条一句话，写清结果。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;2.&lt;&#x2F;span&gt;&lt;span&gt; 进行中：写明进度和预计完成时间。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;3.&lt;&#x2F;span&gt;&lt;span&gt; 风险与需要的支持。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;4.&lt;&#x2F;span&gt;&lt;span&gt; 下周计划：不超过 5 条。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;font-weight: bold;&quot;&gt;## 要求&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; 用中文，语气客观，不夸大。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; 原始记录里没有的事情不要编造。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #FFAB70;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt; 缺少日期或负责人时，在末尾列出需要确认的问题。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;之后对 Claude Code 说“帮我把这些记录整理成周报”，它会按这个技能来写；也可以输入 &lt;code&gt;&#x2F;weekly-report&lt;&#x2F;code&gt; 直接调用。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;code&gt;description&lt;&#x2F;code&gt; 同样很关键：写明“做什么”和“什么时候用”，Claude 才知道何时自动调用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-dai-li-he-ji-neng-zen-me-xuan&quot;&gt;子代理和技能怎么选&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;子代理&lt;&#x2F;th&gt;&lt;th&gt;技能&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;本质&lt;&#x2F;td&gt;&lt;td&gt;一个独立工作的助手&lt;&#x2F;td&gt;&lt;td&gt;一份操作说明&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;上下文&lt;&#x2F;td&gt;&lt;td&gt;独立的，不占用主对话&lt;&#x2F;td&gt;&lt;td&gt;加载到当前对话里&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;适合&lt;&#x2F;td&gt;&lt;td&gt;审查、调研这类可以单独完成的任务&lt;&#x2F;td&gt;&lt;td&gt;固定格式、固定流程&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;拿不准时，先写技能，它更简单。&lt;&#x2F;p&gt;
&lt;p&gt;更多细节见官方文档：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;sub-agents&quot;&gt;子代理&lt;&#x2F;a&gt;、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;skills&quot;&gt;技能&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>配置与自检</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/config/"/>
        <id>https://xsirouter.com/claude/config/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/config/">&lt;h2 id=&quot;pei-zhi-wen-jian-zai-na-li&quot;&gt;配置文件在哪里&lt;&#x2F;h2&gt;
&lt;p&gt;安装 Claude Code 不会自动创建配置文件，需要时自己创建，或者在 &lt;code&gt;&#x2F;config&lt;&#x2F;code&gt; 菜单里改一项设置，它会帮你创建。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;文件&lt;&#x2F;th&gt;&lt;th&gt;作用范围&lt;&#x2F;th&gt;&lt;th&gt;适合放什么&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你电脑上的所有项目&lt;&#x2F;td&gt;&lt;td&gt;个人偏好、接入 XSI Router 的 &lt;code&gt;env&lt;&#x2F;code&gt;、默认权限模式&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，可以提交到 Git 与团队共享&lt;&#x2F;td&gt;&lt;td&gt;团队统一的权限规则、Hooks&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;.claude&#x2F;settings.local.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，只属于你，不提交&lt;&#x2F;td&gt;&lt;td&gt;个人对这个项目的特殊设置&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;托管设置（managed）&lt;&#x2F;td&gt;&lt;td&gt;公司统一下发&lt;&#x2F;td&gt;&lt;td&gt;由 IT 管理，个人不能修改&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Windows 上的 &lt;code&gt;~&#x2F;.claude&lt;&#x2F;code&gt; 指 &lt;code&gt;%USERPROFILE%\.claude&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;另外还有一个 &lt;code&gt;~&#x2F;.claude.json&lt;&#x2F;code&gt;，是 Claude Code 自己维护的状态文件，保存登录会话、MCP 服务器配置等，一般不需要手动编辑。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;you-xian-ji&quot;&gt;优先级&lt;&#x2F;h2&gt;
&lt;p&gt;同一个设置出现在多个文件里时，按这个顺序取值，越靠前越优先：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;托管设置&lt;&#x2F;li&gt;
&lt;li&gt;启动命令里的参数，例如 &lt;code&gt;claude --permission-mode plan&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;.claude&#x2F;settings.local.json&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;~&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;code&gt;permissions.allow&lt;&#x2F;code&gt; 这类列表不会互相覆盖，而是合并：每个文件都可以往里加规则。&lt;&#x2F;p&gt;
&lt;p&gt;少数和安全有关的设置有特殊规则。例如 &lt;code&gt;useAutoModeDuringPlan&lt;&#x2F;code&gt;：个人或项目本地配置里的 &lt;code&gt;false&lt;&#x2F;code&gt;，即使托管设置是 &lt;code&gt;true&lt;&#x2F;code&gt; 也照样生效；而写在项目共享 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 里的 &lt;code&gt;false&lt;&#x2F;code&gt; 会被忽略。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yi-ge-tui-jian-de-ge-ren-pei-zhi&quot;&gt;一个推荐的个人配置&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;env&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;ANTHROPIC_BASE_URL&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;ANTHROPIC_AUTH_TOKEN&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;permissions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;defaultMode&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;default&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;deny&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Read(.&#x2F;.env)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Read(.&#x2F;.env.*)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;useAutoModeDuringPlan&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;env&lt;&#x2F;code&gt;：接入 XSI Router，见&lt;a href=&quot;&#x2F;claude&#x2F;xai-router&#x2F;&quot;&gt;凭证与接入 XSI Router&lt;&#x2F;a&gt;。如果你已经用系统环境变量设置过，这一段可以省略。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;defaultMode: &quot;default&quot;&lt;&#x2F;code&gt;：每次会话从手动审批开始。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;useAutoModeDuringPlan: false&lt;&#x2F;code&gt;：计划模式里调查用的命令不再由分类模型代你批准，内置只读命令之外的都会先问你（启用了跳过权限的交互式终端会话除外）。它要写在个人或项目本地的配置里，写在项目共享的 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 中会被忽略。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;deny&lt;&#x2F;code&gt;：禁止读取项目里的 &lt;code&gt;.env&lt;&#x2F;code&gt; 文件，这类文件通常存放密钥。它挡住的是 Claude 自带的读文件工具和 &lt;code&gt;cat&lt;&#x2F;code&gt; 这类它认得的命令；如果它运行一个脚本，脚本里照样能读到这个文件。需要严格隔离时，再配合&lt;a href=&quot;&#x2F;claude&#x2F;permissions&#x2F;&quot;&gt;沙箱&lt;&#x2F;a&gt;限制文件访问。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;JSON 格式很严格：键名要用双引号，最后一项后面不能有逗号。改完可以用 &lt;code&gt;claude doctor&lt;&#x2F;code&gt; 检查。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gai-liao-shen-me-shi-hou-sheng-xiao&quot;&gt;改了什么时候生效&lt;&#x2F;h2&gt;
&lt;p&gt;Claude Code 会监视配置文件，大部分修改（包括权限规则和 Hooks）保存后立即对正在运行的会话生效。默认模型等少数设置只在会话启动时读取。修改了 &lt;code&gt;env&lt;&#x2F;code&gt;（比如换了 Key）或默认模型后如果没有生效，退出并重新启动 Claude Code。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&#x2F;status&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：在会话里运行，查看当前的登录方式、模型，以及 &lt;code&gt;Setting sources&lt;&#x2F;code&gt;（这次会话读取了哪些配置文件）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;claude doctor&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：在终端里运行（不用进入会话），检查安装是否健康、配置文件有没有写错、哪些设置被拒绝了。会话里也可以用 &lt;code&gt;&#x2F;doctor&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;&#x2F;config&lt;&#x2F;code&gt;&lt;&#x2F;strong&gt;：会话里的设置菜单，可以直接修改主题、更新渠道等常用选项。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pai-cha-shun-xu&quot;&gt;排查顺序&lt;&#x2F;h2&gt;
&lt;p&gt;配置不生效时，按这个顺序检查：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;当前在哪个环境运行：Windows 原生、WSL、macOS 还是 Linux？Windows 原生和 WSL 的配置互不影响。&lt;&#x2F;li&gt;
&lt;li&gt;改的文件对不对：用 &lt;code&gt;&#x2F;status&lt;&#x2F;code&gt; 看 &lt;code&gt;Setting sources&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;有没有被更高优先级覆盖：项目里的 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt;、启动参数都可能覆盖个人设置。&lt;&#x2F;li&gt;
&lt;li&gt;JSON 格式对不对：运行 &lt;code&gt;claude doctor&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;改的是不是 &lt;code&gt;env&lt;&#x2F;code&gt; 或只在启动时读取的设置：重启 Claude Code 再试。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>第一次使用</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/first-task/"/>
        <id>https://xsirouter.com/claude/first-task/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/first-task/">&lt;h2 id=&quot;zhun-bei-yi-ge-lian-xi-wen-jian-jia&quot;&gt;准备一个练习文件夹&lt;&#x2F;h2&gt;
&lt;p&gt;不要一上来就在重要项目里试。可以用 &lt;a href=&quot;&#x2F;learn&#x2F;practice-pack.zip&quot;&gt;小白学AI 练习包&lt;&#x2F;a&gt;，或者复制一个不要紧的文件夹。&lt;&#x2F;p&gt;
&lt;p&gt;先进入练习文件夹（把路径换成你自己的）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;practice-claude&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;确认提示符显示的是这个文件夹以后，再用 Git 存档：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;开始之前&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;qi-dong&quot;&gt;启动&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;第一次启动时：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;选择界面配色。&lt;&#x2F;li&gt;
&lt;li&gt;如果还没配置凭证，会要求登录；接入 XSI Router 的方法见&lt;a href=&quot;&#x2F;claude&#x2F;xai-router&#x2F;&quot;&gt;凭证与接入 XSI Router&lt;&#x2F;a&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;询问是否信任这个文件夹。确认是你自己的文件夹后再选择信任。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;进入后，底部是输入框，状态栏显示当前的权限模式。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-yi-ge-wen-ti-zhi-du&quot;&gt;第一个问题：只读&lt;&#x2F;h2&gt;
&lt;p&gt;按 &lt;code&gt;Shift + Tab&lt;&#x2F;code&gt; 切换到 &lt;code&gt;plan mode on&lt;&#x2F;code&gt;，然后输入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请先不要修改任何文件。告诉我这个文件夹里有哪些文件、各自是什么内容，有没有看起来重复的文件。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Claude Code 会运行一些读取命令，然后给出报告。核对一下它说的对不对，这是使用 AI 的基本功。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-er-ge-ren-wu-xiao-xiu-gai&quot;&gt;第二个任务：小修改&lt;&#x2F;h2&gt;
&lt;p&gt;切换回 &lt;code&gt;manual mode on&lt;&#x2F;code&gt;，让它做一件小事，并要求先说方案：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请新建一个 summary.md，汇总所有会议纪要里的待办事项（负责人、事项、截止日期）。先告诉我你打算怎么做，等我确认后再动手。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;确认方案后回复“可以”。它要创建文件时会弹出审批提示，看清楚内容再允许。&lt;&#x2F;p&gt;
&lt;p&gt;完成后，在终端里运行 &lt;code&gt;git status&lt;&#x2F;code&gt;，&lt;code&gt;summary.md&lt;&#x2F;code&gt; 会出现在 Untracked files（新文件）里。新文件不会出现在 &lt;code&gt;git diff&lt;&#x2F;code&gt; 中，直接打开 &lt;code&gt;summary.md&lt;&#x2F;code&gt; 检查内容即可。&lt;&#x2F;p&gt;
&lt;p&gt;满意就提交存档；不满意，可以让它修改，或者连按两次 &lt;code&gt;Esc&lt;&#x2F;code&gt; 回退。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shu-ru-kuang-li-de-xiao-ji-qiao&quot;&gt;输入框里的小技巧&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;@文件名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;指定要它看的文件，例如 &lt;code&gt;@expenses-2026-09.csv 帮我算总额&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;!命令&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;直接在终端里运行一条命令，例如 &lt;code&gt;!git status&lt;&#x2F;code&gt;，结果会进入对话&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Esc&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;打断它正在做的事&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Esc&lt;&#x2F;code&gt; &lt;code&gt;Esc&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;输入框为空时连按两次，打开回退菜单&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;↑&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;调出之前输入过的内容&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Shift + Tab&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;切换权限模式&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;help&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;查看所有命令&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;tui-chu&quot;&gt;退出&lt;&#x2F;h2&gt;
&lt;p&gt;输入 &lt;code&gt;&#x2F;exit&lt;&#x2F;code&gt;，或者连按两次 &lt;code&gt;Ctrl + D&lt;&#x2F;code&gt;。下次在同一个文件夹里运行 &lt;code&gt;claude -c&lt;&#x2F;code&gt;，可以接着上次的对话继续。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hao-ren-wu-de-xie-fa&quot;&gt;好任务的写法&lt;&#x2F;h2&gt;
&lt;p&gt;一个清晰的任务包含：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;目标&lt;&#x2F;strong&gt;：要完成什么。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;范围&lt;&#x2F;strong&gt;：只动哪些文件。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;限制&lt;&#x2F;strong&gt;：什么不能做，例如“不要删除文件”。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;验收&lt;&#x2F;strong&gt;：怎样算完成，例如“做完列出改了哪些文件”。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;把大任务拆成小任务，做完一个、检查一个、存档一个，结果会稳定得多。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>进阶：Hooks、MCP 与插件</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/hooks-mcp-plugins/"/>
        <id>https://xsirouter.com/claude/hooks-mcp-plugins/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/hooks-mcp-plugins/">&lt;h2 id=&quot;hooks-zai-gu-ding-shi-ji-zi-dong-zhi-xing&quot;&gt;Hooks：在固定时机自动执行&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Hook&lt;&#x2F;strong&gt;（钩子）是在特定时机自动运行的命令，不需要 Claude 决定要不要做。常用时机：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;事件&lt;&#x2F;th&gt;&lt;th&gt;什么时候触发&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;SessionStart&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;会话开始或恢复时&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;UserPromptSubmit&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你发出消息、Claude 处理之前&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;PreToolUse&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Claude 调用工具之前，可以拦截&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;PostToolUse&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;工具调用成功之后&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Notification&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Claude Code 发出通知时，例如等待你审批&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Stop&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Claude 回答完毕时&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Hooks 写在 settings.json 的 &lt;code&gt;hooks&lt;&#x2F;code&gt; 里。例子：Claude Code 需要你操作时弹出系统通知，这样你可以去做别的事。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;macOS&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;hooks&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;Notification&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        &amp;quot;matcher&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        &amp;quot;hooks&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;            &amp;quot;type&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;command&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;            &amp;quot;command&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;osascript -e &amp;#39;display notification &lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;Claude Code needs your attention&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; with title &lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;Claude Code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;hooks&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;Notification&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        &amp;quot;matcher&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;        &amp;quot;hooks&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;            &amp;quot;type&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;command&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;            &amp;quot;command&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;powershell.exe -Command &lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;[System.Reflection.Assembly]::LoadWithPartialName(&amp;#39;System.Windows.Forms&amp;#39;); [System.Windows.Forms.MessageBox]::Show(&amp;#39;Claude Code needs your attention&amp;#39;, &amp;#39;Claude Code&amp;#39;)&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;\&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;          }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;如果 settings.json 里已经有其他内容，把 &lt;code&gt;hooks&lt;&#x2F;code&gt; 这一段合并进去。输入 &lt;code&gt;&#x2F;hooks&lt;&#x2F;code&gt; 可以查看当前生效的 Hooks。&lt;&#x2F;p&gt;
&lt;p&gt;Hook 会以你的身份自动执行命令。别人项目里的 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 可能带有 Hooks，打开不熟悉的项目时，Claude Code 会先询问是否信任这个文件夹，看清楚再确认。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;mcp-lian-jie-wai-bu-gong-ju&quot;&gt;MCP：连接外部工具&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;MCP&lt;&#x2F;strong&gt;（Model Context Protocol）是一种让 AI 连接外部工具和数据的标准，例如文档库、项目管理系统、数据库。连接后，Claude 就能直接查询或操作这些工具。&lt;&#x2F;p&gt;
&lt;p&gt;添加一个远程 MCP 服务器：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; mcp add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --transport&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; http&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;名&lt;&#x2F;span&gt;&lt;span&gt;称&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt; &amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;地&lt;&#x2F;span&gt;&lt;span&gt;址&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;gt;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;例如：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; mcp add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --transport&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; http notion https:&#x2F;&#x2F;mcp.notion.com&#x2F;mcp&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;--scope&lt;&#x2F;code&gt; 决定它对哪些项目生效：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;范围&lt;&#x2F;th&gt;&lt;th&gt;生效位置&lt;&#x2F;th&gt;&lt;th&gt;保存在&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;local&lt;&#x2F;code&gt;（默认）&lt;&#x2F;td&gt;&lt;td&gt;只在当前项目，只有你&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;project&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;当前项目，可以提交到 Git 与团队共享&lt;&#x2F;td&gt;&lt;td&gt;项目根目录的 &lt;code&gt;.mcp.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;user&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你所有的项目&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;会话中输入 &lt;code&gt;&#x2F;mcp&lt;&#x2F;code&gt; 查看连接状态，需要登录授权的服务也在这里完成。&lt;&#x2F;p&gt;
&lt;p&gt;MCP 服务器能读取和修改它所连接的数据，只添加你信任的服务。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cha-jian-yi-ci-zhuang-hao-yi-zheng-tao&quot;&gt;插件：一次装好一整套&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;插件&lt;&#x2F;strong&gt;把技能、子代理、Hooks、MCP 服务器打包在一起，一次安装就能用上全部功能。插件来自“插件市场”（marketplace）。&lt;&#x2F;p&gt;
&lt;p&gt;在会话中输入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&#x2F;plugin&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;strong&gt;Discover&lt;&#x2F;strong&gt; 标签页浏览和安装插件，在管理页面启用、停用或卸载。&lt;&#x2F;p&gt;
&lt;p&gt;区分官方市场和第三方市场：第三方插件可以包含会自动执行的 Hooks 和 MCP 服务器，安装前确认作者和来源。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chu-wen-ti-shi&quot;&gt;出问题时&lt;&#x2F;h2&gt;
&lt;p&gt;扩展装多了，某个出错可能拖累整个会话。用下面的命令启动，暂时关闭所有插件、MCP 和 Hooks，方便判断问题出在哪里：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --safe-mode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;更多细节见官方文档：&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;hooks-guide&quot;&gt;Hooks&lt;&#x2F;a&gt;、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;mcp&quot;&gt;MCP&lt;&#x2F;a&gt;、&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;code.claude.com&#x2F;docs&#x2F;en&#x2F;plugins&quot;&gt;插件&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>下载与安装</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/install/"/>
        <id>https://xsirouter.com/claude/install/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/install/">&lt;h2 id=&quot;xi-tong-yao-qiu&quot;&gt;系统要求&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;macOS 13 或更高版本；Windows 10（1809）或更高版本；Ubuntu 20.04+、Debian 10+ 等主流 Linux。&lt;&#x2F;li&gt;
&lt;li&gt;4 GB 以上内存，x64 或 ARM64 处理器。&lt;&#x2F;li&gt;
&lt;li&gt;能联网。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;macos-linux-wsl&quot;&gt;macOS、Linux、WSL&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fsSL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; https:&#x2F;&#x2F;claude.ai&#x2F;install.sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; bash&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;也可以用 Homebrew 安装。这种方式不会自动更新，需要定期运行 &lt;code&gt;brew upgrade claude-code&lt;&#x2F;code&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;brew&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --cask&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; claude-code&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;windows&quot;&gt;Windows&lt;&#x2F;h2&gt;
&lt;p&gt;在 &lt;strong&gt;PowerShell&lt;&#x2F;strong&gt; 中运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;irm https:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&#x2F;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;claude.ai&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;install.ps1 &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;|&lt;&#x2F;span&gt;&lt;span&gt; iex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;在 &lt;strong&gt;CMD（命令提示符）&lt;&#x2F;strong&gt; 中运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;bat&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;curl -fsSL https:&#x2F;&#x2F;claude.ai&#x2F;install.cmd -o install.cmd &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span&gt; install.cmd &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&amp;amp;&amp;amp; del&lt;&#x2F;span&gt;&lt;span&gt; install.cmd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;也可以用 WinGet 安装（需要手动 &lt;code&gt;winget upgrade&lt;&#x2F;code&gt; 更新）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;winget install Anthropic.ClaudeCode&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;分清自己在哪个终端里：提示符以 &lt;code&gt;PS C:\&lt;&#x2F;code&gt; 开头的是 PowerShell，没有 &lt;code&gt;PS&lt;&#x2F;code&gt; 的是 CMD。如果看到 &lt;code&gt;The token &#x27;&amp;amp;&amp;amp;&#x27; is not a valid statement separator&lt;&#x2F;code&gt;，说明你在 PowerShell 里运行了 CMD 的命令；看到 &lt;code&gt;&#x27;irm&#x27; 不是内部或外部命令&lt;&#x2F;code&gt;，说明你在 CMD 里运行了 PowerShell 的命令。&lt;&#x2F;p&gt;
&lt;p&gt;安装不需要管理员权限。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Git for Windows 是可选的。&lt;&#x2F;strong&gt; 装了它，Claude Code 会用 Git Bash 执行命令；没装，就用 PowerShell 执行命令。推荐安装，很多教程和脚本默认使用 Bash：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;winget install &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;--&lt;&#x2F;span&gt;&lt;span&gt;id Git.Git &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;e&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;WSL&lt;&#x2F;strong&gt;：在 WSL 里使用时，进入 WSL 后按上面 Linux 的方式安装，不需要 Git for Windows。Windows 原生和 WSL 是两个独立环境，在哪里运行 &lt;code&gt;claude&lt;&#x2F;code&gt;，就要在哪里安装和配置。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;npm-an-zhuang&quot;&gt;npm 安装&lt;&#x2F;h2&gt;
&lt;p&gt;如果官方安装器下载失败，可以用 npm 安装（需要 Node.js 22 或更高版本）。国内可以加镜像参数：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; install&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -g&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; @anthropic-ai&#x2F;claude-code&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --registry=https:&#x2F;&#x2F;registry.npmmirror.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;npm 包安装的是同一个原生程序。升级时运行 &lt;code&gt;npm install -g @anthropic-ai&#x2F;claude-code@latest&lt;&#x2F;code&gt;，不要用 &lt;code&gt;npm update -g&lt;&#x2F;code&gt;。不要用 &lt;code&gt;sudo npm install -g&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;jian-cha-an-zhuang&quot;&gt;检查安装&lt;&#x2F;h2&gt;
&lt;p&gt;重新打开终端，运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; doctor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;claude --version&lt;&#x2F;code&gt; 显示版本号说明安装成功；&lt;code&gt;claude doctor&lt;&#x2F;code&gt; 会检查安装方式、配置文件和依赖，有问题会给出提示。&lt;&#x2F;p&gt;
&lt;p&gt;如果提示找不到 &lt;code&gt;claude&lt;&#x2F;code&gt; 命令，先关掉终端重新打开；还不行，见&lt;a href=&quot;&#x2F;claude&#x2F;troubleshooting&#x2F;&quot;&gt;排错与更新&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xie-zai&quot;&gt;卸载&lt;&#x2F;h2&gt;
&lt;p&gt;原生安装（macOS、Linux、WSL）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.local&#x2F;bin&#x2F;claude&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -rf&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.local&#x2F;share&#x2F;claude&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Windows 原生安装（PowerShell）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;Remove-Item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Path &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;USERPROFILE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.local\bin\claude.exe&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Force&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;Remove-Item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Path &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;USERPROFILE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.local\share\claude&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Recurse &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;Force&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Homebrew、WinGet、npm 安装的，用对应的包管理器卸载。配置和会话记录在 &lt;code&gt;~&#x2F;.claude&lt;&#x2F;code&gt; 目录和 &lt;code&gt;~&#x2F;.claude.json&lt;&#x2F;code&gt; 文件里，确定不再需要时再删除。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>权限与安全</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/permissions/"/>
        <id>https://xsirouter.com/claude/permissions/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/permissions/">&lt;h2 id=&quot;quan-xian-mo-shi&quot;&gt;权限模式&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;模式&lt;&#x2F;th&gt;&lt;th&gt;不用问你就能做的事&lt;&#x2F;th&gt;&lt;th&gt;适合&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;手动（Manual，配置值 &lt;code&gt;default&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;td&gt;只能读取&lt;&#x2F;td&gt;&lt;td&gt;新手、敏感操作，每一步都自己把关&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;接受修改（&lt;code&gt;acceptEdits&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;td&gt;读取、修改文件、常见的文件操作命令（&lt;code&gt;mkdir&lt;&#x2F;code&gt;、&lt;code&gt;mv&lt;&#x2F;code&gt;、&lt;code&gt;cp&lt;&#x2F;code&gt; 等）&lt;&#x2F;td&gt;&lt;td&gt;你在一旁审阅的日常修改&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;计划（&lt;code&gt;plan&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;td&gt;读取和调查，只提方案、不改源文件&lt;&#x2F;td&gt;&lt;td&gt;动手之前先研究、先出方案&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;自动（&lt;code&gt;auto&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;td&gt;几乎所有操作，由另一个模型在后台做安全检查&lt;&#x2F;td&gt;&lt;td&gt;熟练用户的长任务&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;跳过权限（&lt;code&gt;bypassPermissions&lt;&#x2F;code&gt;）&lt;&#x2F;td&gt;&lt;td&gt;所有操作&lt;&#x2F;td&gt;&lt;td&gt;只适合隔离的容器或虚拟机&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;会话中按 &lt;code&gt;Shift + Tab&lt;&#x2F;code&gt; 循环切换模式，底部状态栏会显示当前模式，例如 &lt;code&gt;manual mode on&lt;&#x2F;code&gt;、&lt;code&gt;accept edits on&lt;&#x2F;code&gt;、&lt;code&gt;plan mode on&lt;&#x2F;code&gt;、&lt;code&gt;auto mode on&lt;&#x2F;code&gt;。也可以在启动时指定：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --permission-mode&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; plan&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;xin-ban-mo-ren-shi-zi-dong-mo-shi&quot;&gt;新版默认是自动模式&lt;&#x2F;h2&gt;
&lt;p&gt;从 v2.1.283 起，在终端里启动的会话默认进入&lt;strong&gt;自动模式&lt;&#x2F;strong&gt;：由一个分类模型替你判断操作是否安全，而不是每次都问你。它很方便，但新手很难知道它到底做了什么。&lt;&#x2F;p&gt;
&lt;p&gt;建议在 &lt;code&gt;~&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 中把默认模式改成手动：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;permissions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;defaultMode&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;default&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;下次启动时，状态栏会显示 &lt;code&gt;⏸ manual mode on&lt;&#x2F;code&gt;。熟练以后，再按需切换到其他模式。&lt;&#x2F;p&gt;
&lt;p&gt;计划模式里也有同样的问题：只要自动模式可用，计划阶段调查用的命令默认也由分类模型替你批准。想在计划模式里也由自己审批，再加上顶层设置 &lt;code&gt;&quot;useAutoModeDuringPlan&quot;: false&lt;&#x2F;code&gt;。关闭后，内置只读命令之外的命令都会先问你（用 &lt;code&gt;--dangerously-skip-permissions&lt;&#x2F;code&gt; 等方式启用了跳过权限的交互式终端会话除外：那里计划阶段的命令大多既不经过分类模型、也不询问你，只有少数情况仍会提示，所以不要那样启动）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;permissions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;defaultMode&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;default&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;useAutoModeDuringPlan&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这个设置要写在个人的 &lt;code&gt;~&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 或项目本地的 &lt;code&gt;.claude&#x2F;settings.local.json&lt;&#x2F;code&gt; 里；写在项目共享的 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt; 里的 &lt;code&gt;false&lt;&#x2F;code&gt; 会被忽略。反过来，即使公司托管配置设成了 &lt;code&gt;true&lt;&#x2F;code&gt;，你个人或项目本地的 &lt;code&gt;false&lt;&#x2F;code&gt; 仍然生效。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shen-pi-ti-shi&quot;&gt;审批提示&lt;&#x2F;h2&gt;
&lt;p&gt;在手动模式下，Claude Code 要修改文件或运行命令时，会显示具体内容并请你确认。你可以只允许这一次、选择以后不再询问（Yes, and don&#x27;t ask again），或者拒绝。拒绝时可以顺便告诉它应该怎么做。&lt;&#x2F;p&gt;
&lt;p&gt;“不再询问”的有效期因操作而异：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;操作&lt;&#x2F;th&gt;&lt;th&gt;选“不再询问”后&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;修改文件&lt;&#x2F;td&gt;&lt;td&gt;本次会话结束前不再询问&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;运行某类命令、访问某个网站&lt;&#x2F;td&gt;&lt;td&gt;在这个项目里&lt;strong&gt;永久&lt;&#x2F;strong&gt;不再询问，规则保存到 &lt;code&gt;.claude&#x2F;settings.local.json&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;所以对命令选“不再询问”要慎重。选错了可以输入 &lt;code&gt;&#x2F;permissions&lt;&#x2F;code&gt; 找到对应规则删除。&lt;&#x2F;p&gt;
&lt;p&gt;判断标准只有一条：&lt;strong&gt;看得懂、并且是你想要的，才允许。&lt;&#x2F;strong&gt; 看不懂就拒绝，然后问它“这条命令是做什么的”。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yun-xu-xun-wen-ju-jue-gui-ze&quot;&gt;允许、询问、拒绝规则&lt;&#x2F;h2&gt;
&lt;p&gt;对经常重复的安全操作，可以写规则让它不再询问；对危险操作，可以写规则直接拒绝。规则写在 settings.json 的 &lt;code&gt;permissions&lt;&#x2F;code&gt; 里：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;permissions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;allow&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Bash(npm run *)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Bash(git commit *)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ],&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;deny&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: [&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Bash(git push *)&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      &amp;quot;Read(.&#x2F;.env)&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    ]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;allow&lt;&#x2F;code&gt;：直接允许；&lt;code&gt;ask&lt;&#x2F;code&gt;：总是询问；&lt;code&gt;deny&lt;&#x2F;code&gt;：直接拒绝。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Bash(npm run *)&lt;&#x2F;code&gt; 中的 &lt;code&gt;*&lt;&#x2F;code&gt; 代表任意内容，这条规则允许所有 &lt;code&gt;npm run ...&lt;&#x2F;code&gt; 命令。&lt;&#x2F;li&gt;
&lt;li&gt;拒绝优先：同一个操作同时匹配 &lt;code&gt;deny&lt;&#x2F;code&gt; 和 &lt;code&gt;allow&lt;&#x2F;code&gt; 时，按 &lt;code&gt;deny&lt;&#x2F;code&gt; 处理。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;Read(.&#x2F;.env)&lt;&#x2F;code&gt; 禁止读取 &lt;code&gt;.env&lt;&#x2F;code&gt; 文件，也会阻止修改它。但它只管 Claude 自带的文件工具和 &lt;code&gt;cat&lt;&#x2F;code&gt; 这类它认得的命令，挡不住脚本程序自己去读。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;在会话中输入 &lt;code&gt;&#x2F;permissions&lt;&#x2F;code&gt; 可以查看和编辑规则。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sha-xiang&quot;&gt;沙箱&lt;&#x2F;h2&gt;
&lt;p&gt;在 macOS、Linux 和 WSL 2 上，可以用 &lt;code&gt;&#x2F;sandbox&lt;&#x2F;code&gt; 打开沙箱：Claude Code 运行的命令会被限制在指定的文件和网络范围内。Windows 原生和 WSL 1 暂不支持。沙箱和权限模式可以叠加使用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hui-tui-che-xiao-claude-de-xiu-gai&quot;&gt;回退：撤销 Claude 的修改&lt;&#x2F;h2&gt;
&lt;p&gt;Claude Code 会在你每次发出新任务前自动保存一个检查点。输入框为空时连按两次 &lt;code&gt;Esc&lt;&#x2F;code&gt;，或者输入 &lt;code&gt;&#x2F;rewind&lt;&#x2F;code&gt;，打开回退菜单，选择要回到的那一步：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Restore code and conversation&lt;&#x2F;strong&gt;：代码和对话都回到那一步；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Restore conversation&lt;&#x2F;strong&gt;：只回退对话，保留现在的代码；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Restore code&lt;&#x2F;strong&gt;：只回退代码，保留对话。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;回退有边界：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;通过 Bash 命令做的改动（例如 &lt;code&gt;rm&lt;&#x2F;code&gt;、&lt;code&gt;mv&lt;&#x2F;code&gt;、脚本生成的文件）&lt;strong&gt;不会&lt;&#x2F;strong&gt;被记录，回退不了；&lt;&#x2F;li&gt;
&lt;li&gt;你自己在 Claude Code 之外手动做的修改也不会被记录。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;所以，检查点不能代替 Git。动手做大改动之前，先用 Git 提交一个存档。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tiao-guo-quan-xian-yao-fei-chang-jin-shen&quot;&gt;跳过权限要非常谨慎&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;claude --dangerously-skip-permissions&lt;&#x2F;code&gt; 会跳过所有权限确认。只在可以随时丢弃的容器、虚拟机里使用，不要在自己的电脑、生产服务器或存有密钥的目录里使用。网上一些“懒人配置”会默认开启它，复制配置前先看清楚。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;cao-zuo-xi-guan&quot;&gt;操作习惯&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;先用计划模式让它说清方案，确认后再切换模式让它动手。&lt;&#x2F;li&gt;
&lt;li&gt;每轮修改后用 &lt;code&gt;git diff&lt;&#x2F;code&gt; 查看改动。&lt;&#x2F;li&gt;
&lt;li&gt;对删除、覆盖、推送、提权类的命令保持警惕。&lt;&#x2F;li&gt;
&lt;li&gt;不要让它读取或输出密钥；把密钥放在环境变量里，并用 &lt;code&gt;deny&lt;&#x2F;code&gt; 规则挡住 &lt;code&gt;.env&lt;&#x2F;code&gt; 文件。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>排错与更新</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/troubleshooting/"/>
        <id>https://xsirouter.com/claude/troubleshooting/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/troubleshooting/">&lt;h2 id=&quot;xian-yun-xing-zi-jian&quot;&gt;先运行自检&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; doctor&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;它会检查安装方式、版本、配置文件和依赖，并指出问题所在。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zhao-bu-dao-claude-ming-ling&quot;&gt;找不到 claude 命令&lt;&#x2F;h2&gt;
&lt;p&gt;报错类似 &lt;code&gt;command not found: claude&lt;&#x2F;code&gt; 或 &lt;code&gt;&#x27;claude&#x27; 不是内部或外部命令&lt;&#x2F;code&gt;，说明安装目录不在 PATH 里。&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;先关掉终端，重新打开。&lt;&#x2F;li&gt;
&lt;li&gt;还不行，检查原生安装目录 &lt;code&gt;~&#x2F;.local&#x2F;bin&lt;&#x2F;code&gt; 是否在 PATH 中。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;&lt;strong&gt;macOS（zsh）&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; $PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; tr&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;:&amp;#39; &amp;#39;\n&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -Fx&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&#x2F;.local&#x2F;bin&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;没有输出就加进去：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;export PATH=&amp;quot;$HOME&#x2F;.local&#x2F;bin:$PATH&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.zshrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;source&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.zshrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Linux 默认的 bash 写入 &lt;code&gt;~&#x2F;.bashrc&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Windows（PowerShell）&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;PATH&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -split&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; Select-String&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;\.local\\bin&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;没有输出就加进用户 PATH，然后重开终端：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$currentPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span&gt;]::GetEnvironmentVariable(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;PATH&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;User&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;Environment&lt;&#x2F;span&gt;&lt;span&gt;]::SetEnvironmentVariable(&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;PATH&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;$currentPath&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;;&lt;&#x2F;span&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;USERPROFILE&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.local\bin&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;,&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;User&amp;#39;&lt;&#x2F;span&gt;&lt;span&gt;)&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;an-zhuang-ming-ling-bao-cuo&quot;&gt;安装命令报错&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;看到的报错&lt;&#x2F;th&gt;&lt;th&gt;原因和解决&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;irm is not recognized&lt;&#x2F;code&gt; &#x2F; &lt;code&gt;&#x27;irm&#x27; 不是内部或外部命令&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;在 CMD 里运行了 PowerShell 命令，换用 CMD 的安装命令或打开 PowerShell&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;The token &#x27;&amp;amp;&amp;amp;&#x27; is not a valid statement separator&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;在 PowerShell 里运行了 CMD 命令，换用 PowerShell 的安装命令&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;syntax error near unexpected token &#x27;&amp;lt;&#x27;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;下载到的是网页而不是脚本，通常是网络问题&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;Failed to fetch version&lt;&#x2F;code&gt;、连接超时&lt;&#x2F;td&gt;&lt;td&gt;无法访问下载服务器，检查网络和代理，或改用 npm 加镜像安装&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;EACCES: permission denied&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;安装目录权限不对，不要用 &lt;code&gt;sudo&lt;&#x2F;code&gt; 硬装，按 &lt;code&gt;claude doctor&lt;&#x2F;code&gt; 的提示修复&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;deng-lu-yu-401&quot;&gt;登录与 401&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;明明设置了 Key，还是要求浏览器登录？&lt;&#x2F;strong&gt; 说明 Claude Code 没读到 &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt;。确认重开过终端，或者改用 settings.json 的 &lt;code&gt;env&lt;&#x2F;code&gt; 配置，见&lt;a href=&quot;&#x2F;claude&#x2F;xai-router&#x2F;&quot;&gt;凭证与接入 XSI Router&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;报 401、认证失败？&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Key 复制错了：多了空格、少了字符。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;ANTHROPIC_BASE_URL&lt;&#x2F;code&gt; 写错了，应为 &lt;code&gt;https:&#x2F;&#x2F;api.xsirouter.com&lt;&#x2F;code&gt;，不要加 &lt;code&gt;&#x2F;v1&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;有残留的旧变量。&lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt; 优先于 &lt;code&gt;ANTHROPIC_API_KEY&lt;&#x2F;code&gt;，检查两者，删掉不用的那个。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;用 &lt;code&gt;&#x2F;status&lt;&#x2F;code&gt; 查看当前实际生效的登录方式。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;报 429、额度不足？&lt;&#x2F;strong&gt; 账户额度用完或请求过于频繁，到账户后台查看。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wang-luo-he-dai-li&quot;&gt;网络和代理&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;需要通过代理上网时，设置 &lt;code&gt;HTTPS_PROXY&lt;&#x2F;code&gt;（必要时加 &lt;code&gt;HTTP_PROXY&lt;&#x2F;code&gt;、&lt;code&gt;NO_PROXY&lt;&#x2F;code&gt;）。&lt;&#x2F;li&gt;
&lt;li&gt;公司代理使用自签证书时，设置 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;&#x2F;code&gt; 指向证书文件，否则会报 TLS 或证书错误。&lt;&#x2F;li&gt;
&lt;li&gt;访问 Anthropic 官方服务不稳定时，可以设置 &lt;code&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1&lt;&#x2F;code&gt;，关闭自动更新、遥测等非必要请求，之后改为手动更新。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;qia-dun-zhan-yong-gao&quot;&gt;卡顿、占用高&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;长对话用 &lt;code&gt;&#x2F;compact&lt;&#x2F;code&gt; 压缩，换任务时用 &lt;code&gt;&#x2F;clear&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;会话卡住时按 &lt;code&gt;Ctrl + C&lt;&#x2F;code&gt; 退出，再用 &lt;code&gt;claude --continue&lt;&#x2F;code&gt; 接着之前的对话。&lt;&#x2F;li&gt;
&lt;li&gt;怀疑是插件、MCP 或 Hooks 引起的问题，用 &lt;code&gt;claude --safe-mode&lt;&#x2F;code&gt; 启动，它会暂时关闭所有自定义扩展，方便判断。&lt;&#x2F;li&gt;
&lt;li&gt;WSL 中把项目放在 Linux 的家目录（&lt;code&gt;&#x2F;home&#x2F;...&lt;&#x2F;code&gt;）下，不要放在 &lt;code&gt;&#x2F;mnt&#x2F;c&#x2F;...&lt;&#x2F;code&gt;，搜索文件会快很多。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;geng-xin&quot;&gt;更新&lt;&#x2F;h2&gt;
&lt;p&gt;原生安装默认在后台自动更新，下次启动时生效。手动更新：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; update&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Homebrew、WinGet 安装的不会自动更新，分别用 &lt;code&gt;brew upgrade claude-code&lt;&#x2F;code&gt;、&lt;code&gt;winget upgrade Anthropic.ClaudeCode&lt;&#x2F;code&gt;。npm 安装的用 &lt;code&gt;npm install -g @anthropic-ai&#x2F;claude-code@latest&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;在 settings.json 的 &lt;code&gt;env&lt;&#x2F;code&gt; 中设置 &lt;code&gt;&quot;DISABLE_AUTOUPDATER&quot;: &quot;1&quot;&lt;&#x2F;code&gt; 可以关闭后台自动更新，&lt;code&gt;claude update&lt;&#x2F;code&gt; 仍然可用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;reng-ran-jie-jue-bu-liao&quot;&gt;仍然解决不了&lt;&#x2F;h2&gt;
&lt;p&gt;把这些信息整理好，交给 AI 或发给客服：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;操作系统和终端类型（PowerShell、CMD、macOS 终端、WSL）；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;claude --version&lt;&#x2F;code&gt; 的输出；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;claude doctor&lt;&#x2F;code&gt; 的输出；&lt;&#x2F;li&gt;
&lt;li&gt;完整的报错信息（记得先删掉其中的 Key）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Claude Code 是什么</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/what-is-claude-code/"/>
        <id>https://xsirouter.com/claude/what-is-claude-code/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/what-is-claude-code/">&lt;h2 id=&quot;ta-neng-zuo-shen-me&quot;&gt;它能做什么&lt;&#x2F;h2&gt;
&lt;p&gt;在一个文件夹里启动 Claude Code，用中文告诉它你想做什么，它会自己动手：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;阅读文件夹里的文件，回答“这个项目是做什么的”“这段代码什么意思”；&lt;&#x2F;li&gt;
&lt;li&gt;运行命令，比如统计数据、安装依赖、运行测试；&lt;&#x2F;li&gt;
&lt;li&gt;新建和修改文件，写代码、写文档、整理资料；&lt;&#x2F;li&gt;
&lt;li&gt;用 Git 查看改动、提交存档。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;它和网页版聊天 AI 最大的区别是&lt;strong&gt;能动手&lt;&#x2F;strong&gt;。所以要给它划定权限：哪些事直接做、哪些事先征求你的同意，由你选择的权限模式和规则决定，详见&lt;a href=&quot;&#x2F;claude&#x2F;permissions&#x2F;&quot;&gt;权限与安全&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong-ru-kou&quot;&gt;使用入口&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;入口&lt;&#x2F;th&gt;&lt;th&gt;说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;终端（CLI）&lt;&#x2F;td&gt;&lt;td&gt;在终端里运行 &lt;code&gt;claude&lt;&#x2F;code&gt;，功能最完整，本专题以它为主&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;桌面 App&lt;&#x2F;td&gt;&lt;td&gt;macOS、Windows、Linux 桌面应用，可以并行多个会话、可视化查看改动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;网页版&lt;&#x2F;td&gt;&lt;td&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;claude.ai&#x2F;code&quot;&gt;claude.ai&#x2F;code&lt;&#x2F;a&gt;，任务在云端运行&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;IDE 扩展&lt;&#x2F;td&gt;&lt;td&gt;VS Code、JetBrains 系列编辑器中的插件&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;其他&lt;&#x2F;td&gt;&lt;td&gt;手机 App、Slack、GitHub Actions 等，适合团队协作和自动化&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;本专题只讲终端。终端版最通用：在自己电脑上能用，以后 SSH 登录到云服务器上也能用。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zen-yang-fu-fei&quot;&gt;怎样付费&lt;&#x2F;h2&gt;
&lt;p&gt;Claude Code 本身免费下载，模型调用需要付费。常见的方式有三种：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;登录 Claude 官方订阅账号（Pro、Max、Team 等）。&lt;&#x2F;li&gt;
&lt;li&gt;使用 Anthropic Console 的 API Key，按用量付费。&lt;&#x2F;li&gt;
&lt;li&gt;通过 API 网关接入，例如本站 XSI Router：设置两个环境变量即可，不需要 Claude 官方账号。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;本专题以第 3 种为例，见&lt;a href=&quot;&#x2F;claude&#x2F;xai-router&#x2F;&quot;&gt;凭证与接入 XSI Router&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;he-codex-grok-cli-de-guan-xi&quot;&gt;和 Codex、Grok CLI 的关系&lt;&#x2F;h2&gt;
&lt;p&gt;三者都是编程智能体，用法相似：在文件夹里启动、用自然语言下达任务、审批它的操作。主要区别在于背后的模型和配置方式。它们可以共用同一个 XSI Router Key。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;工具&lt;&#x2F;th&gt;&lt;th&gt;命令&lt;&#x2F;th&gt;&lt;th&gt;本站专题&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Claude Code&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;claude&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;本专题&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Codex&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;codex&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;&#x2F;codex&#x2F;&quot;&gt;Codex 专题&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Grok CLI&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;grok&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;&lt;a href=&quot;&#x2F;grok&#x2F;&quot;&gt;Grok 专题&lt;&#x2F;a&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;如果你的项目里已经有给 Codex 写的 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt;，Claude Code 在没有 &lt;code&gt;CLAUDE.md&lt;&#x2F;code&gt; 时也会读取它，不用重复写一份。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>日常工作流</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/workflows/"/>
        <id>https://xsirouter.com/claude/workflows/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/workflows/">&lt;h2 id=&quot;claude-md-gei-xiang-mu-li-gui-ju&quot;&gt;CLAUDE.md：给项目立规矩&lt;&#x2F;h2&gt;
&lt;p&gt;每次会话开始时，Claude Code 会读取 &lt;code&gt;CLAUDE.md&lt;&#x2F;code&gt; 文件，把里面的内容当作长期指令。适合写：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;项目是做什么的、目录结构；&lt;&#x2F;li&gt;
&lt;li&gt;怎么运行、怎么测试；&lt;&#x2F;li&gt;
&lt;li&gt;团队的约定，例如“回答用中文”“不要修改 migrations 目录”。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;位置&lt;&#x2F;th&gt;&lt;th&gt;作用范围&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;~&#x2F;.claude&#x2F;CLAUDE.md&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你所有的项目&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;CLAUDE.md&lt;&#x2F;code&gt; 或 &lt;code&gt;项目&#x2F;.claude&#x2F;CLAUDE.md&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，可以提交到 Git 与团队共享&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;项目&#x2F;CLAUDE.local.md&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;这个项目，只属于你，记得加进 &lt;code&gt;.gitignore&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;在项目里运行 &lt;code&gt;&#x2F;init&lt;&#x2F;code&gt;，Claude Code 会分析项目并生成一份 &lt;code&gt;CLAUDE.md&lt;&#x2F;code&gt; 草稿，你再按需修改。&lt;&#x2F;p&gt;
&lt;p&gt;如果项目里已经有给 Codex 等工具写的 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt;，并且没有 &lt;code&gt;CLAUDE.md&lt;&#x2F;code&gt;，Claude Code 会直接读取 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;除了你写的 &lt;code&gt;CLAUDE.md&lt;&#x2F;code&gt;，Claude Code 还会自动记录一些它学到的项目经验（自动记忆），输入 &lt;code&gt;&#x2F;memory&lt;&#x2F;code&gt; 可以查看和管理。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xian-ji-hua-zai-dong-shou&quot;&gt;先计划，再动手&lt;&#x2F;h2&gt;
&lt;p&gt;改动较大的任务，推荐这个流程：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;按 &lt;code&gt;Shift + Tab&lt;&#x2F;code&gt; 切换到 &lt;code&gt;plan mode on&lt;&#x2F;code&gt;，描述任务，让它调查并给出方案。&lt;&#x2F;li&gt;
&lt;li&gt;审查方案，有问题就直接提出修改意见。&lt;&#x2F;li&gt;
&lt;li&gt;方案确定后切换到 &lt;code&gt;manual mode on&lt;&#x2F;code&gt; 或 &lt;code&gt;accept edits on&lt;&#x2F;code&gt;，让它执行。&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;code&gt;git diff&lt;&#x2F;code&gt; 检查改动，运行测试，满意后提交。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;guan-li-shang-xia-wen&quot;&gt;管理上下文&lt;&#x2F;h2&gt;
&lt;p&gt;对话越长，模型要读的内容越多，速度越慢、花费越高，也越容易被前面的内容干扰。&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&#x2F;clear&lt;&#x2F;code&gt;：开始新对话。换一件事时用它。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&#x2F;compact&lt;&#x2F;code&gt;：把前面的对话压缩成摘要，保留要点、腾出空间。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;&#x2F;context&lt;&#x2F;code&gt;：查看当前上下文的使用情况。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;jie-zhao-shang-ci-ji-xu&quot;&gt;接着上次继续&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;继续当前文件夹里最近的一次对话。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -r&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;列出之前的对话，选一个继续。会话中也可以用 &lt;code&gt;&#x2F;resume&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dan-ci-ming-ling&quot;&gt;单次命令&lt;&#x2F;h2&gt;
&lt;p&gt;不进入交互界面，直接问一个问题、拿到结果：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;用一句话总结 README.md 的内容&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;适合写进脚本。注意 &lt;code&gt;-p&lt;&#x2F;code&gt; 模式下没有人可以点审批，需要的权限要提前用规则配置好。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-yong-ming-ling-su-cha&quot;&gt;常用命令速查&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;命令&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;help&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;所有可用命令&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;clear&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;新对话&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;compact&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;压缩上下文&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;resume&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;恢复之前的对话&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;rewind&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;回退到之前的检查点&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;model&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;切换模型&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;status&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;查看登录方式、模型和配置来源&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;config&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;设置菜单&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;permissions&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;查看和编辑权限规则&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;init&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;生成 CLAUDE.md&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;memory&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;查看自动记忆&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;&#x2F;doctor&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;自检&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;he-git-pei-he&quot;&gt;和 Git 配合&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;开始一项任务前，确认工作区是干净的（&lt;code&gt;git status&lt;&#x2F;code&gt;），或者先提交一个存档。&lt;&#x2F;li&gt;
&lt;li&gt;让 Claude Code 做完一件事就提交一次，说明写清楚做了什么。&lt;&#x2F;li&gt;
&lt;li&gt;回退菜单只能撤销 Claude 用编辑工具做的修改；Git 能把任何改动恢复到上一次提交的样子，两者配合最稳妥。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>凭证与接入 XSI Router</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/claude/xai-router/"/>
        <id>https://xsirouter.com/claude/xai-router/</id>
        
        <content type="html" xml:base="https://xsirouter.com/claude/xai-router/">&lt;h2 id=&quot;san-chong-ping-zheng&quot;&gt;三种凭证&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方式&lt;&#x2F;th&gt;&lt;th&gt;怎么用&lt;&#x2F;th&gt;&lt;th&gt;谁来计费&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Claude 订阅账号&lt;&#x2F;td&gt;&lt;td&gt;启动后按提示在浏览器登录，或运行 &lt;code&gt;&#x2F;login&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;你的 Claude 订阅&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Anthropic API Key&lt;&#x2F;td&gt;&lt;td&gt;环境变量 &lt;code&gt;ANTHROPIC_API_KEY&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;Anthropic Console 账户&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;API 网关凭证&lt;&#x2F;td&gt;&lt;td&gt;环境变量 &lt;code&gt;ANTHROPIC_BASE_URL&lt;&#x2F;code&gt; + &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;网关账户，例如 XSI Router&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;同时存在多种凭证时，Claude Code 按固定顺序选择：&lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt; 优先于 &lt;code&gt;ANTHROPIC_API_KEY&lt;&#x2F;code&gt;，两者都优先于浏览器登录的订阅账号。&lt;&#x2F;p&gt;
&lt;p&gt;两个容易踩的坑：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;只设置 &lt;code&gt;ANTHROPIC_BASE_URL&lt;&#x2F;code&gt;、不设置凭证&lt;&#x2F;strong&gt;：如果你之前登录过订阅账号，请求会经过新地址，但仍然使用订阅账号计费。接入 XSI Router 时两个变量都要设置。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;残留的旧变量&lt;&#x2F;strong&gt;：以前设置过 &lt;code&gt;ANTHROPIC_API_KEY&lt;&#x2F;code&gt;，现在又设置了 &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt;，生效的是后者。排查问题时记得检查有没有残留的变量。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;huo-qu-key&quot;&gt;获取 Key&lt;&#x2F;h2&gt;
&lt;p&gt;在 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;m.xsirouter.com&quot;&gt;m.xsirouter.com&lt;&#x2F;a&gt; 注册账号，系统会把 API Key 发到注册邮箱。Key 等同于你的钱包，不要截图、外发或提交到代码仓库。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fang-shi-yi-huan-jing-bian-liang&quot;&gt;方式一：环境变量&lt;&#x2F;h2&gt;
&lt;p&gt;适合你已经习惯用环境变量管理 Key 的情况。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;macOS &#x2F; Linux&lt;&#x2F;strong&gt;（zsh 写入 &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt;，bash 写入 &lt;code&gt;~&#x2F;.bashrc&lt;&#x2F;code&gt;）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;export ANTHROPIC_BASE_URL=&amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.zshrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;export ANTHROPIC_AUTH_TOKEN=&amp;quot;sk-你的Key&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.zshrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;&#x2F;strong&gt;（PowerShell）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;setx ANTHROPIC_BASE_URL &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;setx ANTHROPIC_AUTH_TOKEN &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;设置后&lt;strong&gt;重新打开终端&lt;&#x2F;strong&gt;。检查 Key 的长度（不会把 Key 显示出来）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; ${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span&gt;ANTHROPIC_AUTH_TOKEN}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;ANTHROPIC_AUTH_TOKEN.Length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;fang-shi-er-settings-json&quot;&gt;方式二：settings.json&lt;&#x2F;h2&gt;
&lt;p&gt;把变量写进 Claude Code 自己的配置文件 &lt;code&gt;~&#x2F;.claude&#x2F;settings.json&lt;&#x2F;code&gt;（Windows 为 &lt;code&gt;%USERPROFILE%\.claude\settings.json&lt;&#x2F;code&gt;）的 &lt;code&gt;env&lt;&#x2F;code&gt; 中，只对 Claude Code 生效，也不受终端类型影响：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;json&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;{&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;env&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;ANTHROPIC_BASE_URL&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;,&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;ANTHROPIC_AUTH_TOKEN&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  },&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;  &amp;quot;permissions&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;: {&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;    &amp;quot;defaultMode&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;:&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;default&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;permissions.defaultMode&lt;&#x2F;code&gt; 让每次会话都从“手动审批”模式开始，原因见&lt;a href=&quot;&#x2F;claude&#x2F;permissions&#x2F;&quot;&gt;权限与安全&lt;&#x2F;a&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;这个文件里有明文 Key：只在个人电脑上这样做，不要把它分享出去，也不要把含 Key 的配置放进项目仓库的 &lt;code&gt;.claude&#x2F;settings.json&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;yan-zheng&quot;&gt;验证&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;claude&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;设置了 &lt;code&gt;ANTHROPIC_AUTH_TOKEN&lt;&#x2F;code&gt; 后，Claude Code 不会再要求浏览器登录。进入后输入 &lt;code&gt;&#x2F;status&lt;&#x2F;code&gt;，确认登录方式和 API 地址；再随便问一句，比如“你好，用一句话介绍你自己”，能正常回复即接入成功。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xuan-ze-mo-xing&quot;&gt;选择模型&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;会话中输入 &lt;code&gt;&#x2F;model&lt;&#x2F;code&gt;，从列表里选择。&lt;&#x2F;li&gt;
&lt;li&gt;启动时指定：&lt;code&gt;claude --model claude-sonnet-5-5&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;用环境变量 &lt;code&gt;ANTHROPIC_MODEL&lt;&#x2F;code&gt; 设置默认模型；&lt;code&gt;--model&lt;&#x2F;code&gt; 和 &lt;code&gt;&#x2F;model&lt;&#x2F;code&gt; 的优先级比它高。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;XSI Router 上可用的 Claude 模型见&lt;a href=&quot;&#x2F;models&#x2F;&quot;&gt;模型页&lt;&#x2F;a&gt;，例如 &lt;code&gt;claude-opus-5-5&lt;&#x2F;code&gt;、&lt;code&gt;claude-sonnet-5-5&lt;&#x2F;code&gt;、&lt;code&gt;claude-haiku-4-5&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wang-luo-shou-xian-shi&quot;&gt;网络受限时&lt;&#x2F;h2&gt;
&lt;p&gt;如果你的网络访问 Anthropic 官方服务不稳定，可以设置 &lt;code&gt;CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1&lt;&#x2F;code&gt;，关闭自动更新、遥测、错误上报等非必要的网络请求，只保留模型调用。代价是不会再自动更新，需要定期手动运行 &lt;code&gt;claude update&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;公司网络需要代理时，设置 &lt;code&gt;HTTPS_PROXY&lt;&#x2F;code&gt;；如果代理使用公司自签的证书，再设置 &lt;code&gt;NODE_EXTRA_CA_CERTS&lt;&#x2F;code&gt; 指向证书文件。&lt;&#x2F;p&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>让 AI 动手改文件</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/ai-edits/"/>
        <id>https://xsirouter.com/learn/ai-edits/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/ai-edits/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;用“目标、范围、规则、验收”四要素写需求。&lt;&#x2F;li&gt;
&lt;li&gt;让 AI 先说计划，确认后再动手。&lt;&#x2F;li&gt;
&lt;li&gt;用 Git 验收改动，满意就存档，不满意就恢复。&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; 给 AI 立长期规矩。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-hao-xu-qiu-de-si-yao-su&quot;&gt;先懂概念：好需求的四要素&lt;&#x2F;h2&gt;
&lt;p&gt;AI 不会读心。需求越含糊，它越要靠猜，猜错了就得返工。一个好需求包含：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;要素&lt;&#x2F;th&gt;&lt;th&gt;回答的问题&lt;&#x2F;th&gt;&lt;th&gt;例子&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;目标&lt;&#x2F;td&gt;&lt;td&gt;要达到什么效果？&lt;&#x2F;td&gt;&lt;td&gt;让文件一眼就能找到&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;范围&lt;&#x2F;td&gt;&lt;td&gt;动哪些东西？&lt;&#x2F;td&gt;&lt;td&gt;只整理这个文件夹&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;规则&lt;&#x2F;td&gt;&lt;td&gt;什么不能做？&lt;&#x2F;td&gt;&lt;td&gt;不要删除任何文件&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;验收&lt;&#x2F;td&gt;&lt;td&gt;怎样算做完、做对？&lt;&#x2F;td&gt;&lt;td&gt;做完列出改了哪些文件&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;再加一个好习惯：&lt;strong&gt;先让它说计划，你同意后再动手。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-que-ren-you-cun-dang&quot;&gt;1. 确认有存档&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;practice-pack&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到 &lt;code&gt;nothing to commit, working tree clean&lt;&#x2F;code&gt; 再继续。如果不是，先回第 8 课做好存档。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-yong-mo-ren-quan-xian-qi-dong-codex&quot;&gt;2. 用默认权限启动 Codex&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这次不加 &lt;code&gt;--sandbox read-only&lt;&#x2F;code&gt;，Codex 会使用第 6 课配置的默认权限：可以改当前文件夹里的文件，越界时先问你。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-fa-chu-xu-qiu&quot;&gt;3. 发出需求&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请帮我整理这个文件夹。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;目标：让文件一眼就能找到。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;范围：只整理当前文件夹，不要动外面的任何东西。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;要求：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;1. 建三个子文件夹：meetings（会议纪要）、expenses（报销）、customers（客户）。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;2. 把文件移到对应的文件夹，改成“日期在前、英文小写、用连字符”的名字，例如 meetings&#x2F;2026-09-15-weekly-meeting.txt。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;3. 不要删除任何文件。重复的文件、空文件和 old 文件夹里的文件，统一移到 to-review 文件夹，等我决定。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;4. 新建 summary.md，写上所有会议待办事项的表格（负责人、事项、截止日期；同一事项只列一次，截止日期有冲突时两个都写上并标注待确认），以及 9 月和 10 月的报销总额。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;验收：做之前先告诉我你的计划，等我回复“可以”再动手；做完后列出你移动、改名和新建了哪些文件。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;4-shen-cha-ji-hua&quot;&gt;4. 审查计划&lt;&#x2F;h3&gt;
&lt;p&gt;Codex 会先列出计划。逐条看一遍：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;每个文件打算放到哪里、改成什么名字？&lt;&#x2F;li&gt;
&lt;li&gt;有没有哪一步写着“删除”？&lt;&#x2F;li&gt;
&lt;li&gt;有没有要动当前文件夹以外的东西？&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;有不满意的地方就直接说，比如“todo list.txt 不属于这三类，也放进 to-review”。确认没问题后回复：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;可以，按计划执行。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;执行过程中如果弹出审批提示，按第 7 课的规矩判断。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;yong-git-yan-shou&quot;&gt;用 Git 验收&lt;&#x2F;h3&gt;
&lt;p&gt;退出 Codex（&lt;code&gt;&#x2F;quit&lt;&#x2F;code&gt;）或者新开一个终端，进入练习包运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; status&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;git add -A&lt;&#x2F;code&gt; 把这次所有的改动交给 Git 比较。&lt;code&gt;git status&lt;&#x2F;code&gt; 会列出：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;renamed: 旧名字 -&amp;gt; 新名字&lt;&#x2F;code&gt;：文件被移动或改名，内容基本没变；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;new file: summary.md&lt;&#x2F;code&gt;：新建的文件；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;deleted: ...&lt;&#x2F;code&gt;：&lt;strong&gt;如果出现这一行，说明有文件被删了&lt;&#x2F;strong&gt;，要找 AI 问清楚。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;想确认被移动的文件内容一点没变，运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; diff&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --cached&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;单纯移动、改名的文件只会显示 &lt;code&gt;rename from&lt;&#x2F;code&gt; 和 &lt;code&gt;rename to&lt;&#x2F;code&gt;；如果某个文件下面出现了以 &lt;code&gt;+&lt;&#x2F;code&gt;、&lt;code&gt;-&lt;&#x2F;code&gt; 开头的行，说明它的内容也被改了，要问清楚为什么。看完按 &lt;code&gt;q&lt;&#x2F;code&gt; 退出。&lt;&#x2F;p&gt;
&lt;p&gt;再打开 &lt;code&gt;summary.md&lt;&#x2F;code&gt;，用第 7 课的标准答案核对：9 条待办，9 月 1622.40 元，10 月 1553.50 元。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;man-yi-cun-dang&quot;&gt;满意：存档&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;整理练习包&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;也可以直接对 Codex 说“帮我提交一个存档，说明写‘整理练习包’”。它要运行 &lt;code&gt;git commit&lt;&#x2F;code&gt; 时可能会请你批准，这正是你想要的，选 Yes。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bu-man-yi-hui-fu&quot;&gt;不满意：恢复&lt;&#x2F;h3&gt;
&lt;p&gt;按第 8 课的后悔药步骤来。刚才运行过 &lt;code&gt;git add -A&lt;&#x2F;code&gt;，第一步的 &lt;code&gt;git restore --staged .&lt;&#x2F;code&gt; 不能省：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; restore&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --staged&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; restore .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;预览新冒出来的文件夹和文件：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; clean&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -nd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;确认清单里只有 AI 新建的东西（&lt;code&gt;meetings&lt;&#x2F;code&gt;、&lt;code&gt;expenses&lt;&#x2F;code&gt;、&lt;code&gt;customers&lt;&#x2F;code&gt;、&lt;code&gt;to-review&lt;&#x2F;code&gt;、&lt;code&gt;summary.md&lt;&#x2F;code&gt; 等），再删除：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; clean&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fd&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;文件夹会回到“原始文件”存档时的样子，你可以改改需求重新来一次。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gei-ai-li-chang-qi-gui-ju-agents-md&quot;&gt;给 AI 立长期规矩：AGENTS.md&lt;&#x2F;h2&gt;
&lt;p&gt;每次都在需求里写“用中文回答”“不要删除文件”，很快就烦了。把这些长期规矩写进文件夹里的 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt;，Codex 每次在这个文件夹启动时都会先读它。&lt;&#x2F;p&gt;
&lt;p&gt;让 Codex 帮你创建：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请在当前文件夹创建 AGENTS.md，写入以下规则：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 始终用中文回答。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 不要删除任何文件；需要清理的文件移到 to-review 文件夹。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 文件名使用“日期在前、英文小写、用连字符”的格式。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 动手修改之前，先说明计划并等我确认。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建好以后，输入 &lt;code&gt;&#x2F;new&lt;&#x2F;code&gt; 开一段新对话，问它：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;这个文件夹有什么规矩？&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;它应该能复述出你写的规则。最后别忘了把 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; 也存进 Git：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;添加 AGENTS.md&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;它没等我确认就动手了？&lt;&#x2F;strong&gt; 按 &lt;code&gt;Esc&lt;&#x2F;code&gt; 打断，用后悔药恢复，然后把“等我回复‘可以’再动手”写得更醒目，或者写进 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;整理结果和我想的不一样？&lt;&#x2F;strong&gt; 很正常。不必从头再来，直接告诉它哪里不对，比如“客户文件不要改名，保留原名”。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;一次要做的事太多，它做乱了？&lt;&#x2F;strong&gt; 把大任务拆成几个小任务，做完一个、验收一个、存档一个。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;可以让它整理我真实的工作文件吗？&lt;&#x2F;strong&gt; 可以，但一定先复制一份副本，或者先用 Git 存档，并且只给它需要的那个文件夹。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能写出包含目标、范围、规则、验收的需求。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我审查过 AI 的计划后才让它动手。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我用 &lt;code&gt;git status&lt;&#x2F;code&gt; 检查过有没有文件被删。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
练习包已经整理好并存档，&lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; 也已经存档。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>让 AI 帮你运维服务器</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/ai-ops/"/>
        <id>https://xsirouter.com/learn/ai-ops/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/ai-ops/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;建一个运维专用文件夹，用 &lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; 写好规矩。&lt;&#x2F;li&gt;
&lt;li&gt;让 Codex 通过 SSH 检查服务器、分析日志。&lt;&#x2F;li&gt;
&lt;li&gt;知道哪些审批绝不能“一劳永逸”。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-ai-zai-ni-dian-nao-shang-shou-shen-dao-fu-wu-qi&quot;&gt;先懂概念：AI 在你电脑上，手伸到服务器&lt;&#x2F;h2&gt;
&lt;p&gt;也可以把 Codex 装到服务器上，但那样要把 Key 放到服务器上，AI 在服务器上的每个动作也更难把关。这里用更稳妥的做法：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;你 ──▶ 本地 Codex ──ssh ai-server &amp;quot;命令&amp;quot;──▶ 服务器&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;                 ◀──────── 命令输出 ─────────&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Codex 默认的沙箱不允许联网，所以它每次想运行 &lt;code&gt;ssh&lt;&#x2F;code&gt; 都会停下来请你审批。这正好：&lt;strong&gt;每一条在服务器上执行的命令，你都会先看到。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-jian-yun-wei-wen-jian-jia-he-gui-ju&quot;&gt;1. 建运维文件夹和规矩&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;ops&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;ops&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; init&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请在当前文件夹创建 AGENTS.md，写入以下规则：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 你是我的服务器运维助手，始终用中文回答。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 服务器的 SSH 别名是 ai-server，系统是 Ubuntu。周报助手部署在 ~&#x2F;apps&#x2F;weekly-report，用 docker compose 管理，源代码在 ~&#x2F;weekly-report。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 先用只读命令诊断，例如 docker compose ps、docker compose logs、df -h、free -h、systemctl status。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 任何会修改服务器的操作（重启服务、删除文件、改配置、安装软件），先说明原因、命令和影响，等我确认后再执行。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 不要读取或输出 .env、tunnel.env、certs 目录以及任何密钥文件的内容。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 每次只通过 ssh ai-server &amp;quot;命令&amp;quot; 执行一条命令。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;创建好后存档：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;运维规矩&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;2-rang-ta-zuo-yi-ci-ti-jian&quot;&gt;2. 让它做一次体检&lt;&#x2F;h3&gt;
&lt;p&gt;重新启动 Codex（&lt;code&gt;&#x2F;new&lt;&#x2F;code&gt; 或退出后再运行 &lt;code&gt;codex&lt;&#x2F;code&gt;），发出：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请给 ai-server 做一次体检：周报助手的容器是否正常运行、最近 100 行日志里有没有报错、磁盘和内存是否充足。最后给我一份简短的结论。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;3-zhu-tiao-shen-pi&quot;&gt;3. 逐条审批&lt;&#x2F;h3&gt;
&lt;p&gt;Codex 会弹出审批，显示类似这样的命令：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;ssh ai-server &amp;quot;cd ~&#x2F;apps&#x2F;weekly-report &amp;amp;&amp;amp; docker compose ps&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;每一条都看清楚：是不是只读的？有没有碰密钥文件？看得懂、没问题再选 &lt;strong&gt;Yes, proceed&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;不要选 “Yes, and don&#x27;t ask again for commands that start with &lt;code&gt;ssh ai-server&lt;&#x2F;code&gt;”&lt;&#x2F;strong&gt;。这等于允许它以后在服务器上不经询问执行任何命令。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;一份中文体检报告：容器状态、日志里的异常、磁盘和内存使用情况，以及它的建议。和你自己用第 16、21 课学过的命令查到的结果对照一下。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shi-yong-de-ti-wen&quot;&gt;实用的提问&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;网站打不开，Cloudflare 显示 522，请帮我排查原因，先只做检查。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;服务器上有哪些系统更新可以安装？先列出来，不要安装。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;docker 占用了多少磁盘？哪些旧镜像可以安全清理？先列出来，等我确认。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;zhu-yi-shi-xiang&quot;&gt;注意事项&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;私钥设了密码短语？&lt;&#x2F;strong&gt; Codex 运行的 &lt;code&gt;ssh&lt;&#x2F;code&gt; 无法替你输入密码短语，会连接失败。macOS 可以先运行 &lt;code&gt;ssh-add&lt;&#x2F;code&gt; 把密钥交给系统的钥匙串代理；Windows 需要启用“OpenSSH Authentication Agent”服务后运行 &lt;code&gt;ssh-add&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;AI 看得到命令输出。&lt;&#x2F;strong&gt; 所以规则里禁止它读取密钥文件。你自己也不要让它运行 &lt;code&gt;cat .env&lt;&#x2F;code&gt; 这类命令。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;修改操作由你决定。&lt;&#x2F;strong&gt; 重启、删除、改配置之前，让它先说清楚会发生什么；拿不准就不批准，按课程里学过的方法手动做。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;AGENTS.md&lt;&#x2F;code&gt; 里写清了服务器信息和规矩。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Codex 通过 SSH 完成了一次体检，每条命令都经过我批准。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我知道为什么不能对 &lt;code&gt;ssh ai-server&lt;&#x2F;code&gt; 选“不再询问”。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>周报助手·AI 版</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/ai-version/"/>
        <id>https://xsirouter.com/learn/ai-version/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/ai-version/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;让服务器调用 API 生成周报。&lt;&#x2F;li&gt;
&lt;li&gt;理解为什么 Key 只能放在服务器端，并且放在环境变量里。&lt;&#x2F;li&gt;
&lt;li&gt;处理 AI 失败和超时：自动退回规则版。&lt;&#x2F;li&gt;
&lt;li&gt;确认 Key 没有出现在代码和存档里。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-wei-shen-me-you-fu-wu-qi-qu-diao-yong-ai&quot;&gt;先懂概念：为什么由服务器去调用 AI&lt;&#x2F;h2&gt;
&lt;p&gt;网页上的代码会被下载到访问者的浏览器里，任何人按 &lt;code&gt;F12&lt;&#x2F;code&gt; 都能看到。如果把 Key 写在网页里，等于把钱包挂在门口。&lt;&#x2F;p&gt;
&lt;p&gt;所以正确的做法是：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;浏览器 ──提交工作记录──▶ 你的服务器 ──带着 Key 调用──▶ AI 接口&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;浏览器 ◀──返回周报────── 你的服务器 ◀──返回结果──────── AI 接口&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Key 只存在于服务器的环境变量里，浏览器自始至终看不到它。&lt;&#x2F;p&gt;
&lt;p&gt;另外，网络会断、接口会超时、余额会用完。好的程序要考虑失败的情况：AI 不可用时，自动用规则版生成，并告诉用户发生了什么。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-que-ren-key-huan-zai&quot;&gt;1. 确认 Key 还在&lt;&#x2F;h3&gt;
&lt;p&gt;第 6 课已经把 Key 永久设置在 &lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 里了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY.Length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; ${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;显示一个数字即可。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-xie-xu-qiu-jiao-gei-ai&quot;&gt;2. 写需求，交给 AI&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请给周报助手加上 AI 生成功能，保留现有的规则版。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;接口与配置（全部从环境变量读取，代码里不能出现任何 Key）：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- XAI_API_KEY：API Key。没有设置时只用规则版，并在返回结果里提示“没有设置 XAI_API_KEY，已使用规则版”。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- XAI_BASE_URL：默认 https:&#x2F;&#x2F;api.xsirouter.com。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- MODEL：默认 gpt-5.6-sol。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 调用 {XAI_BASE_URL}&#x2F;v1&#x2F;chat&#x2F;completions，请求头 Authorization: Bearer {XAI_API_KEY}，用 Node.js 自带的 fetch。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;生成要求（写在 system 提示词里）：把零散的工作记录整理成中文周报，用 Markdown，包含本周完成、进行中（写明进度）、问题与风险、下周计划四部分；语气客观，不夸大，记录里没有的事情不要编造；缺少日期或负责人时，在末尾列出需要确认的问题。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;可靠性：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 请求超时 60 秒。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 接口报错、超时或返回空内容时，退回规则版，并在返回结果里说明原因，例如“AI 暂时不可用（AI 接口返回 HTTP 401），已使用规则版”。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 输入超过 5000 字时返回 413 和中文提示。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 日志里不要打印工作记录的内容和 Key。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;页面：在结果上方显示这次是 AI 生成还是规则版，以及上面那句说明。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;另外创建 .gitignore，忽略 .env、node_modules 和日志文件。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;先告诉我你的计划，等我确认后再改。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;审查计划，确认后让它动手，完成后退出 Codex。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-qi-dong-bing-shi-yong&quot;&gt;3. 启动并试用&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;刷新 &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;localhost:3000&quot;&gt;http:&#x2F;&#x2F;localhost:3000&lt;&#x2F;a&gt;，贴上第 12 课的测试数据，点“生成周报”。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;等几秒到十几秒后，出现一份由 AI 写的周报：语句更完整，可能还会在末尾列出“需要确认的问题”。页面上标明这是 AI 生成的。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;照例要验收&lt;&#x2F;strong&gt;：AI 写的周报里，有没有测试数据里没有的内容？如果它编造了事实，在需求里把“不要编造”强调得更明确，让它改提示词。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gu-yi-nong-pi-ta&quot;&gt;故意弄坏它&lt;&#x2F;h2&gt;
&lt;p&gt;验证失败处理是否真的有效。先停止服务器，然后&lt;strong&gt;新开一个终端&lt;&#x2F;strong&gt;，在里面临时把 Key 设成错的：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cd ~&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;ai&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;course&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;&#x2F;&lt;&#x2F;span&gt;&lt;span&gt;weekly&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-wrong&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;npm start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;XAI_API_KEY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;sk-wrong&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; npm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; start&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;再生成一次。这次应该看到规则版的结果，以及“AI 暂时不可用（……401）”之类的说明。试完停止服务器，&lt;strong&gt;关掉这个终端&lt;&#x2F;strong&gt;，错误的 Key 就随它消失了，你永久设置的 Key 不受影响。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;que-ren-key-mei-you-xie-lu&quot;&gt;确认 Key 没有泄露&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --untracked -l&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;--untracked&lt;&#x2F;code&gt; 让它连还没存档的新文件一起搜（被 &lt;code&gt;.gitignore&lt;&#x2F;code&gt; 忽略的 &lt;code&gt;.env&lt;&#x2F;code&gt; 不在其中，本来也不会被存档）；&lt;code&gt;-l&lt;&#x2F;code&gt; 只列出文件名，不把内容打在屏幕上。没有输出最好；如果列出了文件，打开看看：只是 &lt;code&gt;sk-你的Key&lt;&#x2F;code&gt; 这类示例文字就没有关系；如果是真正的 Key，说明它被写进了文件，让 AI 改成从环境变量读取，并且&lt;strong&gt;去账户后台更换这个 Key&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;确认无误后存档：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;周报助手 AI 版&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;hua-fei-he-yin-si&quot;&gt;花费和隐私&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;每点一次“生成周报”就调用一次 API，按 Token 计费。想省钱可以换更便宜的模型：在&lt;a href=&quot;&#x2F;models&#x2F;&quot;&gt;模型页&lt;&#x2F;a&gt;挑一个，启动前用环境变量 &lt;code&gt;MODEL&lt;&#x2F;code&gt; 指定。&lt;&#x2F;li&gt;
&lt;li&gt;工作记录会发送给 AI 服务商处理。不要贴客户隐私、公司机密等不该外传的内容。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;一直显示规则版？&lt;&#x2F;strong&gt; 看页面上的说明：如果是“没有设置 XAI_API_KEY”，说明启动服务器的终端里没有这个变量，重开终端再启动；如果是 401，Key 不对；如果是超时，检查网络。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;等了很久才出结果？&lt;&#x2F;strong&gt; 大模型写长文本需要时间，十几秒是正常的。超过 60 秒会自动退回规则版。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;返回 404？&lt;&#x2F;strong&gt; 检查 &lt;code&gt;XAI_BASE_URL&lt;&#x2F;code&gt; 有没有多写 &lt;code&gt;&#x2F;v1&lt;&#x2F;code&gt;，正确的值是 &lt;code&gt;https:&#x2F;&#x2F;api.xsirouter.com&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能解释为什么 Key 不能写在网页里。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
周报助手能用 AI 生成周报。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
用错误的 Key 启动时，会自动退回规则版并说明原因。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;git grep --untracked -l &quot;sk-&quot;&lt;&#x2F;code&gt; 没有找到含真正 Key 的文件，AI 版已经存档。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>接入 API 与环境变量</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/api-key/"/>
        <id>https://xsirouter.com/learn/api-key/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/api-key/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;注册账号，拿到 API Key。&lt;&#x2F;li&gt;
&lt;li&gt;理解环境变量，会临时设置和永久设置。&lt;&#x2F;li&gt;
&lt;li&gt;写好 Codex 的配置文件，完成第一次对话。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;di-yi-bu-na-dao-api-key&quot;&gt;第一步：拿到 API Key&lt;&#x2F;h2&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;m.xsirouter.com&quot;&gt;m.xsirouter.com&lt;&#x2F;a&gt; 注册账号，按提示完成邮箱验证。&lt;&#x2F;li&gt;
&lt;li&gt;系统会把你的 &lt;strong&gt;API Key&lt;&#x2F;strong&gt; 发到注册邮箱，它是一串以 &lt;code&gt;sk-&lt;&#x2F;code&gt; 开头的长字符。&lt;&#x2F;li&gt;
&lt;li&gt;按账户页面的提示选择套餐或充值。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;记住第 2 课说的：&lt;strong&gt;Key 就是钱包&lt;&#x2F;strong&gt;。先把它存在一个只有你能看到的地方，比如密码管理器。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-huan-jing-bian-liang&quot;&gt;先懂概念：环境变量&lt;&#x2F;h2&gt;
&lt;p&gt;Codex 需要知道你的 Key。最直接的办法是把 Key 写进配置文件，但这样很危险：配置文件可能被你分享出去，或者被 AI 读到后写进别的地方。&lt;&#x2F;p&gt;
&lt;p&gt;程序员的做法是把 Key 放进&lt;strong&gt;环境变量&lt;&#x2F;strong&gt;。环境变量是电脑里贴着的“便利贴”，每张有一个名字和一个值，比如：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;名字：XAI_API_KEY&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;值：  sk-xxxxxxxx&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;程序启动时会去看这些便利贴。配置文件里只写“去看名叫 &lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 的那张”，Key 本身不写进项目和配置文件。（永久设置时，系统会把它保存在你的用户设置里，下文会提到。）第 4 课的 PATH 其实也是一个环境变量。&lt;&#x2F;p&gt;
&lt;p&gt;环境变量有两种设法：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;方式&lt;&#x2F;th&gt;&lt;th&gt;效果&lt;&#x2F;th&gt;&lt;th&gt;适合&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;临时设置&lt;&#x2F;td&gt;&lt;td&gt;只在当前这个终端窗口有效，关掉就没了&lt;&#x2F;td&gt;&lt;td&gt;试一试&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;永久设置&lt;&#x2F;td&gt;&lt;td&gt;以后打开的每个终端都有效&lt;&#x2F;td&gt;&lt;td&gt;日常使用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;di-er-bu-lin-shi-she-zhi-shi-yi-shi&quot;&gt;第二步：临时设置，试一试&lt;&#x2F;h2&gt;
&lt;p&gt;把下面的 &lt;code&gt;sk-你的Key&lt;&#x2F;code&gt; 换成你自己的 Key。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; =&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;export&lt;&#x2F;span&gt;&lt;span&gt; XAI_API_KEY&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;=&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;（第一行是 Windows PowerShell，第二行是 macOS，下同。）&lt;&#x2F;p&gt;
&lt;p&gt;检查有没有设上。下面的命令只显示 Key 的&lt;strong&gt;长度&lt;&#x2F;strong&gt;，不会把 Key 本身打在屏幕上，截图或共享屏幕时也安全：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;$&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;env:&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY.Length&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span&gt; ${&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;#&lt;&#x2F;span&gt;&lt;span&gt;XAI_API_KEY}&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;显示一个数字（比如 51）就说明设好了；显示 0 或什么都没有，说明没设上。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-san-bu-yong-jiu-she-zhi&quot;&gt;第三步：永久设置&lt;&#x2F;h2&gt;
&lt;p&gt;确认临时设置能用以后，再永久保存。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;setx XAI_API_KEY &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;sk-你的Key&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到“成功: 指定的值已得到保存”即可。&lt;code&gt;setx&lt;&#x2F;code&gt; 只对&lt;strong&gt;之后新开的&lt;&#x2F;strong&gt;终端生效，所以接着关掉终端，重新打开一个。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;macOS&lt;&#x2F;strong&gt;（终端默认使用的 Shell 叫 zsh，它每次启动时会读家目录里的 &lt;code&gt;.zshrc&lt;&#x2F;code&gt; 文件）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;export XAI_API_KEY=&amp;quot;sk-你的Key&amp;quot;&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.zshrc&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;然后关掉终端，重新打开一个。&lt;&#x2F;p&gt;
&lt;p&gt;用第二步的命令再检查一次长度。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;永久设置会把 Key 以明文存在你的电脑上：Windows 存在用户设置里，macOS 存在 &lt;code&gt;~&#x2F;.zshrc&lt;&#x2F;code&gt; 里。个人电脑这样做没问题，公用电脑不要这样做。另外，你输入过的命令会留在终端历史里，同样只适合个人电脑。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;di-si-bu-xie-codex-de-pei-zhi-wen-jian&quot;&gt;第四步：写 Codex 的配置文件&lt;&#x2F;h2&gt;
&lt;p&gt;Codex 的配置文件在家目录下的 &lt;code&gt;.codex&#x2F;config.toml&lt;&#x2F;code&gt;。名字以点开头的文件夹默认是隐藏的，不用管它，下面一段命令会帮你创建好。&lt;&#x2F;p&gt;
&lt;p&gt;如果你以前用过 Codex 并且有自己的配置，先把原来的 &lt;code&gt;config.toml&lt;&#x2F;code&gt; 复制一份备份，因为下面的命令会覆盖它。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Windows&lt;&#x2F;strong&gt;：把下面整段一次性复制粘贴到 PowerShell，回车。如果弹出“多行粘贴”的提示，选择“仍然粘贴”。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;New-Item&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;ItemType Directory &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;Force &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.codex&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; Out-Null&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;@&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;model_provider = &amp;quot;xai&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;model = &amp;quot;gpt-5.6-sol&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;approval_policy = &amp;quot;on-request&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;sandbox_mode = &amp;quot;workspace-write&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;[model_providers.xai]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;name = &amp;quot;xai&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;base_url = &amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;wire_api = &amp;quot;responses&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;requires_openai_auth = false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;env_key = &amp;quot;XAI_API_KEY&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;supports_websockets = false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;@&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; |&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; Set-Content&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; -&lt;&#x2F;span&gt;&lt;span&gt;Encoding ascii &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.codex\config.toml&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;macOS&lt;&#x2F;strong&gt;：同样整段复制粘贴到终端，回车。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;mkdir&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.codex&#x2F;config.toml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;model_provider = &amp;quot;xai&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;model = &amp;quot;gpt-5.6-sol&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;approval_policy = &amp;quot;on-request&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;sandbox_mode = &amp;quot;workspace-write&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;[model_providers.xai]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;name = &amp;quot;xai&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;base_url = &amp;quot;https:&#x2F;&#x2F;api.xsirouter.com&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;wire_api = &amp;quot;responses&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;requires_openai_auth = false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;env_key = &amp;quot;XAI_API_KEY&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;supports_websockets = false&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;用 &lt;code&gt;cat&lt;&#x2F;code&gt; 看一眼文件内容，确认写进去了：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;cat &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\.codex\config.toml&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;.codex&#x2F;config.toml&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这份配置里最重要的几行：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;&#x2F;th&gt;&lt;th&gt;意思&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;base_url&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;API 的地址，也就是第 2 课说的“窗口地址”&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;env_key = &quot;XAI_API_KEY&quot;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;去名叫 &lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 的环境变量里取 Key&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;model&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;默认使用的模型&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;approval_policy = &quot;on-request&quot;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;需要更大权限时先问你&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;sandbox_mode = &quot;workspace-write&quot;&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;只能改当前文件夹里的文件&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;最后两行是这门课推荐的安全设置，第 7 课会详细讲。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-wu-bu-di-yi-ci-dui-hua&quot;&gt;第五步：第一次对话&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;第一次在某个文件夹里启动时，Codex 会问你是否信任这个文件夹（Trust this folder?）。&lt;code&gt;ai-course&lt;&#x2F;code&gt; 是你自己建的，用方向键选 &lt;strong&gt;Trust and continue&lt;&#x2F;strong&gt;，回车。&lt;&#x2F;p&gt;
&lt;p&gt;Windows 上第一次使用时，Codex 还可能请你设置“沙箱”（Set up the Codex agent sandbox）。沙箱是把 AI 的操作圈在一个范围里的保护措施。选 &lt;strong&gt;Set up default sandbox&lt;&#x2F;strong&gt;，Windows 会弹窗请求管理员权限，点“是”。如果你的账号没有管理员权限，选 &lt;strong&gt;Use non-admin sandbox&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;然后在底部的输入框里输入：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;你好，请用一句话介绍你自己。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;几秒钟后，Codex 用中文回复你。输入 &lt;code&gt;&#x2F;status&lt;&#x2F;code&gt; 回车，可以看到当前使用的模型和配置。&lt;&#x2F;p&gt;
&lt;p&gt;输入 &lt;code&gt;&#x2F;quit&lt;&#x2F;code&gt; 回车，退出 Codex。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;报错提到 &lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 没有设置？&lt;&#x2F;strong&gt; 说明 Codex 启动时没看到这个环境变量。用第二步的命令检查长度。如果是刚用 &lt;code&gt;setx&lt;&#x2F;code&gt; 或改了 &lt;code&gt;.zshrc&lt;&#x2F;code&gt;，记得重开终端。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;报 401 或 Unauthorized？&lt;&#x2F;strong&gt; Key 不对：多复制了空格、少复制了字符，或者 Key 已经失效。重新复制一遍，注意引号要成对。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;报 429 或余额不足？&lt;&#x2F;strong&gt; 账户额度用完了，或者请求太频繁，回账户页面看一看。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;还是让我登录 ChatGPT？&lt;&#x2F;strong&gt; 说明配置文件没有生效，用上面的 &lt;code&gt;cat&lt;&#x2F;code&gt; 命令确认文件内容和位置是否正确。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Key 不小心泄露了，或者要换 Key？&lt;&#x2F;strong&gt; 立刻在账户后台更换 Key，然后把新 Key 设置好：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Windows：重新运行第三步的 &lt;code&gt;setx XAI_API_KEY &quot;sk-新Key&quot;&lt;&#x2F;code&gt;，再重开终端。&lt;&#x2F;li&gt;
&lt;li&gt;macOS：&lt;strong&gt;不要再追加一行&lt;&#x2F;strong&gt;，而是用 &lt;code&gt;open -e ~&#x2F;.zshrc&lt;&#x2F;code&gt; 打开这个文件，找到原来那行 &lt;code&gt;export XAI_API_KEY=...&lt;&#x2F;code&gt;，把 Key 改成新的，保存后重开终端。如果在后面再追加一行，选修课里引用这个变量的设置会继续拿到旧 Key。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能用自己的话解释环境变量是什么、为什么要用它放 Key。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我会检查 &lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 的长度，而不是把它打印出来。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
新开一个终端，&lt;code&gt;XAI_API_KEY&lt;&#x2F;code&gt; 依然存在。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
Codex 能回复我的第一句话。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>买一台云主机</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/cloud-server/"/>
        <id>https://xsirouter.com/learn/cloud-server/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/cloud-server/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;知道云主机是什么，为什么学习阶段推荐香港地域。&lt;&#x2F;li&gt;
&lt;li&gt;买好一台 Ubuntu 云主机，配好防火墙。&lt;&#x2F;li&gt;
&lt;li&gt;记下公网 IP、用户名和密码，知道怎么控制费用。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-zu-yi-tai-yuan-fang-de-dian-nao&quot;&gt;先懂概念：租一台远方的电脑&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;云主机&lt;&#x2F;strong&gt;就是云服务商机房里的一台电脑（准确说是虚拟出来的一份），你按月付租金。它有几个特点：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;24 小时开机，不怕你关电脑；&lt;&#x2F;li&gt;
&lt;li&gt;有一个&lt;strong&gt;公网 IP&lt;&#x2F;strong&gt;，全世界都能访问到它；&lt;&#x2F;li&gt;
&lt;li&gt;没有屏幕和鼠标，你通过网络用终端远程操作它（下一课的 SSH）。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;本课以阿里云、腾讯云的&lt;strong&gt;轻量应用服务器&lt;&#x2F;strong&gt;为例：控制台是中文的，能用支付宝付款，配置简单，适合个人。两家的流程大同小异，下文按通用步骤来写，界面上的名称可能略有不同。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wei-shen-me-xuan-xiang-gang-di-yu&quot;&gt;为什么选香港地域&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;中国内地地域&lt;&#x2F;th&gt;&lt;th&gt;中国香港地域&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;用域名开放网站&lt;&#x2F;td&gt;&lt;td&gt;必须先做 ICP 备案，通常要几周&lt;&#x2F;td&gt;&lt;td&gt;不需要备案&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;下载 Docker 镜像、GitHub 代码&lt;&#x2F;td&gt;&lt;td&gt;经常很慢或失败&lt;&#x2F;td&gt;&lt;td&gt;顺畅&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;国内访问速度&lt;&#x2F;td&gt;&lt;td&gt;快&lt;&#x2F;td&gt;&lt;td&gt;稍慢，个人工具够用&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;学习阶段选&lt;strong&gt;香港&lt;&#x2F;strong&gt;最省事。将来如果要面向国内大量用户提供服务，再按规定办理备案，迁到内地机房。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-zhu-ce-bing-shi-ming-ren-zheng&quot;&gt;1. 注册并实名认证&lt;&#x2F;h3&gt;
&lt;p&gt;在阿里云或腾讯云注册账号，按提示完成个人实名认证。购买云产品前必须实名。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-gou-mai-qing-liang-ying-yong-fu-wu-qi&quot;&gt;2. 购买轻量应用服务器&lt;&#x2F;h3&gt;
&lt;p&gt;在控制台找到“轻量应用服务器”，点“购买”或“新建”，按下面的建议选择：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;选项&lt;&#x2F;th&gt;&lt;th&gt;建议&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;地域&lt;&#x2F;td&gt;&lt;td&gt;中国香港&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;镜像&lt;&#x2F;td&gt;&lt;td&gt;选“系统镜像”里的 &lt;strong&gt;Ubuntu 24.04 LTS&lt;&#x2F;strong&gt;，不要选预装了各种应用的“应用镜像”&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;套餐&lt;&#x2F;td&gt;&lt;td&gt;2 核 CPU、2 GB 内存或以上（构建 Docker 镜像需要一点内存）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;时长&lt;&#x2F;td&gt;&lt;td&gt;先买 1 个月，确认要长期用再续费&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;登录方式&lt;&#x2F;td&gt;&lt;td&gt;设置一个足够长的密码，下一课会换成更安全的密钥登录&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;付款后等一两分钟，服务器状态变为“运行中”。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-ji-xia-deng-lu-xin-xi&quot;&gt;3. 记下登录信息&lt;&#x2F;h3&gt;
&lt;p&gt;在服务器详情页找到并记下：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;公网 IP&lt;&#x2F;strong&gt;：一串类似 &lt;code&gt;203.0.113.10&lt;&#x2F;code&gt; 的数字。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;用户名&lt;&#x2F;strong&gt;：以控制台显示为准。Ubuntu 镜像在腾讯云上一般是 &lt;code&gt;ubuntu&lt;&#x2F;code&gt;，在阿里云上一般是 &lt;code&gt;root&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;密码&lt;&#x2F;strong&gt;：刚才设置的密码。忘了可以在控制台“重置密码”。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;后面的课程用 &lt;code&gt;ubuntu&lt;&#x2F;code&gt; 和 &lt;code&gt;你的服务器IP&lt;&#x2F;code&gt; 指代它们，遇到时换成你自己的。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-pei-zhi-fang-huo-qiang&quot;&gt;4. 配置防火墙&lt;&#x2F;h3&gt;
&lt;p&gt;云服务商在服务器外面还有一道防火墙（轻量应用服务器里叫“防火墙”，其他产品里叫“安全组”），决定哪些端口可以从外网访问。&lt;&#x2F;p&gt;
&lt;p&gt;找到服务器的防火墙设置，确认规则里&lt;strong&gt;只保留 TCP 22 端口&lt;&#x2F;strong&gt;（SSH 登录用）。默认模板里如果还开放了 80、443、3389 等其他端口，先删掉，用到时再加。第 24 课会开放 80 和 443。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;只开放需要的端口，是服务器安全最基本的一条。互联网上有大量程序不停地扫描所有 IP，寻找开着的端口和弱密码。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;kong-zhi-fei-yong&quot;&gt;控制费用&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;购买时留意&lt;strong&gt;续费价格&lt;&#x2F;strong&gt;，有的套餐首月优惠，之后价格不同。&lt;&#x2F;li&gt;
&lt;li&gt;关闭&lt;strong&gt;自动续费&lt;&#x2F;strong&gt;，到期前会收到提醒，到时候再决定。&lt;&#x2F;li&gt;
&lt;li&gt;云主机&lt;strong&gt;关机不等于停止计费&lt;&#x2F;strong&gt;，按月购买的套餐到期前一直计费。不用了要“释放”或“退还”，第 26 课有完整的收尾清单。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;控制台里有一台运行中的 Ubuntu 24.04 服务器，你记下了它的公网 IP、用户名和密码，防火墙只开放了 22 端口。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;找不到 Ubuntu 24.04？&lt;&#x2F;strong&gt; 选列表里最新的 Ubuntu LTS 版本即可（LTS 表示长期支持）。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;可以选 Windows Server 吗？&lt;&#x2F;strong&gt; 不建议。后面的课程都基于 Linux，绝大多数服务器也都用 Linux。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;必须用阿里云或腾讯云吗？&lt;&#x2F;strong&gt; 不是。任何能提供 Ubuntu 云主机和公网 IP 的服务商都可以，步骤大同小异。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能解释为什么学习阶段选香港地域。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我有一台运行中的 Ubuntu 云主机。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我记下了公网 IP、用户名和密码，并且没有截图发给别人。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
防火墙只开放了 TCP 22。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我关闭了自动续费，知道关机不等于停止计费。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Cloudflare Tunnel：不开端口也能上线</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/cloudflare-tunnel/"/>
        <id>https://xsirouter.com/learn/cloudflare-tunnel/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/cloudflare-tunnel/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;理解 Cloudflare Tunnel 和第 24 课做法的区别。&lt;&#x2F;li&gt;
&lt;li&gt;创建一条隧道，用 Docker 运行 &lt;code&gt;cloudflared&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;把访问切换到隧道，关闭 80&#x2F;443 端口。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-cong-kai-men-ying-ke-dao-zhu-dong-da-dian-hua&quot;&gt;先懂概念：从“开门迎客”到“主动打电话”&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;第 24 课：Caddy + 源站证书&lt;&#x2F;th&gt;&lt;th&gt;Cloudflare Tunnel&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;连接方向&lt;&#x2F;td&gt;&lt;td&gt;Cloudflare 连到你服务器的 443 端口&lt;&#x2F;td&gt;&lt;td&gt;你的服务器主动连到 Cloudflare&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;防火墙&lt;&#x2F;td&gt;&lt;td&gt;要开放 80、443&lt;&#x2F;td&gt;&lt;td&gt;只开 22，甚至可以都不开&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;证书&lt;&#x2F;td&gt;&lt;td&gt;自己申请、放到服务器上&lt;&#x2F;td&gt;&lt;td&gt;不需要&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;依赖&lt;&#x2F;td&gt;&lt;td&gt;只依赖标准的 HTTPS&lt;&#x2F;td&gt;&lt;td&gt;依赖 Cloudflare 的隧道服务&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;隧道就像服务器主动给 Cloudflare 打了一个电话并一直不挂：访问者的请求通过这通电话送到服务器，而服务器本身不接任何来电。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-chuang-jian-sui-dao&quot;&gt;1. 创建隧道&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;登录 Cloudflare，进入 &lt;strong&gt;Zero Trust&lt;&#x2F;strong&gt; 控制台（第一次进入需要选择免费套餐，可能要求绑定付款方式但不会扣费）。&lt;&#x2F;li&gt;
&lt;li&gt;打开 &lt;strong&gt;Networks&lt;&#x2F;strong&gt; → &lt;strong&gt;Tunnels&lt;&#x2F;strong&gt;，点 &lt;strong&gt;Create a tunnel&lt;&#x2F;strong&gt;，类型选 &lt;strong&gt;Cloudflared&lt;&#x2F;strong&gt;，名字填 &lt;code&gt;ai-server&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;安装方式选 &lt;strong&gt;Docker&lt;&#x2F;strong&gt;。页面会给出一条 &lt;code&gt;docker run ... --token eyJ...&lt;&#x2F;code&gt; 命令，&lt;strong&gt;只复制 &lt;code&gt;--token&lt;&#x2F;code&gt; 后面那一长串令牌&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Cloudflare 的界面会调整，菜单名称可能略有不同。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-pei-zhi-gong-kai-di-zhi&quot;&gt;2. 配置公开地址&lt;&#x2F;h3&gt;
&lt;p&gt;在隧道的 &lt;strong&gt;Public Hostname&lt;&#x2F;strong&gt;（公开主机名）里添加一条：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Subdomain&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;report&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Domain&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;example.com&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Service Type&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;HTTP&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;URL&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;app:3000&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;如果提示 &lt;code&gt;report&lt;&#x2F;code&gt; 已经有一条 DNS 记录，先到 DNS 页面删除第 23 课添加的那条 A 记录，再回来保存。隧道会自动创建新的记录。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-zai-fu-wu-qi-shang-yun-xing-cloudflared&quot;&gt;3. 在服务器上运行 cloudflared&lt;&#x2F;h3&gt;
&lt;p&gt;令牌和 Key 一样敏感，单独放在一个文件里：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;apps&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;vim&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; tunnel.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;写入一行（换成你的令牌），保存：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;TUNNEL_TOKEN=eyJ你的令牌&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;chmod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; 600&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; tunnel.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;用下面的内容替换 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt;（版本号和你当前用的保持一致）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose.yaml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;  app:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    image: 你的用户名&#x2F;weekly-report:v4&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    env_file: .env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    restart: unless-stopped&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      - &amp;quot;127.0.0.1:3000:3000&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;  tunnel:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    image: cloudflare&#x2F;cloudflared:latest&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    command: tunnel --no-autoupdate run&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    env_file: tunnel.env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    restart: unless-stopped&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose up&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -d --remove-orphans&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose ps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose logs tunnel&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;--remove-orphans&lt;&#x2F;code&gt; 会停掉不再写在配置里的 Caddy。日志里出现 &lt;code&gt;Registered tunnel connection&lt;&#x2F;code&gt; 就说明隧道连上了，Cloudflare 控制台里隧道的状态也会变成 &lt;strong&gt;Healthy&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-guan-bi-80-443&quot;&gt;4. 关闭 80&#x2F;443&lt;&#x2F;h3&gt;
&lt;p&gt;访问 &lt;code&gt;https:&#x2F;&#x2F;report.example.com&lt;&#x2F;code&gt;，确认能正常打开并要求登录。然后到云服务商的防火墙里&lt;strong&gt;删除 TCP 80 和 443 的规则&lt;&#x2F;strong&gt;，只保留 22。&lt;&#x2F;p&gt;
&lt;p&gt;再访问一次，依然正常，因为流量走的是隧道。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;网站照常可用，有锁形图标，需要登录。&lt;&#x2F;li&gt;
&lt;li&gt;防火墙只开放 22 端口。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;code&gt;sudo ss -tlnp&lt;&#x2F;code&gt; 里没有程序在监听 80、443。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;访问显示 502 Bad Gateway？&lt;&#x2F;strong&gt; 隧道连上了，但找不到周报助手。检查 Public Hostname 的 URL 是否为 &lt;code&gt;app:3000&lt;&#x2F;code&gt;，&lt;code&gt;app&lt;&#x2F;code&gt; 服务是否在运行。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;隧道状态是 Down？&lt;&#x2F;strong&gt; 看 &lt;code&gt;docker compose logs tunnel&lt;&#x2F;code&gt;，多半是令牌复制不完整，或者 &lt;code&gt;tunnel.env&lt;&#x2F;code&gt; 里等号两边多了空格。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;想换回 Caddy 的方式？&lt;&#x2F;strong&gt; 按这个顺序：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;按第 24 课的内容重写 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt;，&lt;code&gt;app&lt;&#x2F;code&gt; 的镜像版本保持你现在用的版本，不要退回 v2。&lt;&#x2F;li&gt;
&lt;li&gt;运行 &lt;code&gt;docker compose up -d --remove-orphans&lt;&#x2F;code&gt;，停掉 &lt;code&gt;tunnel&lt;&#x2F;code&gt;、启动 &lt;code&gt;caddy&lt;&#x2F;code&gt;，用 &lt;code&gt;docker compose ps&lt;&#x2F;code&gt; 确认。&lt;&#x2F;li&gt;
&lt;li&gt;在防火墙里重新开放 TCP 80 和 443。&lt;&#x2F;li&gt;
&lt;li&gt;在 Cloudflare 里删除隧道的 Public Hostname 和它创建的 DNS 记录，再按第 23 课添加 A 记录（橙色云朵）。&lt;&#x2F;li&gt;
&lt;li&gt;访问网站确认正常。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能说出隧道和开放端口两种方式的区别。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
隧道状态是 Healthy，网站通过隧道访问。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
防火墙已经关闭 80 和 443。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>容器化：把周报助手装进镜像</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/containerize/"/>
        <id>https://xsirouter.com/learn/containerize/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/containerize/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;让 AI 写 Dockerfile 和 .dockerignore，并看懂它们。&lt;&#x2F;li&gt;
&lt;li&gt;用 &lt;code&gt;scp&lt;&#x2F;code&gt; 把项目传到服务器。&lt;&#x2F;li&gt;
&lt;li&gt;在服务器上构建镜像、运行容器。&lt;&#x2F;li&gt;
&lt;li&gt;用 SSH 隧道在自己电脑上访问服务器里的服务。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;di-yi-bu-xie-dockerfile-zai-zi-ji-dian-nao-shang&quot;&gt;第一步：写 Dockerfile（在自己电脑上）&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;codex&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;请为这个项目写 Dockerfile 和 .dockerignore，要求：&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 基础镜像用 node:24-alpine。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 只复制运行需要的文件：package.json、server.js、public 文件夹。项目没有第三方依赖，不需要 npm install。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 设置 NODE_ENV=production、HOST=0.0.0.0 和 PORT=3000，声明 3000 端口。容器里必须监听所有网卡，端口映射才能把请求送进来。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 用镜像自带的普通用户 node 运行，不要用 root。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 启动命令为 node server.js。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- .dockerignore 排除 .git、.env、node_modules 和日志文件，确保 Key 不会被打包进镜像。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;- 每一段加一行中文注释说明作用。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;另外检查一下 server.js：收到 SIGTERM 信号时要能正常退出，这样 docker stop 时不用等待 10 秒。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;先说计划，确认后再写。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;写好的 Dockerfile 大致是这样（逐行说明见注释）：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;docker&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# 基础镜像：官方 Node.js 24，alpine 版体积小。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;FROM&lt;&#x2F;span&gt;&lt;span&gt; node:24-alpine&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;WORKDIR&lt;&#x2F;span&gt;&lt;span&gt; &#x2F;app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# 只复制运行需要的文件；密钥通过环境变量传入，不进镜像。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; package.json server.js .&#x2F;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;COPY&lt;&#x2F;span&gt;&lt;span&gt; public .&#x2F;public&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# 容器里要监听所有网卡，端口映射才能把请求送进来。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;ENV&lt;&#x2F;span&gt;&lt;span&gt; NODE_ENV=production HOST=0.0.0.0 PORT=3000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;EXPOSE&lt;&#x2F;span&gt;&lt;span&gt; 3000&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #6A737D;&quot;&gt;# 用普通用户运行，不用 root。&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;USER&lt;&#x2F;span&gt;&lt;span&gt; node&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;CMD&lt;&#x2F;span&gt;&lt;span&gt; [&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;node&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;, &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;server.js&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt;]&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;指令&lt;&#x2F;th&gt;&lt;th&gt;意思&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;FROM&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从哪个基础镜像开始，这里是装好了 Node.js 24 的精简 Linux&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;WORKDIR&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;镜像里的工作目录&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;COPY&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;把文件复制进镜像&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ENV&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;设置环境变量的默认值；&lt;code&gt;HOST=0.0.0.0&lt;&#x2F;code&gt; 让程序在容器里监听所有网卡&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;EXPOSE&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;说明程序使用的端口&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;USER&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;以哪个用户运行&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;CMD&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;容器启动时执行的命令&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;确认没问题后存档：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; add&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -A&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;git&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; commit&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -m&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;添加 Dockerfile&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;di-er-bu-ba-xiang-mu-chuan-dao-fu-wu-qi&quot;&gt;第二步：把项目传到服务器&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;scp&lt;&#x2F;code&gt; 是基于 SSH 的复制命令，用法和 &lt;code&gt;cp&lt;&#x2F;code&gt; 类似，只是可以跨机器。在&lt;strong&gt;自己电脑&lt;&#x2F;strong&gt;上运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;powershell&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;scp &lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;r &lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;quot;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;$HOME&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;\ai-course\weekly-report&amp;quot;&lt;&#x2F;span&gt;&lt;span&gt; ai&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt;-&lt;&#x2F;span&gt;&lt;span&gt;server:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;scp&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -r&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;ai-course&#x2F;weekly-report ai-server:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;ai-server:&lt;&#x2F;code&gt; 后面什么都不写，表示复制到服务器的家目录。完成后，服务器上会有 &lt;code&gt;~&#x2F;weekly-report&lt;&#x2F;code&gt; 文件夹。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;服务器上有两个文件夹，别搞混：&lt;code&gt;~&#x2F;weekly-report&lt;&#x2F;code&gt; 放源代码，用来构建镜像；&lt;code&gt;~&#x2F;apps&#x2F;weekly-report&lt;&#x2F;code&gt; 放部署配置（&lt;code&gt;.env&lt;&#x2F;code&gt; 等），用来运行。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h2 id=&quot;di-san-bu-zai-fu-wu-qi-shang-gou-jian-jing-xiang&quot;&gt;第三步：在服务器上构建镜像&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ai-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到服务器的提示符后，再运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; build&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -t&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; weekly-report:v1 .&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-t weekly-report:v1&lt;&#x2F;code&gt;：给镜像起名叫 &lt;code&gt;weekly-report&lt;&#x2F;code&gt;，版本标签是 &lt;code&gt;v1&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;最后的 &lt;code&gt;.&lt;&#x2F;code&gt; 表示用当前文件夹里的 Dockerfile 和文件。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;第一次构建要下载 Node.js 基础镜像，稍等片刻。完成后查看：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; images&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;列表里有 &lt;code&gt;weekly-report&lt;&#x2F;code&gt;，标签 &lt;code&gt;v1&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-si-bu-yun-xing-rong-qi&quot;&gt;第四步：运行容器&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --rm --name&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; weekly-report-test&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --env-file&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;apps&#x2F;weekly-report&#x2F;.env&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -p&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 127.0.0.1:3000:3000 weekly-report:v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;参数&lt;&#x2F;th&gt;&lt;th&gt;意思&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--rm&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;停止后自动删除容器&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--name&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;给容器起个名字&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;--env-file&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从第 17 课写好的 &lt;code&gt;.env&lt;&#x2F;code&gt; 读取环境变量，Key 就是这样传进去的&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;-p 127.0.0.1:3000:3000&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;把容器的 3000 端口映射到服务器的 3000 端口，并且只允许服务器自己访问&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;看到“周报助手已启动”之类的输出就成功了。这个终端会被占用，先别关。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;di-wu-bu-tong-guo-ssh-sui-dao-fang-wen&quot;&gt;第五步：通过 SSH 隧道访问&lt;&#x2F;h2&gt;
&lt;p&gt;服务器的 3000 端口只对服务器自己开放，外网访问不了，这正是我们想要的。那怎么在自己电脑上打开它？用 &lt;strong&gt;SSH 隧道&lt;&#x2F;strong&gt;：把自己电脑的 3000 端口，经过加密的 SSH 连接，接到服务器的 3000 端口。&lt;&#x2F;p&gt;
&lt;p&gt;在自己电脑上&lt;strong&gt;新开一个终端&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -L&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 3000:127.0.0.1:3000 ai-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;它会像平常一样登录服务器，同时打通隧道。保持这个窗口开着，在浏览器访问 &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;localhost:3000&quot;&gt;http:&#x2F;&#x2F;localhost:3000&lt;&#x2F;a&gt;，看到的就是服务器上运行的周报助手。贴上测试数据，生成一份周报试试。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;浏览器里的周报助手和本地运行时一样，能用 AI 生成周报。&lt;&#x2F;p&gt;
&lt;p&gt;试完后：&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;在运行容器的终端按 &lt;code&gt;Ctrl + C&lt;&#x2F;code&gt;，容器停止并被自动删除；&lt;&#x2F;li&gt;
&lt;li&gt;在隧道终端输入 &lt;code&gt;exit&lt;&#x2F;code&gt; 关闭隧道。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h2 id=&quot;que-ren-key-bu-zai-jing-xiang-li&quot;&gt;确认 Key 不在镜像里&lt;&#x2F;h2&gt;
&lt;p&gt;镜像里的 Key 可能藏在三个地方：构建时执行过的指令、预设的环境变量、复制进去的文件。逐一检查：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; history&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --no-trunc&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; weekly-report:v1&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; history-check.txt&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-&amp;quot; history-check.txt&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; history-check.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;docker history&lt;&#x2F;code&gt; 列出构建这个镜像时执行过的每一条指令（包括 &lt;code&gt;ENV&lt;&#x2F;code&gt; 写进去的值），这里只数有几行带 &lt;code&gt;sk-&lt;&#x2F;code&gt;。应该输出 &lt;code&gt;0&lt;&#x2F;code&gt;；如果没有输出数字而是报错，这次检查不算数。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; weekly-report:v1 sh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;#39;env; grep -r &amp;quot;&amp;quot; &#x2F;app&amp;#39;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; image-check.txt&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; grep&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -c&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; &amp;quot;sk-&amp;quot; image-check.txt&lt;&#x2F;span&gt;&lt;span&gt;;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt; rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; image-check.txt&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这条命令在临时容器里列出全部环境变量和 &lt;code&gt;&#x2F;app&lt;&#x2F;code&gt; 下所有文件的内容，存进一个临时文件，只数带 &lt;code&gt;sk-&lt;&#x2F;code&gt; 的行数，最后删掉临时文件。应该输出 &lt;code&gt;0&lt;&#x2F;code&gt;；如果没有输出数字而是报错，说明容器没跑起来，这次检查不算数，先解决报错。&lt;&#x2F;p&gt;
&lt;p&gt;两项都是 &lt;code&gt;0&lt;&#x2F;code&gt;，再加上 Dockerfile 里没有写 Key、只复制了三样文件，也没有“先放进文件再删掉”的步骤，&lt;code&gt;.dockerignore&lt;&#x2F;code&gt; 又把 &lt;code&gt;.env&lt;&#x2F;code&gt; 排除在构建之外，就可以确认 Key 没有被打包进镜像。它只在运行时从 &lt;code&gt;.env&lt;&#x2F;code&gt; 传入。以后如果 Dockerfile 变复杂了，这两条检查就不一定够，要让 AI 帮你重新评估。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;本地访问 localhost:3000 看到的是旧的本地版本？&lt;&#x2F;strong&gt; 你电脑上的 &lt;code&gt;npm start&lt;&#x2F;code&gt; 还开着，占用了 3000 端口。先停掉它，再建立隧道。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;AI 一直退回规则版，提示 401？&lt;&#x2F;strong&gt; 检查 &lt;code&gt;.env&lt;&#x2F;code&gt;：等号两边有没有空格，Key 有没有加引号。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;docker build&lt;&#x2F;code&gt; 报 &lt;code&gt;COPY failed&lt;&#x2F;code&gt;？&lt;&#x2F;strong&gt; 文件名和 Dockerfile 里写的不一致，或者在错误的文件夹里运行了 &lt;code&gt;docker build&lt;&#x2F;code&gt;。确认当前在 &lt;code&gt;~&#x2F;weekly-report&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;bind: address already in use&lt;&#x2F;code&gt;？&lt;&#x2F;strong&gt; 服务器上的 3000 端口已经被占用，可能是之前的容器还在运行，用 &lt;code&gt;docker ps&lt;&#x2F;code&gt; 查看并 &lt;code&gt;docker stop&lt;&#x2F;code&gt; 它。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能说出 Dockerfile 里每条指令的作用。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我用 &lt;code&gt;scp&lt;&#x2F;code&gt; 把项目传到了服务器。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;docker images&lt;&#x2F;code&gt; 里有 &lt;code&gt;weekly-report:v1&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我通过 SSH 隧道在浏览器里用上了服务器上的周报助手。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
镜像里没有 Key。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>正式部署：让它一直运行</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/deploy/"/>
        <id>https://xsirouter.com/learn/deploy/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/deploy/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;理解 Docker Compose 的作用，写好 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;用 Compose 在后台运行周报助手，学会查看状态和日志。&lt;&#x2F;li&gt;
&lt;li&gt;验证服务器重启后服务会自动恢复。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-ba-ming-ling-xie-cheng-pei-zhi&quot;&gt;先懂概念：把命令写成配置&lt;&#x2F;h2&gt;
&lt;p&gt;第 19 课的 &lt;code&gt;docker run&lt;&#x2F;code&gt; 命令又长又容易打错，而且每次都要重新输入。&lt;strong&gt;Docker Compose&lt;&#x2F;strong&gt; 把这些参数写进一个 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt; 文件，以后只需要：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose up&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;文件就是部署的“说明书”：用哪个镜像、读哪个 &lt;code&gt;.env&lt;&#x2F;code&gt;、映射哪个端口、挂了要不要自动重启，一目了然。以后再加 HTTPS 等服务，也只是在这个文件里多写一段。&lt;&#x2F;p&gt;
&lt;p&gt;YAML 格式靠&lt;strong&gt;缩进&lt;&#x2F;strong&gt;表示层级，必须用空格，不能用 Tab 键，同一层级的缩进要对齐。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;p&gt;以下命令都在服务器上运行。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-xie-compose-yaml&quot;&gt;1. 写 compose.yaml&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;apps&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;cat&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;gt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose.yaml&lt;&#x2F;span&gt;&lt;span style=&quot;color: #F97583;&quot;&gt; &amp;lt;&amp;lt;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;&amp;#39;EOF&amp;#39;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;services:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;  app:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    image: 你的用户名&#x2F;weekly-report:v1&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    env_file: .env&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    restart: unless-stopped&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;    ports:&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;      - &amp;quot;127.0.0.1:3000:3000&amp;quot;&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt;EOF&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;粘贴前把 &lt;code&gt;你的用户名&lt;&#x2F;code&gt; 改成你的 Docker Hub 用户名。也可以用 &lt;code&gt;vim compose.yaml&lt;&#x2F;code&gt; 手动输入，正好练习上一单元的 Vim。&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;配置&lt;&#x2F;th&gt;&lt;th&gt;意思&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;services&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;要运行的服务清单，这里只有一个叫 &lt;code&gt;app&lt;&#x2F;code&gt; 的服务&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;image&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;用仓库里的哪个镜像、哪个版本&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;env_file&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从同一文件夹的 &lt;code&gt;.env&lt;&#x2F;code&gt; 读取环境变量&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;restart: unless-stopped&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;程序崩溃或服务器重启后自动拉起来，除非你手动停止&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;ports&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;只在服务器本机开放 3000 端口，外网访问不到&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;检查配置有没有写错：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose config&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --quiet&lt;&#x2F;span&gt;&lt;span&gt; &amp;amp;&amp;amp;&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; echo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 配置正确&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h3 id=&quot;2-qi-dong&quot;&gt;2. 启动&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose up&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -d&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;-d&lt;&#x2F;code&gt; 表示在后台运行，命令执行完终端就还给你了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;3-cha-kan-zhuang-tai-he-ri-zhi&quot;&gt;3. 查看状态和日志&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose ps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;STATUS&lt;&#x2F;code&gt; 一列显示 &lt;code&gt;Up&lt;&#x2F;code&gt; 表示正在运行。&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose logs&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -f&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; app&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;实时查看日志，按 &lt;code&gt;Ctrl + C&lt;&#x2F;code&gt; 停止查看。&lt;strong&gt;这只是停止查看，服务本身仍在运行。&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-fang-wen&quot;&gt;4. 访问&lt;&#x2F;h3&gt;
&lt;p&gt;和第 19 课一样，在自己电脑上建立隧道：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -L&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; 3000:127.0.0.1:3000 ai-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;浏览器打开 &lt;a rel=&quot;external&quot; href=&quot;http:&#x2F;&#x2F;localhost:3000&quot;&gt;http:&#x2F;&#x2F;localhost:3000&lt;&#x2F;a&gt;。这次即使你退出 SSH，周报助手也在服务器上照常运行。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-zhong-qi-fu-wu-qi-shi-shi&quot;&gt;5. 重启服务器试试&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; reboot&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;SSH 连接会断开。等一分钟后重新登录：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ai-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到服务器的提示符后，再运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;cd&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ~&#x2F;apps&#x2F;weekly-report&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; compose ps&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;周报助手已经自动恢复运行了。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-yong-ming-ling&quot;&gt;常用命令&lt;&#x2F;h2&gt;
&lt;p&gt;都要在 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt; 所在的文件夹里运行：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;命令&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose up -d&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;按配置启动；配置改了再运行一次就会按新配置重建&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose ps&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;查看状态&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose logs -f app&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;实时日志&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose restart app&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;重启服务&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose down&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;停止并删除容器（镜像和 &lt;code&gt;.env&lt;&#x2F;code&gt; 都还在）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker compose pull&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;从仓库拉取配置里写的镜像&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;docker compose ps&lt;&#x2F;code&gt; 显示 &lt;code&gt;app&lt;&#x2F;code&gt; 服务 &lt;code&gt;Up&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;通过隧道能正常使用周报助手。&lt;&#x2F;li&gt;
&lt;li&gt;重启服务器后，服务自动恢复。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;yaml: line X: ...&lt;&#x2F;code&gt; 之类的报错？&lt;&#x2F;strong&gt; 缩进有问题。检查有没有用 Tab、同一层级是否对齐、冒号后面有没有空格。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;pull access denied&lt;&#x2F;code&gt;？&lt;&#x2F;strong&gt; &lt;code&gt;image&lt;&#x2F;code&gt; 里的镜像名写错了，或者仓库是私有的但没有登录。和 Docker Hub 网页上的名字对照一下。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;docker compose ps&lt;&#x2F;code&gt; 显示 &lt;code&gt;Restarting&lt;&#x2F;code&gt;，一直在重启？&lt;&#x2F;strong&gt; 程序启动就出错了，用 &lt;code&gt;docker compose logs app&lt;&#x2F;code&gt; 看报错。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;提示 3000 端口已被占用？&lt;&#x2F;strong&gt; 第 19 课的测试容器可能还在运行，&lt;code&gt;docker ps&lt;&#x2F;code&gt; 找到它并 &lt;code&gt;docker stop&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能说出 &lt;code&gt;compose.yaml&lt;&#x2F;code&gt; 里每一项的作用。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
周报助手在后台运行，&lt;code&gt;docker compose ps&lt;&#x2F;code&gt; 显示 &lt;code&gt;Up&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我知道 &lt;code&gt;logs -f&lt;&#x2F;code&gt; 按 &lt;code&gt;Ctrl + C&lt;&#x2F;code&gt; 只是停止查看。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
重启服务器后服务自动恢复。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>Docker 是什么</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/docker-basics/"/>
        <id>https://xsirouter.com/learn/docker-basics/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/docker-basics/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;理解镜像、容器、仓库、Dockerfile 四个概念。&lt;&#x2F;li&gt;
&lt;li&gt;在云主机上安装 Docker。&lt;&#x2F;li&gt;
&lt;li&gt;运行第一个容器，学会几个常用命令。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-ji-zhuang-xiang&quot;&gt;先懂概念：集装箱&lt;&#x2F;h2&gt;
&lt;p&gt;以前海运货物，大小形状五花八门，装卸很麻烦。后来有了标准集装箱：不管里面装的是什么，码头、轮船、卡车都用同一套方式搬运。&lt;&#x2F;p&gt;
&lt;p&gt;Docker 就是软件的集装箱：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;概念&lt;&#x2F;th&gt;&lt;th&gt;类比&lt;&#x2F;th&gt;&lt;th&gt;说明&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Dockerfile&lt;&#x2F;td&gt;&lt;td&gt;装箱清单&lt;&#x2F;td&gt;&lt;td&gt;一个文本文件，写明从什么基础开始、放进哪些文件、怎么启动&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;镜像（image）&lt;&#x2F;td&gt;&lt;td&gt;封好的集装箱&lt;&#x2F;td&gt;&lt;td&gt;按清单打包出来的成品，包含程序和它需要的运行环境，只读&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;容器（container）&lt;&#x2F;td&gt;&lt;td&gt;打开并正在使用的集装箱&lt;&#x2F;td&gt;&lt;td&gt;镜像运行起来的样子，可以启动、停止、删除&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;仓库（registry）&lt;&#x2F;td&gt;&lt;td&gt;集装箱码头&lt;&#x2F;td&gt;&lt;td&gt;存放和分发镜像的地方，比如 Docker Hub&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;好处是：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;环境一致&lt;&#x2F;strong&gt;：镜像里自带 Node.js，服务器上不用另外安装；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;易迁移&lt;&#x2F;strong&gt;：换一台服务器，拉取同一个镜像就能运行；&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;易回滚&lt;&#x2F;strong&gt;：每个版本是一个镜像，新版本有问题就换回旧镜像。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;我们&lt;strong&gt;直接在云主机上安装和使用 Docker&lt;&#x2F;strong&gt;，不在自己电脑上装。这样能避开 Windows 上的虚拟化设置、公司电脑的安装限制，以及 Mac 和服务器芯片架构不同带来的问题。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;p&gt;以下命令都在服务器上运行：&lt;code&gt;ssh ai-server&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;1-an-zhuang-docker&quot;&gt;1. 安装 Docker&lt;&#x2F;h3&gt;
&lt;p&gt;Docker 官方提供了一个安装脚本。先下载下来，而不是直接运行，这是对待安装脚本的好习惯：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;curl&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -fsSL&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; https:&#x2F;&#x2F;get.docker.com&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -o&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; get-docker.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;less&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; get-docker.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;用 &lt;code&gt;less&lt;&#x2F;code&gt; 粗略看一眼（按 &lt;code&gt;q&lt;&#x2F;code&gt; 退出），确认是 Docker 官方的脚本。然后运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; sh get-docker.sh&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;等一两分钟。完成后检查：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; docker version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;能看到 Client 和 Server 两部分的版本信息，就装好了。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-bu-yong-mei-ci-du-shu-ru-sudo&quot;&gt;2. 不用每次都输入 sudo&lt;&#x2F;h3&gt;
&lt;p&gt;把自己加入 &lt;code&gt;docker&lt;&#x2F;code&gt; 用户组：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;sudo&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; usermod&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; -aG&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; docker&lt;&#x2F;span&gt;&lt;span&gt; $USER&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt;exit&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;strong&gt;必须退出再重新登录&lt;&#x2F;strong&gt;才会生效：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;ssh&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; ai-server&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;看到服务器的提示符后，再运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; version&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;这次不加 &lt;code&gt;sudo&lt;&#x2F;code&gt; 也能运行了。&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;docker&lt;&#x2F;code&gt; 组的成员实际上拥有和管理员差不多的权限。只把你自己加进去，不要随便加别人。&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;h3 id=&quot;3-yun-xing-di-yi-ge-rong-qi&quot;&gt;3. 运行第一个容器&lt;&#x2F;h3&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;docker&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; run&lt;&#x2F;span&gt;&lt;span style=&quot;color: #79B8FF;&quot;&gt; --rm&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; hello-world&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Docker 会从 Docker Hub 下载 &lt;code&gt;hello-world&lt;&#x2F;code&gt; 镜像，运行它，打印一段欢迎信息后退出。&lt;code&gt;--rm&lt;&#x2F;code&gt; 表示容器退出后自动删除，不留垃圾。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;plain&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;Hello from Docker!&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;This message shows that your installation appears to be working correctly.&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;chang-yong-ming-ling&quot;&gt;常用命令&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;命令&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker images&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;列出本机的镜像&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker ps&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;列出正在运行的容器；加 &lt;code&gt;-a&lt;&#x2F;code&gt; 包括已停止的&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker run 镜像名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;用镜像启动一个容器&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker logs 容器名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;看容器的输出日志&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker stop 容器名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;停止容器&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker rm 容器名&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;删除已停止的容器&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;code&gt;docker image prune&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;td&gt;清理没有标签、也没有被容器使用的“悬空”镜像，释放磁盘&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;现在运行 &lt;code&gt;docker images&lt;&#x2F;code&gt;，能看到刚下载的 &lt;code&gt;hello-world&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;permission denied while trying to connect to the Docker daemon&lt;&#x2F;code&gt;？&lt;&#x2F;strong&gt; 还没有加入 &lt;code&gt;docker&lt;&#x2F;code&gt; 组，或者加入后没有重新登录。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;下载很慢或失败？&lt;&#x2F;strong&gt; 确认服务器是香港地域。内地地域的服务器访问 Docker Hub 经常失败，需要使用云服务商提供的镜像加速，本课程不展开。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;Cannot connect to the Docker daemon&lt;&#x2F;code&gt;？&lt;&#x2F;strong&gt; Docker 服务没有运行，执行 &lt;code&gt;sudo systemctl start docker&lt;&#x2F;code&gt;。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能用集装箱的类比解释镜像、容器、仓库、Dockerfile。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;docker version&lt;&#x2F;code&gt; 不加 &lt;code&gt;sudo&lt;&#x2F;code&gt; 也能运行。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;docker run --rm hello-world&lt;&#x2F;code&gt; 显示了 &lt;code&gt;Hello from Docker!&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
    <entry xml:lang="zh">
        <title>域名与 Cloudflare</title>
        <published>2026-10-06T00:00:00+00:00</published>
        <updated>2026-10-06T00:00:00+00:00</updated>
        
        <author>
          <name>
            
              Unknown
            
          </name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://xsirouter.com/learn/domain/"/>
        <id>https://xsirouter.com/learn/domain/</id>
        
        <content type="html" xml:base="https://xsirouter.com/learn/domain/">&lt;h2 id=&quot;ben-ke-mu-biao&quot;&gt;本课目标&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;理解域名、注册商、DNS 服务器（NS）和解析记录。&lt;&#x2F;li&gt;
&lt;li&gt;买一个域名，完成实名认证。&lt;&#x2F;li&gt;
&lt;li&gt;把域名的 DNS 交给 Cloudflare，添加 A 记录。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;xian-dong-gai-nian-shui-fu-ze-shen-me&quot;&gt;先懂概念：谁负责什么&lt;&#x2F;h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;角色&lt;&#x2F;th&gt;&lt;th&gt;做什么&lt;&#x2F;th&gt;&lt;th&gt;本课用的&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;注册商&lt;&#x2F;td&gt;&lt;td&gt;卖域名给你，记录这个域名归谁&lt;&#x2F;td&gt;&lt;td&gt;阿里云或腾讯云&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;DNS 服务器（NS）&lt;&#x2F;td&gt;&lt;td&gt;回答“这个域名对应哪个 IP”&lt;&#x2F;td&gt;&lt;td&gt;Cloudflare&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;解析记录&lt;&#x2F;td&gt;&lt;td&gt;DNS 服务器上的一条条记录&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;report&lt;&#x2F;code&gt; → 你的服务器 IP&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;域名买在注册商那里，但可以指定由别家的 DNS 服务器来回答查询，这一步叫&lt;strong&gt;修改 NS&lt;&#x2F;strong&gt;。我们把 DNS 交给 Cloudflare，因为它还能免费提供 HTTPS 证书、隐藏服务器真实 IP、挡掉一部分恶意访问。&lt;&#x2F;p&gt;
&lt;p&gt;常见的解析记录类型：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;类型&lt;&#x2F;th&gt;&lt;th&gt;作用&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;A&lt;&#x2F;td&gt;&lt;td&gt;域名指向一个 IPv4 地址，我们用这个&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;CNAME&lt;&#x2F;td&gt;&lt;td&gt;域名指向另一个域名&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;TXT&lt;&#x2F;td&gt;&lt;td&gt;存放一段文字，常用于验证域名所有权&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;h2 id=&quot;gen-zhao-zuo&quot;&gt;跟着做&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;1-mai-yu-ming&quot;&gt;1. 买域名&lt;&#x2F;h3&gt;
&lt;p&gt;在阿里云或腾讯云的“域名注册”页面搜索你想要的名字。几点建议：&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;后缀选 &lt;code&gt;.com&lt;&#x2F;code&gt; 最稳妥；&lt;code&gt;.cn&lt;&#x2F;code&gt; 等国内后缀的实名要求更严格。&lt;&#x2F;li&gt;
&lt;li&gt;注意&lt;strong&gt;续费价格&lt;&#x2F;strong&gt;。很多域名首年很便宜，第二年起恢复原价。&lt;&#x2F;li&gt;
&lt;li&gt;购买时需要创建“域名信息模板”并完成&lt;strong&gt;实名认证&lt;&#x2F;strong&gt;，上传身份证件，审核通常需要几个小时到几天。审核通过前，域名可能无法正常解析。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;后文用 &lt;code&gt;example.com&lt;&#x2F;code&gt; 指代你买的域名，遇到时换成你自己的。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;2-ba-yu-ming-tian-jia-dao-cloudflare&quot;&gt;2. 把域名添加到 Cloudflare&lt;&#x2F;h3&gt;
&lt;ol&gt;
&lt;li&gt;打开 &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.cloudflare.com&#x2F;&quot;&gt;cloudflare.com&lt;&#x2F;a&gt; 注册账号（免费）。&lt;&#x2F;li&gt;
&lt;li&gt;在控制台点 &lt;strong&gt;Add a domain&lt;&#x2F;strong&gt;（添加域），输入 &lt;code&gt;example.com&lt;&#x2F;code&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;套餐选择 &lt;strong&gt;Free&lt;&#x2F;strong&gt;。&lt;&#x2F;li&gt;
&lt;li&gt;Cloudflare 会扫描域名已有的解析记录，确认后继续。&lt;&#x2F;li&gt;
&lt;li&gt;Cloudflare 给出两个 NS 地址，类似 &lt;code&gt;xxx.ns.cloudflare.com&lt;&#x2F;code&gt; 和 &lt;code&gt;yyy.ns.cloudflare.com&lt;&#x2F;code&gt;，先复制下来。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h3 id=&quot;3-dao-zhu-ce-shang-na-li-xiu-gai-ns&quot;&gt;3. 到注册商那里修改 NS&lt;&#x2F;h3&gt;
&lt;p&gt;回到阿里云或腾讯云的域名控制台，找到这个域名的“修改 DNS 服务器”（具体名称可能略有不同），把原来的 DNS 服务器替换成 Cloudflare 给的两个地址，保存。&lt;&#x2F;p&gt;
&lt;p&gt;修改后需要等待全球生效，通常几分钟到几小时，最长可能 48 小时。生效后 Cloudflare 会发邮件通知，控制台里域名的状态会变成 &lt;strong&gt;Active&lt;&#x2F;strong&gt;。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;4-tian-jia-a-ji-lu&quot;&gt;4. 添加 A 记录&lt;&#x2F;h3&gt;
&lt;p&gt;在 Cloudflare 里进入这个域名，打开 &lt;strong&gt;DNS&lt;&#x2F;strong&gt; → &lt;strong&gt;Records&lt;&#x2F;strong&gt;，点 &lt;strong&gt;Add record&lt;&#x2F;strong&gt;：&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;字段&lt;&#x2F;th&gt;&lt;th&gt;填写&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Type&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;A&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Name&lt;&#x2F;td&gt;&lt;td&gt;&lt;code&gt;report&lt;&#x2F;code&gt;&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;IPv4 address&lt;&#x2F;td&gt;&lt;td&gt;你的服务器 IP&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;Proxy status&lt;&#x2F;td&gt;&lt;td&gt;开启（橙色云朵，Proxied）&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;TTL&lt;&#x2F;td&gt;&lt;td&gt;Auto&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;保存后，&lt;code&gt;report.example.com&lt;&#x2F;code&gt; 就指向你的服务器了。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;橙色云朵&lt;&#x2F;strong&gt;表示访问者先连到 Cloudflare，再由 Cloudflare 转发到你的服务器。好处是访问者看不到你服务器的真实 IP，HTTPS 证书也由 Cloudflare 自动提供。&lt;&#x2F;p&gt;
&lt;h3 id=&quot;5-jian-cha-jie-xi&quot;&gt;5. 检查解析&lt;&#x2F;h3&gt;
&lt;p&gt;在自己电脑上运行：&lt;&#x2F;p&gt;
&lt;pre class=&quot;giallo&quot; style=&quot;color: #E1E4E8; background-color: #24292E;&quot;&gt;&lt;code data-lang=&quot;shellscript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span style=&quot;color: #B392F0;&quot;&gt;nslookup&lt;&#x2F;span&gt;&lt;span style=&quot;color: #9ECBFF;&quot;&gt; report.example.com&lt;&#x2F;span&gt;&lt;&#x2F;span&gt;&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;&lt;h2 id=&quot;ni-ying-gai-kan-dao&quot;&gt;你应该看到&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;code&gt;nslookup&lt;&#x2F;code&gt; 返回了 IP 地址，但&lt;strong&gt;不是你服务器的 IP&lt;&#x2F;strong&gt;，而是 Cloudflare 的 IP。这正说明橙色云朵在起作用。&lt;&#x2F;p&gt;
&lt;p&gt;现在用浏览器访问 &lt;code&gt;http:&#x2F;&#x2F;report.example.com&lt;&#x2F;code&gt;，会看到 Cloudflare 的错误页，比如 &lt;strong&gt;521 Web server is down&lt;&#x2F;strong&gt; 或 &lt;strong&gt;522 Connection timed out&lt;&#x2F;strong&gt;。这是正常的：服务器的防火墙还没开放 80&#x2F;443 端口，上面也还没有接收网页请求的程序。下一课解决。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;guan-yu-bei-an-he-fang-wen-su-du&quot;&gt;关于备案和访问速度&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;服务器在&lt;strong&gt;中国香港&lt;&#x2F;strong&gt;，所以不需要 ICP 备案。如果将来把网站放到中国内地的服务器上，必须先完成备案。&lt;&#x2F;li&gt;
&lt;li&gt;Cloudflare 的免费套餐在中国内地没有节点，国内访问会绕到境外节点，速度一般，个人工具够用。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;chang-jian-wen-ti&quot;&gt;常见问题&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;strong&gt;Cloudflare 一直显示 Pending，没有变成 Active？&lt;&#x2F;strong&gt; NS 还没生效。确认注册商那里填的是 Cloudflare 给的两个地址、没有拼错，然后耐心等待。域名实名审核没通过时，修改也可能不生效。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;nslookup&lt;&#x2F;code&gt; 返回的是服务器真实 IP？&lt;&#x2F;strong&gt; 说明那条记录没开代理，把 Proxy status 改成橙色云朵。&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;nslookup&lt;&#x2F;code&gt; 提示找不到域名？&lt;&#x2F;strong&gt; 解析还没生效，或者 Name 写错了，检查 Cloudflare 里的记录。&lt;&#x2F;p&gt;
&lt;h2 id=&quot;zi-jian&quot;&gt;自检&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
我能说出注册商、NS、A 记录分别是什么。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
域名已经实名认证，在 Cloudflare 里显示 Active。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;report&lt;&#x2F;code&gt; 的 A 记录指向服务器 IP，并且是橙色云朵。&lt;&#x2F;li&gt;
&lt;li&gt;&lt;input disabled=&quot;&quot; type=&quot;checkbox&quot;&#x2F;&gt;
&lt;code&gt;nslookup&lt;&#x2F;code&gt; 返回的是 Cloudflare 的 IP。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        
    </entry>
</feed>
