Ubuntu 20.04 上装 Claude Code 并接入 DeepSeek:从 Node.js 到 cc-switch 的完整配置

发布时间:2026/10/12 17:52:56

Ubuntu 20.04 上装 Claude Code 并接入 DeepSeek:从 Node.js 到 cc-switch 的完整配置 1. Ubuntu 20.04 装 Claude Code 接入 DeepSeek 到底难在哪如果你在 Ubuntu 20.04 上搜「Claude Code 接入 DeepSeek」大概率会撞上三堵墙Node.js 版本太老跑不起来、官方 cc-switch 装完打不开、API 通道填完却一直 401。这篇就把这三件事一次讲透从 Node.js 环境准备到 cc-switch 配置切换再到终端里跑通一次真实请求全程可复制。先说清楚这套组合是什么。Claude Code 是 Anthropic 出的命令行编程助手本质是一个跑在终端里的 Agent能读你项目里的文件、执行命令、改代码。它默认连的是 Anthropic 官方通道但通过环境变量或 cc-switch 这类配置切换工具可以把请求指向兼容 Anthropic 协议的第三方通道。DeepSeek 提供了兼容接口所以理论上能让 Claude Code 用上 DeepSeek 的模型。适合谁看手上有一台 Ubuntu 20.04 的机器物理机、虚拟机、云主机都行想用命令行 AI 编程助手又不想被官方通道的额度和网络问题卡住的人。Ubuntu 20.04 是个特殊版本它的 glib 和 webkit 版本偏旧很多 2024 年之后基于 Tauri 2 打包的桌面工具都跑不起来cc-switch 官方版就是典型受害者这也是本文要专门处理的一个坑。我试过在 20.04 上直接dpkg -i官方 cc-switch 的 deb 包装是装上了点图标没反应终端启动报libwebkit2gtk-4.1.so.0: cannot open shared object file。原因就是 Tauri 2 依赖 webkit2gtk 4.1而 20.04 的软件源里只有 4.0。硬升级 glib 会连带一堆系统库风险太大所以正确做法是换一个用 WebKit2GTK 4.0 重新打包的版本。整篇的路线是先装一个足够新的 Node.jsClaude Code 要求 18 以上建议直接上 20 或 22再全局装 Claude Code然后装适配 20.04 的 cc-switch-web配置好 DeepSeek 的 Base URL、Key 和 Model ID最后在终端验证一次请求真的通了。每一步我都会给出完整命令和预期输出你照着敲就行。需要提前说明的是本文用的是 TaoToken 提供的兼容通道来对接 DeepSeek它的 API 地址是https://taotoken.net/api控制台和密钥管理在官网。你需要在官网注册后拿到一个 API Key后面配置里会用到。这个 Key 就是你的身份凭证别泄露也别提交到 git 仓库里。2. 前置准备Node.js 版本、TaoToken Key 与目录规划这一节把动手前需要的东西一次性备齐避免装到一半发现缺东西。核心是三样合适版本的 Node.js、一个可用的 API Key、以及清晰的目录规划。2.1 Node.js 为什么必须升级Ubuntu 20.04 自带的 apt 源里 Node.js 是 10.x 或 12.x太老了。Claude Code 的 npm 包在安装时会检查 engines 字段低于 18 直接报Unsupported engine。所以别用apt install nodejs用官方预编译包手动装干净可控也不污染系统。我选的是 Node.js 22 的 LTS 线稳定且兼容性好。下载走国内镜像会快很多cd ~ wget https://registry.npmmirror.com/-/binary/node/v22.14.0/node-v22.14.0-linux-x64.tar.xz tar -xvJf node-v22.14.0-linux-x64.tar.xz mv node-v22.14.0-linux-x64 ~/nodejs解压后把~/nodejs作为安装目录。接着配置环境变量编辑~/.bashrcnano ~/.bashrc在文件最后一行加上注意路径换成你自己的实际路径export PATH$HOME/nodejs/bin:$PATH保存后让它生效source ~/.bashrc node -v npm -v预期输出类似v22.14.0和10.9.2。如果node -v还是老版本说明 PATH 没生效检查一下~/.bashrc里那行有没有写错或者当前 shell 是不是 bashecho $SHELL确认。2.2 拿到 TaoToken 的 API Key打开官网https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content注册登录后进控制台在 API Keys 页面创建一个新 Key。创建时给它起个名字比如ubuntu-claude-code方便以后区分。复制出来的 Key 形如sk-xxxxxxxx只显示一次先存到安全的地方。这个 Key 后面要填进 cc-switch 的配置里作为访问 DeepSeek 模型的凭证。同时你需要记住两个地址Base URL 是https://taotoken.net/api模型 ID 用 DeepSeek 对应的名称比如deepseek-chat或deepseek-reasoner以控制台模型列表为准。2.3 目录规划建议建议把 Node.js 装在~/nodejs项目代码放~/projects配置文件交给 cc-switch 自己管理它默认存在~/.cc-switch/或类似路径。这样以后要卸载或迁移删目录就行不会散落一地。注意API Key 不要写进任何会提交到 git 的文件。cc-switch 的配置文件本身在用户目录下一般不会被 git 跟踪但你自己写脚本时要注意。到这里前置就齐了Node.js 22 装好、Key 拿到手、目录心里有数。下一节开始装 Claude Code 本体。3. 安装 Claude Code 与 cc-switch-web 的可复制配置这一节是全文的技术核心分三步装 Claude Code、装适配 20.04 的 cc-switch-web、写配置文件。每一步都给完整命令和配置片段。3.1 全局安装 Claude CodeNode.js 就绪后一条命令搞定npm install -g anthropic-ai/claude-code装完验证claude --version能打印出版本号就说明二进制已经进 PATH 了。如果报command not found检查npm config get prefix输出的路径是否在 PATH 里通常全局包会装到~/nodejs/bin和 node 同目录正常不会有问题。第一次直接运行claude会进入一个初始化引导让你选主题、确认一些设置。这一步先别急着配通道因为默认它连的是 Anthropic 官方国内环境大概率连不上。我们要先用 cc-switch 把通道切到 DeepSeek再回来启动。3.2 为什么官方 cc-switch 在 20.04 上装不了官方 cc-switch 用 Tauri 2 打包依赖libwebkit2gtk-4.1-dev和glib 2.70。Ubuntu 20.04 的仓库里 webkit2gtk 只到 4.0glib 是 2.64两个都不满足。你强行apt install libwebkit2gtk-4.1-dev会提示找不到包加第三方源又可能把系统库搞乱。解决办法是用社区重新打包的cc-switch-web它把前端渲染从 Tauri 换成了 WebKit2GTK 4.0 原生窗口业务逻辑保留20.04 开箱即用。下载安装curl -sL https://github.com/greluoqixi/cc-switch-web/releases/download/v1.0.0/cc-switch-web_1.0.0_amd64.deb -o cc-switch-web_1.0.0_amd64.deb sudo dpkg -i cc-switch-web_1.0.0_amd64.deb如果dpkg报依赖缺失补一条sudo apt-get install -f装完在终端输入cc-switch-web就能启动也可以双击桌面图标。启动后是一个图形界面用来管理不同的 API 通道配置。3.3 写 cc-switch 配置Base URL Key Model ID 三件套cc-switch 的核心作用就是帮你管理多套「Base URL Key Model ID」组合一键切换。在它的界面里新增一个配置填三个字段字段填写内容说明Base URLhttps://taotoken.net/api兼容 Anthropic 协议的通道地址API Key你在控制台创建的sk-xxxx身份凭证Model IDdeepseek-chat以控制台模型列表为准如果你更喜欢直接改配置文件cc-switch 的配置一般落在~/.cc-switch/config.json不同版本路径可能略有差异以界面里「打开配置目录」为准。一个可参考的 JSON 片段如下{ providers: [ { name: deepseek-via-taotoken, baseUrl: https://taotoken.net/api, apiKey: sk-你的Key, model: deepseek-chat } ], current: deepseek-via-taotoken }保存后在界面里把当前通道切到deepseek-via-taotoken。cc-switch 会把这份配置同步到 Claude Code 读取的环境变量或配置文件里具体机制是它帮你写~/.claude/settings.json或设置ANTHROPIC_BASE_URL、ANTHROPIC_API_KEY这类变量。注意Model ID 一定要和控制台里列出的名称完全一致大小写、连字符都不能错。填错会报模型不存在的错误。配置完成后回到终端运行claude它会读取切换后的通道。第一次可能还会让你确认信任当前目录按提示走即可。4. 验证请求确认 DeepSeek 通道真的通了配置写完不代表通了必须发一次真实请求验证。这一节给你两种验证方式命令行直接问一句以及看返回结构确认走的是 DeepSeek。4.1 用 claude 交互式验证在终端进入任意一个项目目录运行cd ~/projects claude进入交互界面后输入一句简单的话比如「用一句话解释什么是递归」。如果通道配对了几秒内会返回 DeepSeek 生成的回答。这时候你观察两点一是回答能正常流式输出二是没有报 401 或连接超时。如果它一直卡在思考状态或者报错先退出CtrlC检查 cc-switch 里当前选中的是不是你刚建的那套配置。4.2 用 curl 直接打接口验证图形界面有时候会骗你最硬的验证是直接打 API。用 curl 发一个最小请求curl https://taotoken.net/api/v1/messages \ -H Content-Type: application/json \ -H x-api-key: sk-你的Key \ -H anthropic-version: 2023-06-01 \ -d { model: deepseek-chat, max_tokens: 64, messages: [{role: user, content: 说一句你好}] }预期返回是一段 JSON里面有content数组第一项的text字段就是模型回复。如果返回{error: ...}看错误类型authentication_error是 Key 问题not_found_error是模型 ID 或路径问题。这个 curl 能通说明 Base URL、Key、Model ID 三件套都对Claude Code 那边只要配置同步到位就一定能用。4.3 确认走的是 DeepSeek 而不是别的有个小技巧DeepSeek 的模型在回答风格上有自己的特点你可以问一个需要推理的问题比如「9.11 和 9.9 哪个大」观察它的推理过程。另外在返回的 JSON 里model字段会回显实际调用的模型名确认它是deepseek-chat而不是别的。如果返回的model字段和你填的不一致说明通道那边做了映射以控制台文档说明为准一般不影响使用。验证通过后你就可以在日常项目里用claude命令干活了。它会读取当前目录的代码帮你改 bug、写测试、解释逻辑。5. 常见报错排查401、local proxy failed 与 reading choices这一节把最容易撞的几类错误列出来对照着查。这些报错我在配置过程中基本都遇到过按顺序排查能省不少时间。5.1 401 authentication_error最常见。表现是请求返回401或authentication_error。原因通常是三个Key 复制时多了空格或换行、Key 已经失效或被删、请求头字段名写错。排查步骤先用上面 4.2 的 curl 单独测 Key排除 Claude Code 本身的干扰。如果 curl 也 401回控制台重新生成一个 Key复制时注意别带上首尾空白。如果 curl 通了但 claude 报 401说明 cc-switch 没把配置同步过去检查~/.claude/settings.json里的ANTHROPIC_API_KEY是不是旧值。5.2 local proxy failed / connection refused报local proxy failed或connection refused一般是 cc-switch 或某个本地代理进程没起来或者端口被占用。先确认 cc-switch-web 进程在跑ps aux | grep cc-switch如果没有重新启动cc-switch-web。如果它监听了某个本地端口而 Claude Code 去连那个端口端口被别的程序占了也会失败。换个端口或关掉冲突程序。还有一种情况是系统里残留了旧的代理环境变量比如http_proxy、https_proxy指向了一个已经关掉的本地端口。检查env | grep -i proxy如果有unset http_proxy https_proxy清掉再试。5.3 reading choices / 流式解析错误报reading choices或类似的流式解析错误通常发生在通道返回的响应格式和 Claude Code 期望的不完全一致时。Claude Code 期望的是 Anthropic 的 messages 格式content数组如果通道返回的是 OpenAI 的choices格式就会解析失败。解决办法是确认你用的 Base URL 是 Anthropic 兼容端点。TaoToken 的https://taotoken.net/api提供兼容 Anthropic 协议的接口路径是/v1/messages。如果你误填了 OpenAI 风格的/v1/chat/completions就会出这个错。回 cc-switch 检查 Base URL 和路径。5.4 OAuth 相关报错如果报 OAuth 或登录相关错误说明 Claude Code 还在尝试走官方登录流程。这时候要确保环境变量ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY已经设置让它跳过 OAuth。可以在~/.bashrc里显式导出export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的Key然后source ~/.bashrc再启动 claude。注意这种方式和 cc-switch 管理可能冲突二选一即可推荐用 cc-switch 统一管理。5.5 模型不存在 / model not found报模型不存在九成是 Model ID 拼错。回控制台看模型列表复制准确名称。DeepSeek 常见的 ID 是deepseek-chat通用对话和deepseek-reasoner推理增强别自己造名字。排查完这些基本能覆盖 95% 的接入问题。如果还不行把 curl 的完整返回贴出来错误信息里通常有明确线索。6. 后续怎么用把 Claude Code 变成日常编码搭子通道通了之后真正的价值在于日常怎么用它。这一节聊几个实用场景和长期使用的建议。最直接的用法是在项目根目录跑claude然后用自然语言描述需求比如「这个函数有内存泄漏帮我看看」「给这个模块补单元测试」。它会读文件、给 diff、甚至直接改。改之前它会问你确认别一路回车看清楚再同意。如果你经常在多个通道之间切换比如官方和 DeepSeek 换着用cc-switch 的价值就体现出来了。建好几套配置点一下切换不用手动改环境变量。对于长期做 Agent 开发或需要稳定编码助手的场景可以考虑用 Coding Plan 这类方案把额度和通道管理得更省心。密钥管理要养成习惯定期在控制台轮换 Key旧 Key 及时删除。不要把 Key 写进项目代码或 Dockerfile。如果团队协作每个人用自己的 Key别共用。想验证不同模型的效果可以到模型对话页面直接对比 DeepSeek 和其他模型对同一段代码的解释找到最适合你工作流的那个。接入文档里有更详细的参数说明和端点列表遇到协议层面的问题去那里查最快。最后给个实用技巧把常用的 claude 调用封装成 shell 别名比如alias ccclaude --dangerously-skip-permissions谨慎使用跳过权限的选项只在你信任的目录里用。日常在~/projects下开一个终端随时claude一下比开编辑器插件还快。整套流程跑通一次之后换机器或重装系统照着这篇的命令重来一遍十分钟就能恢复。
延伸阅读

更多相关文章

2026/10/12 17:47:56

MBD持续集成实践:Simulink模型自动化验证流水线搭建指南

做了几年基于模型的开发(MBD),我早年的工作方式其实挺原始:打开Simulink,手改模型,手动拖测试用例,跑完看波形,再花半小时整理报告。直到有一次,一个改动很小的分支在主干…

2026/10/12 17:47:56

宽带认知雷达波形优化:检测与估计的联合设计方法

简介:联合目标雷达特征估计与目标检测的宽带认知雷达波形优化是一篇面向雷达信号处理与认知雷达领域研究人员、工程师的研究论文。论文针对宽带认知雷达中目标雷达特征(TRS)随目标姿态与时间变化的问题,提出在确保TRS估计精度的前…

2026/10/12 18:58:27

Python报错No module named ‘random‘?标准库失踪的真相与修复指南

看到ModuleNotFoundError: No module named random这条报错,我的第一反应不是“环境坏了”,而是“有意思,终于让我碰上了”。random是 Python 解释器自带的几十个标准库之一,只要解释器本身能跑起来,它就应该躺在标准库…

2026/10/12 18:58:27

Unity MonoBehaviour生命周期详解:执行顺序、协程与避坑指南

1. 项目概述与核心思路接手新项目时,我习惯先把脚本组件相关的东西理清楚,尤其是MonoBehaviour。这个类在Unity里几乎无处不在,哪怕你只是给物体挂一个旋转脚本,底层跑的也是MonoBehaviour的Update、LateUpdate这些生命周期方法。…

2026/10/12 18:58:27

HTML5视频帧精准捕获:从截图到高可靠帧管道的工程实践

1. 这不是“录屏”,而是精准控制每一帧的视频流捕获很多人看到标题第一反应是:“这不就是浏览器录屏功能吗?用 MediaRecorder API 不就完事了?”——恰恰相反。这个项目的核心价值,从来不是替代系统级录屏,…

2026/10/12 18:58:27

贪心算法解决部分背包问题:策略对比与代码实现

贪心算法解决背包问题是个经典实验,我在带学生做算法课程设计时发现,很多同学把代码跑通就算完事,却说不清“为什么这么选”“什么时候贪心能得到最优解”“什么时候不能”。这篇内容就围绕这个实验,把问题建模、策略选择、代码实…

2026/10/12 18:53:26

Arduino-IRremote红外遥控编解码实战:从原理到避坑指南

1. 从一个“吃灰”的红外接收头说起如果你手头有一堆闲置的遥控器——电视的、机顶盒的、老式风扇的、甚至某个不知道什么设备的——然后你盯着它们想:能不能让我的开发板听懂这些按键在说什么?那这个项目就是为你准备的。Arduino-IRremote是一个在嵌入式…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/12 12:01:26

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/12 12:54:07

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑