Summary
在 Google Cloud Run 上将 AnythingMCP 部署为无服务器容器,并使用 Cloud SQL for PostgreSQL。可扩展的按需付费 MCP 网关。
为什么选择 Google Cloud Run?
Cloud Run 让你可以运行容器而无需管理服务器。结合 Cloud SQL for PostgreSQL,它提供了可扩展的按需付费部署。HTTPS 自动处理 — 无需反向代理。
这比基于虚拟机的部署更高级。你无法在 Cloud Run 上运行 setup.sh,因此必须手动构建镜像、推送并配置环境变量。
先决条件
- 启用计费的 GCP 账户
- 安装并认证的 gcloud CLI
- 本地安装 Docker
gcloud config set project YOUR_PROJECT_ID
gcloud config set run/region europe-west1
gcloud services enable \
run.googleapis.com \
sqladmin.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com
设置 Cloud SQL
gcloud sql instances create anythingmcp-db \
--database-version=POSTGRES_16 \
--tier=db-f1-micro \
--region=europe-west1
gcloud sql databases create anythingmcp --instance=anythingmcp-db
gcloud sql users create amcp \
--instance=anythingmcp-db \
--password=YOUR_DB_PASSWORD
请注意实例连接名称(例如 project-id:europe-west1:anythingmcp-db)。
构建并推送镜像
git clone https://github.com/HelpCode-ai/anythingmcp.git
cd anythingmcp
# 选项 A:本地构建
docker build -t europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest .
docker push europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest
# 选项 B:使用 Cloud Build 构建
gcloud builds submit --tag europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest
生成密钥
由于 setup.sh 无法在 Cloud Run 上运行,请手动生成密钥:
JWT_SECRET=$(openssl rand -hex 32)
ENCRYPTION_KEY=$(openssl rand -hex 16)
NEXTAUTH_SECRET=$(openssl rand -hex 32)
部署到 Cloud Run
gcloud run deploy anythingmcp \
--image=europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest \
--allow-unauthenticated \
--port=4000 \
--min-instances=1 \
--max-instances=5 \
--memory=512Mi \
--cpu=1 \
--set-env-vars="NODE_ENV=production" \
--set-env-vars="DATABASE_URL=postgresql://amcp:YOUR_DB_PASSWORD@localhost:5432/anythingmcp" \
--set-env-vars="JWT_SECRET=$JWT_SECRET" \
--set-env-vars="ENCRYPTION_KEY=$ENCRYPTION_KEY" \
--set-env-vars="NEXTAUTH_SECRET=$NEXTAUTH_SECRET" \
--set-env-vars="MCP_AUTH_MODE=oauth2" \
--add-cloudsql-instances=YOUR_PROJECT_ID:europe-west1:anythingmcp-db
--min-instances=1 可以避免冷启动。Cloud SQL 代理使用 Unix 套接字,因此在 DATABASE_URL 中 localhost 是有效的。
自定义域名(可选)
gcloud run domain-mappings create \
--service=anythingmcp \
--domain=mcp.example.com \
--region=europe-west1
按照输出中的 DNS 指示进行操作。SSL 会自动配置。
限制
- 无状态 — Cloud Run 实例是短暂的。所有数据必须存储在 Cloud SQL 中。
- 冷启动 — 使用
--min-instances=1来缓解(小成本)。 - 无 setup.sh — 所有配置在部署时通过环境变量进行。
- 费用 — Cloud Run 按请求 + vCPU 时间收费。Cloud SQL 有固定的月费。
更新
git pull
docker build -t europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest .
docker push europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest
gcloud run deploy anythingmcp \
--image=europe-west1-docker.pkg.dev/YOUR_PROJECT_ID/anythingmcp/app:latest \
--region=europe-west1
现有的环境变量和 Cloud SQL 连接在重新部署时会被保留。
这份指南对你有帮助吗?