Skip to content

Google Cloud Run — это управляемая платформа для развёртывания и масштабирования серверless-приложений. Google берёт на себя инфраструктуру.

В этом руководстве мы развернём HTTP-сервер Bun на Google Cloud Run с использованием Dockerfile.

NOTE

Перед продолжением убедитесь, что у вас есть:
  • Приложение Bun, готовое к развёртыванию
  • Учётная запись Google Cloud с подключённым биллингом
  • Установлен и настроен Google Cloud CLI

Инициализация gcloud путём выбора/создания проекта

Убедитесь, что вы инициализировали Google Cloud CLI. Эта команда выполняет вход и предлагает выбрать существующий проект или создать новый.

Дополнительную информацию о Google Cloud CLI см. в официальной документации.

bash
gcloud init
txt
Welcome! 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!

(Необязательно) Сохранение информации о проекте в переменных окружения

Установите переменные для идентификатора проекта и номера, чтобы их было легче использовать в следующих шагах.

bash
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
txt
my-bun-app-... [PROJECT_NUMBER]

Привязка учётной записи биллинга

Перечислите доступные учётные записи биллинга и привяжите одну к вашему проекту:

bash
gcloud billing accounts list
txt
ACCOUNT_ID            NAME                OPEN  MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID]  My Billing Account  True

Привяжите учётную запись биллинга к вашему проекту. Замените [BILLING_ACCOUNT_ID] на идентификатор вашей учётной записи биллинга.

bash
gcloud billing projects link $PROJECT_ID --billing-account=[BILLING_ACCOUNT_ID]
txt
billingAccountName: billingAccounts/[BILLING_ACCOUNT_ID]
billingEnabled: true
name: projects/my-bun-app-.../billingInfo
projectId: my-bun-app-...

Включение API и настройка ролей IAM

Активируйте необходимые сервисы и предоставьте разрешения Cloud Build:

bash
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

NOTE

Эти команды включают 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 в корне вашего проекта. Этот файл содержит инструкции для инициализации контейнера, копирования локальных файлов проекта, установки зависимостей и запуска приложения.

docker
# Используем официальный образ 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

Убедитесь, что команда запуска соответствует точке входа вашего приложения. Это также может быть `CMD ["bun", "run", "start"]`, если у вас есть скрипт start в `package.json`.

Этот образ устанавливает зависимости и запускает ваше приложение с Bun внутри контейнера. Если у вашего приложения нет зависимостей, вы можете опустить строку RUN bun install --production --frozen-lockfile.

Создайте новый файл .dockerignore в корне вашего проекта. Этот файл содержит файлы и директории, которые должны быть исключены из образа контейнера, такие как node_modules. Это делает ваши сборки быстрее и меньше:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Любые другие файлы или директории, которые вы хотите исключить

Развёртывание сервиса

Убедитесь, что вы находитесь в директории с вашим Dockerfile, затем разверните сервис непосредственно из локального исходного кода:

NOTE

Обновите флаг `--region` на предпочитаемый регион. Вы также можете опустить этот флаг для получения интерактивного запроса выбора региона.
bash
gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticated
txt
Deploying 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), чтобы убедиться, что всё работает как ожидалось.

Bun от www.bunjs.com.cn