Spec-Zone.ru › Swift

Развертывание на Google Cloud Platform (GCP)

Это руководство описывает, как создать и запустить ваш Swift Server на архитектуре серверless с помощью Google Cloud Build и Google Cloud Run. Мы будем использовать Artifact Registry для хранения образов Docker.

Настройка Google Cloud Platform

Вы можете подробнее узнать о начале работы с GCP. Для работы приложений Swift Server нам нужно:

  • активировать платежи (требуется кредитная карта). Обратите внимание, что при создании новой учетной записи GCP предоставляет вам 300 долларов бесплатных средств для использования в первые 90 дней. Вы можете следовать этому руководству бесплатно для новой учетной записи. Все в этом руководстве должно относиться к категории «Бесплатный тариф» в GCP (120 минут построения в день, 2 миллиона запросов Cloud Run в месяц Пределы бесплатного тарифа)
  • активировать API Cloud Build
  • активировать API Cloud Run Admin
  • активировать API Artifact Registry
  • создать репозиторий в Artifact Registry (Формат: Docker, Регион: по вашему выбору)

Требования к проекту

Пожалуйста, убедитесь, что ваш сервер слушает на 0.0.0.0, а не на 127.0.0.1, и рекомендуется использовать переменную среды $PORT вместо жестко закодированного значения. Для того, чтобы рабочий процесс прошел успешно, необходимы два файла, оба должны находиться в корне проекта:

  1. Dockerfile
  2. cloudbuild.yaml

Dockerfile Dockerfile section" href="#dockerfile">

Вы должны протестировать свой Dockerfile с помощью docker build . -t test и docker run -p 8080:8080 test и убедиться, что он компилируется и выполняется локально.

Файл Dockerfile такой же, как в руководстве по упаковке. Замените <executable-name> на ваше executableTarget (например, «Сервер»):

#------- build -------
FROMswift:centosasbuilder

# set up the workspace
RUN mkdir /workspace
WORKDIR /workspace

# copy the source to the docker image
COPY . /workspace

RUN swift build -c release --static-swift-stdlib

#------- package -------
FROM centos:8
# copy executable
COPY --from=builder /workspace/.build/release/<executable-name> /

# set the entry point (application name)
CMD ["<executable-name>"]

cloudbuild.yaml cloudbuild.yaml section" href="#cloudbuildyaml">

Файл cloudbuild.yaml содержит набор шагов для сборки образа сервера непосредственно в облаке и развертывания новой инстанции Cloud Run после успешной сборки. ${_VAR} являются “переменными подстановки”, которые доступны во время сборки и могут быть переданы в среду выполнения в фазе «развертывания». Мы установим переменные позже, когда настроим триггер сборки (Шаг 5).

steps:
  - name: 'gcr.io/cloud-builders/docker'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        docker pull ${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:latest || exit 0
  - name: 'gcr.io/cloud-builders/docker'
    args:
      - build
      - -t
      - ${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:$SHORT_SHA
      - -t
      - ${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:latest
      - .
      - --cache-from
      - ${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:latest
  - name: 'gcr.io/cloud-builders/docker'
    args:
      [
        'push',
        '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:$SHORT_SHA'
      ]
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - run
      - deploy
      - swift-service
      - --image=${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:$SHORT_SHA
      - --port=8080
      - --region=${_REGION}
      - --memory=512Mi
      - --platform=managed
      - --allow-unauthenticated
      - --min-instances=0
      - --max-instances=5
images:
  - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:$SHORT_SHA'
  - '${_REGION}-docker.pkg.dev/$PROJECT_ID/${_REPOSITORY_NAME}/${_SERVICE_NAME}:latest'
timeout: 1800s

Подробное описание шагов

  1. Извлечение последнего образа из Artifact Registry для получения кэшированных слоев
  2. Сборка образа с помощью $SHORT_SHA и latest тегом
  3. Загрузка образа в Artifact Registry
  4. Развертывание образа в Cloud Run

images определяет образы сборки, которые будут храниться в реестре. Значение по умолчанию timeout составляет 10 минут, поэтому нам потребуется увеличить его для сборок Swift. Мы используем 8080 в качестве порта по умолчанию, хотя рекомендуется удалить эту строку и настроить сервер на прослушивание на $PORT.

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

cloud build trigger settings and how to connect a code repository

Загрузите все файлы в удаленный репозиторий. Cloud Build в настоящее время поддерживает GitHub, Bitbucket и GitLab. (теперь) и перейдите к Триггеры Cloud Build и нажмите «Создать триггер»:

  1. Добавьте имя и описание
  2. Событие: «Отправка в ветку» активна
  3. Источник: «Подключить новый репозиторий» и авторизуйтесь с помощью своего поставщика кода, и добавьте репозиторий, где размещен ваш код Swift сервера. Обратите внимание, что вам необходимо настроить GitHub, GitLab или Bitbucket, чтобы разрешить доступ GCP.
  4. Настройка: «Файл конфигурации Cloud Build» / Местоположение: Репозиторий
  5. Дополнительно: Переменные подстановки: Вам нужно задать переменные для региона, имени репозитория и имени службы здесь. Вы можете выбрать регион по своему выбору (например, us-central1). Все пользовательские переменные должны начинаться с подчеркивания (_REGION). _REPOSITORY_NAME и _SERVICE_NAME выбираете вы сами. Если вы используете переменные среды, например, для подключения к базе данных или службам третьих сторон, вы можете установить значения здесь тоже.
  6. «Создать»

В качестве последнего шага перед развертыванием новой службы перейдите в Настройки Cloud Build и убедитесь, что включен «Cloud Run». Это предоставляет Cloud Build необходимые разрешения IAM для развертывания служб Cloud Run.

cloud build settings

На странице обзора триггера вы увидите ваш новый триггер «swift-service». Нажмите «ВЫПОЛНИТЬ» справа, чтобы запустить триггер вручную из ветки main. С простым проектом Hummingbird сборка занимает около 7-8 минут. Vapor занимает около 25 минут на стандартных/малых машинах сборки, которые довольно медленные. «Jordane» из сообщества Vapor Discord рекомендует использовать machineType: E2_HIGHCPU_8 в cloudbuild.yaml для ускорения развертываний:

options:
  machineType: 'E2_HIGHCPU_8'

После успешной сборки вы должны увидеть URL-адрес службы в логах сборки:

successful build and deployment to cloud run

Вы можете перейти в Cloud Run и увидеть, что ваша служба работает там:

cloud run overview

Триггер будет развертывать каждый новый коммит в main. Вы также можете включить триггеры запросов на вытягивание для рабочих процессов, ориентированных на функциональные возможности. Cloud Build также позволяет выполнять сборки синей/зеленой сборки, автоматическое масштабирование и многое другое.

Теперь вы можете подключить свой пользовательский домен к новой службе и начать работу.

Очистка

  • удалить службу Cloud Run
  • удалить триггер Cloud Build
  • удалить репозиторий Artifact Registry

The Swift Programming Language, Copyright © 2014-2025 Apple Inc.
Swift and the Swift logo are trademarks of Apple Inc.

Documentation for Swift 6.0.3


https://www.swift.org/documentation/server/guides/deploying/gcp.html

Spec-Zone.ru

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