使用的环境和工具:VMware上的ubuntu22.04
内存:8GB
CPU:4 核
虚拟磁盘:至少 50GB,最好 60GB+
Ubuntu 根分区 /:至少40GB
注: 下列内容需按步骤进行,若不存在分区太小的情况,可以直接从第二部分开始

本文主要实现内容:
在ubuntu系统中以npm+LiteLLM+国产大模型,实现claude Code的安装和配置


如果磁盘分区太小可以先在VMware中修改磁盘大小,如下图所示
磁盘空间修改
然后再进行下述操作

Claude Code 官方当前支持原生安装和 npm 安装;npm 安装需要 Node.js 18+。本文采用的是 npm 安装。

1. 根分区扩容

扩容部分的适用场景

  • Ubuntu 22.04
  • VMware 虚拟机
  • 磁盘已经在 VMware 里扩到较大,比如 40G、60G、72G
  • 但 Ubuntu 根分区仍然很小,比如 10G

注: 如果读者根分区充足可以忽略第一部分从第二部分开始看

先执行下面这组命令,适用于 VMware 磁盘已经变大,但 Ubuntu 根分区没跟着变大 的情况。

lsblk
sudo fdisk -l
sudo pvs
sudo vgs
sudo lvs

如果你看到类似:

  • /dev/sda 已经是 40G、60G、72G
  • /dev/sda3 是 LVM 分区
  • 根卷是 /dev/mapper/ubuntu--vg-ubuntu--lv

就继续执行。

1.1 安装扩分区工具

sudo apt update
sudo apt install -y cloud-guest-utils gdisk lvm2

1.2 修正 GPT 并扩第 3 分区

sudo sgdisk -e /dev/sda
sudo reboot

重启回来后执行:

sudo TMPDIR=/dev/shm growpart /dev/sda 3

如果看到 CHANGED: partition=3 ...,说明分区已经扩成功。

1.3 如果根分区已满,先释放一点空间

sudo rm -rf /var/lib/apt/lists/*
sudo rm -rf /var/cache/apt/archives/*.deb
sudo rm -rf /var/cache/apt/archives/partial/*
sudo rm -f /var/log/*.gz
sudo truncate -s 0 /var/log/syslog
sudo truncate -s 0 /var/log/kern.log
sudo truncate -s 0 /var/log/auth.log
rm -rf ~/.cache/*
df -h /

1.4 扩 LVM

如果 pvs 里还能看到旧大小,继续:

sudo mkdir -p /etc/lvm/archive
sudo mkdir -p /etc/lvm/backup
sudo pvresize /dev/sda3
sudo lvextend -l +100%FREE -r /dev/mapper/ubuntu--vg-ubuntu--lv

检查结果:

df -h
lsblk
sudo pvs
sudo vgs
sudo lvs

如果成功,你的 / 应该已经从 10G 变成几十 G。


2.配置网络环境

此处需要科学上网才能下载(仅安装时,连接US地区的网络)
该部分内容仅限于虚拟机的网络配置

# 打开bashrc文件
nano ~/.bashrc
# 修改全局配置连接网络
# 这里的 IP 应该是你 Windows 宿主机在虚拟机网络中的网关 IP,通常是 192.168.x.1 或者你设置的 NAT IP
# 假设 Windows IP 是 192.168.108.1,代理端口是7890(可以在科学上网工具中查看)
export http_proxy="http://192.168.108.1:10090"
export https_proxy="http://192.168.108.1:10090"

# 使bashrc修改部分生效
source ~/.bashrc

补充

claude Code官方推荐的安装方式(可以在网络配置后执行)

curl -fsSL https://claude.ai/install.sh | bash

安装后检查:

claude --version
  • 上述内容如果安装成功可以执行下述语句,然后直接跳到第6部分继续执行
sudo apt update
sudo apt install python3 python3-venv python3-pip
  • 如果安装失败就按顺序往下执行

3. 安装系统依赖

sudo apt update
sudo apt install -y curl git jq python3 python3-venv python3-pip ca-certificates gnupg

4. 安装 Node 20

Claude Code 的 npm 安装要求 Node.js 18 或更高。

curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc

nvm install 20
nvm use 20
nvm alias default 20

node -v
npm -v
which node
which npm

5. 安装 Claude Code

下面的安装过程有点长请耐心等待,作者自己安装时花了20多分钟,由于网络原因读者自行斟酌时间

npm cache clean --force
npm install -g @anthropic-ai/claude-code

出现如下图情况,就代表安装好了
在这里插入图片描述

验证:

which claude
claude --version
claude doctor

若配置成功,则如下图所示
在这里插入图片描述


6. 安装 LiteLLM

LiteLLM 官方支持通过 litellm --config ... 启动代理。

mkdir -p "$HOME/ai-gateway"
python3 -m venv "$HOME/litellm_env"
source "$HOME/litellm_env/bin/activate"
python -m pip install --upgrade pip
pip install "litellm[proxy]" "httpx[socks]"

7. 写入环境变量

把下面这段直接执行,但先把两个占位值替换成自己的。

grep -q 'export MODEL_SQUARE_API_BASE=' ~/.bashrc || echo 'export MODEL_SQUARE_API_BASE="自己的_API_BASE"' >> ~/.bashrc
grep -q 'export MODEL_SQUARE_API_KEY=' ~/.bashrc || echo 'export MODEL_SQUARE_API_KEY="自己的API_KEY"' >> ~/.bashrc
grep -q 'export LITELLM_MASTER_KEY=' ~/.bashrc || echo 'export LITELLM_MASTER_KEY="sk-litellm-local"' >> ~/.bashrc
grep -q 'export NO_PROXY=' ~/.bashrc || echo 'export NO_PROXY="127.0.0.1,localhost"' >> ~/.bashrc
grep -q 'export no_proxy=' ~/.bashrc || echo 'export no_proxy="127.0.0.1,localhost"' >> ~/.bashrc
grep -q 'export PATH="$HOME/bin:$PATH"' ~/.bashrc || echo 'export PATH="$HOME/bin:$PATH"' >> ~/.bashrc

source ~/.bashrc

检查:

echo "$MODEL_SQUARE_API_BASE"
echo "$MODEL_SQUARE_API_KEY"
echo "$LITELLM_MASTER_KEY"

8. config.yaml设置

LiteLLM 官方支持在 config.yaml 里设置 model_listgeneral_settings.master_keylitellm_settings.drop_params
此处我的是按“统一模型广场 base/key”的方式写的,读者若有多个base/key可以分开写。

cat > "$HOME/ai-gateway/config.yaml" <<'EOF'
model_list:
  - model_name: gpt-4-qwen
    litellm_params:
      model: dashscope/qwen3.6-plus
      api_base: os.environ/MODEL_SQUARE_API_BASE
      api_key: os.environ/MODEL_SQUARE_API_KEY

  - model_name: gpt-4-glm
    litellm_params:
      model: openai/glm-5.1
      api_base: os.environ/MODEL_SQUARE_API_BASE
      api_key: os.environ/MODEL_SQUARE_API_KEY

  - model_name: gpt-4-kimi
    litellm_params:
      model: openai/kimi-k2.5
      api_base: os.environ/MODEL_SQUARE_API_BASE
      api_key: os.environ/MODEL_SQUARE_API_KEY

litellm_settings:
  drop_params: true

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY
EOF

查看确认:

cat "$HOME/ai-gateway/config.yaml"

9. 清理 Claude Code 本地旧配置

确保Claude Code 的本地 settings 和环境变量不会影响最终行为;

mkdir -p "$HOME/.claude/backup"
cp "$HOME/.claude/settings.json" "$HOME/.claude/backup/settings.json.bak" 2>/dev/null || true
printf '{}\n' > "$HOME/.claude/settings.json"
rm -f .claude/settings.json
rm -f .claude/settings.local.json

**注:**若上述内容你都已经成功配置完成,下述内容一般来说不会有错误出现,只需要复制执行即可

10. 创建启动脚本

10.1 ~/bin/start-litellm.sh

mkdir -p "$HOME/bin"

cat > "$HOME/bin/start-litellm.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

source "$HOME/.bashrc"

VENV_PATH="$HOME/litellm_env"
CONFIG_FILE="$HOME/ai-gateway/config.yaml"

if [[ ! -f "$VENV_PATH/bin/activate" ]]; then
  echo "错误: 找不到虚拟环境: $VENV_PATH"
  exit 1
fi

if [[ ! -f "$CONFIG_FILE" ]]; then
  echo "错误: 找不到配置文件: $CONFIG_FILE"
  exit 1
fi

if [[ -z "${MODEL_SQUARE_API_KEY:-}" ]]; then
  echo "错误: MODEL_SQUARE_API_KEY 未设置"
  exit 1
fi

if [[ -z "${LITELLM_MASTER_KEY:-}" ]]; then
  echo "错误: LITELLM_MASTER_KEY 未设置"
  exit 1
fi

source "$VENV_PATH/bin/activate"

if ! command -v litellm >/dev/null 2>&1; then
  echo "错误: litellm 未安装"
  exit 1
fi

if curl --noproxy "*" -fsS \
  -H "Authorization: Bearer ${LITELLM_MASTER_KEY}" \
  http://127.0.0.1:4000/v1/models >/dev/null 2>&1; then
  echo "LiteLLM 已经在运行: http://127.0.0.1:4000"
  exit 0
fi

echo "启动 LiteLLM..."
exec litellm --config "$CONFIG_FILE"
EOF

chmod +x "$HOME/bin/start-litellm.sh"

10.2 ~/bin/check-litellm.sh

cat > "$HOME/bin/check-litellm.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

source "$HOME/.bashrc"

if [[ -z "${LITELLM_MASTER_KEY:-}" ]]; then
  echo "错误: LITELLM_MASTER_KEY 未设置"
  exit 1
fi

if ! curl --noproxy "*" -fsS \
  -H "Authorization: Bearer ${LITELLM_MASTER_KEY}" \
  http://127.0.0.1:4000/v1/models >/dev/null 2>&1; then
  echo "LiteLLM 当前不可用或认证失败: http://127.0.0.1:4000"
  exit 1
fi

echo "[OK] /v1/models 可访问"
curl --noproxy "*" -s \
  -H "Authorization: Bearer ${LITELLM_MASTER_KEY}" \
  http://127.0.0.1:4000/v1/models | head -c 500
echo
echo

echo "[OK] 测试 /v1/messages"
curl --noproxy "*" -s -X POST http://127.0.0.1:4000/v1/messages \
  -H "Authorization: Bearer ${LITELLM_MASTER_KEY}" \
  -H "Content-Type: application/json" \
  -H "anthropic-version: 2023-06-01" \
  -d '{
    "model": "gpt-4-qwen",
    "max_tokens": 64,
    "messages": [{"role": "user", "content": "你好"}]
  }' | head -c 800
echo
EOF

chmod +x "$HOME/bin/check-litellm.sh"

10.3 ~/bin/start-claude-code.sh

cat > "$HOME/bin/start-claude-code.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

source "$HOME/.bashrc"

if [[ -z "${LITELLM_MASTER_KEY:-}" ]]; then
  echo "错误: LITELLM_MASTER_KEY 未设置"
  exit 1
fi

export ANTHROPIC_BASE_URL="http://127.0.0.1:4000"
export ANTHROPIC_AUTH_TOKEN="${LITELLM_MASTER_KEY}"

export ANTHROPIC_DEFAULT_SONNET_MODEL="gpt-4-qwen"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="gpt-4-qwen"
export ANTHROPIC_DEFAULT_OPUS_MODEL="gpt-4-qwen"

export NO_PROXY="127.0.0.1,localhost"
export no_proxy="127.0.0.1,localhost"

unset ANTHROPIC_API_KEY
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
unset http_proxy https_proxy all_proxy

if [[ $# -ge 1 ]]; then
  PROJECT_DIR="$1"
else
  PROJECT_DIR="$(pwd)"
fi

if [[ ! -d "$PROJECT_DIR" ]]; then
  echo "错误: 项目目录不存在: $PROJECT_DIR"
  exit 1
fi

if ! curl --noproxy "*" -fsS \
  -H "Authorization: Bearer ${LITELLM_MASTER_KEY}" \
  http://127.0.0.1:4000/v1/models >/dev/null 2>&1; then
  echo "LiteLLM 未启动、不可访问,或者认证失败: http://127.0.0.1:4000"
  echo "请先在另一个终端执行: llmup"
  exit 1
fi

cd "$PROJECT_DIR"
exec claude --model gpt-4-qwen
EOF

chmod +x "$HOME/bin/start-claude-code.sh"

10.4 写别名

grep -q "alias llmup=" ~/.bashrc || echo "alias llmup='$HOME/bin/start-litellm.sh'" >> ~/.bashrc
grep -q "alias llmcheck=" ~/.bashrc || echo "alias llmcheck='$HOME/bin/check-litellm.sh'" >> ~/.bashrc
grep -q "alias ccup=" ~/.bashrc || echo "alias ccup='$HOME/bin/start-claude-code.sh'" >> ~/.bashrc
grep -q "alias cchere=" ~/.bashrc || echo "alias cchere='$HOME/bin/start-claude-code.sh .'" >> ~/.bashrc

source ~/.bashrc

11. 第一次正式联调

终端 1:启动 LiteLLM

llmup

终端 2:检查 LiteLLM

llmcheck

如果输出里有:

  • [OK] /v1/models 可访问
  • [OK] 测试 /v1/messages

说明 LiteLLM 网关正常。

终端 2:启动 Claude Code

cd /你的项目目录
ccup

12. 第一次在 Claude Code 中验证

输入:

你好

再输入:

请先阅读当前项目结构,告诉我主要目录和入口文件。

如果 LiteLLM 窗口里看到:

POST /v1/messages?beta=true ... 200 OK

就说明整套链路已经跑通。


13. 切换模型

现在这套配置可以在 Claude Code 里直接切:

/model gpt-4-qwen
/model gpt-4-glm
/model gpt-4-kimi

前提是你的模型广场对这几个底层模型名都支持。


到此如果你的配置都没问题,那么恭喜你!你已经配置完成。

完成后的效果图如下

完成后的效果图

14. 常见问题和修正方法

14.1 根分区满

表现:

  • No space left on device
  • apt update 失败
  • growpart/tmp 建临时目录失败
  • pvresize 无法写 /etc/lvm/archive

修法:按本清单第 2 节扩容。

14.2 Node 版本过低

如果 node -v 还是 12,重新:

source ~/.bashrc
nvm use 20

14.3 Claude Code 安装卡住

npm 安装时超过 5 分钟没动静,通常是异常。可先:

npm cache clean --force

如果出现残留目录冲突,再清理:

rm -rf ~/.nvm/versions/node/*/lib/node_modules/@anthropic-ai/claude-code
rm -rf ~/.nvm/versions/node/*/lib/node_modules/@anthropic-ai/.claude-code-*
npm install -g @anthropic-ai/claude-code

14.4 /v1/models 401

这是因为你启用了 master_key,访问 LiteLLM 时必须带:

Authorization: Bearer $LITELLM_MASTER_KEY

14.5 Claude Code 提示 auth conflict

说明同时设了:

  • ANTHROPIC_AUTH_TOKEN
  • ANTHROPIC_API_KEY

当前方案只保留前者。

14.6 上游不支持某些 Anthropic 参数

保留:

litellm_settings:
  drop_params: true

否则容易报 400。([liteLLM][2])


总结

最后,在日常使用中只要用这三个指令即可

终端 1:
该指令是启动LiteLLM

llmup

终端 2:
该指令是在指定目录下启动claude Code

cd /你的项目目录
ccup

检查

该指令是用来检验网络连接是否成功

llmcheck

https://github.com/0voice

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐