Google Cloud Run 是一个用于部署和扩展无服务器应用程序的托管平台。Google 会为你处理基础设施。
在本指南中,我们将使用 Dockerfile 将 Bun HTTP 服务器部署到 Google Cloud Run。
NOTE
在继续之前,请确保你已具备:- 一个准备部署的 Bun 应用程序
- 一个已启用计费的 Google Cloud 账户
- 已安装和配置的 Google Cloud CLI
初始化 gcloud 选择或创建项目
确保你已初始化 Google Cloud CLI。此命令会让你登录,并提示你选择现有项目或创建新项目。
有关 Google Cloud CLI 的更多帮助,请参阅 官方文档。
gcloud initWelcome! This command will take you through the configuration of gcloud.
You must sign in to continue. Would you like to sign in (Y/n)? Y
You are signed in as [email@example.com].
Pick cloud project to use:
[1] existing-bun-app-1234
[2] Enter a project ID
[3] Create a new project
Please enter numeric choice or text value (must exactly match list item): 3
Enter a Project ID. my-bun-app
Your current project has been set to: [my-bun-app]
The Google Cloud CLI is configured and ready to use!(可选)将项目信息存储在环境变量中
设置项目 ID 和编号的变量,以便在以下步骤中更容易重复使用。
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_NUMBERmy-bun-app-... [PROJECT_NUMBER]链接计费服务账户
列出可用的计费账户并将一个链接到你的项目:
gcloud billing accounts listACCOUNT_ID NAME OPEN MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID] My Billing Account True将计费账户链接到你的项目。将 [BILLING_ACCOUNT_ID] 替换为你的计费账户 ID。
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-...启用 API 并配置 IAM 角色
激活必要的服务并授予 Cloud Build 权限:
gcloud services enable run.googleapis.com cloudbuild.googleapis.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role=roles/run.builderNOTE
这些命令启用了 Cloud Run(`run.googleapis.com`)和 Cloud Build(`cloudbuild.googleapis.com`),这是从源代码部署所必需的。Cloud Run 运行你的容器化应用程序,而 Cloud Build 负责构建和打包它。IAM 绑定授予 Compute Engine 服务账户($PROJECT_NUMBER-compute@developer.gserviceaccount.com)代表你构建和部署镜像的权限。
添加 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"]NOTE
确保启动命令对应于你的应用程序的入口点。如果你在 `package.json` 中有启动脚本,这也可以是 `CMD ["bun", "run", "start"]`。此镜像在容器内使用 Bun 安装依赖项并运行你的应用程序。如果你的应用程序没有依赖项,你可以省略 RUN bun install --production --frozen-lockfile 行。
在项目根目录创建一个新的 .dockerignore 文件。此文件包含应从容器镜像中排除的文件和目录,例如 node_modules。这会使你的构建更快、更小:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# 任何其他你想要排除的文件或目录部署你的服务
确保你在包含 Dockerfile 的目录中,然后直接从本地源代码部署:
NOTE
将 `--region` 标志更新为你首选的区域。你也可以省略此标志以获取交互式提示来选择区域。gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticatedDeploying from source requires an Artifact Registry Docker repository to store built containers. A repository named
[cloud-run-source-deploy] in region [us-west1] will be created.
Do you want to continue (Y/n)? Y
Building using Dockerfile and deploying container to Cloud Run service [my-bun-app] in project [my-bun-app-...] region [us-west1]
✓ Building and deploying... Done.
✓ Validating Service...
✓ Uploading sources...
✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds...].
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [my-bun-app] revision [my-bun-app-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://my-bun-app-....us-west1.run.app访问你的实时应用程序
🎉 你的 Bun 应用程序现已上线!
访问服务 URL(https://my-bun-app-....us-west1.run.app)以确认一切正常运行。