Многие из вас прекрасно знают, насколько удобные и полезные инструменты виртуализация и Managed Kubernetes. А также понимают — чтобы ими управлять, нужен DevOps или как минимум тот, кто сможет настроить балансировщик. Но давайте на чистоту: когда приложение уже готово, заниматься инфраструктурными настройками не сильно хочется. Хочется быстро развернуть его и сразу показать коллегам, друзьям и другим пользователям интернета.
Я Никита Бутримов — лидер направления в Cloud.ru, и сегодня я покажу, как быстро запускать frontend- и backend-приложения в облаке. А помогут нам в этом два сервиса — Evolution Container Apps и Evolution Artifact Registry.

Evolution Container Apps + Evolution Artifact Registry: как это работает
Как развернуть frontend-приложение в облаке
Как развернуть backend-приложение на Python, Go, Java Script или C# в облаке
Evolution Container Apps + Evolution Artifact Registry: как это работает
Для начала расскажу про сервисы. Evolution Container Apps — это сервис для создания и запуска контейнерных приложений. Контейнеры запускаются из Docker-образов, которые в свою очередь хранятся в приватном защищенном репозитории Evolution Artifact Registry.
Логика работы простая:
Вы загружаете Docker-образ приложения в Evolution Artifact Registry.
Затем создаете контейнер из загруженного образа в Evolution Container Apps.
Приложение запускается в контейнере и становится доступно всем пользователям интернета.

Кстати, сервисы Evolution Container Apps и Evolution Artifact Registry проинтегрированы с другими сервисами нашей облачной платформы и позволяют динамически масштабироваться. Даже если у вас стартап и пока нет пользователей, когда они появятся, вы сможете быстро отмасштабировать приложение в зависимости от нагрузки — как горизонтально, так и вертикально.
Теперь перейдем к главному — запустим приложение в облаке на примере простого frontend- и backend-приложения. Для этого сначала подготовим среду.
Как подготовить среду
Перед началом работы:
Зарегистрируйтесь в личном кабинете Cloud.ru или войдите, если уже зарегистрированы.
Подключите сервисы Evolution Container Apps и Evolution Artifact Registry.
Установите Docker Desktop.
Установите Docker CLI (или используйте любой другой терминал на вашем компьютере).
Готово. Теперь перейдем к размещению приложения.
Как развернуть frontend-приложение в облаке
Давайте посмотрим, как загрузить Docker-образ с готовым приложением в реестр, создать контейнер и опубликовать приложение в интернете.
Опционально
Вы можете зарегистрироваться в GitVerse, познакомиться с новой системой контроля версий, а также клонировать оттуда репозиторий кода. Для этого:
Перейдите в нужную директорию на локальном компьютере.
Выполните команду в терминале GitBash:
git clone https://gitverse.ru/cloudru/evo-containerapp-react-sample
1. Создайте реестр в Evolution Artifact Registry
В личном кабинете перейдите в карточку сервиса Evolution Artifact Registry:

Придумайте и пропишите название реестра — оно станет частью URI, который вы будете использовать при работе в Docker CLI. Затем нажмите Создать:

Скопируйте URI реестра — он пригодится на следующих шагах:

2. Получите ключи доступа для аутентификации
В личном кабинете Cloud.ru перейдите в раздел Управление профилем:

Выберите раздел Ключи доступа и нажмите Создать ключ:

Введите краткое описание ключа, которое в будущем поможет идентифицировать его среди других ключей. Задайте время жизни ключа: от 1 до 365 дней. Затем нажмите Создать.
После этого будут сгенерированы Key ID (логин) и Key Secret (пароль). Сохраните Key Secret. Обратите внимание: если вы закроете окно, его нельзя будет открыть повторно.
3. Пройдите аутентификацию в реестре Evolution Artifact Registry
Откройте любой удобный терминал и введите команду для аутентификации:
docker login <URI_реестра> -u <key_id> -p <key_secret>
Где:
<URI_реестра> — URI, сгенерированный после создания реестра;
<key_id> — логин персонального ключа (Key ID);
<key_secret> — пароль персонального ключа (Key Secret).
4. Соберите и подготовьте Docker-образ
На локальном компьютере соберите готовый Docker-образ из репозитория (в нашем примере из GitVerse) командой:
docker build --tag <URI_реестра>/react-hello-world https://gitverse.ru/sc/cloudru/evo-containerapp-react-sample.git#master --platform linux/amd64
Команда собирает образ и тегирует его для дальнейшей загрузки в реестр. Обратите внимание: Docker-образ должен быть собран под платформу linux/amd64, поэтому в команде используется флаг platform со значением linux/amd64.
5. Загрузите Docker-образ в реестр
Загрузите образ в реестр Evolution Artifact Registry командой:
docker push <URI_реестра>/react-hello-world
Где:
<URI_реестра> — URI, сгенерированный после создания реестра;
react-hello-world — имя будущего репозитория в Evolution Artifact Registry. При этом имя репозитория должно соответствовать имени Docker-образа.
Убедитесь, что репозиторий и загруженный образ появились в Evolution Artifact Registry. Для этого перейдите в раздел Реестры → Репозитории → Артефакты сервиса.

6. Создайте и запустите контейнер
Нажмите на троеточие, чтобы открыть меню загруженного образа, и кликните Создать Container App:

Заполните поля и активируйте нужные опции:
Название контейнера — глобально уникальное имя, на базе которого формируется адрес вашего приложения в домене *.containers.cloud.ru.
Порт контейнера — должен совпадать с портом вашего приложения. В примере порт 8080.
server {
listen 8080;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
vCPU/RAM — количество vCPU и RAM, которые выделяются для каждого экземпляра контейнера при обработке вызова. Выберите минимальную конфигурацию.
Минимальное и максимальное количество экземпляров при масштабировании сервиса. По умолчанию происходит масштабирование с 0, что может вызывать небольшую задержку при старте вашего приложения. Установите минимальное количество экземпляров 0, а максимальное — 1.
Публичный адрес — активируйте опцию, чтобы получить URL-адрес для вызова контейнера из интернета.
Затем нажмите Создать:

После этого откроется страница сервиса Evolution Container Apps, контейнер запуститься в течение нескольких секунд. Когда контейнер перейдет в статус «Выполняется», значит он успешно запущен:

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

Затем вставьте его в адресную строку браузера и проверьте работоспособность приложения.
Если приложение не отвечает: в списке ревизий проверьте, что последняя созданная ревизия находится в статусе «Выполняется». Если она в статусе «Публикуется» или «Ошибка», попробуйте создать новую ревизию — нажмите кнопку Создать ревизию на основе выбранной.
Готово, вы развернули frontend-приложение в облачном контейнере и опубликовали его в интернет. Теперь посмотрим на дополнительные настройки сервиса Evolution Container Apps на примере backend-приложения.
Как развернуть backend-приложение на Python, Go, Java Script или C# в облаке
Можно использовать репозиторий ниже — в нем находится исходный код простого REST API приложения, написанного на разных языках (Java Script, Python, Go, C#).
git clone https://gitverse.ru/cloudru/evo-containerapp-restapi-js-go-python-dotnet-sample
1. Соберите образ и присвойте тег
Используйте реестр (как его создать, рассказали на шаге 1 инструкции выше), выполнив команду:
docker build --tag <registry_name>.cr.cloud.ru/restapi-python https://gitverse.ru/sc/cloudru/evo-containerapp-restapi-js-go-python-dotnet-sample.git#master:restapi-python/src --platform linux/amd64
2. Загрузите Docker-образ в реестр
Загрузите образ в реестр Evolution Artifact Registry командой:
docker push <registry_name>.cr.cloud.ru/restapi-python
Где:
<registry_name> — название реестра, которое вы указывали в Artifact Registry при его создании;
restapi-python — название будущего репозитория в Artifact Registry. Название репозитория должно соответствовать имени Docker-образа.
3. Создайте и запустите контейнер
Нажмите на троеточие, чтобы открыть меню загруженного образа, и кликните Создать Container App:

Заполните поля и активируйте нужные опции:
Название контейнера — глобально уникальное имя, на базе которого формируется адрес вашего приложения в домене *.containers.cloud.ru.
Порт контейнера — должен совпадать с портом вашего приложения. В примере порт 8080.
vCPU/RAM — количество vCPU и RAM, которые выделяются для каждого экземпляра контейнера при обработке вызова. Выберите минимальную конфигурацию.
Минимальное и максимальное количество экземпляров при масштабировании сервиса. По умолчанию происходит масштабирование с 0, что может вызывать небольшую задержку при старте вашего приложения. Установите минимальное количество экземпляров 0, а максимальное — 1.
Публичный адрес — активируйте опцию, чтобы получить URL-адрес для вызова контейнера из интернета.
Автоматическое развертывание — активируйте опцию, чтобы каждый раз после загрузки в Evolution Artifact Registry новой версии образа в Evolution Container Apps автоматически создавалась новая ревизия контейнера на базе обновленной версии Docker-образа.
Затем нажмите Создать:

После этого откроется страница сервиса Evolution Container Apps, контейнер запуститься в течение нескольких секунд. Когда контейнер перейдет в статус «Выполняется», значит он успешно запущен:

4. Проверьте развернутое приложение
Дождитесь, когда сформируется публичный URL, и скопируйте его. Затем вставьте в адресную строку браузера и проверьте работоспособность приложения.

Готово, вы развернули backend-приложение в облачном контейнере и опубликовали его в интернет.
Заключение
Вот так за несколько шагов можно развернуть приложение и сделать его доступным для всех пользователей интернета 🙂.
Теперь вы умеете:
загружать Docker-образ в Evolution Artifact Registry;
создавать репозитории в существующих реестрах Evolution Artifact Registry;
создавать и запускать контейнер в Evolution Container Apps;
управлять настройками масштабирования.
В следующей части статьи я планирую показать, как развернуть Jupyter Server. А пока вы можете попробовать и протестировать другие сервисы нашей облачной платформы с помощью бесплатного объема облачных ресурсов Evolution free tier.
Интересное в блоге: