# 国内云服务器也能用 Codex 了：接入 DeepSeek V4 Flash 保姆级教程

最近，在国内云服务器上折腾 AI Coding Agent 的朋友，终于多了一条很顺的路。

在我这台 Ubuntu VPS 上，之前真正跑起来的是 MiMo；中途还试过 Claude Code，却被网络与地区条件劝退。现在，DeepSeek 官方提供了 Codex 接入方式，`deepseek-v4-flash` 可以通过 Codex 使用的 **Responses API**（可以理解为 Codex 和模型约定好的沟通方式）正常工作。

换句话说：**不用给服务器塞一张显卡，也不用登录 ChatGPT，一台普通 Ubuntu VPS 加一把 DeepSeek API Key，就能把 Codex 跑起来。**

这篇文章不准备把你埋进概念里。我们只做一件很具体、也很有成就感的事：SSH 登录服务器，运行 `codex`，亲眼看见它回话。服务器有没有突然变聪明先不说，至少这次不是“理论上可行”了。

先记住一句大白话就够了：**Codex 是干活的手，DeepSeek 是思考的脑，VPS 是它们的远程办公桌。**

![本集主线：检查服务器、接入 DeepSeek、完成第一次 Codex 对话](images/01-episode-guide.png)<!-- display-width:520 -->

**先看结论：这次真能跑**

让一台 Ubuntu VPS 跑起 `Codex CLI + DeepSeek V4 Flash`，并完成第一次可见对话。

- **预计用时**：环境正常约 15～25 分钟；老服务器可能需要 30～60 分钟整理 Node.js 和 APT 软件源——老机器嘛，偶尔也需要先活动一下筋骨。
- **你要准备**：一台能 SSH 登录的 Ubuntu VPS、DeepSeek API Key，以及少量 API 余额。
- **不需要准备**：显卡、Python、VS Code，也不要求登录 ChatGPT。
- **通关标志**：Codex 顶部显示 `deepseek-v4-flash`，发送消息后收到回复。

完全没用过服务器也别慌。你只需要知道：**VPS 是一台放在机房里的远程电脑，SSH 是打开它终端的方式。** 文中的命令一次复制一块，看到“过关画面”再往下走。哪里报错，就停在哪里，不用靠意念硬冲。

**更新时间：2026-08-08。** DeepSeek 与 Codex 都在快速更新。复现时以 [DeepSeek 官方 Codex 接入页](https://api-docs.deepseek.com/quick_start/agent_integrations/codex/) 和 [Codex CLI 官方文档](https://developers.openai.com/codex/cli/)为准。无法插入链接的平台可手动访问：`api-docs.deepseek.com`、`developers.openai.com/codex/cli/`。

## 1. 别急着装：先看懂这套组合

先排除一个很容易产生的误会：今天不是把一个超大模型下载到小服务器里。真这么干，VPS 可能先替我们下班了。

真正的结构是：

![Codex 运行在 VPS，DeepSeek V4 Flash 运行在云端，两者通过 Responses API 通信](images/02-codex-deepseek-architecture.png)<!-- display-width:520 -->

- **Codex CLI** 运行在你的 VPS 上，负责查看目录、调用终端和修改文件。
- **DeepSeek V4 Flash** 运行在 DeepSeek 云端，负责理解任务和生成下一步行动。
- 两者通过 **Responses API** 通信。

所以不带 GPU 的入门 VPS 也可以尝试：服务器不负责大模型推理，但 Codex、Node.js 和你的项目仍会占用 CPU 与内存，配置越低越适合从空目录和小任务开始。代价是任务相关的提示词和必要上下文会发给 DeepSeek API；公司代码、生产密钥和客户数据不能未经评估直接交给它。

这次能跑通，关键不在什么“神秘黑科技”，而在接口终于对上了：Codex 使用 **Responses API** 和模型通信，DeepSeek API 已原生支持它，并给出了官方一键配置脚本。[Codex 官方配置参考](https://developers.openai.com/codex/config-reference/)也允许通过 `model_provider`、`base_url` 和 `wire_api` 接入兼容的模型服务。

这里顺手抠一个字眼：官方名称是 **Responses API**，不是泛泛而谈的“Response 协议”。截至本文更新时间，[DeepSeek 官方 Codex 接入页](https://api-docs.deepseek.com/quick_start/agent_integrations/codex/)仍写明只有 `deepseek-v4-flash` 支持 Codex；即使模型菜单里出现 V4 Pro，本篇也只选择 Flash。先走官方确认过的路，少给自己加戏。

**看到这个就算理解过关：** Agent 在服务器上，模型在 DeepSeek 云端。我们搭的是“远程 Coding Agent”，不是“VPS 本地部署大模型”。

## 2. 登录服务器：先给 Codex 一个安全小房间

在自己电脑的终端中登录 VPS：

```bash
ssh ubuntu@你的服务器地址
```

如果云厂商默认用户名不是 `ubuntu`，请以控制台给出的 SSH 命令为准。命令里的“你的服务器地址”要替换，提示符 `$` 不要复制。

登录后先确认系统和处理器架构：

```bash
cat /etc/os-release | head
uname -m
```

本文实测环境是 Ubuntu 20.04 LTS、`x86_64`。版本不完全相同没关系，只要是仍受支持的 Ubuntu，并且后面的 Node.js 与 Codex 检查能够通过即可。

不要一上来就在生产项目里实验。先创建一个空目录——第一次见面，先别把全屋钥匙都交出去：

```bash
mkdir -p ~/codex-lab
cd ~/codex-lab
printf '# Codex Lab\n' > README.md
pwd
ls -la
```

**看到这个就算过关：** `pwd` 以 `/codex-lab` 结尾，`ls` 能看到 `README.md`。

## 3. 安装 Codex：先看有没有，再决定补什么

先看看服务器上有没有 Codex：

```bash
codex --version
```

如果已经显示 `codex-cli` 版本号，直接进入下一节。DeepSeek 官方模型目录要求 Codex 客户端至少为 `0.144.0`；旧版本请升级到最新版。

### 路线 A：官方独立安装器，能用就最省心

Codex 官方目前为 macOS 和 Linux 提供独立安装命令：

```bash
curl -fsSL https://chatgpt.com/codex/install.sh | sh
```

如果这条命令能顺利结束，重新打开 SSH 终端，再执行：

```bash
codex --version
```

### 路线 B：国内 VPS 不顺时，改走 npm

我们的腾讯云 Ubuntu 20.04 实测中，官方安装地址连接不够理想，而 npm 链路能够使用，所以最后走了这条路。

先检查 Node.js：

```bash
node -v
npm -v
```

如果 Node.js 已经是 22.x，安装 Codex：

```bash
npm install -g @openai/codex@latest
codex --version
```

如果看到 `EACCES` 或 `/usr/local/lib` 权限错误，先把 npm 的全局目录放到当前用户家目录：

```bash
mkdir -p ~/.local
npm config set prefix ~/.local
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.profile
source ~/.profile
npm install -g @openai/codex@latest
```

这样不需要长期依赖 `sudo npm`，也不会把普通用户的包硬塞进系统目录。

**看到这个就算过关：** `codex --version` 正常返回版本号，并且不低于 DeepSeek 官方目录要求的 `0.144.0`。

## 4. 第一次启动：这次不是为了聊天

进入刚才的实验目录，启动一次 Codex：

```bash
cd ~/codex-lab
codex
```

第一次可能出现登录方式选择。别急着研究每个按钮，我们今天不走 ChatGPT 登录，按 `Ctrl+C` 退出即可。这一步只是让 Codex 创建：

```text
~/.codex/
```

检查目录：

```bash
ls -la ~/.codex
```

如果暂时没有这个目录，也可以手动创建：

```bash
mkdir -p ~/.codex
```

## 5. 接入 DeepSeek：官方脚本终于来了

接下来是全篇最关键、也是最短的一步。DeepSeek 官方推荐的 Linux / macOS 配置命令是：

```bash
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh)
```

如果你看到“下载完直接执行”会有点心慌——很好，安全意识上线了。可以先下载、查看，再运行：

```bash
curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh \
  -o codex-deepseek-setup-en.sh
less codex-deepseek-setup-en.sh
bash codex-deepseek-setup-en.sh
```

脚本启动后：

1. 选择配置 `deepseek-v4-flash`。
2. 按提示粘贴 DeepSeek API Key。
3. 等待配置校验完成。

API Key 可在 [DeepSeek 开放平台](https://platform.deepseek.com/)创建。它通常以 `sk-` 开头，但博客、截图、聊天记录和 Git 仓库里都不应该出现完整内容。

根据 DeepSeek 官方说明，脚本会先备份原有 `~/.codex/config.toml`，然后写入 `~/.codex/models.json`，并增加 DeepSeek Provider；已有的 MCP 和项目信任设置会保留。脚本还会在写入前校验 TOML 与 JSON 语法。

配置完成后，只检查不含密钥的字段：

```bash
grep -E '^(model|model_provider|model_reasoning_effort|model_catalog_json)' \
  ~/.codex/config.toml
grep -E '^(name|base_url|wire_api)' ~/.codex/config.toml
```

你应该看到类似：

```text
model = "deepseek-v4-flash"
model_provider = "deepseek"
model_reasoning_effort = "high"
wire_api = "responses"
```

官方脚本会把 API Key 存进配置文件。至少收紧文件权限：

```bash
chmod 700 ~/.codex
chmod 600 ~/.codex/config.toml ~/.codex/models.json
```

**看到这个就算过关：** 模型是 `deepseek-v4-flash`，Provider 是 `deepseek`，通信接口是 `responses`；终端没有打印完整 Key。

## 6. 第一次成功：先让它说句话，别急着改项目

回到实验目录：

```bash
cd ~/codex-lab
codex
```

启动横幅应显示：

```text
model: deepseek-v4-flash high
directory: ~/codex-lab
```

第一次别上来就让它重构祖传项目。先发一个不会改文件的请求：

```text
请先只读当前目录，告诉我里面有哪些文件，不要修改任何内容。
```

也可以像实测截图一样，先简单说一句 `hi`：

![首次对话成功：顶部显示 deepseek-v4-flash high，并正常收到回复](images/03-first-reply.png)<!-- display-width:600 -->

回复内容不需要和截图一模一样，它又不是在参加默写考试。只要顶部模型名正确，并且消息得到正常回复，就已经证明：

- Codex CLI 能运行；
- DeepSeek Provider 已生效；
- Responses API 能通信；
- API Key 和余额可用。

如果顶部目录仍然是 `~`，先退出，再进入 `~/codex-lab` 后启动。让 Agent 站在正确目录里，是比“它会不会说你好”更重要的安全习惯。

## 7. 再验收一次：确认我们真的接对了

在 Codex 中输入：

```text
/model
```

模型选择器会显示当前模型。我们的实测画面中，`deepseek-v4-flash` 已被选中：

![输入 /model 打开模型选择器，当前模型为 deepseek-v4-flash](images/04-model-switch.png)<!-- display-width:600 -->

截图里也出现了 `deepseek-v4-pro`，但“出现在目录里”和“官方已经支持 Codex”不是一回事。截至 2026-08-08，DeepSeek Codex 接入页仍明确写着目前只有 Flash 支持，因此本篇不引导读者选择 Pro。

现在退出 Codex：

```text
/exit
```

需要继续以前的会话时，可以运行：

```bash
codex resume
```

如果切换 Provider 后旧会话暂时看不到，不代表被删除。DeepSeek 官方说明：ChatGPT 登录产生的会话与第三方 API 登录产生的会话会分组显示；恢复原配置并重启客户端后，原来的会话会重新出现。

## 8. 老服务器踩坑手记：报错也会“借刀杀人”

如果你已经跑通，可以直接跳到下一节，别为了体验苦难再倒回来。下面保留我们这台 Ubuntu 20.04 的真实折腾过程，专门给卡住的人查错。

### 坑 1：最先试 MiMo，却暴露了 Node 太老

最初准备安装 MiMo Code，先遇到 GitHub Release 只有几十 KB/s，又在 npm 安装中看到：

```text
bun: not found
SyntaxError: Unexpected identifier
```

真正关键的不是立刻补 Bun，而是先看运行环境：

```bash
node -v
npm -v
```

结果是 Node.js `v10.19.0`。MiMo 没有白折腾——它帮我们提前发现，这台老服务器的 JavaScript 运行环境已经不适合现代 AI CLI。

### 坑 2：Claude 安装脚本“卡住”，其实是 302

当时又短暂尝试了 Claude Code。与其一直盯着没有输出的安装脚本，我们改用：

```bash
curl -I --connect-timeout 10 --max-time 20 https://claude.ai/install.sh
```

这台服务器当时返回 `HTTP/2 302`，并跳转到 `app-unavailable-in-region`。这只能说明**这台服务器在当时的网络与地区条件下**不适合继续走该路线，不应该扩写成对所有服务器、所有时间都成立的结论。

### 坑 3：NodeSource 失败，罪魁祸首却是 Docker 源

升级 Node 22 时，NodeSource 脚本会执行完整的 `apt update`。服务器里一个失效的 Docker 软件源报出：

```text
download.docker.com
Could not handshake
Failed to run 'apt update'
```

于是 NodeSource 安装也跟着中止。最后的做法是先按 [NodeSource 官方安装脚本](https://github.com/nodesource/distributions/blob/master/scripts/deb/setup_22.x)所用格式添加 `node_22.x` 软件源，再只更新这一份源：

```bash
sudo apt-get update \
  -o Dir::Etc::sourcelist="sources.list.d/nodesource.sources" \
  -o Dir::Etc::sourceparts="-" \
  -o APT::Get::List-Cleanup="0"
sudo apt install -y nodejs
```

这个坑最有价值的地方是：**`apt update` 失败时，先看具体哪个域名报错；安装 A 失败，原因可能是系统里早已存在的 B 软件源。**

### 坑 4：`bubblewrap` 黄色警告不是本次失败

实测启动时出现：

```text
Codex could not find bubblewrap on PATH.
Codex will use the bundled bubblewrap in the meantime.
```

后一句已经说明 Codex 会暂时使用内置版本，所以它没有阻止本次对话。先完成主线验收，再根据 Codex 的沙箱文档处理系统依赖，不要看到黄色字就立刻偏离主线。

## 9. 安全边界：先别让新同事直接进生产环境

服务器上的 Agent 能读文件、运行命令，也可能修改大量内容。第一次正式使用前，至少完成下面五项：

- **撤销泄露过的 Key**：完整 Key 一旦进入截图、聊天或仓库，直接废弃并重建。
- **从空目录开始**：先在 `~/codex-lab` 观察读写和命令审批，再进入真实项目。
- **给项目做 Git 快照**：重要改动前先 `git status`，确认无误后提交一个可回退节点。
- **不要把密钥放进项目文件**：`.env`、云凭据和生产配置都不应被随手纳入上下文。
- **确认数据边界**：模型在 DeepSeek 云端，相关上下文可能离开 VPS；公司项目还要遵守内部安全与合规要求。

还有一个很容易忽略的成本边界：Codex 是循环工作的 Agent，一次任务可能触发多轮模型请求。DeepSeek API 按量计费，价格会变化；实验前请在 [DeepSeek 官方价格页](https://api-docs.deepseek.com/quick_start/pricing/)查看当前价格，并给账号设置自己能接受的余额范围。

## 10. 本集通关：你的服务器里真的有 Codex 了

![核心通关：Codex 在 Ubuntu VPS 上通过 DeepSeek V4 Flash 完成真实回复](images/05-episode-summary.png)<!-- display-width:520 -->

最后按顺序检查：

1. SSH 能登录 Ubuntu VPS。
2. `codex --version` 正常，并达到 DeepSeek 接入所需版本。
3. `~/.codex/config.toml` 指向 DeepSeek Responses API。
4. 启动横幅显示 `deepseek-v4-flash`。
5. 在实验目录里完成了一次真实回复。
6. 截图中没有公网 IP、API Key、Token 或私有项目路径。

最开始，我们只是想在服务器上装一个 AI 编程助手，却一路碰到了 MiMo 下载、npm 权限、Node 10、Claude 302 和 Docker APT 源。看起来像在闯五关，最后真正跑通以后，结构反而非常简单：

```text
你 → SSH → Ubuntu VPS 上的 Codex → DeepSeek Responses API → V4 Flash
```

更重要的是，我们亲手验证了一个关键概念：**Agent 和模型可以拆开。** Codex 提供持续工作的外壳，DeepSeek 提供推理能力；以后换服务器、换模型或加入知识库，都是在这条链路上继续增加能力。

如果你也跑通了，建议先做两件小事：把成功画面截下来，再让 Codex 在实验目录里完成一个真正有用、但随时能撤销的小任务。折腾服务器最快乐的瞬间，不是命令没有报错，而是它终于开始替你干活。

下一集，我们给 Agent 装上自己的资料：让它先检索、再回答，并且把引用来源一起交出来。
