Google Cloud Run

Google Cloud Run 是 Google Cloud 提供的无服务器(serverless)平台。你可以在响应事件时运行代码,Google 会自动管理底层的计算资源。

Google Cloud Run 使用容器(container)来运行服务。这意味着你可以通过提供一个 Dockerfile 使用任何你喜欢的运行时(例如 Deno 或 Bun)。如果没有提供 Dockerfile,Google Cloud Run 将使用默认的 Nodejs buildpack。

本指南假设你已经拥有 Google Cloud 账号和一个计费账号(billing account)。

1. 安装 CLI

使用 Google Cloud Platform 时,最简单的方法是使用 gcloud CLI

例如,在 macOS 上使用 Homebrew 安装:

  1. brew install --cask google-cloud-sdk

使用 CLI 登录认证:

  1. gcloud auth login

2. 项目设置

创建一个项目。提示时接受自动生成的项目 ID:

  1. gcloud projects create --set-as-default --name="my app"

为项目 ID 和项目编号创建环境变量,便于后续使用。注意 gcloud projects list 命令返回结果可能需要约 30 秒。

  1. PROJECT_ID=$(gcloud projects list \
  2. --format='value(projectId)' \
  3. --filter='name="my app"')
  4. PROJECT_NUMBER=$(gcloud projects list \
  5. --format='value(projectNumber)' \
  6. --filter='name="my app"')
  7. echo $PROJECT_ID $PROJECT_NUMBER

查找你的计费账号 ID:

  1. gcloud billing accounts list

将你的计费账号绑定到该项目:

  1. gcloud billing projects link $PROJECT_ID \
  2. --billing-account=[billing_account_id]

启用所需的 API:

  1. gcloud services enable run.googleapis.com \
  2. cloudbuild.googleapis.com

更新服务账号权限,以便访问 Cloud Build:

  1. gcloud projects add-iam-policy-binding $PROJECT_ID \
  2. --member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
  3. --role=roles/run.builder

3. Hello World

使用 “create-hono” 命令启动项目,选择 nodejs 模板。

  1. npm create hono@latest my-app

进入 my-app 并安装依赖:

  1. cd my-app
  2. npm i

src/index.ts 中的端口改为 8080

  1. import { serve } from '@hono/node-server'
  2. import { Hono } from 'hono'
  3. const app = new Hono()
  4. app.get('/', (c) => {
  5. return c.text('Hello Hono!')
  6. })
  7. serve({
  8. fetch: app.fetch,
  9. port: 3000
  10. port: 8080
  11. }, (info) => {
  12. console.log(`Server is running on http://localhost:${info.port}`)
  13. })

本地运行开发服务器,然后在浏览器中访问 http://localhost:8080

  1. npm run dev

4. 部署

启动部署并根据提示操作(例如选择区域):

  1. gcloud run deploy my-app --source . --allow-unauthenticated

切换运行时

如果想使用 Deno 或 Bun 运行时(或自定义 Nodejs 容器)进行部署,请添加一个 Dockerfile(可选 .dockerignore),并配置你想要的环境。

有关容器化的更多信息,请参考: