Spec-Zone.ru › Deno 2

Как развернуть приложение на Google Cloud Run

Google Cloud Run — это управляемая платформа вычислений, позволяющая запускать контейнеры на масштабируемой инфраструктуре Google.

Это руководство покажет, как использовать Docker для развертывания вашего приложения Deno на Google Cloud Run.

Сначала мы покажем, как развернуть приложение вручную, затем — как автоматизировать процесс с помощью GitHub Actions.

Предварительные условия:

  • Аккаунт Google Cloud Platform
  • docker CLI установлена
  • gcloud установлена

Развертывание вручную

Создание Dockerfile и docker-compose.yml

Для упрощения развертывания наше приложение будет простым файлом main.ts возвращающим строку в качестве HTTP-ответа:

main.ts
import { Application } from "https://deno.land/x/oak/mod.ts";

const app = new Application();

app.use((ctx) => {
  ctx.response.body = "Hello from Deno and Google Cloud Run!";
});

await app.listen({ port: 8000 });

Затем, мы создадим два файла — Dockerfile и docker-compose.yml — для сборки Docker-образа.

В нашем Dockerfile, добавим:

FROM denoland/deno

EXPOSE 8000

WORKDIR /app

ADD . /app

RUN deno install --entrypoint main.ts

CMD ["run", "--allow-net", "main.ts"]

Затем, в нашем docker-compose.yml:

version: "3"

services:
  web:
    build: .
    container_name: deno-container
    image: deno-image
    ports:
      - "8000:8000"

Давайте протестируем это локально, запустив docker compose -f docker-compose.yml build, затем docker compose up, и перейдя по адресу localhost:8000.

Hello from localhost

Работает!

Настройка Artifact Registry

Artifact Registry — это частный реестр Docker-образов GCP.

Прежде чем использовать его, перейдите в GCP в Artifact Registry и нажмите «Создать хранилище». Вас попросят указать имя (deno-repository) и регион (us-central1). Затем нажмите «Создать».

New repository in Google Artifact Repository

Сборка, маркировка и отправка в Artifact Registry

После создания хранилища, мы можем начать отправку изображений в него.

Сначала добавим адрес реестра в gcloud:

gcloud auth configure-docker us-central1-docker.pkg.dev

Затем, соберем ваш Docker-образ. (Обратите внимание, что имя образа определено в нашем файле docker-compose.yml.)

docker compose -f docker-compose.yml build

Затем, пометьте его новым адресом Google Artifact Registry, хранилищем и именем. Имя образа должно соответствовать следующей структуре: {{ location }}-docker.pkg.dev/{{ google_cloudrun_project_name }}/{{ repository }}/{{ image }}.

docker tag deno-image us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image

Если вы не укажете метку, по умолчанию будет использоваться :latest.

Далее, отправьте образ:

docker push us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image

Подробнее о том, как отправлять и получать образы в Google Artifact Registry.

Ваш образ должен теперь отображаться в Google Artifact Registry!

Image in Google Artifact Registry

Создание службы Google Cloud Run

Нам нужна среда для построения этих изображений, поэтому перейдите в Google Cloud Run и нажмите «Создать службу».

Давайте назовем ее "hello-from-deno".

Выберите «Развернуть одну версию из существующего образа контейнера». Используйте выпадающий список, чтобы выбрать изображение из deno-repository Artifact Registry.

Выберите «Разрешить запросы без аутентификации», а затем нажмите «Создать службу». Убедитесь, что порт равен 8000.

По завершении ваше приложение должно быть доступно:

Hello from Google Cloud Run

Отлично!

Развертывание с помощью gcloud

Теперь, когда она создана, мы сможем развернуть приложение в этой службе с помощью gcloud CLI. Команда имеет следующий формат: gcloud run deploy {{ service_name }} --image={{ image }} --region={{ region }} --allow-unauthenticated. Обратите внимание, что имя image следует указанной выше структуре.

В этом примере команда имеет вид:

gcloud run deploy hello-from-deno --image=us-central1-docker.pkg.dev/deno-app-368305/deno-repository/deno-cloudrun-image --region=us-central1 --allow-unauthenticated

Hello from Google Cloud Run

Успешно!

Автоматизация развертывания с помощью GitHub Actions

Для работы автоматизации необходимо убедиться, что созданы оба элемента:

  • Google Artifact Registry
  • Инстанс службы Google Cloud Run

(Если вы этого не сделали, обратитесь к предыдущему разделу.)

Теперь, когда это сделано, мы можем автоматизировать процесс с помощью GitHub workflow. Вот файл yaml:

name: Build and Deploy to Cloud Run

on:
  push:
    branches:
      - main

env:
  PROJECT_ID: { { PROJECT_ID } }
  GAR_LOCATION: { { GAR_LOCATION } }
  REPOSITORY: { { GAR_REPOSITORY } }
  SERVICE: { { SERVICE } }
  REGION: { { REGION } }

jobs:
  deploy:
    name: Deploy
    permissions:
      contents: "read"
      id-token: "write"

    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3

      - name: Google Auth
        id: auth
        uses: "google-github-actions/auth@v0"
        with:
          credentials_json: "${{ secrets.GCP_CREDENTIALS }}"

      - name: Login to GAR
        uses: docker/login-action@v2.1.0
        with:
          registry: ${{ env.GAR_LOCATION }}-docker.pkg.dev
          username: _json_key
          password: ${{ secrets.GCP_CREDENTIALS }}

      - name: Build and Push Container
        run: |-
          docker build -t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}" ./
          docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}"

      - name: Deploy to Cloud Run
        id: deploy
        uses: google-github-actions/deploy-cloudrun@v0
        with:
          service: ${{ env.SERVICE }}
          region: ${{ env.REGION }}
          image: ${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.REPOSITORY }}/${{ env.SERVICE }}:${{ github.sha }}

      - name: Show Output
        run: echo ${{ steps.deploy.outputs.url }}

Необходимые переменные среды (примеры в скобках относятся к этому репозиторию):

  • PROJECT_ID: ваш идентификатор проекта (deno-app-368305)
  • GAR_LOCATION: расположение вашего Google Artifact Registry (us-central1)
  • GAR_REPOSITORY: имя вашего Google Artifact Registry (deno-repository)
  • SERVICE: имя вашей Google Cloud Run службы (hello-from-deno)
  • REGION: регион вашей Google Cloud Run службы (us-central1)

Необходимые секретные переменные:

  • GCP_CREDENTIALS: это json-ключ учетной записи сервиса. При создании учетной записи сервиса убедитесь, что указаны необходимые роли и разрешения для Artifact Registry и Google Cloud Run.

Узнайте больше о развертывании на Cloud Run из GitHub Actions.

Для справки: https://github.com/google-github-actions/example-workflows/blob/main/workflows/deploy-cloudrun/cloudrun-docker.yml

© 2018–2024 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/tutorials/google_cloud_run

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API