Skip to main content
Google Cloud Run 是一个托管平台,用于部署和扩展无服务器应用。Google 会为您管理基础设施。 在本指南中,我们将使用 Dockerfile 将 Bun HTTP 服务器部署到 Google Cloud Run。
在继续之前,请确保您已经具备:

1
确保您已经初始化了 Google Cloud CLI。该命令会让您登录,并提示选择已有项目或创建新项目。有关 Google Cloud CLI 的更多帮助,请参见 官方文档
terminal
gcloud init
欢迎!该命令将引导您完成 gcloud 的配置。

您必须登录才能继续。您是否要登录 (Y/n)? Y
您已登录为 [[email protected]]。

请选择要使用的云项目:
 [1] existing-bun-app-1234
 [2] 输入项目 ID
 [3] 创建新项目
请输入数字选择或文本值(必须与列表项完全匹配):3

请输入项目 ID。my-bun-app
您当前的项目已设置为:[my-bun-app]

Google Cloud CLI 已配置并准备使用!
2

(可选)将项目信息存储到环境变量

设置您的项目 ID 和编号变量,方便后续步骤复用。
terminal
PROJECT_ID=$(gcloud projects list --format='value(projectId)' --filter='name="my bun app"')
PROJECT_NUMBER=$(gcloud projects list --format='value(projectNumber)' --filter='name="my bun app"')

echo $PROJECT_ID $PROJECT_NUMBER
my-bun-app-... [PROJECT_NUMBER]
3

关联计费账户

列出可用的计费账户,并把一个账户关联到您的项目:
terminal
gcloud billing accounts list
ACCOUNT_ID            NAME                OPEN  MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID]  我的计费账户         True
将计费账户关联到项目。将 [BILLING_ACCOUNT_ID] 替换为您的计费账户 ID。
terminal
gcloud billing projects link $PROJECT_ID --billing-account=[BILLING_ACCOUNT_ID]
billingAccountName: billingAccounts/[BILLING_ACCOUNT_ID]
billingEnabled: true
name: projects/my-bun-app-.../billingInfo
projectId: my-bun-app-...
4

启用 API 并配置 IAM 角色

激活所需服务并授予 Cloud Build 权限:
terminal
gcloud services enable run.googleapis.com cloudbuild.googleapis.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member=serviceAccount:$PROJECT_NUMBER[email protected] \
  --role=roles/run.builder
这些命令启用了 Cloud Run (run.googleapis.com) 和 Cloud Build (cloudbuild.googleapis.com),这是从源码部署所必需的。Cloud Run 运行您的容器化应用,而 Cloud Build 负责构建和打包它。IAM 绑定授予 Compute Engine 服务账户([email protected])权限,代表您构建和部署镜像。
5

添加 Dockerfile

在项目根目录创建新的 Dockerfile。该文件包含初始化容器、复制本地项目文件、安装依赖和启动应用的指令。
Dockerfile
# 使用官方 Bun 镜像运行应用
FROM oven/bun:latest

# 复制 package.json 和 bun.lock 到容器
COPY package.json bun.lock ./

# 安装依赖
RUN bun install --production --frozen-lockfile

# 复制其余的应用文件到容器
COPY . .

# 运行应用
CMD ["bun", "index.ts"]
请确保启动命令对应您的应用入口点。如果您在 package.json 中有 start 脚本,也可以使用 CMD ["bun", "run", "start"]此镜像会安装依赖并在容器内用 Bun 运行您的应用。如果应用没有依赖,可以省略 RUN bun install --production --frozen-lockfile 这一行。
在项目根目录创建新的 .dockerignore 文件。该文件列出应 排除 在容器镜像之外的文件和目录,比如 node_modules,这可以让构建更快更小:
.dockerignore
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# 其他想排除的文件或目录
6

部署服务

确保您处在包含 Dockerfile 的目录中,然后直接从本地源码部署:
请将 --region 标志更新为您偏好的区域。您也可以省略此标志,在交互式提示中选择区域。
terminal
gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticated
从源码部署需要一个 Artifact Registry Docker 仓库来存储构建后的容器。将会在区域 [us-west1] 创建名为
[cloud-run-source-deploy] 的仓库。

是否继续 (Y/n)? Y

使用 Dockerfile 构建并将容器部署到 Cloud Run 服务 [my-bun-app],项目 [my-bun-app-...],区域 [us-west1]
✓ 构建和部署... 完成。
  ✓ 验证服务...
  ✓ 上传源码...
  ✓ 构建容器... 日志可在 [https://console.cloud.google.com/cloud-build/builds...] 查看。
  ✓ 创建修订版本...
  ✓ 路由流量...
  ✓ 设置 IAM 策略...
完成。
服务 [my-bun-app] 版本 [my-bun-app-...] 已部署,正在处理 100% 流量。
服务 URL:https://my-bun-app-....us-west1.run.app
7

访问您的在线应用

🎉 您的 Bun 应用现已上线!访问服务 URL(https://my-bun-app-....us-west1.run.app)确认一切正常。