很多同学第一次把 Claude Code 这类 AI 编程助手和谷歌云(Google Cloud)放在一起时,首先要面对的问题往往是“环境到底怎么搭”“AI 生成的代码到底怎么部署到云服务器上”“部署完怎么让它一直在线”。本文就围绕这条完整链路,从零开始做一次谷歌云上用 Claude 搭建部署应用的实战,覆盖云虚拟机创建、Claude Code 安装、AI 生成 Web 应用、systemd 常驻服务和公网访问验证。无论你是刚接触云服务器的新手,还是想把 AI 编程助手接入正式研发流程的开发者,都可以跟着走一遍。
1. 背景与核心概念
1.1 什么是 Claude Code
Claude Code 是 Anthropic 官方推出的命令行编程助手,本质上是一个跑在终端里的 AI 结对程序员。你在项目目录下启动claude命令,就能用自然语言描述需求,它可以读取项目文件、创建和修改代码、执行 Shell 命令、运行测试、操作 Git 等。
它和网页版 Claude 的核心区别在于工作形态:网页版更适合做问答、文档总结和片段生成;Claude Code 则强调和本地项目、文件系统、开发流程深度绑定。也就是说,它不是在“另一个窗口”里给你建议,而是直接在你当前的项目环境里干活。
1.2 为什么把 Claude Code 和谷歌云结合
谷歌云是全球主流的公有云平台之一,提供计算、存储、数据库、Kubernetes 等一整套云服务。把 Claude Code 和谷歌云放在一起,通常对应三类场景:
- 远程开发:本地电脑性能不够,或者需要和团队成员共用一套开发环境,直接在云端虚拟机上跑 Claude Code。
- 生成即部署:让 Claude Code 生成 Web 应用、API 服务,然后在同一台云端机器上完成安装依赖、启动服务、开放端口,形成“从需求到上线”的闭环。
- 自动化任务:使用 Claude Code 的非交互模式写脚本、生成文档、做批量代码处理,再接入 CI/CD 流水线。
本文要实践的正是第二种场景,这也是最直观、最有成就感的一条路径。
1.3 本文实战内容
先交代清楚整篇文章会走通的流程:
- 在本地安装 Claude Code 和 gcloud 命令行工具。
- 在谷歌云上创建一台 Ubuntu 虚拟机,并放行 Web 访问端口。
- SSH 登录虚拟机,安装 Node.js 运行环境和 Claude Code。
- 用 Claude Code 生成一个 Express Web 应用,提供首页和健康检查接口。
- 把应用配置成 systemd 常驻服务,通过公网访问验证。
- 最后整理高频报错、排查思路和工程建议。
整个流程覆盖“创建云资源 → AI 生成代码 → 部署上线”的完整链路,理解之后,你可以把同样的思路迁移到 Python、Go、Java 等更多技术栈。
2. 环境准备与版本说明
2.1 本地前置条件
本文的本地演示环境以 macOS / Linux 终端为例,Windows 用户建议使用 Windows Terminal 配合 WSL2,命令基本通用。
开始前需要准备:
- 一个谷歌云账号,且已开通 Compute Engine API。
- 一个可用的 Anthropic 账号或 API Key,用于 Claude Code 登录认证。
- Node.js 18 或更高版本,用于通过 npm 安装 Claude Code。
- 一台能正常连接谷歌云 API 的电脑。
需要说明的是,Claude Code 迭代速度比较快,版本号会持续更新。本文不会写死具体版本号,你安装时以官方 npm 仓库中的最新稳定版为准,重点是理解完整的配置思路。
2.2 安装 Claude Code
Claude Code 官方推荐通过 npm 全局安装:
npm install -g @anthropic-ai/claude-code安装完成后验证版本:
claude --version如果能输出版本号,说明安装成功。如果提示command not found,通常是 npm 全局安装目录不在 PATH 中。可以执行npm prefix -g查看全局目录,再把它加入系统 PATH。
安装速度较慢或失败时,先检查当前 npm 镜像源:
npm config get registry如果用的是某个镜像源且不稳定,可以临时切换为官方 npm 源再安装:
npm install -g @anthropic-ai/claude-code --registry=https://registry.npmjs.org2.3 初始化并登录 Claude Code
第一次运行claude时,它一般会引导你完成登录,常见有两种方式:
- 账号 OAuth 登录:在浏览器中完成 Anthropic 账号授权,适合已订阅 Claude 相关服务的用户。
- API Key 登录:通过
ANTHROPIC_API_KEY环境变量指定你自己的 API Key,适合按 token 计费的用户。
建议把 API Key 放在环境变量里,而不是写进项目代码。比如在~/.bashrc或~/.zshrc中追加:
export ANTHROPIC_API_KEY="你的_API_Key"保存后执行source ~/.bashrc,再运行claude验证能否进入会话界面。
不同时期官方对 Claude Code 的账号订阅策略会调整,如果你没有 API Key,请先确认当前官方文档中的开通方式,以官方说明为准。
2.4 安装并初始化 gcloud
gcloud 是谷歌云官方命令行工具,安装方式取决于系统:
- macOS:
brew install --cask google-cloud-sdk - Linux:下载官方 tar 包解压后执行
install.sh - Windows:使用 PowerShell 安装脚本
安装完成后执行初始化:
gcloud initgcloud init会引导你登录账号、选择项目、设置默认区域。如果已经登录过,也可以直接切换项目:
gcloud config set project 你的项目ID查看当前配置确认无误:
gcloud config list确认账户、项目、区域都正确后,本地环境准备完成。
3. Claude Code 核心用法解析
3.1 交互式模式
在项目目录下运行:
cd /path/to/your/project claude进入交互式界面后,你可以直接输入自然语言指令。比如输入/init,Claude Code 会分析当前目录结构并生成 CLAUDE.md 项目说明文件,之后它会更理解项目背景。
也可以直接提需求:
帮我在当前目录下创建一个最简单的 Express Web 应用,监听 3000 端口,提供一个 /health 健康检查接口。Claude Code 通常会先输出执行计划,再创建文件、安装依赖、启动验证。这个过程和真人结对编程的节奏很像:先对齐目标,再动手执行。
3.2 非交互式模式
在脚本或 CI 流水线中,更适合使用非交互式模式:
claude -p "查看当前目录下所有 .js 文件,并把每个文件的第一个函数名输出到 result.txt"-p表示 print 模式,执行完对话后直接退出并输出结果。这种模式很适合批量任务、自动化文档生成、代码检查等场景。
3.3 权限控制与安全检查
Claude Code 在执行本地命令前会做权限确认,默认会询问是否允许运行 Shell 命令、修改文件等。对于安全要求较高的场景,你可以在对话中明确限制它的操作范围,比如:
只修改 src 目录下的文件,不要执行部署命令。也可以使用内置的/help查看当前版本的权限配置项。需要特别提醒的是:Claude Code 能执行命令,本质上和你在终端里敲命令拥有相同的能力,因此不要在一个权限过大的账号下让它随意操作生产环境。
3.4 在远程服务器上使用
Claude Code 本质是一个 CLI 工具,天然支持在 SSH 远程服务器中使用。你只需要在服务器上同样安装 Node.js 和 Claude Code,然后通过 SSH 登录服务器运行claude。
远程使用的优势很明显:
- 代码和运行环境在同一台机器上,AI 生成完代码可以直接启动验证。
- 不需要把部署产物频繁同步回本地。
- 团队成员可以共用同一台开发机。
不过要额外注意,远程服务器上的 API Key 和账号信息要妥善保管,不要写入任何会被提交到 Git 仓库的文件。
4. 谷歌云环境准备
4.1 创建虚拟机实例
先看一下可用的区域列表:
gcloud compute zones list | head -20选择一个离你较近的区域,创建虚拟机。本文用一台轻量级 Ubuntu 22.04 虚拟机:
gcloud compute instances create claude-demo \ --zone=asia-east1-a \ --machine-type=e2-small \ --image-family=ubuntu-2204-lts \ --image-project=ubuntu-os-cloud \ --boot-disk-size=20GB参数说明:
| 参数 | 说明 |
|---|---|
| claude-demo | 实例名称,可自定义 |
| --zone | 实例所在区域 |
| --machine-type | 机器规格,e2-small 适合轻量实验 |
| --image-family | 操作系统镜像版本 |
| --image-project | 镜像所属项目 |
| --boot-disk-size | 系统盘大小,单位 GB |
实例规格会直接影响成本和性能。本文演示的应用很小,e2-small 足够;如果后续要跑更重的构建任务,可以换成 e2-standard-2 或更高规格。
4.2 开放防火墙端口
默认情况下,谷歌云虚拟机只有少量端口对外开放。我们要通过浏览器访问 Web 应用,需要放行 3000 端口:
gcloud compute firewall-rules create allow-node-app \ --allow tcp:3000 \ --source-ranges 0.0.0.0/0 \ --description "Allow access to Node.js demo app"这里必须明确一点:0.0.0.0/0表示允许所有来源 IP 访问,演示阶段这样配置最省事,但生产环境一定要收紧为指定 IP 段,或者把应用放在负载均衡器后面统一管理入口流量。最小权限原则在云安全里永远是第一位的。
4.3 SSH 登录虚拟机
gcloud compute ssh claude-demo --zone=asia-east1-aSSH 登录成功后,你会看到 Ubuntu 的终端提示符。接下来在虚拟机上安装基础软件。
先更新系统包并安装 Node.js。Ubuntu 22.04 默认软件源里的 Node.js 版本偏低,推荐使用 NodeSource 源安装较新的版本:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs安装完成后验证:
node -v npm -v4.4 在虚拟机上安装 Claude Code
在虚拟机上同样通过 npm 安装:
sudo npm install -g @anthropic-ai/claude-code为了安全,建议不要用 root 运行业务应用,而是创建一个普通用户:
sudo adduser coder sudo usermod -aG sudo coder切换到coder用户:
sudo su - coder在coder用户下配置 API Key:
echo 'export ANTHROPIC_API_KEY="你的_API_Key"' >> ~/.bashrc source ~/.bashrc到这里,虚拟机的开发环境准备完毕。接下来进入正式实战。
5. 完整实战:用 Claude Code 生成并部署 Web 应用
5.1 明确需求
在让 AI 写代码之前,先把需求写清楚。模糊的需求会得到模糊的结果,这也是很多 AI 辅助开发效果不佳的根源。本文的需求如下:
创建一个 Node.js Web 应用,使用 Express 框架,提供两个接口:
- GET / 返回一段 HTML,页面标题显示“Claude Code on Google Cloud”。
- GET /health 返回 JSON,内容为
{ "status": "ok" }。 应用监听 3000 端口。
5.2 创建项目目录
mkdir -p ~/app && cd ~/app5.3 用 Claude Code 生成代码
在项目目录下启动:
claude输入如下需求:
在当前目录下创建一个 Express 应用: 1. 使用 package.json 管理依赖,express 版本用最新稳定版。 2. 入口文件是 app.js。 3. 提供 GET / 接口,返回一个简单的 HTML 页面。 4. 提供 GET /health 接口,返回 {"status":"ok"}。 5. 监听 3000 端口。 之后帮我运行 npm install 安装依赖。Claude Code 会先输出执行计划,再创建文件并执行安装命令。完成后查看目录:
ls -la ~/app预期会看到package.json、app.js、node_modules等文件。
5.4 核心代码说明
下面这段代码是 Express 应用的核心逻辑,你可以把它和 Claude Code 生成的结果对照检查:
// 文件路径:~/app/app.js const express = require('express'); const app = express(); const PORT = 3000; app.get('/', (req, res) => { res.send(` <html> <head><title>Claude Code on Google Cloud</title></head> <body> <h1>Hello from Claude Code</h1> <p>Deployed on Google Cloud VM.</p> </body> </html> `); }); app.get('/health', (req, res) => { res.json({ status: 'ok' }); }); app.listen(PORT, '0.0.0.0', () => { console.log(`App listening on port ${PORT}`); });这里最需要注意的是监听地址必须写0.0.0.0,而不是127.0.0.1。因为虚拟机的公网请求会先到达服务器网卡,再转发给应用进程。如果应用只监听回环地址,外部流量就进不来。这是云服务器部署中最容易踩的坑之一。
5.5 启动并本地验证
手动启动一次,确认代码没有问题:
cd ~/app node app.js看到App listening on port 3000后,另开一个 SSH 会话验证:
curl http://localhost:3000/health预期输出:
{"status":"ok"}再用虚拟机内网地址验证一次:
curl http://$(hostname -I | awk '{print $1}'):3000/health返回正常说明应用本身没有问题,接下来把它配置成常驻服务。
5.6 配置 systemd 常驻服务
直接node app.js启动的进程会随着 SSH 会话关闭而结束。要让应用在后台长期运行、开机自启、崩溃自动重启,推荐使用 systemd 管理。
创建 systemd service 文件:
sudo tee /etc/systemd/system/claude-demo.service > /dev/null <<EOF [Unit] Description=Claude Code Demo App After=network.target [Service] ExecStart=/usr/bin/node /home/coder/app/app.js WorkingDirectory=/home/coder/app Restart=always RestartSec=5 User=coder Environment=NODE_ENV=production [Install] WantedBy=multi-user.target EOF关键参数说明:
| 配置项 | 作用 |
|---|---|
| ExecStart | 应用启动命令 |
| WorkingDirectory | 应用工作目录 |
| Restart=always | 进程异常退出后自动重启 |
| RestartSec | 重启间隔秒数 |
| User | 运行应用的系统用户,避免使用 root |
| Environment | 向应用注入环境变量 |
注意ExecStart中的 node 路径。Ubuntu 通过 NodeSource 安装后,node 一般位于/usr/bin/node,不确定时执行which node查看。
启动服务并设置开机自启:
sudo systemctl daemon-reload sudo systemctl enable claude-demo sudo systemctl start claude-demo查看服务状态:
sudo systemctl status claude-demo如果状态为active (running),说明应用已经常驻运行。
5.7 公网访问验证
获取虚拟机外网 IP:
gcloud compute instances describe claude-demo \ --zone=asia-east1-a \ --format='get(networkInterfaces[0].accessConfigs[0].natIP)'在本地浏览器访问:
http://虚拟机外网IP:3000/health看到{"status":"ok"}即部署成功。访问首页则能看到标题为“Claude Code on Google Cloud”的 HTML 页面。
6. 进阶:远程迭代与自动化
6.1 让 Claude Code 继续迭代功能
应用跑起来之后,真正的价值在于持续迭代。SSH 登录服务器,进入项目目录:
cd ~/app claude输入新需求:
给首页加一个按钮,点击后调用 /health 接口并把结果显示在页面上。Claude Code 修改完成后,重启服务即可生效:
sudo systemctl restart claude-demo“生成 → 运行 → 反馈 → 再生成”这个循环,是 AI 辅助开发的主流程。你会发现,比起手动改代码,让 AI 在明确约束下快速产出初稿,再由人工 review 和修正,整体效率会高很多。
6.2 用非交互模式做自动化
如果你希望 CI 流水线也能调用 Claude Code,可以使用-p模式。例如在部署脚本中自动生成 API 文档:
claude -p "阅读 src 目录下的所有代码,生成一份 API 文档,输出到 docs/api.md"也可以让它做代码审查:
claude -p "检查当前目录下代码中是否有明显内存泄漏风险,并输出改进建议"这种模式适合在部署流水线里做文档生成、变更说明、静态检查等任务,但要注意给 CI 环境配置独立的 API Key,并使用 secret 注入,而不是写死在配置文件中。
6.3 与 Git 协作
Claude Code 可以帮你执行 Git 操作,但如果仓库包含敏感信息,一定要在提交前检查。建议在项目根目录写入.gitignore,明确排除:
node_modules/ .env *.log对于生产环境,更推荐使用谷歌云 Secret Manager 来管理密钥,而不是依赖本地的.env文件。
7. 常见问题与排查思路
7.1 常见报错对照表
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
安装后claude命令找不到 | npm 全局目录不在 PATH | 执行npm prefix -g找到全局目录并加入 PATH |
安装时提示error: claude native binary not installed. either postinstall did not run | npm 安装过程中 postinstall 脚本未成功执行 | 清理 npm 缓存后重新执行npm install -g @anthropic-ai/claude-code |
| 启动后要求重复登录 | 登录凭据或 API Key 环境变量未生效 | 确认ANTHROPIC_API_KEY已写入~/.bashrc并source生效 |
| 提示某个模型名称无法识别,例如 xxx is not a model this version of claude code recognizes | 通过环境变量指定了当前版本不支持的模型名 | 检查自定义模型名,或升级/回退 Claude Code 版本后重试 |
| 网络请求一直重试,提示 connection dropped(econnreset) | 网络不稳定或目标服务连接被中断 | 检查网络连通性,稍后重试,确认 API 请求地址配置正确 |
| 通过外网 IP 访问不到应用 | 防火墙未放行端口,或应用只监听了 127.0.0.1 | 检查防火墙规则,确认应用监听地址为 0.0.0.0 |
| systemd 服务启动失败 | ExecStart 中的 node 路径不对,或目录权限不足 | 执行which node确认路径,检查User是否有目录读权限 |
| SSH 登录虚拟机超时 | 实例未启动,或本地网络无法连接 | 先gcloud compute instances describe查看状态,再检查本地网络 |
7.2 排查思路建议
遇到问题不要急着重装,按顺序排查:
- 先看错误信息本身。CLI 通常会给出关键原因,优先理解它而不是直接搜报错。
- 再看版本。Claude Code 更新很快,很多报错是本地版本和 npm 最新版本不一致导致的,对比
claude --version和npm view @anthropic-ai/claude-code version。 - 检查环境变量。确认
ANTHROPIC_API_KEY是否正确加载,不要在终端里明文打印完整 Key。 - 检查网络。如果出现反复重试、连接断开,先确认基础网络是否正常,再判断是瞬时抖动还是配置问题。
- 看日志。systemd 管理的服务用
journalctl跟踪最新日志,比盲目猜测高效得多:
sudo journalctl -u claude-demo -n 50 --no-pager7.3 关于调试建议的补充
如果某个报错在本文对照表中没有覆盖,最有效的办法是缩小问题范围:先确认“这个报错是 Claude Code 本身的问题,还是云服务器环境的问题”。判断方法很简单:在本地同一项目里跑一遍同样的需求,如果本地正常、服务器报错,问题大概率出在服务器环境;如果两边都报错,问题大概率出在 Claude Code 配置或版本上。
8. 最佳实践与工程建议
8.1 密钥与权限管理
- 永远不要把 API Key 提交进 Git 仓库。建议使用谷歌云 Secret Manager 或环境变量管理密钥。
- 云虚拟机尽量使用普通用户运行应用,避免 root 权限扩大攻击面。
- 谷歌云 IAM 权限遵循最小化原则:只在需要的服务上分配需要的权限,而不是直接给 Owner。
8.2 成本控制
- 用完即删。演示虚拟机如果不再使用,及时删除避免持续计费:
gcloud compute instances delete claude-demo --zone=asia-east1-a- 设置预算告警。在谷歌云控制台的“预算与告警”里设置月度预算,超过阈值自动发邮件提醒。
- 按需升配。开发调试用小规格,压测时再临时升配,不要一直开大机器。
8.3 让 AI 生成的代码更可靠
Claude Code 生成代码很快,但生成结果不一定完全符合生产要求。建议在交互时明确约束:
- 每次修改前说清楚边界,比如“不要改动已有测试”“不要把不必要的依赖写进 package.json”。
- 要求它补充单元测试,并实际跑一遍。比如让 Claude Code 为
/health接口写测试。 - 代码合并前人工 review,尤其是涉及数据库、支付、权限的部分。AI 生成内容只能作为起点,不能替代工程判断。
8.4 日志与监控
应用上线后,日志和监控必须补齐。systemd 下查看日志:
sudo journalctl -u claude-demo -f如果应用要长期运行,建议在应用内接入结构化日志,把请求时间、状态码、耗时输出为 JSON,后续接入日志平台会轻松很多。同时在谷歌云控制台启用 Cloud Monitoring,对 CPU、内存、磁盘等基础指标设置告警。
8.5 与 CI/CD 结合
把 Claude Code 接入 CI 时,注意几点:
- CI 环境中的 API Key 通过 CI 平台的 secret 注入,不要写死在配置文件。
- 为 AI 生成内容设置明确的工作目录和临时目录,避免污染主仓库。
- 在流水线中跑一次非交互模式的代码检查脚本,把结果作为构建产物之一。
9. 总结与后续学习路线
本文从零完成了一次“Claude Code + 谷歌云”的部署实战:本机安装 Claude Code,创建谷歌云虚拟机,在虚拟机上用 Claude Code 生成 Express 应用,再通过 systemd 把应用变成常驻服务,最后通过公网访问验证。这个流程覆盖了云资源创建、AI 生成代码、部署上线的关键环节。
如果想继续深入,建议按这几个方向扩展:
- 容器化:把应用打成 Docker 镜像,部署到谷歌云 Artifact Registry 和 Cloud Run。Cloud Run 可以按请求自动伸缩,比虚拟机更适合无状态服务。
- Kubernetes:应用规模变大、需要多副本和高可用时,可以学习 GKE(谷歌云 Kubernetes 引擎),和现有的 k8s 部署体系是一脉相承的。
- AI 开发工作流:实践 Claude Code 的 CLAUDE.md 项目说明、权限配置、非交互模式集成,逐步形成属于你自己的 AI 辅助开发流程。
- 可观测性:把日志、监控、告警接到谷歌云 Cloud Monitoring,做到线上问题及时感知。
AI 辅助开发不是“让 AI 全自动写代码然后直接上线”,而是一个需要持续约束、验证和审查的协作过程。云平台也不应该被当成只能点点点的黑盒。把命令行工具、AI 编程助手和云资源三者串起来,即使团队规模很小,也能形成完整的应用交付闭环。建议先照本文跑通一次最简单的部署,再根据自己项目的技术栈做替换和扩展。动手跑通一次,比看十遍文档更有用。