运行时包管理器打包器测试运行器代码检查格式化指南参考博客反馈

在 Google Cloud Run 上部署 Bun 应用

Google Cloud Run 是一个托管平台,用于部署和扩展无服务器应用。Google 会为您管理基础设施。

本指南使用 Dockerfile 将 Bun HTTP 服务器部署到 Google Cloud Run。


  1. 通过选择或创建项目来初始化 gcloud

    请确保您已经初始化 Google Cloud CLI。gcloud init 会让您登录,并提示您选择现有项目或创建新项目。

    有关 Google Cloud CLI 的更多帮助,请参见 官方文档。

    terminal
    gcloud init
    
    Text
    欢迎!该命令将引导您完成 gcloud 的配置。
    
    您必须登录才能继续。您是否要登录 (Y/n)? Y
    您已登录为 [email@example.com]。
    
    请选择要使用的云项目:
     [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='projectId=my-bun-app')
    PROJECT_NUMBER=$(gcloud projects list --format='value(projectNumber)' --filter='projectId=my-bun-app')
    
    echo $PROJECT_ID $PROJECT_NUMBER
    
    Text
    my-bun-app [PROJECT_NUMBER]
    
  3. 关联计费账户

    列出可用的计费账户,并把一个账户关联到您的项目:

    terminal
    gcloud billing accounts list
    
    Text
    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]
    
    Text
    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-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
    
  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"]
    

    在项目根目录创建新的 .dockerignore 文件。该文件列出要从容器镜像中_排除_的文件和目录,例如 node_modules。排除这些内容可以让构建更快、镜像更小:

    .dockerignore
    node_modules
    Dockerfile*
    .dockerignore
    .git
    .gitignore
    README.md
    LICENSE
    .vscode
    .env
    # 其他想排除的文件或目录
    
  6. 部署服务

    确保您处在包含 Dockerfile 的目录中,然后直接从本地源码部署:

    terminal
    gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticated
    
    Text
    从源码部署需要一个 Artifact Registry Docker 仓库来存储构建后的容器。将会在区域 [us-west1] 创建名为
    [cloud-run-source-deploy] 的仓库。
    
    是否继续 (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 configuration...
      ✓ 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
    
  7. 访问您的在线应用

    您的 Bun 应用现已上线。

    访问服务 URL(https://my-bun-app-....us-west1.run.app)确认一切正常。