1. 为什么要把 Claude Code 搬到云服务器上
Claude Code 是一个跑在终端里的 AI 编程助手,能读写文件、执行命令、跑测试、做重构。它适合谁?适合习惯命令行、想让 AI 直接操作项目文件的开发者。但它有个很现实的限制:它跑在你的本地电脑上。你在家开着笔记本让它重构一个模块,任务要跑十几分钟,这时候你要出门吃饭、要睡觉、要通勤,怎么办?关电脑任务就断了,不关电脑机器一直烤着,夏天散热、噪音、电费都是问题。
我试过最直接的解法,就是把 Claude Code 放到一台 7×24 在线的云服务器上,用 tmux 让会话脱离 SSH 连接独立存活,用 Termius 在手机上随时接管,再顺手用同一台机器托管一个静态站点。这样一台最低配的轻量服务器就能同时承担远程编程、多端备份和建站三件事。
这里有个关键认知:Claude Code 本身很轻。它本质上是一个 Node.js CLI 程序,把你的指令打包发给模型 API,再把返回结果渲染到终端,真正的计算发生在远端服务器上,你的机器只是一个"遥控器加文件操作代理"。所以 2 核 2G 的最低配服务器就完全够用,一年不到一百块。下面我把整套流程拆成可复制的步骤,配置命令可以直接抄。
2. TaoToken 前置准备:拿到 Base URL 和 API Key
在动手配服务器之前,先把模型接入这一环解决掉。Claude Code 默认要访问 Anthropic 官方接口,国内服务器直连不通,所以需要配置一个可用的 API 入口。这里我用 TaoToken 来做接入,它提供兼容 Anthropic 协议的接口,Claude Code 原生支持自定义 Base URL,改两个环境变量就能接上。
你需要准备两样东西:一个 API Key,一个 Base URL。获取方式很简单,登录 TaoToken 官网,进入控制台,在 API Keys 页面创建一个新的密钥,复制出来形如sk-xxxxx的字符串。Base URL 用https://taotoken.net/api即可,注意这个地址后面不加任何多余路径,Claude Code 会自己在后面拼接/v1/messages这类端点。
如果你更习惯图形化验证模型是否通,可以先用模型对话页面发一条测试消息,确认 Key 有效、额度正常,再去配服务器,这样能少走一段弯路。对于长期要跑编码任务和 Agent 的场景,可以了解一下 Coding Plan,它更适合高频调用;只是偶尔用用,按量付费的 API Key 就够了。
这里要强调一点:API Key 等同于你的账户凭证,绝对不能提交到 Git 仓库,哪怕是私有仓库也不行。后面讲备份的时候我会专门说怎么用.gitignore把它挡在外面。拿到 Key 之后先放一边,我们进入服务器配置环节。
3. 可复制配置:服务器环境、tmux 与 Docker 一次搭好
这一节是全文的核心,所有配置都可以直接复制。以 Ubuntu 22.04/24.04 为例,假设你已经用云服务商的控制台创建好了一台轻量服务器,拿到了公网 IP 和 root 初始密码。
第一步先做安全加固,因为服务器有公网 IP,每天都会被扫描器爬。创建日常用户,不要用 root 干活:
adduser jackson usermod -aG sudo jackson su - jackson mkdir -p ~/.ssh && chmod 700 ~/.ssh nano ~/.ssh/authorized_keys # 粘贴 Termius 导出的公钥 chmod 600 ~/.ssh/authorized_keys然后编辑/etc/ssh/sshd_config,改三项:把Port改成 2222 挡掉大部分自动扫描,把PasswordAuthentication设为no只认密钥,把PermitRootLogin设为no禁止 root 直接登录。改完sudo systemctl restart sshd。注意改端口前一定要先在云服务商的安全组里放行 2222,否则会把自己锁在门外。
第二步装 Node.js 和 Claude Code:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs npm install -g @anthropic-ai/claude-code echo 'export ANTHROPIC_API_KEY="sk-你的密钥"' >> ~/.bashrc echo 'export ANTHROPIC_BASE_URL="https://taotoken.net/api"' >> ~/.bashrc source ~/.bashrc第三步配 tmux,针对手机操作优化。写入~/.tmux.conf:
cat > ~/.tmux.conf << 'EOF' set -g mouse on set -g history-limit 100000 set -g status-right '%H:%M | #S' set -g default-terminal "screen-256color" set -sg escape-time 10 EOFmouse on让 Termius 可以触摸滚动,history-limit加大缓冲区方便回看 Claude 的长输出,escape-time降低延迟提升手机端响应,这几项实测体验提升明显。
第四步,如果你还要建站,用 Docker 做隔离。先装 Docker:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker jackson然后在~/website/docker-compose.yml里写服务定义:
version: '3.8' services: nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./certbot/www:/var/www/certbot - ./certbot/conf:/etc/letsencrypt restart: always website: image: halohub/halo:2 ports: - "127.0.0.1:8090:8090" volumes: - ./halo-data:/root/.halo2 restart: always注意127.0.0.1:8090:8090这个写法,应用容器只监听本地回环,公网流量必须经过 Nginx 反代,这是一个很容易忽略但很重要的安全细节。启动用docker compose up -d,查看状态docker compose ps,看日志docker compose logs -f,停止docker compose down,四个命令覆盖九成场景。
4. 验证请求:从本地到云端的完整跑通步骤
配置写完必须验证,不然你不知道哪一环断了。先验证 Claude Code 能不能正常调用模型。SSH 进服务器,新建一个 tmux 会话:
tmux new -s claude claude第一次运行会引导你确认一些设置,进去之后随便问一句"帮我看看当前目录有哪些文件",如果它能正常返回并调用工具,说明 API 通路是通的。如果卡住或报错,先看下一节的排查。
接着验证 tmux 的会话保持。在 Claude 正在跑一个任务的时候,按Ctrl+B然后按D,这会分离会话,你会回到普通 shell。这时候直接关掉 Termius,甚至关掉手机屏幕。等几分钟重新连上服务器,执行:
tmux attach -t claude你会看到 Claude 的输出历史都还在,任务也没中断。这就是 tmux 的核心价值:分离不是退出,任务在服务器上继续跑。
再验证 Docker 建站。浏览器访问服务器公网 IP,如果看到 Nginx 默认页或你的站点,说明容器起来了。用docker compose ps确认容器状态是Up,用curl -I http://127.0.0.1:8090确认应用容器本地可达。
最后验证备份链路。在项目目录里执行一次手动备份脚本,确认 GitHub 和 Gitee 两个远程都推送成功,然后去两个平台的网页上看最新提交时间是不是刚刚。这一步很多人配完就不管了,结果真出事的时候发现 crontab 根本没跑,所以一定要当场验证一次。
5. 本篇常见错误排查:401、local proxy failed 与 OAuth 报错
配这套环境最容易撞的几个报错,我按真实遇到的整理一下。
401 Unauthorized:最常见,基本是 API Key 错了或者没生效。先确认echo $ANTHROPIC_API_KEY能打印出正确的 Key,如果为空说明.bashrc没 source 或者写错了行。再确认 Key 本身没过期、额度没耗尽,可以去模型对话页面发一条消息验证。还有一种情况是 Base URL 写错了,比如多加了/v1导致路径重复,正确写法就是https://taotoken.net/api。
local proxy failed / connection refused:这个通常出现在你配了本地代理但服务器上并没有代理服务。Claude Code 会读取HTTP_PROXY、HTTPS_PROXY这类环境变量,如果.bashrc里残留了本地代理配置,服务器上就会连不上。检查env | grep -i proxy,把不需要的清掉。
reading choices 相关报错:这类多半是返回体格式不符合预期,常见于 Base URL 指向了一个不兼容 Anthropic 协议的端点。确认你用的是兼容 Anthropic Messages API 的地址,而不是 OpenAI 格式的地址,两者请求体结构不同。
OAuth 相关报错:如果你之前用过 Claude 的 OAuth 登录方式,环境变量和登录态可能冲突。清掉旧的凭据缓存,统一用 API Key 方式接入,避免两套认证打架。
SSH 连不上:先确认安全组放行了你改的端口,再确认sshd服务在跑。如果真锁在外面了,去云服务商控制台用 VNC 登录救回来。
排查的通用思路是分层:先确认网络通不通(curl测 Base URL),再确认认证对不对(Key 是否有效),最后确认协议兼不兼容(返回体格式)。一层层往下排,比瞎改配置快得多。
6. 多端备份、成本核算与最终配置清单
数据全放云服务器上有风险,服务器被删、账号异常、忘记续费都可能让数据没了,所以备份必须做,而且要多端。我的架构是四份数据:服务器本体、GitHub 私有仓库、Gitee 私有仓库、家里电脑本地副本。两个代码平台分属不同网络环境,双份才叫冗余。
配置双远程推送:
git remote add github git@github.com:你的用户名/项目名.git git remote add gitee git@gitee.com:你的用户名/项目名.git写一个备份脚本~/bin/git-backup.sh,有变更就自动提交并推送到两个远程,然后用 crontab 每天凌晨三点自动跑。.gitignore里必须加上.env、.env.*、.claude/这些,把 API Key 挡在仓库外面。
成本上算笔账:国内轻量服务器首年 50 到 99 元,Termius 免费版够用,API 按实际用量。对比家里电脑 24 小时开机,一台中端台式机满载 150W,一年电费六七百,还没算空调降温和硬件损耗。云服务器不是更贵,是更便宜。
最终推荐配置:腾讯云或阿里云轻量,就近节点,2 核 4G / 60G,Ubuntu 24.04 LTS;API 通路用 TaoToken 接入;会话管理 tmux 加定制配置;手机端 Termius 加 Snippets 快捷命令;备份用 Git 双远程加本地 rsync 加 crontab;建站用 Docker 加 docker-compose,宿主机保持纯净;大文件走对象存储。
几个容易踩的坑再提醒一遍:改 SSH 端口前先放行防火墙,API Key 千万别进 Git,轻量服务器只能升配不能降配所以初始买最低配,Ctrl+B然后D是分离不是退出,容器端口绑127.0.0.1,备份要定期验证。
整套方案折腾下来,最大的感受是 Claude Code 这类 CLI Agent 天生适合云端部署:它足够轻,真正的算力在远端;它是纯终端的,SSH 就够;它的任务往往长时间跑,正好配 tmux。这三个特性凑在一起,云服务器加 tmux 加手机 SSH 就成了几乎最优解。工具本身不复杂,难的是想清楚每一层在解决什么问题。
需要接入的话,API Key 在控制台的 API Keys 页面创建,接入细节可以对照接入文档,验证模型是否通可以用模型对话页面,长期跑编码任务可以看 Coding Plan。