---
title: "Деплой приложений с помощью Docker Compose в App Platform"
description: "Деплой приложений с помощью Docker Compose в App Platform. Документация и инструкции по настройке облачных сервисов Timeweb Cloud."
---

# Деплой из Docker Compose

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

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

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

1.  `Dockerfile` и файл `docker-compose.yml` должны находиться в корне подключенного репозитория. Пример можно найти в [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-docker-compose). Если `Dockerfile` размещен в другом месте, путь к нему необходимо указать явно в манифесте `docker-compose.yml`. Например:

```bash
services:
  app:
    build:
      context: ./app                        # Путь к папке с исходным кодом
      dockerfile: ./docker/Dockerfile.prod  # Явный путь к Dockerfile
```

2.  В манифесте нельзя использовать порты `80` и `443` в качестве хост-портов — они зарезервированы под веб-сервер. Вместо них используйте любые другие порты.
3.  Проксирование настраивается только для первого сервиса в `docker-compose.yml`. Остальные сервисы, если у них заданы хост-порты, будут доступны с их явным указанием. Например:

```yml
services:
  my-app:
    ports:
      - "9000:80"
  adminer:
    ports:
      - "8080:8080"
```

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

4.  В `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`.
    
    При попытке задеплоить манифест с любой из этих директив или параметров возникнет ошибка.
    

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

### Шаг 1. Выбор приложения

В пункте «Тип» перейдите на вкладку **Docker** и выберите **Docker Compose**.

![Image5](https://content.timeweb.com/assets/dc0a9daf-dcff-475f-9926-23cdff98410f.png?width=512&height=315)

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

Выберите репозиторий с приложением. В корне репозитория должен быть размещен `docker-compose.yml`. 

Репозиторий можно подключить:

-   Из вашего аккаунта GitHub, GitLab или BitBucket. Кликните на название платформы, авторизуйтесь и выберите нужный репозиторий. Если вы уже авторизованы, панель сразу покажет доступные репозитории.
    

-   По URL, указав ссылку на репозиторий, созданный на любой платформе. Кликните «Подключите git-репозиторий по URL» (либо «Добавить аккаунт» → «Подключите git-репозиторий по URL») и укажите Git URL репозитория. Если репозиторий приватный, введите реквизиты доступа.
    

Подробнее о подключении репозиториев — [здесь](https://timeweb.cloud/docs/apps/connecting-repositories).

### Шаг 3. Выбор ветки и коммита

![Image3](https://content.timeweb.com/assets/34ea051e-6f85-45a0-90be-fd9527785cb5.png?width=524&height=477)

Выберите ветку для деплоя.

В меню выбора ветки отображаются только 200 последних веток. При подключении репозитория GitLab, GitHub или Bitbucket также отображается ветка по умолчанию (`master`, `main` или `default`).

По умолчанию мы включаем опцию «Сборка по последнему выполненному коммиту». В этом случае App Platform выполнит деплой по самому актуальному коммиту, а в дальнейшем будет автоматически пересобирать приложение при добавлении новых коммитов в репозиторий.   
  
При необходимости вы сможете отключить автодеплой в дальнейшем.  
  
Если вы хотите выбрать конкретный коммит вручную — отключите эту опцию.

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

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

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

![Be4444cf 7b4f 4ddf B9db A735db4d30ab](https://content.timeweb.com/assets/14af2fb6-4726-43ce-a85d-583abc04b9b0.png?width=759&height=817)

### Шаг 5. Настройка приватной сети

![Image2](https://content.timeweb.com/assets/30e5e420-a7e0-464f-89f8-4ba5bf129361.png?width=412&height=193)

На этом этапе вы можете выбрать приватную сеть, в которую будет добавлено приложение, и указать IP-адрес, который оно будет использовать. Обратите внимание, что изменить приватную сеть после деплоя нельзя.

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

### Шаг 6. Настройка приложения

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

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

![Scr 20251107 Lyeg](https://content.timeweb.com/assets/38095fe4-0d8c-4a4d-8edf-c3d89bda044a.png?width=1080&height=278)

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

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

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

```yaml
ARG ARGUMENT_VAR=${example_var}
```

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

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

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

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

![Scr 20251107 Lyhz](https://content.timeweb.com/assets/9c14830a-f804-4e5d-9969-7d56e68be706.png?width=1024&height=612)

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

### Шаг 8. Деплой

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

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

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

![Image4](https://content.timeweb.com/assets/3ad893f2-1cee-430d-80f8-c3015118de84.png?width=1018&height=857)

IP-адрес приложения и бесплатный технический домен, привязанный к нему по умолчанию, можно найти на вкладе «Дашборд». Привязать собственный домен можно [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena).

![Image2](https://content.timeweb.com/assets/482e5f49-aa10-4e7f-bef5-e592e614b106.png?width=1015&height=803)

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