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 см. в официальной документации.
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!(Необязательно) Сохранение информации о проекте в переменных окружения
Установите переменные для идентификатора проекта и номера, чтобы их было легче использовать в следующих шагах.
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] на идентификатор вашей учётной записи биллинга.
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
Убедитесь, что команда запуска соответствует точке входа вашего приложения. Это также может быть `CMD ["bun", "run", "start"]`, если у вас есть скрипт start в `package.json`.Этот образ устанавливает зависимости и запускает ваше приложение с 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), чтобы убедиться, что всё работает как ожидалось.