До 12.5 млн токенов на тест ИИ-агента
Вход/ Регистрация

Деплой из Docker Compose

Сервис App Platform позволяет развернуть приложение с помощью Docker Compose, размещенного в репозитории. Это дает возможность запускать любые приложения, включая те, что работают на фронтенд- и бэкенд-фреймворках, не поддерживаемых сервисом напрямую.

Условия для корректного деплоя

  1. Dockerfile и файл docker-compose.yml должны находиться в корне подключенного репозитория. Пример можно найти в Гитхабе. Если Dockerfile размещен в другом месте, путь к нему необходимо указать явно в манифесте docker-compose.yml. Например:
    
services: app: build: context: ./app         # Путь к папке с исходным кодом       dockerfile: ./docker/Dockerfile.prod  # Явный путь к Dockerfile
  1. В манифесте нельзя использовать порты 80 и 443 в качестве хост-портов — они зарезервированы под веб-сервер. Вместо них используйте любые другие порты.
  2. Проксирование настраивается только для первого сервиса в docker-compose.yml. Остальные сервисы, если у них заданы хост-порты, будут доступны с их явным указанием. Например:
    
services: my-app: ports: - "9000:80" adminer: ports: - "8080:8080"

В этом случае my-app доступен по основному домену, а adminer — по http://домен:8080.

  1. В docker-compose.yml нельзя использовать следующие директивы:

    • cap_add

    • cgroup

    • cgroup_parent

    • devices

    • privileged

    • device_cgroup_rules

    • volumes

    • ipc

    • pid

    • security_opt

    • userns_mode

    • sysctls

    • volumes_from

    • uts

    • extra_hosts

    • use_api_socket

    • network_mode: container:...

    • include

    • extends

    Также запрещены параметры:

    • external в секциях volumes, networks, configs и secrets;

    • name;

    • driver_opts;

    И выход за пределы разрешенной директории (path traversal) в значении file для configs и secrets.

    При попытке задеплоить манифест с любой из этих директив или параметров возникнет ошибка.

  1. При настройке сети запрещен режим host.

Шаг 1. Подключение репозитория

Вы можете подключить репозиторий одним из следующих способов:

  • Из аккаунта GitHub, GitLab или Bitbucket
  • По ссылке
  1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить».
    • Если вы уже залогинены в Git-аккаунт, панель отобразит все доступные репозитории. Выберите нужный.
    • Если нужно авторизоваться в другой Git-аккаунт, раскройте список репозиториев и кликните «Добавить аккаунт».
  2. Кликните на иконку нужной платформы.
  3. Авторизуйтесь в своем Git-аккаунте и разрешите Timeweb Cloud доступ ко всем или отдельным репозиториям.
  4. Выберите нужный репозиторий в панели Timeweb Cloud.
  5. Выберите ветку для деплоя. Панель отобразит 200 последних веток, а также ветку по умолчанию (master, main или default).
  6. Оставьте опцию «Сборка по последнему выполненному коммиту» включенной, чтобы автоматически перезапускать деплой приложения при появлении новых коммитов в репозитории.

    Если хотите выбирать коммит для деплоя вручную, отключите эту опцию.

    Автодеплой можно отключить и позже, в любой момент.

После подключения репозитория App Platform автоматически определит язык, фреймворк и версию окружения вашего приложения, но вы также можете скорректировать их вручную.

Убедитесь, что в поле «Фреймворк» выбрана опция «Docker Compose».

Шаг 2. Регион и конфигурация сервера

Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная».

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

Шаг 3. Дополнительные настройки

App Platform автоматически прочитает инструкции из docker-compose.yml и соберет приложение в соответствии с ними. 

Кликните «Показать расширенные настройки», чтобы просмотреть и задать дополнительные параметры.

Приватная сеть

Выберите приватную сеть, в которую будет добавлено приложение, и укажите IP-адрес, который оно будет использовать. Если приватная сеть не нужна — выберите «Без приватной сети».

Изменить приватную сеть после деплоя нельзя.

Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. 

Переменные

На этом этапе вы можете задать переменные, если это необходимо. Если они прописаны в docker-compose.yml или в Dockerfile, дублировать их не требуется.

Переменные можно использовать как на этапе сборки, так и во время выполнения приложения. Чтобы использовать переменные в качестве аргументов сборки, передайте их в docker-compose.yml следующим образом:

    
build: context: . args: - ARGUMENT_VAR=${example_var}

После этого вы сможете использовать переменную в Dockerfile:

    
ARG ARGUMENT_VAR=${example_var}

Сертификаты Минцифры / Сертификаты ТЦИ

Могут потребоваться для работы с API российских банков и государственных организаций. Для установки сертификатов нужна дополнительная настройка.

Шаг 4. Информация о приложении

Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления.

Также выберите, в какой проект его нужно добавить.

Эти настройки также можно изменить в дальнейшем.

Шаг 5. Деплой

Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя во вкладке «Деплой». 

Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы. 

При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе. 

Image4

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

Image2

В дальнейшем App Platform будет отслеживать обновления в репозитории и, если включен автодеплой, автоматически перезапускать проект с новыми изменениями.

Была ли статья полезна?
Ваш ответ поможет улучшить документацию
Пока нет комментариев