本集要做成

DeepSeek V4 Flash 原生支持 Codex 使用的 Responses API 后,在 Ubuntu VPS 安装 Codex CLI,并完成第一轮可验收对话。

最近,在国内云服务器上折腾 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 是它们的远程办公桌。

先看结论:这次真能跑

让一台 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 接入页Codex CLI 官方文档为准。无法插入链接的平台可手动访问:api-docs.deepseek.comdevelopers.openai.com/codex/cli/

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

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

真正的结构是:

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

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

这次能跑通,关键不在什么“神秘黑科技”,而在接口终于对上了:Codex 使用 Responses API 和模型通信,DeepSeek API 已原生支持它,并给出了官方一键配置脚本。Codex 官方配置参考也允许通过 model_providerbase_urlwire_api 接入兼容的模型服务。

这里顺手抠一个字眼:官方名称是 Responses API,不是泛泛而谈的“Response 协议”。截至本文更新时间,DeepSeek 官方 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 开放平台创建。它通常以 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,并正常收到回复

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

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

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

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

在 Codex 中输入:

text可复制后修改
/model

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

输入 /model 打开模型选择器,当前模型为 deepseek-v4-flash

截图里也出现了 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 官方安装脚本所用格式添加 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 官方价格页查看当前价格,并给账号设置自己能接受的余额范围。

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

核心通关:Codex 在 Ubuntu VPS 上通过 DeepSeek V4 Flash 完成真实回复

最后按顺序检查:

  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 装上自己的资料:让它先检索、再回答,并且把引用来源一起交出来。