共计 2136 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点
在企业开发环境中,我们常常遇到以下场景:

- 生产服务器严格限制外网访问,无法使用
pip install或npm install等在线安装方式 - 安全合规要求所有第三方组件必须通过内部仓库分发
- 需要确保开发、测试、生产环境依赖版本完全一致
在线安装方案存在三个致命缺陷:
- 依赖实时下载导致部署时间不可控
- 无法确保依赖版本的一致性
- 存在供应链攻击风险(如恶意包注入)
技术方案
离线安装包构建流程
-
环境准备:在可联网的构建机上安装与目标环境相同的操作系统版本
-
依赖解析:
# 生成 requirements.txt 的依赖树 pip install pipdeptree pipdeptree -p claude-code > dependencies.txt -
静态打包:
# 创建离线包目录结构 mkdir -p offline_pkg/{whl,tar.gz,deb} # 下载所有依赖(需 Python3.6+)pip download -r requirements.txt \ --dest offline_pkg/whl \ --platform manylinux2014_x86_64 \ --only-binary=:all:
带错误处理的安装脚本
#!/bin/bash
# 离线安装脚本示例
set -eo pipefail
LOG_FILE="install.log"
PKG_DIR="offline_pkg"
function log() {echo "[$(date'+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
function validate_checksum() {local expected=$(cat "$PKG_DIR/SHA256SUMS" | grep "claude-code")
local actual=$(sha256sum "$PKG_DIR/claude-code.tar.gz")
if [["$expected" != "$actual"]]; then
log "[ERROR] 校验码不匹配"
exit 1
fi
}
# 主安装流程
log "开始安装 Claude Code"
validate_checksum
log "安装 Python 依赖"
pip install --no-index \
--find-links="$PKG_DIR/whl" \
-r "$PKG_DIR/requirements.txt" \
|| {log "[ERROR] 依赖安装失败"; exit 2; }
log "解压主程序包"
tar -xzf "$PKG_DIR/claude-code.tar.gz" -C /opt \
|| {log "[ERROR] 解压失败"; exit 3; }
log "安装完成"
避坑指南
GLIBC 版本冲突
典型报错:
/lib64/libc.so.6: version `GLIBC_2.28' not found
解决方案:
-
在构建机上使用旧版 Docker 镜像:
FROM centos:7 # 使用老版本基础镜像 -
或通过 conda 环境降级:
conda install -c conda-forge gcc=7.3.0
Python 虚拟环境隔离
推荐方案:
python -m venv /opt/claude-env
source /opt/claude-env/bin/activate
pip install --no-index -f ./offline_pkg claude-code
证书信任链问题
处理步骤:
-
导出企业根证书:
openssl s_client -showcerts -connect repo.example.com:443 </dev/null 2>/dev/null \ | openssl x509 -outform PEM > internal-ca.pem -
在安装脚本中添加:
cp internal-ca.pem /etc/ssl/certs/ update-ca-certificates
生产验证
完整性校验方案
-
生成校验文件:
cd offline_pkg sha256sum *.tar.gz *.whl > SHA256SUMS gpg --detach-sign SHA256SUMS -
验证时执行:
gpg --verify SHA256SUMS.sig sha256sum -c SHA256SUMS --ignore-missing
性能测试数据
测试环境:4 核 CPU/8GB 内存的 CentOS 7 虚拟机
| 指标 | 在线安装 | 离线安装 |
|---|---|---|
| 总耗时 | 5m23s | 1m12s |
| 内存占用峰值 | 1.2GB | 800MB |
| 冷启动时间 | 8.7s | 3.2s |
延伸思考
自动化部署工具设计
可扩展为以下模块:
- 依赖扫描器:自动识别项目中的显式 / 隐式依赖
- 打包器:生成包含所有依赖的离线包
- 验证器:检查环境兼容性和依赖冲突
- 部署器:原子化安装和回滚机制
与容器化方案对比
| 维度 | 离线包方案 | 容器化方案 |
|---|---|---|
| 部署速度 | 快(无需拉取镜像) | 中等 |
| 资源占用 | 低 | 高(需运行 runtime) |
| 隔离性 | 依赖虚拟环境 | 完全隔离 |
| 适用场景 | 传统服务器 | 云原生环境 |
结语
通过本文介绍的离线安装方案,我们成功在银行客户的内网环境中部署了 Claude Code 系统。实际落地时还需要注意:
- 定期更新离线包中的安全依赖(建议季度更新)
- 为不同 Linux 发行版维护独立的包仓库
- 在 CI 流水线中加入离线构建验证阶段
这套方案已稳定运行 9 个月,累计部署 23 次,失败率为 0。希望这份实践对面临类似场景的团队有所启发。
正文完
