Сервис Apps позволяет развернуть приложение с помощью Docker Compose, размещенного в репозитории. Это дает возможность запускать любые приложения, включая те, что работают на фронтенд- и бэкенд-фреймворках, не поддерживаемых сервисом напрямую.
Условия для корректного деплоя
- Dockerfile и файл
docker-compose.ymlдолжны находиться в корне подключенного репозитория. Пример можно найти в Гитхабе. - В манифесте нельзя использовать порты
80и443в качестве хост-портов — они зарезервированы под Nginx. Вместо них используйте любые другие порты. - Проксирование настраивается только для первого сервиса в
docker-compose.yml. Остальные сервисы, если у них заданы хост-порты, будут доступны с их явным указанием. Например:
services:
my-app:
ports:
- "9000:80"
adminer:
ports:
- "8080:8080"
В этом случае:
my-app— доступен по основному домену.adminer— доступен поhttp://домен:8080.
В docker-compose.yml нельзя использовать директивы:
cap_addcgroupcgroup_parentdevicesprivilegeddevice_cgroup_rulesvolumesipcpidsecurity_optuserns_modesysctls
При попытке деплоя манифеста с этими директивами возникнет ошибка.
Помимо этого, при настройке сети запрещен режим host.
Шаг 1. Выбор приложения
В пункте «Тип» перейдите на вкладку Docker и выберите Docker Compose.

Шаг 2. Подключение репозитория
Выберите репозиторий с приложением. В корне репозитория должен быть размещен docker-compose.yml.
Репозиторий можно подключить:
-
Из вашего аккаунта GitHub, GitLab или BitBucket. Кликните на название платформы, авторизуйтесь и выберите нужный репозиторий. Если вы уже авторизованы, панель сразу покажет доступные репозитории.
-
По URL, указав ссылку на репозиторий, созданный на любой платформе. Кликните «Подключите git-репозиторий по URL» (либо «Добавить аккаунт» → «Подключите git-репозиторий по URL») и укажите Git URL репозитория. Если репозиторий приватный, введите реквизиты доступа.
Подробнее о подключении репозиториев — здесь.
Шаг 3. Выбор ветки и коммита

1. Выберите ветку для деплоя.
2. По умолчанию мы включаем опцию «Сборка по последнему выполненному коммиту». В этом случае сервис Apps выполнит деплой по самому актуальному коммиту, а в дальнейшем будет автоматически пересобирать приложение при добавлении новых коммитов в репозиторий.
При необходимости вы сможете отключить автодеплой в дальнейшем.
Если вы хотите выбрать конкретный коммит вручную — отключите эту опцию.
Шаг 4. Регион и конфигурация сервера
Приложение должно быть развернуто на отдельном облачном сервере. Выберите регион размещения сервера и его конфигурацию.

В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф.
Шаг 5. Настройка приватной сети

На этом этапе вы можете выбрать приватную сеть, в которую будет добавлено приложение, и указать IP-адрес, который оно будет использовать. Обратите внимание, что изменить приватную сеть после деплоя нельзя.
Шаг 6. Настройка приложения
Сервис автоматически прочитает инструкции из docker-compose.yml и соберет приложение в соответствии с ними.
На этом этапе вы можете задать переменные, если это необходимо. Если они прописаны в docker-compose.yml или в Dockerfile, дублировать их не требуется.

Переменные можно использовать как на этапе сборки, так и во время выполнения приложения. Чтобы использовать переменные в качестве аргументов сборки, передайте их в docker-compose.yml следующим образом:
build:
context: .
args:
- ARGUMENT_VAR=${example_var}
После этого вы сможете использовать переменную в Dockerfile:
ARG ARGUMENT_VAR=${example_var}
В дальнейшем у вас будет возможность внести изменения в параметры приложения, а также выбрать другую ветку и коммит, и перезапустить деплой с новыми настройками, если потребуется.
Шаг 7. Информация о приложении
Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления.
Также выберите, в какой проект его нужно добавить.

Эти настройки также можно изменить в дальнейшем.
Шаг 8. Деплой
Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя во вкладке «Деплой».
Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы.
При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе.

IP-адрес приложения и бесплатный технический домен, привязанный к нему по умолчанию, можно найти на вкладе «Дашборд». Привязать собственный домен можно по нашей инструкции.

В дальнейшем Apps будет отслеживать обновления в репозитории и, если включен автодеплой, автоматически перезапускать проект с новыми изменениями.
Про порты непонятно написано - может ввести в заблуждение.
Если приложение слушает 3000 порт, то надо указать в docker-compose.yaml так: ` ports:
Пример в документации подразумевает, что приложение внутри докер-контейнера слушает 80 порт, а наружу выставляется на 9000 порту, который потом сервис Apps находит и перенаправляет на 80 порт домена.
Добрый день!
Да, вы все пишете верно. Если в приложении используется порт 80 или 443, в качестве внешнего порта нужно указать любой другой, например 9000.
Если приложение использует порт 3000, в качестве внешнего порта также можно указать любой, но логичнее оставить тот же 3000.
Пример в документации призван продемонстрировать именно это.
Вот это вот "Checking HTTP GET on found ports" какое-то слишком долгое и выдает "WARNING | Cannot get HTTP 200 for domain ..." даже когда при ручной проверке потом все норм работает. Добавьте настройку пропуска этой вещи
(в моем случае там вероятно 301 возвращается на / чтобы перенаправить на /index.html)
Очень сырой продукт. Как такое можно было на прод выкатить? Многие стандартные вещи из docker-compose не работает. Хотя сделайте нормальный вывод логов в консоле, каждый раз приходится в тех поддержку писать за логами.
Каким образом настроить доступ к приватным Docker репозиториям размещенным на наших собственных серверах (не dockerhub) и требующих аутентификацию? Т.е. готовые образы приложений docker прописаные в docker compose тянуться с наших onpremis серверов и для доступа к ним нужно логиниться.
Для чего и как используется параметр
п. 5 Настройка приложения - Зависимостипри сборке Docker compose?Добрый день!
Этот параметр сейчас ни на что не влияет. В ближайшее время разработчики удалят его из настроек.