1. Ubuntu 22.04 部署 Claude Code 前的环境准备与踩坑记录
Claude Code 是 Anthropic 推出的终端 AI 编程助手,能直接在命令行里读写项目文件、执行 git 操作、跑测试、改 bug,适合习惯在终端里干活的开发者。它本身是一个 npm 全局包,跑在 Node.js 运行时上,所以只要你的 Ubuntu 22.04 能装 Node.js,理论上就能把它跑起来。但真正卡人的地方往往不是安装本身,而是后面的 API 通道配置——默认它要连 Anthropic 官方接口,国内网络环境下经常连不上或者超时,这才是大多数人第一次部署失败的原因。
我自己在 Ubuntu 22.04 上前后装过五六次,从裸机到能正常对话,中间踩的坑主要集中在三块:Node.js 版本太低导致 CLI 启动报错、git 没装导致 Claude Code 无法识别项目仓库、以及 API 通道没配对导致一直卡在认证环节。这篇就把整个流程从系统更新一路写到 cc-switch 配置,每一步都给可复制的命令和配置文件片段,你照着敲基本能一次跑通。
先说清楚这套流程适合谁:你有一台 Ubuntu 22.04 的机器(物理机、虚拟机、云主机都行),想用 Claude Code 做日常编码辅助,但不想折腾复杂的网络配置。整个流程分两大段,前半段是装 Node.js、git、Claude Code CLI,后半段是装 cc-switch 这个图形化配置工具,用它来管理多个模型通道。cc-switch 的好处是把 API Key、Base URL、模型名这些配置项做成可视化界面,不用每次手动改 settings.json,切换模型点一下就行。
在动手之前,先确认你的系统版本和权限。打开终端执行:
lsb_release -a正常应该看到Ubuntu 22.04.x LTS。如果你用的是 WSL2 里的 Ubuntu 22.04,流程完全一样,只是图形界面的 cc-switch 需要 WSLg 支持,Windows 11 默认带,Windows 10 可能要额外配。另外确认你有 sudo 权限,后面装包都要用。
还有一个容易被忽略的点:Ubuntu 22.04 自带的 Node.js 版本是 12.x,太老了,Claude Code 要求 Node 18 以上,所以必须用 NodeSource 的源装新版本。这一步如果跳过,直接apt install nodejs,后面npm install -g @anthropic-ai/claude-code会报一堆语法错误,排查起来很费时间。我建议直接上 Node 22.x,稳定性和兼容性都够。
系统更新这一步别省。Ubuntu 22.04 刚装完的时候,apt 源里的包索引可能是旧的,直接装 Node.js 会因为依赖版本对不上失败。先跑一遍更新:
sudo apt update && sudo apt upgrade -y这个过程视网络情况可能要几分钟到十几分钟。如果卡在某个包下载不动,可以 Ctrl+C 中断后换国内镜像源再试,但注意别用那些来路不明的第三方源。更新完重启一下是个好习惯,尤其是内核有更新的时候:
sudo reboot重启后重新连上终端,就可以进入下一步装 Node.js 了。这里提醒一句,后面所有命令都是在普通用户下执行,需要提权的地方我都加了 sudo,你不用切到 root。
2. 安装 Node.js 22 与 git 并验证 Claude Code CLI 可用性
Node.js 的安装用 NodeSource 官方脚本最省事。它会把 apt 源配好,然后你就能用 apt 装指定大版本。执行:
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - sudo apt install -y nodejs第一行是下载并执行 NodeSource 的配置脚本,它会往/etc/apt/sources.list.d/里写一个 nodesource.list,把 Node 22 的源加进去。第二行才是真正装 nodejs 包,这个包里同时带了 node 和 npm。装完验证:
node -v npm -v正常输出类似v22.11.0和10.9.0。如果 node -v 报 command not found,说明源没配好或者装失败了,回头检查第一行脚本有没有报错。如果版本是 12.x,说明你装的是系统自带的,NodeSource 源没生效,可以apt-cache policy nodejs看看候选版本。
接下来装 git。Claude Code 很多功能依赖 git,比如它要读项目状态、看 diff、提交改动,没有 git 会直接报错。Ubuntu 22.04 一般自带 git,但版本可能旧,直接装最新的:
sudo apt install -y git git --version输出git version 2.34.1或更高就行。装完顺手配一下用户信息,不然 Claude Code 帮你提交代码时会因为没配 user.name 和 user.email 失败:
git config --global user.name "你的名字" git config --global user.email "你的邮箱"现在装 Claude Code CLI。它是 npm 全局包,包名是@anthropic-ai/claude-code:
npm install -g @anthropic-ai/claude-code如果这一步卡住不动,多半是 npm 默认源在国外,可以临时换成国内镜像:
npm config set registry https://registry.npmmirror.com换完再装一次。装完验证:
claude --version能输出版本号就说明 CLI 装好了。如果报claude: command not found,检查 npm 全局 bin 目录在不在 PATH 里,执行npm config get prefix看看路径,一般是/usr/local,对应的 bin 是/usr/local/bin,确认这个目录在echo $PATH里。
到这一步,Claude Code 本体已经装好了,但它还不能用,因为没配 API 通道。默认它要连 Anthropic 官方接口,需要官方账号和 Key,国内直连经常超时。所以下一步我们要配一个统一的 API 通道,这里用 TaoToken 来做接入,它提供兼容 Anthropic 协议的接口,配好 Base URL 和 Key 就能用。
在配之前,先建好 Claude Code 的配置目录,后面 cc-switch 也会读写这里:
mkdir -p ~/.claude这个目录是 Claude Code 存放配置、会话历史、缓存的地方,默认不存在,第一次运行会自动建,但提前建好省得权限出问题。
3. 配置 Claude Code 的 settings.json 与 cc-switch 接入 TaoToken 通道
这一节是核心,配不好后面全白搭。Claude Code 读的配置文件是~/.claude/settings.json,格式是 JSON,里面用env字段注入环境变量。最关键的三个变量是ANTHROPIC_AUTH_TOKEN(你的 Key)、ANTHROPIC_BASE_URL(API 通道地址)、ANTHROPIC_MODEL(默认模型)。先创建文件:
nano ~/.claude/settings.json填入下面这段,注意把 Key 换成你自己的:
{ "env": { "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "API_TIMEOUT_MS": "3000000", "ANTHROPIC_MODEL": "claude-3-5-sonnet-latest" } }这里ANTHROPIC_BASE_URL填的是 TaoToken 的 API 地址https://taotoken.net/api,它兼容 Anthropic 的接口协议,Claude Code 会往这个地址发请求。API_TIMEOUT_MS设成 3000000 毫秒(50 分钟),是因为大模型处理长上下文时响应慢,默认超时太短会中途断掉。ANTHROPIC_MODEL填你要用的模型 ID,具体支持哪些模型可以在 TaoToken 的文档里查。
保存退出:Ctrl+O 回车,Ctrl+X。Key 从哪来?去 TaoToken 官网注册后,在控制台的 API Keys 页面创建,地址是 https://taotoken.net/api-keys 。创建完复制那串 sk- 开头的字符串,填到上面配置里。
配完先别急着跑,验证一下 JSON 格式对不对,格式错了 Claude Code 会静默忽略配置:
cat ~/.claude/settings.json | python3 -m json.tool能正常格式化输出就说明 JSON 合法。如果报错,检查是不是少了逗号或者多了逗号。
接下来装 cc-switch。cc-switch 是一个图形化的 Claude Code 配置管理工具,用它可以可视化地添加多个模型通道、一键切换,不用每次手改 settings.json。它提供 deb 包,下载安装:
wget https://github.com/farion1231/cc-switch/releases/download/v3.14.1/CC-Switch-v3.14.1-Linux-x86_64.deb sudo dpkg -i CC-Switch-v3.14.1-Linux-x86_64.deb sudo apt-get install -f -y第三行是修复可能的依赖缺失,dpkg 装 deb 包时经常因为缺依赖失败,用apt-get install -f自动补上。装完直接运行:
cc-switch图形界面会弹出来。如果是纯命令行环境没有桌面,cc-switch 跑不起来,这种情况就只能手动改 settings.json,或者用 SSH 端口转发把图形界面转到本地看。
在 cc-switch 界面里,点左上角的加号添加配置。它会让你选供应商类型,选自定义或者 Anthropic 兼容都行。然后填三个关键字段:Base URL 填https://taotoken.net/api,API Key 填你的 TaoToken 密钥,模型名填你要用的模型 ID。填完点添加,然后选中这条配置点“使用”,cc-switch 会自动把配置写进~/.claude/settings.json。
这里有个细节:cc-switch 写入的配置会覆盖你手动改的内容,所以如果你手动配过 settings.json,用 cc-switch 之前先备份一下。另外 cc-switch 管理的配置和手动配置格式一致,都是往 env 里写那几个变量,所以两者可以混用,但建议统一用 cc-switch 管,省得冲突。
配好之后,cc-switch 界面上应该能看到你添加的通道,状态是启用。这时候回到终端,Claude Code 就能读到新配置了。
4. 验证 Claude Code 请求是否跑通与成功结果判断
配置写完,跑一次验证。在终端里直接输入:
claude第一次运行会加载配置,然后进入交互式界面。如果配置正确,你会看到欢迎信息和命令行提示符,可以直接输入问题。比如输入“帮我看看当前目录下有哪些文件”,它会调用工具列目录并返回结果。
如果它卡在认证或者报连接错误,说明配置有问题。最直接的验证方式是发一个最简单的请求,看它能不能返回模型输出。在 Claude Code 交互界面里输入:
你好,请回复"配置成功"四个字正常的话几秒内会返回类似“配置成功”的回复。如果返回的是 401 错误,说明 Key 不对或者没生效;如果返回连接超时,说明 Base URL 不通或者网络有问题;如果返回模型不存在,说明 ANTHROPIC_MODEL 填的模型 ID 不对。
除了交互式验证,也可以直接用 curl 测 API 通道通不通,这样能排除 Claude Code 本身的干扰:
curl -X POST https://taotoken.net/api/v1/messages \ -H "x-api-key: sk-你的密钥" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-3-5-sonnet-latest", "max_tokens": 100, "messages": [{"role": "user", "content": "回复:通道正常"}] }'如果返回 JSON 里带content字段和模型回复,说明通道完全通。如果返回 401,检查 Key;返回 404,检查 URL 路径;返回超时,检查网络到 taotoken.net 的连通性。
实测下来,只要 settings.json 里三个变量填对,Claude Code 基本一次就能跑通。我遇到最多的问题是 Key 复制时带了空格,或者 Base URL 末尾多了斜杠。TaoToken 的 API 地址是https://taotoken.net/api,注意不要写成https://taotoken.net/api/,末尾斜杠有时会导致路径拼接出错。
跑通之后,你可以在项目目录里用 Claude Code 做实际任务,比如让它读代码、改 bug、写测试。它会自动识别当前目录是不是 git 仓库,如果是,还能帮你提交改动。这时候 git 装没装、配没配 user 信息就体现出来了。
5. 部署 Claude Code 常见报错排查:401、local proxy failed 与 reading choices
这一节把部署过程中最常撞到的几个报错集中说一下,都是我自己踩过的。
报错一:401 Unauthorized。这是最常见的,说明 Key 没生效或者不对。先检查~/.claude/settings.json里的ANTHROPIC_AUTH_TOKEN是不是完整的 sk- 开头字符串,有没有多余空格或换行。然后确认这个 Key 在 TaoToken 控制台是启用状态、有余额。如果 Key 没问题,检查是不是 cc-switch 覆盖了配置,打开 cc-switch 看当前启用的通道是不是你配的那条。还有一种情况是环境变量冲突,如果你在 shell 里 export 过ANTHROPIC_AUTH_TOKEN,它会覆盖配置文件里的值,用env | grep ANTHROPIC查一下,有的话 unset 掉。
报错二:local proxy failed 或 connection refused。这个通常出现在你配了本地代理地址的情况下。如果你在 settings.json 里把 Base URL 填成了http://127.0.0.1:xxxx这种本地地址,但本地没有对应的服务在跑,就会报这个。解决办法是把 Base URL 改成实际的 API 通道地址,比如https://taotoken.net/api。另外检查系统代理设置,env | grep -i proxy看看有没有 http_proxy 之类的变量指向一个不可用的地址,有的话 unset。
报错三:reading choices 相关错误或 JSON 解析失败。这个一般出现在模型返回的内容格式不对,或者 API 通道返回了非预期格式。常见原因是ANTHROPIC_MODEL填的模型 ID 不被通道支持,通道返回了错误信息,Claude Code 解析失败。解决办法是确认模型 ID 拼写正确,去 TaoToken 文档里核对支持的模型列表。另外API_TIMEOUT_MS设太短也会导致请求被截断,返回不完整 JSON,把它设成 3000000 这种大值。
报错四:OAuth 相关错误。如果你之前登录过 Anthropic 官方账号,Claude Code 可能缓存了 OAuth token,和现在的 Key 认证冲突。清理一下缓存:
rm -rf ~/.claude/.credentials.json然后重新跑 claude,它会用 settings.json 里的 Key 认证。
报错五:cc-switch 界面打不开。如果是 SSH 连的服务器,没有图形环境,cc-switch 启动会报 cannot open display。这种情况要么在本地桌面环境跑,要么用 X11 转发,要么干脆手动改 settings.json。手动改的话,格式和上面 §3 给的一样,改完重启 claude 生效。
排查的时候有个通用思路:先用 curl 直接测 API 通道,排除 Claude Code 的干扰;再检查 settings.json 格式和内容;最后看环境变量有没有冲突。三步下来基本能定位问题。
6. 用 TaoToken 统一通道管理 Claude Code 多模型配置
跑通之后,你可能会想切换不同模型,比如写代码用 sonnet,快速问答用 haiku。这时候 cc-switch 的价值就体现出来了。在 cc-switch 里可以添加多条配置,每条对应一个模型 ID,用的时候点一下切换,它会自动改写 settings.json。
添加新通道的步骤和 §3 一样:点加号,Base URL 统一填https://taotoken.net/api,Key 用同一个 TaoToken 密钥,模型名换成你要的。这样多条配置共用同一个 Key 和通道,只是模型不同,管理起来很清爽。
如果你不想用图形界面,也可以手动维护 settings.json,但每次切换要改文件、重启 claude,麻烦。cc-switch 的好处是改完即时生效,不用重启。
对于长期做编码任务的场景,可以考虑用 Coding Plan 这类套餐,TaoToken 的 coding-plan 页面有详细说明:https://taotoken.net/coding-plan 。它适合高频调用、长上下文的任务,比按量计费更划算。如果你只是偶尔用用,按量付费的 API Key 就够了。
另外,Claude Code 支持在项目里放.claude/settings.json做项目级配置,和全局的~/.claude/settings.json合并。项目级配置适合团队共享,比如统一模型 ID 和超时时间,但 Key 这种敏感信息不要放项目里,放全局配置或者用环境变量注入。
最后给一个实用技巧:把常用的 claude 启动命令做成 alias,加上常用参数。比如:
echo 'alias cc="claude --model claude-3-5-sonnet-latest"' >> ~/.bashrc source ~/.bashrc这样以后敲cc就能直接启动,省得每次输一长串。模型 ID 换成你常用的那个就行。
整套流程走下来,从裸机到能正常对话,熟练的话二十分钟内能搞定。关键就是 Node.js 版本要够、git 要装、settings.json 三个变量要填对、cc-switch 用来管多模型。遇到报错按 §5 的思路排查,基本都能解决。