Развертывание на 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 вместо жестко закодированного значения. Для того, чтобы рабочий процесс прошел успешно, необходимы два файла, оба должны находиться в корне проекта:
- Dockerfile
- 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
Подробное описание шагов
- Извлечение последнего образа из Artifact Registry для получения кэшированных слоев
- Сборка образа с помощью
$SHORT_SHAиlatestтегом - Загрузка образа в Artifact Registry
- Развертывание образа в Cloud Run
images определяет образы сборки, которые будут храниться в реестре. Значение по умолчанию timeout составляет 10 минут, поэтому нам потребуется увеличить его для сборок Swift. Мы используем 8080 в качестве порта по умолчанию, хотя рекомендуется удалить эту строку и настроить сервер на прослушивание на $PORT.
Развертывание
Загрузите все файлы в удаленный репозиторий. Cloud Build в настоящее время поддерживает GitHub, Bitbucket и GitLab. (теперь) и перейдите к Триггеры Cloud Build и нажмите «Создать триггер»:
- Добавьте имя и описание
- Событие: «Отправка в ветку» активна
- Источник: «Подключить новый репозиторий» и авторизуйтесь с помощью своего поставщика кода, и добавьте репозиторий, где размещен ваш код Swift сервера. Обратите внимание, что вам необходимо настроить GitHub, GitLab или Bitbucket, чтобы разрешить доступ GCP.
- Настройка: «Файл конфигурации Cloud Build» / Местоположение: Репозиторий
- Дополнительно: Переменные подстановки: Вам нужно задать переменные для региона, имени репозитория и имени службы здесь. Вы можете выбрать регион по своему выбору (например,
us-central1). Все пользовательские переменные должны начинаться с подчеркивания (_REGION)._REPOSITORY_NAMEи_SERVICE_NAMEвыбираете вы сами. Если вы используете переменные среды, например, для подключения к базе данных или службам третьих сторон, вы можете установить значения здесь тоже. - «Создать»
В качестве последнего шага перед развертыванием новой службы перейдите в Настройки Cloud Build и убедитесь, что включен «Cloud Run». Это предоставляет Cloud Build необходимые разрешения IAM для развертывания служб Cloud Run.
На странице обзора триггера вы увидите ваш новый триггер «swift-service». Нажмите «ВЫПОЛНИТЬ» справа, чтобы запустить триггер вручную из ветки main. С простым проектом Hummingbird сборка занимает около 7-8 минут. Vapor занимает около 25 минут на стандартных/малых машинах сборки, которые довольно медленные. «Jordane» из сообщества Vapor Discord рекомендует использовать machineType: E2_HIGHCPU_8 в cloudbuild.yaml для ускорения развертываний:
options:
machineType: 'E2_HIGHCPU_8'
После успешной сборки вы должны увидеть URL-адрес службы в логах сборки:
Вы можете перейти в Cloud Run и увидеть, что ваша служба работает там:
Триггер будет развертывать каждый новый коммит в 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