# App Platform — полный текст документации > Полный текст раздела «App Platform» документации Timeweb Cloud в markdown. Каждая статья начинается с заголовка первого уровня и ссылки на свою каноническую страницу. Индекс: https://timeweb.cloud/docs/apps/llms.txt Статей: 46 Последнее обновление: 2026-08-14 # App Platform Source: https://timeweb.cloud/docs/apps?utm_source=llms_txt&utm_medium=ai App Platform — это облачный сервис для автоматической выгрузки кода из репозиториев и автодеплоя ваших приложений на серверах Timeweb Cloud.  Сервис поддерживает большинство популярных фреймворков и позволяет подключать любые репозитории, развернутые на платформах [GitHub](https://github.com/), [GitLab](https://about.gitlab.com/) или [Bitbucket](https://bitbucket.org/). ![Group 1321314120](https://content.timeweb.com/assets/e2b658af-f3ab-4cdb-8bf3-c90eeed23571?width=1920&height=1119) ## Как использовать App Platform? **Шаг 1.** Вы заказываете сервис — подключаете репозиторий на GitHub, GitLab или Bitbucket и выбираете нужный фреймворк и сервер с подходящими параметрами. **Шаг 2.** Все остальное делаем мы:  - Запускаем сервер с необходимым ПО. - «Подтягиваем» ваш код из репозитория. - Ставим зависимости, используя соответствующий фреймворку менеджер пакетов (например, `yarn` для Node.js-приложений или `pip` для Python, Django и т.д.). - Собираем код и проверяем корректность сборки.  - Запускаем ваше приложение. - Перезапускаем его в случае сбоя. После запуска сервиса вы можете работать с кодом, как обычно: вносить правки и дополнения и делать коммиты в репозиторий. Сервис App Platform автоматически отследит наличие изменений и, если у вас включен автодеплой, выкатит обновления в продакшен-среду. Если что-то пошло не так и нужно откатиться на прошлую версию — запустите новый деплой с коммитом, по которому был последний успешный деплой.  К приложению будет привязан бесплатный технический домен с SSL Let's Encrypt, который можно использовать для тестирования и запросов к вашему приложению. # Принципы работы Source: https://timeweb.cloud/docs/apps/how-it-works?utm_source=llms_txt&utm_medium=ai Основная функция сервиса приложений — автоматический деплой. App Platform автоматически выгружает на сервер код вашего сайта, API-сервиса, приложения и т.п.  Процесс работы с App Platform при использовании **backend-фреймворков** выглядит так: 1. **Подключение репозитория**: Вы подключаете репозиторий к Timeweb Cloud, выполняя вход в свой аккаунт на [GitHub, GitLab или Bitbucket](https://timeweb.cloud/docs/apps/connecting-repositories#podkluchenie-repozitoriya-iz-gitlab-github-ili-bitbucket), или [по ссылке](https://timeweb.cloud/docs/apps/connecting-repositories#podkluchenie-repozitoriya-po-ssylke). 2. **Подтягивание кода и установка зависимостей**: Сервис автоматически подтягивает код из указанного репозитория и устанавливает необходимые зависимости, указанные в специальных файлах — таких как `requirements.txt` для Python или `package.json` для Node.js. 3. **Сборка приложения**: Сервис определяет параметры сборки для вашего приложения и собирает его. 4. **Запуск в Docker-контейнере**: После сборки запускается Docker-контейнер с подходящим окружением, внутри которого работает ваше приложение. 5. **Настройка Nginx**: App Platform автоматически настраивает Nginx для проксирования вашего домена на запущенное приложение. При выполнении `git push` в ваш репозиторий (при включенном автодеплое) процесс начинается заново — начиная со второго этапа: сервис подтягивает код, ставит зависимости, собирает приложение и так далее. Важно понимать, что каждый новый деплой запускает новое окружение, то есть создается новый Docker-контейнер, в котором не сохраняются данные из предыдущих версий контейнера. Это позволяет обеспечить чистоту деплоя, но имеет свои особенности в управлении данными. #### Управление данными при использовании App Platform Поскольку данные внутри Docker-контейнера не сохраняются при повторном деплое, важно предусмотреть использование внешних хранилищ для данных, которые необходимо сохранить между деплоями: - **Файлы и медиа**: Если ваше приложение позволяет пользователям или администратору загружать файлы или медиа-контент, рекомендуется сохранять их в хранилище, таком как [S3](https://timeweb.cloud/docs/s3-storage). Это гарантирует, что данные останутся доступными после обновления или повторного деплоя приложения. - **Базы данных**: В качестве базы данных также следует использовать внешние решения, такие как [облачные базы данных](https://timeweb.cloud/docs/dbaas) или отдельные серверы баз данных, чтобы информация не терялась при обновлении контейнера. К приложению будет привязан бесплатный технический домен с SSL-сертификатом Let's Encrypt, который можно использовать для тестирования работы и, если вам это подходит, — для запросов к приложению. В дальнейшем вы сможете привязать к приложению [свой домен](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). При этом установить собственный или платный SSL-сертификат для домена нельзя. Работа сервиса с **frontend-приложениями** имеет одно важное отличие от backend-приложений — после сборки мы не создаем Docker-контейнер, приложение хранится в директории на сервере. Такое приложение — это статические файлы, которые отдаются клиентам с сервера. Однако, в отличие от обычного размещения приложения на сервере, где вам нужно самостоятельно настраивать окружение, сервис App Platform, как и в случае с бэкенд-приложениями, сделает всё за вас: - «подтянет» код из репозитория,  - установит зависимости и ПО,  - настроит Nginx,  - выпустит SSL-сертификат, - выполнит сборку вашего приложения. А в дальнейшем будет автоматически деплоить изменения — если вы оставите включенной опцию автодеплоя. # Подключение репозиториев Source: https://timeweb.cloud/docs/apps/connecting-repositories?utm_source=llms_txt&utm_medium=ai Подключить нужный репозиторий вы можете в процессе создания нового приложения в разделе «App Platform». Сервис поддерживает подключение репозиториев, созданных в ваших аккаунтах GitLab, GitHub и BitBucket, а также подключение по URL любых репозиториев с внешним адресом, в том числе развернутых в Gitea, self-hosted GitLab, GitHub Enterprise и др. > [!NOTE] > В настоящее время поддержка [Git LFS](https://git-lfs.com/) отсутствует. При размещении проектов, которые содержат большие статичные файлы, рекомендуем использовать внешние хранилища, например, [S3](https://timeweb.cloud/docs/s3-storage). ## Подключение репозитория из GitLab, GitHub или BitBucket Чтобы подключить репозиторий: 1. Перейдите в раздел «App Platform» и нажмите «Создать». 2. На шаге «Репозиторий» кликните на иконку нужной платформы. ![Step2](https://content.timeweb.com/assets/30b3958f-fc81-4499-96c6-992394d8b2fb?width=742&height=357) 3. Авторизуйтесь в своем аккаунте. 4. Предоставьте доступ к нужным репозиториям. 5. Выберите в панели репозиторий для деплоя.  **Если вы уже авторизованы в своем аккаунте GitHub, GitLab или Bitbucket**, панель автоматически отобразит доступные репозитории. Вам достаточно выбрать нужный. ![37513073 880a 4d69 96ca E49b6b66fb43](https://content.timeweb.com/assets/0b8af1cc-69d9-4398-a3c6-fc483ed9aa98?width=755&height=453) **Если вы авторизованы, но нужного репозитория нет в списке:** 1. Кликните «Добавить аккаунт». ![3f31ba98 1140 4674 8a28 744638edfede](https://content.timeweb.com/assets/4c7c2c8e-8c51-4ca9-8f31-d041ce8dc526?width=745&height=319) 2. Выберите платформу. 3. Авторизуйтесь при необходимости. 4. Выберите нужные репозитории и сохраните изменения. После выберите в панели нужный репозиторий для деплоя.  ## Подключение репозитория по ссылке Вы можете подключить к сервису App Platform любой репозиторий, у которого есть внешний HTTP- или HTTPS-адрес, в том числе репозитории из self-hosted GitLab, GitHub Enterprise, Sourcecraft, GitFlic, GitVerse или репозитории, размещенные у провайдеров, которые мы не поддерживаем напрямую (например, Gitea). Также опцию можно использовать в целях безопасности: если вы не хотите выдавать доступ ко всему Git-аккаунту целиком, с помощью ссылки можно подключить только отдельный репозиторий. > [!NOTE] > Обратите внимание, что для репозиториев, подключенных по ссылке, будет недоступен автодеплой — после внесения изменений в код потребуется [запустить деплой приложения вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj), выбрав нужный коммит. Если репозиторий публичный, достаточно указать только URL. Если репозиторий приватный, потребуются реквизиты для доступа — токен, который генерируется в интерфейсе провайдера в настройках репозитория или аккаунта. Подключение по логину и паролю доступно только для GitFlic. Получение токена для каждого провайдера: - [GitHub](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-v-github) - [GitLab](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-v-gitlab) - [BitBucket](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-i-ssylki-v-bitbucket) - [Sourcecraft](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-v-sourcecraft) - [GitFlic](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-v-gitflic) - [GitVerse](https://timeweb.cloud/docs/apps/connecting-repositories#poluchenie-tokena-v-gitverse) ### Подключение репозитория Подключить репозиторий по ссылке можно при создании нового приложения: 1. Перейдите в раздел «App Platform» и нажмите «Создать». 2. В пункте «Репозиторий» кликните «Добавить аккаунт» и далее — «Подключите git-репозиторий по URL». ![Scr 20260520 Mibl](https://content.timeweb.com/assets/96256e9b-24a7-4dde-be6b-4edd42c24b37.png?width=1354&height=1036) 3. Укажите ссылку на репозиторий и реквизиты доступа, если репозиторий приватный.  ![2fd04f76 58a9 4a37 9149 31b00e2734a9](https://content.timeweb.com/assets/e634aa9c-ff9a-432a-bb2c-3f9a3d8c8270?width=664&height=713) 4. Нажмите «Подключить». Подключенный репозиторий и доступные коммиты отобразятся в панели управления. ![608dc6f7 8273 4ce4 B2cc 148b08824c20](https://content.timeweb.com/assets/d9f69886-47ef-4ffc-b5b8-fb989af2438f?width=757&height=656) ### Получение ссылки в GitHub, GitLab или BitBucket Ссылка для подключения должна быть в формате Git URL, например: ```shell https://github.com/timeweb-cloud-apps/app-example-celery.git ``` В GitHub можно получить нужную ссылку, кликнув на «Code» → «HTTPS»: ![Fa97c14a A44c 4fe3 Bcca C60c8e5928b6](https://content.timeweb.com/assets/1ba7311c-5546-43c5-8f85-c77ecd393448?width=453&height=387) _Получение ссылки на репозиторий в интерфейсе [GitHub](https://github.com/)_ Аналогично в GitLab или BitBucket: перейти в нужный репозиторий → клик на «Code/Clone» → «Clone with HTTPS». ### Получение ссылки в Sourcecraft Перейдите на главную страницу вашего репозитория. В правом верхнем углу нажмите на кнопку «Клонировать» и скопируйте ссылку под заголовком «HTTPS». ![Получение ссылки на репозиторий в интерфейсе Sourcecraft](https://content.timeweb.com/assets/41288f80-38d4-4b70-89fb-b1d982247bdc.png?width=3416&height=1288) _Получение ссылки на репозиторий в интерфейсе [Sourcecraft](https://sourcecraft.dev/)_ ### Получение ссылки в GitFlic Перейдите на главную страницу вашего репозитория. Нажмите на кнопку «Код» и скопируйте ссылку из вкладки «HTTPS**»**. ![Получение ссылки на репозиторий в интерфейсе GitFlic](https://content.timeweb.com/assets/15cbad8b-55d5-42a0-b3d6-a20d3f7d986e.png?width=3410&height=1686) _Получение ссылки на репозиторий в интерфейсе [GitFlic](https://gitflic.ru/)_ ### Получение ссылки в GitVerse Перейдите на главную страницу вашего репозитория. Нажмите на кнопку «Код» и скопируйте ссылку из вкладки «HTTPS». ![Scr 20260520 Meai](https://content.timeweb.com/assets/74f3d7be-78c8-43bd-bb6c-3ff1da6e8c74.png?width=3414&height=1678) _Получение ссылки на репозиторий в интерфейсе [GitVerse](https://gitverse.ru/)_ ### Получение токена и ссылки в BitBucket Чтобы получить токен: 1. Перейдите в **«**Account settings» → «Security» → [«API Tokens»](https://id.atlassian.com/manage-profile/security/api-tokens).  2. Нажмите «Create API Token with scopes». 3. Укажите имя и дату истечения для токена. Нажмите «Next». 4. Выберите «Bitbucket» и нажмите «Next». 5. Выберите `read:repository:bitbucket` и нажмите «Next». 6. Нажмите «Create token». 7. Скопируйте токен и вставьте его в поле «Пароль или токен» в панели Timeweb Cloud.  8. Зайдите в репозиторий и нажмите «Clone». Скопируйте все, что идет после `git clone`, и вставьте в поле «URL репозитория». 9. Скопируйте часть ссылки между `https://` и `@` и вставьте в поле «Имя пользователя». ### Получение токена в GitHub Подключить по ссылке репозиторий GitHub с помощью пароля от учетной записи не получится; для этого необходим именно токен. Чтобы сгенерировать токен в GitHub: 1. Перейдите в «Settings» → «Developer Settings» → «Personal access tokens» → «Tokens (classic)» → «Generate new token» → «Generate new token (classic)». 2. Задайте имя токена, срок действия и разрешения. Для работы с приватными репозиториями нужно выбрать «repo». ![F6920e65 A30c 4032 B4b6 E25211169f56](https://content.timeweb.com/assets/94cd5763-d66b-46c6-8793-21bd5bb20590?width=1353&height=727) _Создание нового токена в интерфейсе [GitHub](https://github.com/)_ 3. Нажмите «Generate token». 4. Скопируйте токен и вставьте его в поле «Пароль или токен» в панели Timeweb Cloud. ### Получение токена в GitLab Для подключения по ссылке репозиториев GitLab можно использовать пароль от учетной записи или токен, сгенерированный в настройках вашего аккаунта GitLab. Чтобы сгенерировать токен: 1. Перейдите в «Preferences» → «Access Tokens». 2. Cоздайте новый токен, указав его имя, срок действия и разрешения. Как минимум, потребуется разрешение на чтение репозиториев. 3. Нажмите «Create personal access token». 4. Скопируйте токен и вставьте его в поле «Пароль или токен» в панели Timeweb Cloud. ### Получение токена в Sourcecraft 1. Перейдите на [главную страницу панели управления](https://sourcecraft.dev/me/dashboard). 2. В левом меню перейдите в раздел «Доступ» → «Персональные токены доступа». ![Раздел «Персональные токены доступа» в интерфейсе Sourcecraft](https://content.timeweb.com/assets/655925e7-fae7-40dd-b710-0568d87be4d9.png?width=3414&height=1434) _Раздел «Персональные токены доступа» в интерфейсе [Sourcecraft](https://sourcecraft.dev/)_ 3. Нажмите кнопку «Создать новый токен». 4. Укажите имя токена и время жизни, а также выберите репозиторий, к которому нужен доступ, или выберите пункт «Все репозитории». В пункте «Роль» достаточно выбрать минимальные права — «Просмотр репозитория». 5. Скопируйте полученный токен и вставьте его в поле «Пароль или токен». В поле «Имя пользователя» укажите логин вашего аккаунта Sourcecraft. ### Получение токена в GitFlic 1. Нажмите на иконку пользователя в правом верхнем углу и в открывшемся меню выберите «Настройки». 2. В правом меню перейдите [в раздел API токены](https://gitflic.ru/settings/access-token). 3. Нажмите кнопку «Создать». 4. Укажите название токена и выберите дату окончания его действия. Если ничего не указывать, токен будет бессрочным. 5. Для токена достаточно выдать минимальные права — на чтение. 6. Нажмите кнопку «Создать токен». 7. Скопируйте полученный токен и вставьте его в поле «Пароль или токен». В поле «Имя пользователя» укажите логин вашего аккаунта GitFlic. ### Получение токена в GitVerse 1. Нажмите на иконку пользователя в правом верхнем углу и в открывшемся меню выберите «Настройки». 2. Перейдите в раздел [Управление токенами](https://gitverse.ru/settings/tokens). 3. Укажите имя токена и срок его действия. 4. В разделе «Функциональность» достаточно выбрать минимальные права — чтение для репозиториев. 5. Нажмите кнопку «Генерировать токен». 6. Скопируйте полученный токен и вставьте его в поле «Пароль или токен». Для подключения репозитория GitVerse достаточно указать токен и ссылку на репозиторий. ## Удаление подключенных репозиториев Любой добавленный репозиторий можно отвязать от панели управления на странице создания нового приложения. > [!NOTE] > При отключении репозитория любые деплои (как автоматические, так и ручные) всех приложений, созданных из этого репозитория, станут невозможны. 1. Перейдите в раздел App Platform и нажмите «Добавить». 2. Кликните на выпадающий список репозиториев и нажмите «Удалить» у нужного из них. ![Без Названия](https://content.timeweb.com/assets/bd87bdc0-9e0e-4bd2-ae2c-7f2ac8912d0a?width=1313&height=852) 3. На следующем шаге подтвердите действие. ## Сервис App Platform не видит нужный репозиторий Если ваш аккаунт GitHub, Gitlab или Bitbucket подключен, но в панели управления не отображается нужный репозиторий, причин может быть две: - Вы авторизовались в свой аккаунт GitHub, Gitlab или Bitbucket в сервисе App Platform, а после этого добавили новый репозиторий. - Вы разрешили подключить только отдельные репозитории, а не все, и нужный репозиторий не выбран. Чтобы решить проблему: 1. Кликните «Добавить аккаунт». ![3f31ba98 1140 4674 8a28 744638edfede](https://content.timeweb.com/assets/4c7c2c8e-8c51-4ca9-8f31-d041ce8dc526?width=745&height=319) 2. Выберите платформу. ![1d2f1c03 Ca39 4520 Bc95 86e22b8ce42f](https://content.timeweb.com/assets/a5a1a163-c7b1-420e-bf80-2c8b3ad73a98?width=785&height=359) 3. Авторизуйтесь, если необходимо. 4. Выберите нужный репозиторий и сохраните изменения. ![Image2](https://content.timeweb.com/assets/65022223-b64e-4415-a63c-ee81a537a786?width=885&height=716) _Окно «Repository access» в интерфейсе [GitHub](https://github.com/)_ Подключенные репозитории отобразятся в панели управления, и вы сможете выбрать нужный. # Тарификация фронтенд-приложений Source: https://timeweb.cloud/docs/apps/frontend-pricing?utm_source=llms_txt&utm_medium=ai Для фронтенд-приложений применяется поресурсная модель списания — вы оплачиваете только фактическое использование ресурсов. Списания происходят за любые входящие HTTP-запросы к приложению. Учитываются в том числе запросы на загрузку статических файлов, таких как стили, скрипты, изображения и другие ресурсы. Тип HTTP-запроса и используемый метод значения не имеют. Списание выполняется ежечасно. Если на аккаунте недостаточно средств при очередном списании — приложение будет автоматически остановлено. Каждому приложению выделяется 2 ГБ NVMe-хранилища. Стоимость одного входящего запроса — 0,000495 ₽, то есть 4,95 ₽ за 10 000 запросов. ## Ограничение количества запросов Чтобы избежать перерасхода средств, вы можете установить лимит на количество входящих запросов. После достижения лимита приложение будет остановлено, а списания — прекращены. Для установки лимита: 1. Перейдите в раздел «App Platform» и кликните на нужное приложение. 2. Перейдите во вкладку «Настройки» . 3. Нажмите кнопку «Установить лимит» в строке «Лимиты входящих запросов». ![Scr 20251223 Oxzh](https://content.timeweb.com/assets/48f0e964-7a09-4a5e-9588-b6ec1420ca19.png?width=2162&height=1456) 4. В открывшемся окне включите ограничение количества запросов, укажите максимальное число входящих запросов и нажмите на кнопку «Сохранить». ## Просмотр статистики запросов На вкладке «Дашборд» отображается текущее количество запросов за месяц и график за периоды: - последний час; - последние 6 часов; - сутки; - неделя. ![Scr 20251223 Oymo](https://content.timeweb.com/assets/f3ea5f01-d90f-4051-8ede-894a1917faa2.png?width=2150&height=1470) # Деплой frontend-приложений Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps?utm_source=llms_txt&utm_medium=ai Чтобы развернуть frontend-приложение, перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». ## Шаг 1. Выбор приложения В пункте «Тип» выберите вкладку «Frontend», затем нужный фреймворк и версию Node.js, необходимую для работы вашего приложения. ![Scr 20260127 Kqtg](https://content.timeweb.com/assets/f3fbb000-4d9e-4f43-b179-4e4aeeb878fb.png?width=1050&height=986) ## Шаг 2. Подключение репозитория и выбор ветки Вы можете подключить репозиторий: - **Из своего аккаунта GitHub, GitLab или BitBucket**. Кликните на название платформы, авторизуйтесь и выберите нужный репозиторий. Если вы уже авторизованы, панель сразу покажет доступные репозитории. - **По URL** — укажите ссылку на репозиторий, созданный на любой платформе. Кликните «Подключите git-репозиторий по URL» (либо «Добавить аккаунт» → «Подключите git-репозиторий по URL») и укажите Git URL репозитория. Если репозиторий приватный, введите реквизиты доступа. Подробнее о подключении репозиториев — [здесь](https://timeweb.cloud/docs/apps/connecting-repositories). ![Scr 20260127 Kqzx](https://content.timeweb.com/assets/16d30409-a1fb-49d6-8dc7-421635a2c5f3.png?width=1058&height=1068) Выберите ветку для деплоя. В меню выбора ветки отображаются только 200 последних веток. При подключении репозитория GitLab, GitHub или Bitbucket также отображается ветка по умолчанию (`master`, `main` или `default`). Если вы подключаете репозиторий через аккаунт, опция «Сборка по последнему выполненному коммиту» будет включена по умолчанию. В этом случае App Platform выполнит деплой по последнему коммиту и в дальнейшем будет автоматически пересобирать приложение при появлении новых коммитов в репозитории. При необходимости вы сможете [отключить автодеплой](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) в дальнейшем.  Если вы хотите выбрать конкретный коммит вручную, отключите эту опцию. ## Шаг 3. Регион Выберите регион размещения сервера. ![Scr 20260127 Krcz](https://content.timeweb.com/assets/a57cfd68-b2b1-45d4-bf49-23e8ee1aa9dd.png?width=1088&height=648) ## Шаг 4. Конфигурация Для всех frontend-приложений выделяется 2 ГБ NVMe-диска. Выбор конфигурации сервера не предусмотрен — для приложений [действует поресурсная тарификация](https://timeweb.cloud/docs/apps/frontend-pricing). ![Scr 20260127 Kreq](https://content.timeweb.com/assets/bc813d23-8079-45a4-9e20-9cb28be58045.png?width=1046&height=296) Для приложений [Nuxt](https://timeweb.cloud/docs/apps/deploying-frontend-apps/nuxt) и [Next.js](https://timeweb.cloud/docs/apps/deploying-frontend-apps/nextjs) вы можете включить поддержку SSR — тогда станет доступен выбор конфигурации сервера, аналогично [бэкенд-приложениям](https://timeweb.cloud/docs/apps/deploying-backend-applications). ![6d47cd9d 3d6b 4e42 Abd0 2a6d9a51142c](https://content.timeweb.com/assets/5c71246d-880d-4728-beb9-65fc9da2e770.png?width=1036&height=804) ## Шаг 5. Настройка приложения На этом этапе вы можете задать команду сборки, установить необходимые зависимости, указать директорию проекта, директорию сборки и задать переменные окружения. ![96bc7e53 5f16 44c7 9914 05f3572c7b81](https://content.timeweb.com/assets/0e2d54fc-683d-4cb7-a401-aa55217ff1e4.png?width=660&height=624) #### Команда сборки и директория сборки Сервис автоматически предложит команду и директорию сборки для вашего проекта. При необходимости вы можете их отредактировать, однако в большинстве случаев изменения не требуются. Параметр «Директория сборки» не меняет директорию, из которой выполняется команда сборки. Он указывает путь (относительно корня репозитория) к директории, в которой будут находиться собранные файлы, например, `index.html`. Если одновременно указаны «Путь до директории проекта» и «Директория сборки», итоговый путь, из которого будут отдаваться файлы сайта, формируется как: ```shell Путь до директории проекта + Директория сборки ``` Например, если указано: - Путь до директории проекта: `/apps/frontend` - Директория сборки: `dist` то файлы будут браться из директории `/apps/frontend/dist`. #### Зависимости В разделе зависимостей можно указать системные пакеты, которые необходимы, например, для сборки проекта. Все перечисленные пакеты будут переданы в команду `apt install`. Если пакетов несколько — укажите их через пробел. #### Директория проекта По умолчанию команда сборки запускается в корне репозитория. Если файлы вашего проекта, включая `package.json`, размещены в поддиректории (например: `/apps/frontend`), укажите путь к ней относительно корня в поле «Путь до директории проекта». При указании пути: - Рабочая директория переключается на указанную папку. - Зависимости устанавливаются из файлов проекта в этой папке. - Команды сборки и запуска также выполняются из этой папки. #### Переменные Вы можете [задать переменные окружения](https://timeweb.cloud/docs/apps/variables), если это требуется для вашего проекта. Все параметры можно [изменить позже](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj) и перезапустить деплой с новыми настройками. ## Шаг 6. Информация о приложении Укажите имя приложения и при необходимости добавьте комментарий. Эти данные будут отображаться в панели управления. Также выберите проект, в который нужно добавить приложение. ![Scr 20260127 Krlt](https://content.timeweb.com/assets/9545896f-ec75-4884-9fe6-f734f8ec9241.png?width=1086&height=670) Эти настройки также можно изменить в дальнейшем. ## Шаг 7. Деплой Нажмите «Заказать». Как только процесс начнется, на вкладке «Деплой» появится лог. Если во время деплоя произойдет ошибка, в логе отобразится ее причина. Лог будет автоматически проанализирован нейросетью, и вы увидите список возможных причин возникновения ошибки. После завершения деплоя статус приложения обновится, а в логе появится сообщение об успешном завершении. ![Scr 20260127 Kspd](https://content.timeweb.com/assets/90f8613e-ffa7-403b-8448-2f332d6a7377.png?width=2202&height=1664) Технический домен, привязанный по умолчанию, отображается на главной странице раздела «App Platform». ![Scr 20260127 Ksrv](https://content.timeweb.com/assets/0c874c39-8739-4f49-9b11-ac649b4afa73.png?width=2174&height=1556) Также его можно найти во вкладке «Настройки» конкретного приложения. ![Scr 20260127 Ktbk](https://content.timeweb.com/assets/169c44a2-b63d-41f6-bb98-4165a08e3303.png?width=2172&height=1454) Собственный домен можно привязать [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). В дальнейшем App Platform будет отслеживать обновления в репозитории и, если включен автодеплой, автоматически перезапускать проект с новыми изменениями. # Деплой приложения Angular Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/angular?utm_source=llms_txt&utm_medium=ai Пример Angular-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-angular). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-na-angular) по развертыванию приложения Angular в App Platform. > [!NOTE] > Для версий Angular 16 и ниже директория сборки по умолчанию не использует папку `browser/`. Поэтому эту директорию нужно удалить из пути сборки. Для сборки Angular-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* npm install -g @angular/cli@latest ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Деплой приложения Ember Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/ember?utm_source=llms_txt&utm_medium=ai Пример Ember-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-ember). Для сборки Ember-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Деплой приложения Next.js Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/nextjs?utm_source=llms_txt&utm_medium=ai Пример Next.js-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-next). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-na-next-js) по деплою приложения Next.js в App Platform. Для сборки Next.js-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` ## Поддержка SSR При создании приложения вы можете включить поддержку SSR. ![Scr 20260326 Lpkw](https://content.timeweb.com/assets/3308763d-358d-4f23-88ef-75b0da6d33c2.png?width=1726&height=1418) В этом случае приложение перейдет в режим [бэкенд-приложения](https://timeweb.cloud/docs/apps/deploying-backend-applications): - Потребуется выбрать конфигурацию сервера. - Интерфейс панели управления после деплоя будет идентичен бэкенд-приложению. - Можно будет задать команду запуска. Команда запуска по умолчанию: ```bash npm start ``` Отключить поддержку SSR после деплоя нельзя. Чтобы изменить режим, необходимо создать новое приложение с нужной настройкой. # Деплой приложения Nuxt Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/nuxt?utm_source=llms_txt&utm_medium=ai Пример Nuxt-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-nuxt). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-na-nuxt) по развертыванию Nuxt в App Platform. Для сборки Nuxt-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` ## Поддержка SSR При создании приложения вы можете включить поддержку SSR. ![Scr 20260326 Lmcm](https://content.timeweb.com/assets/eec14251-d3d0-44fc-82f0-c0c00433ba62.png?width=1650&height=1436) В этом случае приложение перейдет в режим [бэкенд-приложения](https://timeweb.cloud/docs/apps/deploying-backend-applications): - Потребуется выбрать конфигурацию сервера. - Интерфейс панели управления после деплоя будет идентичен бэкенд-приложению. - Можно будет задать команду запуска. Команда запуска по умолчанию: ```shell node .output/server/index.mjs ``` Отключить поддержку SSR после деплоя нельзя. Чтобы изменить режим, необходимо создать новое приложение с нужной настройкой. # Деплой приложения Preact Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/preact?utm_source=llms_txt&utm_medium=ai Пример Preact-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-preact). Для сборки Preact-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Деплой приложения React Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/react?utm_source=llms_txt&utm_medium=ai Пример React-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-react). Также у нас есть [туториал](https://timeweb.cloud/tutorials/react/kak-razvernut-prilozhenie-na-react) с практическим примером развертывания React в App Platform. Для сборки React-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Деплой приложения Svelte Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/svelte?utm_source=llms_txt&utm_medium=ai Пример Svelte-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-svelte). Для сборки Svelte-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Деплой приложения Vue Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/vue?utm_source=llms_txt&utm_medium=ai Пример Vue-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-vue). Также у нас есть инструкция [с примером деплоя](https://timeweb.cloud/tutorials/cloud/supabase-primery-ispolzovaniya-v-web-razrabotke-s-vue#deploj-prilojeniya-na-vue--supabase) приложения Vue с Supabase. Для сборки Vue-проекта по умолчанию выполняются следующие команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # Другой JS-фреймворк Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/other?utm_source=llms_txt&utm_medium=ai Для сборки проекта на любом JS-фреймворке мы по умолчанию выполним команды: ```bash DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y --no-install-recommends \ curl \ {% if system_dependencies %}{{ system_dependencies | join(' ') }}{% endif %} \ && rm -rf /var/lib/apt/lists/* ``` Где `system_dependencies` — зависимости, указанные в панели управления. Далее зависимости устанавливаются с помощью пакетного менеджера — `yarn`, `pnpm` или `npm`, в зависимости от файлов проекта: ```bash yarn install pnpm install npm install ``` # HTML/CSS/JS Source: https://timeweb.cloud/docs/apps/deploying-frontend-apps/static-website?utm_source=llms_txt&utm_medium=ai Формат HTML/CSS/JS предназначен для деплоя уже собранных frontend-приложений и статических сайтов. Например, его можно использовать для проектов, созданных с помощью Hugo, Astro, VitePress, Jekyll и других статических генераторов. В отличие от Vue, React или других frontend-фреймворков, приложение не собирается на стороне платформы. App Platform сразу использует готовые статические файлы из репозитория. ## Подготовка проекта Перед деплоем необходимо локально собрать проект. В результате должна появиться директория со статическими файлами — например: - `dist` - `build` - `public` В директории должен находиться файл `index.html` и остальные ресурсы сайта. Например, для Hugo сборка выполняется командой: ```bash hugo ``` После этого статические файлы появятся в директории `public`. ## Особенности деплоя Для HTML/CSS/JS-приложений недоступны: - команда сборки; - директория сборки; - настройка зависимостей. Это связано с тем, что приложение считается уже собранным и не требует этапа сборки во время деплоя. ## Директория проекта Если статические файлы находятся не в корне репозитория, укажите путь до директории проекта. Например, если собранный сайт находится в директории `/public`, укажите: ```bash public ``` В этом случае App Platform будет отдавать файлы из этой директории. # Деплой backend-приложений Source: https://timeweb.cloud/docs/apps/deploying-backend-applications?utm_source=llms_txt&utm_medium=ai Создать backend-приложение можно из панели управления. Для этого перейдите в раздел «[App Platform](https://timeweb.cloud/my/apps)», нажмите кнопку «Добавить» и выберите тип «Backend». ### Шаг 1. Выбор приложения В пункте «Тип» выберите фреймворк, который использует ваше приложение. Вы можете отсортировать фреймворки по языку программирования. ![Image4](https://content.timeweb.com/assets/863f303b-958c-4af1-95ea-868407ef0cae.png?width=501&height=712) ### Шаг 2. Подключение репозитория ![Image9](https://content.timeweb.com/assets/b7815c2e-bf78-40ec-a45b-6af45e15aff5.png?width=505&height=215) Вы можете подключить репозиторий одним из способов: - Из своего аккаунта GitHub, GitLab или BitBucket. Кликните на название платформы, авторизуйтесь и выберите нужный репозиторий. Если вы уже авторизованы, панель сразу покажет доступные репозитории. - По URL, указав ссылку на репозиторий, созданный на любой платформе. Нажмите «Подключите git-репозиторий по URL» (или «Добавить аккаунт» → «Подключите git-репозиторий по URL») и укажите Git URL. Если репозиторий приватный — введите логин и пароль или токен доступа. При подключении по ссылке автодеплой будет недоступен — для обновления приложения при изменениях в коде потребуется запускать деплой вручную. Подробнее о подключении репозиториев — [здесь](https://timeweb.cloud/docs/apps/connecting-repositories). ### Шаг 3. Выбор ветки и коммита ![Image1](https://content.timeweb.com/assets/27b72f27-84ba-440e-abd7-981521d16f15.png?width=745&height=233) Выберите ветку для деплоя. В меню выбора ветки отображаются только 200 последних веток. При подключении репозитория GitLab, GitHub или Bitbucket также отображается ветка по умолчанию (`master`, `main` или `default`). По умолчанию мы включаем опцию «Сборка по последнему выполненному коммиту». В этом случае App Platform выполнит деплой по самому актуальному коммиту, а в дальнейшем будет автоматически пересобирать приложение при добавлении новых коммитов в репозиторий.  При необходимости вы сможете [отключить автодеплой](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) в дальнейшем. Если вы хотите выбрать конкретный коммит вручную — отключите эту опцию. ![Image6](https://content.timeweb.com/assets/0c89ef1f-e432-41ee-bca5-bd2297eb33dd.png?width=763&height=470) ### Шаг 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. Настройка приложения ![8900c053 7978 4e9c 83ce F58f5b8fbdcd](https://content.timeweb.com/assets/bf136a70-5a1f-4cad-8587-b2a1aaf8e379.png?width=660&height=713) На этом этапе можно: - задать команду сборки; - установить зависимости; - указать команду запуска; - задать путь до директории проекта; - задать [путь проверки состояния](https://timeweb.cloud/docs/apps/healthcheck-path); - задать переменные окружения. Если нужны дополнительные системные пакеты (например, для сборки проекта), укажите их в разделе «Зависимости». Они будут переданы в команду `apt install`. Несколько зависимостей указываются через пробел. В большинстве случаев команда запуска определяется автоматически — ее можно не менять. Если файлы вашего проекта размещены не в корне репозитория, а в поддиректории, укажите путь к ней в поле «Путь до директории проекта». При указании пути: - Рабочая директория переключается на указанную папку. - Зависимости устанавливаются из файлов проекта в этой папке. - Команды сборки и запуска также выполняются из этой папки. У вас будет возможность [внести изменения](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj) в любые из этих параметров в дальнейшем и перезапустить деплой с новыми настройками, если потребуется. ### Шаг 7. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. ![Image8](https://content.timeweb.com/assets/1f79ee3f-9784-48e0-9a55-191fe9eeb555.png?width=507&height=308) Эти настройки также можно изменить в дальнейшем. ### Шаг 8. Деплой Нажмите «Запустить деплой». Как только процесс начнется, вы увидите лог деплоя на вкладке «Деплой».  Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы.  При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе.  ![Image5](https://content.timeweb.com/assets/41e738d6-5281-4e99-bc31-a8b0ad5b7c18.png?width=1022&height=846) Готово! IP-адрес приложения и бесплатный технический домен, привязанный к нему по умолчанию, можно найти на вкладе «Дашборд». Приложение будет доступно по 443 порту; порт 80 также открыт. Привязать собственный домен можно [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). ![Image10](https://content.timeweb.com/assets/ac357161-c86c-46fb-829c-d18cb6895dd4.png?width=1010&height=802) В дальнейшем App Platform будет отслеживать обновления в репозитории и, если включен [автодеплой](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj), автоматически перезапускать проект с новыми изменениями. # Деплой приложения Phoenix Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/phoenix?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Phoenix-приложения для деплоя можно найти [на Гитхабе](https://github.com/timeweb-cloud-apps/app-example-phoenix). ## Сборка приложения При сборке приложения используется следующая среда: - Elixir 1.15–1.19, версия выбирается при создании приложения в App Platofrm - Erlang - inotify-tools По умолчанию во время сборки будут выполнены следующие команды: ```shell apt install -y elixir erlang inotify-tools --fix-missing ``` Для запуска используется команда по умолчанию: ```shell mix phx.server ``` Убедитесь, что в корне проекта находится файл `mix.exs`, и он содержит корректную конфигурацию Phoenix-приложения. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Beego Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/beego?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Beego-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-beego). ## Сборка приложения При сборке приложения используется следующая среда: - Go (устанавливается из PPA `longsleep/golang-backports`) По умолчанию во время сборки будут выполнены следующие команды: ```shell add-apt-repository -y ppa:longsleep/golang-backports && apt-get install -y golang-go --fix-missing ``` Если в проекте присутствует файл `go.mod`, дополнительно будут установлены все зависимости: ```shell go mod download ``` Для запуска используется команда по умолчанию: ```shell go run main.go ``` Где `main.go` — основной файла проекта, который инициализирует запуск приложения. Убедитесь, что файл называется именно так. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Gin Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/gin?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Gin-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-gin). Также у нас есть [туториал](https://timeweb.cloud/tutorials/go/kak-razvernut-prilozhenie-na-gin) с примером развертывания приложения Gin в App Platform. ## Сборка приложения При сборке приложения используется следующая среда: - Go (устанавливается из PPA `longsleep/golang-backports`) По умолчанию во время сборки будут выполнены следующие команды: ```shell add-apt-repository -y ppa:longsleep/golang-backports && apt-get install -y golang-go --fix-missing ``` Если в проекте присутствует файл `go.mod`, будут установлены все зависимости, указанные в нем: ```shell go mod download ``` Для запуска по умолчанию используется команда: ```shell go run main.go ``` Где `main.go` — основной файла проекта, который инициализирует запуск приложения. Убедитесь, что файл называется именно так. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Spring Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/spring?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Spring-приложения для деплоя можно найти на[Гитхабе](https://github.com/timeweb-cloud-apps/app-example-spring). ## Сборка приложения При сборке приложения используется следующая среда: - OpenJDK 8, 11, 17, 18, 19, 21 или 25 - Maven Во время сборки будут выполнены следующие команды: ```shell apt install -y openjdk-{{env_version}}-jre-headless maven ``` Для запуска используется команда по умолчанию: ```shell mvn spring-boot:run ``` Убедитесь, что в проекте присутствует файл `pom.xml`, и в нем корректно описана зависимость `spring-boot-starter`. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Ktor Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/ktor?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Ktor-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-ktor). ## Сборка приложения При сборке приложения используется среда: - OpenJDK - Kotlin - Gradle Сборка выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Если в проекте есть файл `gradlew`, шаблон выполнит сборку через Gradle Wrapper. Если файла `gradlew` нет, будет использован системный Gradle. По умолчанию во время сборки будет выполнена команда: ```bash ./gradlew buildFatJar --no-daemon ``` Если Gradle Wrapper не найден: ```bash gradle buildFatJar --no-daemon ``` После сборки App Platform выбирает JAR-файл для запуска в следующем порядке: 1. Если в директории `build/libs/` есть файл вида `*-all.jar`, будет использован он. Обычно так называется `fat JAR`, который собирает Ktor. 2. Если файла `*-all.jar` нет, будет использован первый найденный `.jar` из директории `build/libs/`. Убедитесь, что в проекте корректно настроен Ktor Gradle plugin и доступна задача `buildFatJar`. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения ASP.NET Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/asp-net?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример .NET-приложения для деплоя можно найти[на Гитхабе](https://github.com/timeweb-cloud-apps/app-example-net-core). У нас также есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-asp-net-core) с примером развертывания приложения ASP.NET в сервисе App Platform. При сборке приложения используется одна из следующих версий .NET (в зависимости от выбора при создании приложения): - .NET 8.0 - .NET 9.0 - .NET 10.0 При запуске приложения по умолчанию устанавливается переменная окружения: ```shell ASPNETCORE_URLS=http://0.0.0.0:8080 ``` Это необходимо для корректного проброса порта и работы приложения внутри контейнера. Команда запуска по умолчанию: ```shell dotnet run ``` ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Express Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/express?utm_source=llms_txt&utm_medium=ai В App Platform для Express-приложений доступны три рантайма: Node.js, Bun и Deno. Процесс деплоя зависит от выбранного рантайма: отличаются пакетный менеджер, команда сборки, команда запуска и файл, в котором описываются скрипты или задачи. ## Сборка приложения Node.js > [!NOTE] > Пример Express.js-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-express). При сборке приложения используется следующая среда: - Node.js: 20, 22 или 24 - npm - yarn - PM2 (последняя версия) Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Во время сборки будут выполнены следующие команды: ```shell apt install -y nodejs --fix-missing npm install pm2@latest -g npm install express ``` Если в проекте есть файл `package.json` и используется `yarn`, дополнительно будет выполнено: ```shell apt remove -y cmdtest yarn npm install --global yarn cd / && yarn install --check-files ``` В остальных случаях при наличии `package.json`: ```shell cd / && npm install ``` `` — путь к каталогу, в котором находится `package.json`.  Для запуска используется менеджер процессов PM2. Команда по умолчанию: ```shell pm2 start --no-daemon файл.js ``` Вместо `файл.js` может использоваться один из следующих файлов : - `app.js` - `server.js` - `main.js` - `index.js` Deno > [!NOTE] > Пример Express.js-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-express-deno). При сборке приложения используется следующая среда: - Deno: 2.7.14, 2.7.10 или 2.6.0 - пакетный менеджер `deno` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». По умолчанию отдельная команда сборки не требуется. App Platform запускает приложение в контейнере с Deno, поэтому команда `deno compile` для типового деплоя не используется. Для запуска используется команда: ```bash deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts ``` Также команду запуска можно описать через задачу: ```bash deno task start ``` В этом случае App Platform выполнит команду `deno task start`, а Deno запустит задачу `start` из файла `deno.json`. В этой задаче укажите команду `deno run`, флаги доступа и путь к исполняемому файлу приложения. Например: ```js "tasks": { "start": "deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts" } ``` В этом примере основной файл приложения находится по пути `main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ### Флаги доступа Deno требует явно указывать разрешения, которые нужны приложению: - `--allow-net` — сетевые запросы - `--allow-read` — чтение файлов - `--allow-write` — запись файлов - `--allow-env` — переменные окружения - `--allow-run` — запуск подпроцессов - `--allow-ffi` — нативные библиотеки - `--allow-hrtime` — высокоточный таймер - `--allow-sys` — системная информация, например ОС или CPU - `--allow-all` или `-A` — все разрешения сразу - `--watch` — перезапуск приложения при изменениях Например, если приложению нужны сетевые запросы, переменные окружения и чтение файлов, используйте: ``` deno run --allow-net --allow-env --allow-read src/index.ts ``` Bun > [!NOTE] > Пример Express.js-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-express-bun). При сборке приложения используется следующая среда: - Bun - пакетный менеджер `bun` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Для сборки используется команда: ```bash bun build ``` Для запуска используется команда: ```bash bun run start ``` App Platform запускает скрипт `start` из файла `package.json`. В этом скрипте укажите путь к исполняемому файлу приложения. Например: ```js "scripts": { "start": "bun run src/main.ts" } ``` В этом примере основной файл приложения находится по пути `src/main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с pm2. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `package.json`. ### Please add build instruction to your script section in package.json Проблема связана с тем, что команда сборки `yarn build` обращается к файлу `package.json`, и если значение директивы `build` не указано, возникает ошибка. Чтобы устранить ее, необходимо добавить необходимые директивы в секцию `scripts` файла `package.json`. Подробнее об использовании `scripts` — [здесь](https://docs.npmjs.com/cli/v10/using-npm/scripts). ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Fastify Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/fastify?utm_source=llms_txt&utm_medium=ai В App Platform для Fastify-приложений доступны три рантайма: Node.js, Bun и Deno. Процесс деплоя зависит от выбранного рантайма: отличаются пакетный менеджер, команда сборки, команда запуска и файл, в котором описываются скрипты или задачи. ## Сборка приложения Node.js > [!NOTE] > Пример Fastify-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-fastify). При сборке приложения используется следующая среда: - Node.js: 20, 22 или 24 - npm - yarn Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Если в проекте есть файл `package.json` и используется `yarn`, дополнительно будет выполнено: ```shell apt remove -y cmdtest yarn npm install --global yarn cd / && yarn install --check-files ``` В остальных случаях при наличии `package.json`: ```shell cd / && npm install ``` `` — путь к каталогу, в котором находится `package.json`.  Для запуска используется команда: ``` npm run start ``` Deno > [!NOTE] > Пример Fastify-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-fastify-bun). При сборке приложения используется следующая среда: - Deno: 2.7.14, 2.7.10 или 2.6.0 - пакетный менеджер `deno` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». По умолчанию отдельная команда сборки не требуется. App Platform запускает приложение в контейнере с Deno, поэтому команда `deno compile` для типового деплоя не используется. Для запуска используется команда: ```bash deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts ``` Также команду запуска можно описать через задачу: ```bash deno task start ``` В этом случае App Platform выполнит команду `deno task start`, а Deno запустит задачу `start` из файла `deno.json`. В этой задаче укажите команду `deno run`, флаги доступа и путь к исполняемому файлу приложения. Например: ```js "tasks": { "start": "deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts" } ``` В этом примере основной файл приложения находится по пути `main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ### Флаги доступа Deno требует явно указывать разрешения, которые нужны приложению: - `--allow-net` — сетевые запросы - `--allow-read` — чтение файлов - `--allow-write` — запись файлов - `--allow-env` — переменные окружения - `--allow-run` — запуск подпроцессов - `--allow-ffi` — нативные библиотеки - `--allow-hrtime` — высокоточный таймер - `--allow-sys` — системная информация, например ОС или CPU - `--allow-all` или `-A` — все разрешения сразу - `--watch` — перезапуск приложения при изменениях Например, если приложению нужны сетевые запросы, переменные окружения и чтение файлов, используйте: ``` deno run --allow-net --allow-env --allow-read src/index.ts ``` Bun > [!NOTE] > Пример Fastify-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-fastify-deno). При сборке приложения используется следующая среда: - Bun - пакетный менеджер `bun` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Для сборки используется команда: ```bash bun build ``` Для запуска используется команда: ```bash bun run start ``` App Platform запускает скрипт `start` из файла `package.json`. В этом скрипте укажите путь к исполняемому файлу приложения. Например: ```js "scripts": { "start": "bun run src/main.ts" } ``` В этом примере основной файл приложения находится по пути `src/main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `package.json`. ### Please add build instruction to your script section in package.json Проблема связана с тем, что команда сборки обращается к файлу `package.json`, и если значение директивы `build` не указано, возникает ошибка. Чтобы ее устранить, следует добавить необходимые директивы в секцию `scripts` файла `package.json`. Подробнее об использовании `scripts` — [здесь](https://docs.npmjs.com/cli/v10/using-npm/scripts). ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Hapi Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/hapi?utm_source=llms_txt&utm_medium=ai В App Platform для Hapi-приложений доступны три рантайма: Node.js, Bun и Deno. Процесс деплоя зависит от выбранного рантайма: отличаются пакетный менеджер, команда сборки, команда запуска и файл, в котором описываются скрипты или задачи. ## Сборка приложения Node.js > [!NOTE] > Пример Hapi-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-hapi). При сборке приложения используется следующая среда: - Node.js: 20, 22 или 24 - npm - yarn - PM2 (последняя версия) Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Во время сборки будут выполнены следующие команды: ```shell apt install -y nodejs --fix-missing npm install pm2@latest -g npm install hapi @hapi/hapi ``` Если в проекте есть файл `package.json` и используется `yarn`, дополнительно будет выполнено: ```shell apt remove -y cmdtest yarn npm install --global yarn cd / && yarn install --check-files ``` В остальных случаях при наличии `package.json`: ```shell cd / && npm install ``` `` — путь к каталогу, в котором находится `package.json`.  Для запуска используется менеджер процессов PM2. Команда по умолчанию: ``` pm2 start --no-daemon index.js ``` Deno > [!NOTE] > Пример Hapi-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-hapi-deno). При сборке приложения используется следующая среда: - Deno: 2.7.14, 2.7.10 или 2.6.0 - пакетный менеджер `deno` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». По умолчанию отдельная команда сборки не требуется. App Platform запускает приложение в контейнере с Deno, поэтому команда `deno compile` для типового деплоя не используется. Для запуска используется команда: ```bash deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts ``` Также команду запуска можно описать через задачу: ```bash deno task start ``` В этом случае App Platform выполнит команду `deno task start`, а Deno запустит задачу `start` из файла `deno.json`. В этой задаче укажите команду `deno run`, флаги доступа и путь к исполняемому файлу приложения. Например: ```js "tasks": { "start": "deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts" } ``` В этом примере основной файл приложения находится по пути `main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ### Флаги доступа Deno требует явно указывать разрешения, которые нужны приложению: - `--allow-net` — сетевые запросы - `--allow-read` — чтение файлов - `--allow-write` — запись файлов - `--allow-env` — переменные окружения - `--allow-run` — запуск подпроцессов - `--allow-ffi` — нативные библиотеки - `--allow-hrtime` — высокоточный таймер - `--allow-sys` — системная информация, например ОС или CPU - `--allow-all` или `-A` — все разрешения сразу - `--watch` — перезапуск приложения при изменениях Например, если приложению нужны сетевые запросы, переменные окружения и чтение файлов, используйте: ``` deno run --allow-net --allow-env --allow-read src/index.ts ``` Bun > [!NOTE] > Пример Hapi-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-hapi-bun). При сборке приложения используется следующая среда: - Bun - пакетный менеджер `bun` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Для сборки используется команда: ```bash bun build ``` Для запуска используется команда: ```bash bun run start ``` App Platform запускает скрипт `start` из файла `package.json`. В этом скрипте укажите путь к исполняемому файлу приложения. Например: ```js "scripts": { "start": "bun run src/main.ts" } ``` В этом примере основной файл приложения находится по пути `src/main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с `pm2`. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `package.json`. ### Please add build instruction to your script section in package.json Проблема связана с тем, что команда сборки `yarn build` обращается к файлу `package.json`, и если значение директивы `build` не указано, возникает ошибка. Чтобы ее устранить, нужно добавить необходимые директивы в секцию `scripts` файла `package.json`. Подробнее об использовании `scripts` — [здесь](https://docs.npmjs.com/cli/v10/using-npm/scripts). ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Nest Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/nest?utm_source=llms_txt&utm_medium=ai В App Platform для Nest-приложений доступны три рантайма: Node.js, Bun и Deno. Процесс деплоя зависит от выбранного рантайма: отличаются пакетный менеджер, команда сборки, команда запуска и файл, в котором описываются скрипты или задачи. ## Сборка приложения Node.js > [!NOTE] > Пример эталонного Nest-приложения для запуска можно найти [в нашем Гитхабе](https://github.com/timeweb-cloud-apps/app-example-nest?roistat_visit=11910906). Также у нас есть [туториал](https://timeweb.cloud/tutorials/nodejs/kak-razvernut-prilozhenie-na-nest) с примером развертывания приложения Nest в App Platform. При сборке приложения используется следующая среда: - Node.js: 20, 22 или 24 - npm - yarn Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Во время сборки будут выполнены следующие команды: ```shell apt remove -y cmdtest yarn npm install --global yarn cd / && yarn install --check-files ``` Если в проекте есть файл `package.json` и используется `yarn`, дополнительно будет выполнено: ```shell apt remove -y cmdtest yarn npm install --global yarn cd / && yarn install --check-files ``` В остальных случаях при наличии `package.json`: ```shell cd / && npm install ``` `` — путь к каталогу, в котором находится `package.json`.  Для запуска используется команда по умолчанию: ``` npm run start:prod ``` Deno > [!NOTE] > Пример Nest-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-nest-deno). При сборке приложения используется следующая среда: - Deno: 2.7.14, 2.7.10 или 2.6.0 - пакетный менеджер `deno` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». По умолчанию отдельная команда сборки не требуется. App Platform запускает приложение в контейнере с Deno, поэтому команда `deno compile` для типового деплоя не используется. Для запуска используется команда: ```bash deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts ``` Также команду запуска можно описать через задачу: ```bash deno task start ``` В этом случае App Platform выполнит команду `deno task start`, а Deno запустит задачу `start` из файла `deno.json`. В этой задаче укажите команду `deno run`, флаги доступа и путь к исполняемому файлу приложения. Например: ```js "tasks": { "start": "deno run --allow-net --allow-env --allow-read --allow-sys --allow-ffi main.ts" } ``` В этом примере основной файл приложения находится по пути `main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ### Флаги доступа Deno требует явно указывать разрешения, которые нужны приложению: - `--allow-net` — сетевые запросы - `--allow-read` — чтение файлов - `--allow-write` — запись файлов - `--allow-env` — переменные окружения - `--allow-run` — запуск подпроцессов - `--allow-ffi` — нативные библиотеки - `--allow-hrtime` — высокоточный таймер - `--allow-sys` — системная информация, например ОС или CPU - `--allow-all` или `-A` — все разрешения сразу - `--watch` — перезапуск приложения при изменениях Например, если приложению нужны сетевые запросы, переменные окружения и чтение файлов, используйте: ``` deno run --allow-net --allow-env --allow-read src/index.ts ``` Bun > [!NOTE] > Пример Nest-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-nest-bun). При сборке приложения используется следующая среда: - Bun - пакетный менеджер `bun` Сборка приложения выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Для сборки используется команда: ```bash bun build ``` Для запуска используется команда: ```bash bun run start ``` App Platform запускает скрипт `start` из файла `package.json`. В этом скрипте укажите путь к исполняемому файлу приложения. Например: ```js "scripts": { "start": "bun run src/main.ts" } ``` В этом примере основной файл приложения находится по пути `src/main.ts`. Если в вашем проекте используется другой файл, укажите путь к нему. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `package.json`. ### Please add build instruction to your script section in package.json Проблема связана с тем, что команда сборки `npm run build` обращается к файлу `package.json`, и если значение директивы `build` не указано, возникает ошибка. Чтобы ее устранить, следует добавить необходимые директивы в секцию `scripts` файла `package.json`. Подробнее об использовании `scripts` — [здесь](https://docs.npmjs.com/cli/v10/using-npm/scripts). ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Laravel Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/laravel?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Laravel-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-laravel). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-na-laravel) по деплою приложения Laravel в App Platform. ## Сборка приложения При сборке приложения используется следующая среда: - PHP 8.2–8.5 (версия выбирается при создании приложения) - Composer Для запуска приложения по умолчанию используется команда: ```shell php artisan serve --host=0.0.0.0 --port=8000 ``` После деплоя для приложения будет автоматически настроен SSL-сертификат, и оно будет открываться по HTTPS. Однако Laravel по умолчанию может продолжать генерировать ссылки с HTTP, что может вызывать ошибки при выполнении AJAX-запросов или отправке форм. Чтобы принудительно использовать HTTPS, добавьте в файл `app/Providers/AppServiceProvider.php` следующий код: ```php public function boot() { URL::forceScheme('https'); } ``` ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Symfony Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/symfony?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Symfony-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-symfony). ## Сборка приложения При сборке приложения используется следующая среда: - PHP 8.2–8.5 (версия выбирается при создании приложения) - Composer - Symfony CLI (устанавливается автоматически) Для запуска используется команда по умолчанию: ```shell symfony server:start ``` Убедитесь, что в проекте присутствует `symfony.lock`, а также правильно настроены переменные окружения и .env-файлы. ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Yii Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/yii?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Yii-приложения для деплоя можно найти на[Гитхабе](https://github.com/timeweb-cloud-apps/app-example-yii). ## Сборка приложения При сборке приложения используется следующая среда: - PHP 8.2–8.5 (версия выбирается при создании приложения) - Composer Для запуска используется команда по умолчанию: ```shell php yii serve 0.0.0.0 ``` ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Celery Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/celery?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Celery-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-celery). ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10-3.14 (версия выбирается при создании приложения) - pip - gunicorn - Системные библиотеки для работы с PostgreSQL и MySQL По умолчанию во время сборки будут выполнены следующие команды: ```shell apt-get install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing pip3 install psycopg2 ln /usr/bin/python3 /usr/bin/python -sf ln /usr/bin/pip3 /usr/bin/pip -sf pip3 install celery ``` Для установки зависимостей в команду сборки добавьте следующую строку: ```shell pip3 install --upgrade -r requirements.txt ``` Для запуска по умолчанию используется команда: ```shell celery -A tasks worker --loglevel=INFO ``` ## Требования к приложению - Убедитесь, что основной файл проекта называется `main.py`. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с gunicorn. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `requirements.txt`. # Деплой приложения Django Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/django?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Django-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-django). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-prilozhenie-na-django) с практическим примером развертывания Django-приложения в App Platform. ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версия выбирается при создании приложения) - pip - gunicorn - Системные библиотеки для работы с PostgreSQL и MySQL По умолчанию во время сборки будут выполнены следующие команды: ```shell apt-get install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing pip3 install psycopg2 django ln /usr/bin/python3 /usr/bin/python -sf ln /usr/bin/pip3 /usr/bin/pip -sf ``` Для установки зависимостей в команду сборки добавьте следующую строку: ```shell pip3 install --upgrade -r requirements.txt ``` Для запуска по умолчанию используется команда: ```shell python3 manage.py runserver 0.0.0.0:8000 ``` Также вы можете задать переменные. Например, можно задать хосты, с которых Django может получать запросы. Для этого укажите ключ `DJANGO_ALLOWED_HOSTS`, а в значении задайте IP-адреса или хостнеймы. Можно указать несколько хостов через запятую, без пробелов. По умолчанию эта переменная принимает значение `127.0.0.1,localhost`. Подробнее о настройках можно почитать в [документации Django](https://docs.djangoproject.com/en/5.2/ref/settings/). ## Требования к приложению - Убедитесь, что файл `manage.py` находится в корне проекта и используется как точка входа в приложение. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. - В настройках необходимо обязательно указать `DEBUG=True`, иначе статика не будет раздаваться. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Вы сможете определить, в какой момент что-то пошло не так.  Зачастую проблемы связаны с командой запуска. Проверьте, что всё в вашей среде разработки работает с gunicorn. Убедитесь, что все модули, необходимые для запуска приложения, присутствуют в файле `requirements.txt`. ### DisallowedHost at /Invalid HTTP\_HOST Проблема возникает в случае, если в файле `settings.py` не задано имя хоста.  Данная настройка является мерой безопасности для предотвращения атак с подменой HTTP-заголовка Host (HTTP Host header attacks). Для устранения проблемы нужно внести изменения в файл `settings.py`, указав в директиве `ALLOWED_HOSTS` используемый вами домен, например: ```shell ALLOWED_HOSTS = ["your.domain.com"] ``` Вы также можете разрешить все домены, если не хотите использовать эту меру безопасности:  ```shell ALLOWED_HOSTS = ["*"] ``` # Деплой приложения FastAPI Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/fastapi?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример FastAPI-приложения для деплоя можно найти на[Гитхабе](https://github.com/timeweb-cloud-apps/app-example-fastapi). ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версия выбирается при создании приложения) - pip - gunicorn - Системные библиотеки для работы с PostgreSQL и MySQL По умолчанию во время сборки будут выполнены следующие команды: ```shell apt install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing pip3 install psycopg2 fastapi uvicorn ln /usr/bin/python3 /usr/bin/python -sf ln /usr/bin/pip3 /usr/bin/pip -sf ``` Для установки зависимостей в команду сборки добавьте следующую строку: ```shell pip3 install --upgrade -r requirements.txt ``` Для запуска по умолчанию используется команда: ```shell uvicorn main:app --host 0.0.0.0 ``` При необходимости вы можете указать порт явно. Например: ```shell uvicorn main:app --host 0.0.0.0 --port 80 ``` ## Требования к приложению - Убедитесь, что основной файл проекта называется `main.py`. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Flask Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/flask?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Flask-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-flask). Также у нас есть [туториал](https://timeweb.cloud/tutorials/cloud/razvertyvanie-proekta-python-flask) по деплою приложения Flask в App Platform. ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версия выбирается при создании приложения) - pip - gunicorn - Системные библиотеки для работы с PostgreSQL и MySQL По умолчанию во время сборки будут выполнены следующие команды: ```shell apt install -y python3 python3-pip gunicorn python3-psycopg2 libpq-dev python-dev default-mysql-client python3-dev default-libmysqlclient-dev python3-mysqldb --fix-missing pip3 install psycopg2 flask ln /usr/bin/python3 /usr/bin/python -sf ln /usr/bin/pip3 /usr/bin/pip -sf ``` Для установки зависимостей в команду сборки добавьте следующую строку: ```shell pip3 install --upgrade -r requirements.txt ``` Для корректного деплоя может потребоваться отредактировать команду запуска под ваш проект, задав проброс порта, например:  ```shell gunicorn main:app --timeout 60 --bind 0.0.0.0:80 ``` ## Требования к приложению - Убедитесь, что основной файл проекта (точка входа в приложение) имеет имя `main.py`. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. ## Устранение неполадок ### Не удается выполнить развертывание Если с развертыванием возникают проблемы, в первую очередь проверьте лог деплоя. Чаще всего ошибки связаны с: - отсутствием файла `main.py` или переменной `app` - неправильной командой запуска - отсутствием зависимостей в `requirements.txt` Убедитесь, что команда `gunicorn main:app` успешно запускается в вашей локальной среде. # Деплой приложения Actix Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/actix?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Actix-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-actix). ## Сборка приложения При сборке приложения используется среда: - Rust - Cargo Сборка выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Шаблон использует `multistage build`: на первом этапе собирается бинарный файл в режиме `release`, а на втором запускается готовое приложение. По умолчанию во время сборки будет выполнена команда: ```bash cargo build --locked --release ``` Убедитесь, что в проекте присутствует файл `Cargo.toml`, и в нем корректно описаны зависимости приложения. Флаг `--locked` фиксирует версии зависимостей из `Cargo.lock`, поэтому файл `Cargo.lock` должен быть актуальным и добавленным в репозиторий. Если для сборки нужны дополнительные системные пакеты, например библиотеки для работы с OpenSSL, укажите их в поле «Зависимости». Они будут установлены до запуска `cargo build`. ## Выбор бинарного файла для запуска После сборки App Platform выбирает бинарный файл для запуска в следующем порядке: 1. Если в команде сборки явно указан флаг `--bin ` или `--bin=`, будет использован этот бинарный файл. 2. Если флаг `--bin` не указан, шаблон попробует определить бинарный файл по значению `default-run` из файла `Cargo.toml` через `cargo metadata`. 3. Если `default-run` не задан, шаблон просканирует директорию `target/release`. 4. Если найден ровно один исполняемый бинарный файл, будет запущен он. Если кандидатов несколько, сборка завершится с ошибкой. В этом случае укажите бинарный файл явно в команде сборки: ```bash cargo build --locked --release --bin ``` ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Axum Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/axum?utm_source=llms_txt&utm_medium=ai > [!NOTE] > Пример Axum-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-axum). ## Сборка приложения При сборке приложения используется среда: - Rust - Cargo Сборка выполняется в корне репозитория или в директории, которую вы укажете в поле «Путь к директории проекта». Шаблон использует `multistage build`: на первом этапе собирается бинарный файл в режиме `release`, а на втором запускается готовое приложение. По умолчанию во время сборки будет выполнена команда: ```bash cargo build --locked --release ``` Убедитесь, что в проекте присутствует файл `Cargo.toml`, и в нем корректно описаны зависимости приложения. Флаг `--locked` фиксирует версии зависимостей из `Cargo.lock`, поэтому файл `Cargo.lock` должен быть актуальным и добавленным в репозиторий. Если для сборки нужны дополнительные системные пакеты, например библиотеки для работы с OpenSSL, укажите их в поле «Зависимости». Они будут установлены до запуска `cargo build`. ## Выбор бинарного файла для запуска После сборки App Platform выбирает бинарный файл запуска в следующем порядке: 1. Если в команде сборки явно указан флаг `--bin ` или `--bin=`, будет использован этот бинарный файл. 2. Если флаг `--bin` не указан, шаблон попробует определить бинарный файл по значению `default-run` из файла `Cargo.toml` через `cargo metadata`. 3. Если `default-run` не задан, шаблон просканирует директорию `target/release`. 4. Если найден ровно один исполняемый бинарный файл, будет запущен он. Если кандидатов несколько, сборка завершится с ошибкой. В этом случае укажите бинарный файл явно в команде сборки: ```bash cargo build --locked --release --bin ``` ## Требования к приложению Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой из Dockerfile Source: https://timeweb.cloud/docs/apps/deploying-with-dockerfile?utm_source=llms_txt&utm_medium=ai Сервис App Platform позволяет развернуть приложение с помощью Dockerfile, размещенного в репозитории. Благодаря этому вы можете деплоить любые приложения, в том числе созданные на фронтенд- и бэкенд-фреймворках, которые сервис не поддерживает напрямую. > [!NOTE] > У нас есть [туториал](https://timeweb.cloud/tutorials/cloud/kak-razvernut-veb-prilozhenie-pri-pomoshchi-dockerfile) с примером развертывания приложения через Dockerfile. ### Требования для запуска - Dockerfile может быть размещен в корне репозитория или по пути, который вы укажете в поле «Путь до директории проекта», и должен содержать необходимые инструкции для сборки и запуска и приложения. Пример докерфайла и приложения можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-docker-flask). - В Dockerfile должен быть прописан параметр `EXPOSE`, чтобы сервис мог определить, какой порт должен слушать веб-сервер. Если `EXPOSE` не задан, веб-сервер по умолчанию будет слушать порт контейнера `8080`. Пример: ```shell FROM python:3.6 MAINTAINER Name Name "mail@mail.com" COPY . /app WORKDIR /app RUN pip install -r requirements.txt ENTRYPOINT ["python"] CMD ["app.py"] EXPOSE 3478 ``` - Необходимые переменные окружения могут быть заданы как в самом докерфайле, так в процессе запуска приложения в панели управления. ### Шаг 1. Выбор приложения В пункте «Тип» перейдите на вкладку **Dockerfile.** ![Cd26173f E5e9 45eb 9775 D9dd0f4eced0](https://content.timeweb.com/assets/97afa156-2cc0-4510-a031-81e5518efe43.png?width=759&height=406) ### Шаг 2. Подключение репозитория Выберите репозиторий с приложением. В корне репозитория должен быть размещен Dockerfile.  Репозиторий можно подключить: - **Из вашего аккаунта GitHub, GitLab или BitBucket**. Кликните на название платформы, авторизуйтесь и выберите нужный репозиторий. Если вы уже авторизованы, панель сразу покажет доступные репозитории. - **По URL, указав ссылку на репозиторий, созданный на любой платформе**. Кликните «Подключите git-репозиторий по URL» (либо «Добавить аккаунт» → «Подключите git-репозиторий по URL») и укажите Git URL репозитория. Если репозиторий приватный, введите реквизиты доступа. Подробнее о подключении репозиториев — [здесь](https://timeweb.cloud/docs/apps/connecting-repositories). ### Шаг 3. Выбор ветки и коммита ![517295ae 5c3b 46dd Bff5 48b5cde866a5](https://content.timeweb.com/assets/b3a1fbfe-8d40-4eea-851d-921c466bafb7?width=745&height=233) Выберите ветку для деплоя. В меню выбора ветки отображаются только 200 последних веток. При подключении репозитория GitLab, GitHub или Bitbucket также отображается ветка по умолчанию (`master`, `main` или `default`). По умолчанию мы включаем опцию «Сборка по последнему выполненному коммиту». В этом случае App Platform выполнит деплой по самому актуальному коммиту, а в дальнейшем будет автоматически пересобирать приложение при добавлении новых коммитов в репозиторий.  При необходимости вы сможете [отключить автодеплой](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) в дальнейшем. Если вы хотите выбрать конкретный коммит вручную — отключите эту опцию. ![7690c0ce 69f7 49cb 94b3 7afdb3d18245](https://content.timeweb.com/assets/ca832158-f84b-43fb-8aa4-5f339c0fedd1?width=763&height=470) ### Шаг 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. Настройка приложения ![81d357e7 4836 463f A737 27935c4ae48b](https://content.timeweb.com/assets/1b667380-5dfc-4ebd-a0e3-f51b2ad09ca7.png?width=638&height=402) Сервис автоматически прочитает инструкции из докерфайла и соберет приложение в соответствии с ними. Если Dockerfile размещен в корне репозитория, оставьте поле «Путь к директории проекта» пустым. Если Dockerfile размещен в поддиректории, укажите путь к ней относительно корня в поле «Путь к директории проекта». Этот путь используется как расположение Dockerfile и становится контекстом сборки. Вы также можете задать [путь проверки состояния](https://timeweb.cloud/docs/apps/healthcheck-path) и [переменные](https://timeweb.cloud/docs/apps/variables) (`ENV`), если это необходимо. Если они прописаны в докерфайле, дублировать их не требуется. В дальнейшем у вас будет возможность [внести изменения](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj) в параметры приложения, а также выбрать другую ветку и коммит, и перезапустить деплой с новыми настройками, если потребуется. ### Шаг 7. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. ![5c5d10af 256b 431a 8264 02c3ec0927ac](https://content.timeweb.com/assets/a0824121-5540-461f-bfe8-1ab1c534b122?width=755&height=471) Эти настройки также можно изменить в дальнейшем. ### Шаг 8. Деплой Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя на вкладке «Деплой».  Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы.  При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе.  ![Group 1321314123](https://content.timeweb.com/assets/75a81d9c-4786-4b04-ac3a-0ecb3cfa8f45?width=1920&height=1119) **Готово!** IP-адрес приложения и бесплатный технический домен, привязанный к нему по умолчанию, можно найти на вкладе «Дашборд». Привязать собственный домен можно [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). Приложение будет доступно по 443 порту; порт 80 также открыт. ![Без Названия](https://content.timeweb.com/assets/7ff03d83-f737-4aa6-a7a8-1cc898693def?width=1463&height=1125) В дальнейшем App Platform будет отслеживать обновления в репозитории и, если включен [автодеплой](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj), автоматически перезапускать проект с новыми изменениями. # Деплой из Docker Compose Source: https://timeweb.cloud/docs/apps/deploying-with-docker-compose?utm_source=llms_txt&utm_medium=ai Сервис 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 будет отслеживать обновления в репозитории и, если включен автодеплой, автоматически перезапускать проект с новыми изменениями. # Деплой из Docker Hub Source: https://timeweb.cloud/docs/apps/deploying-with-docker-hub?utm_source=llms_txt&utm_medium=ai Сервис App Platform позволяет развернуть приложение напрямую из Docker Hub без подключения аккаунтов и авторизации. Единственное условие — образ должен быть публичным. Такой способ подходит для быстрого запуска готовых решений, если вам не требуется изменять образ вручную. Например, вы можете развернуть n8n или другие сервисы, распространяемые через Docker Hub. ## Особенности работы App Platform автоматически настраивает доступ к приложению через обратный прокси. Порт приложения определяется из: - метаданных Docker-образа (например, `EXPOSE`); - переменных окружения, если они явно задают порт. Если порт не указан, используется значение по умолчанию. Пользователю не требуется вручную настраивать проксирование — сервис автоматически направляет трафик с внешних портов `80` и `443` на порт контейнера. Помимо доступа по домену через HTTPS, для приложений из Docker Hub также может быть доступно прямое подключение к сервисным портам по адресу `домен:порт`. Это может быть полезно для сервисов, которые работают не по HTTP. Например, после запуска MySQL-контейнера вы сможете подключиться к базе данных напрямую через клиент, указав домен приложения и порт MySQL. При редеплое приложение может временно становиться недоступным. ## Шаг 1. Выбор приложения В пункте «Тип» перейдите на вкладку «Docker Hub». ## Шаг 2. Настройка приложения Укажите параметры контейнера: - имя образа в Docker Hub, из которого будет развернуто приложение; - тег или дайджест для выбора конкретной версии образа; - переменные окружения (можно выбрать существующие или задать новые). Учтите, что развертывание возможно только из публичных образов. В дальнейшем вы сможете изменить образ, тег и переменные в настройках приложения и выполнить новый деплой. ![Добавить App 05 19 2026 11 36 Am](https://content.timeweb.com/assets/f1bea773-925c-4fb5-9d2b-8a6b81a62db7.png?width=755&height=665) ## Шаг 3. Регион и конфигурация сервера Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная». В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф. ## Шаг 4. Настройка приватной сети На этом этапе вы можете выбрать приватную сеть, в которую будет добавлено приложение, и указать IP-адрес, который оно будет использовать. Обратите внимание, что изменить приватную сеть после деплоя нельзя. Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. Это связано с тем, что перед запуском новой версии необходимо освободить занятые порты. ## Шаг 5. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. Эти настройки также можно изменить в дальнейшем. ## Шаг 6. Деплой Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя во вкладке «Деплой».  Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы.  При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе.  ![Scr 20260507 Olls](https://content.timeweb.com/assets/9c3be311-e1aa-4367-8ab5-2fe8f3cbf4f3.png?width=2086&height=1704) IP-адрес приложения и бесплатный технический домен, привязанный к нему по умолчанию, можно найти на вкладе «Дашборд». Привязать собственный домен можно [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). ![Scr 20260507 Olpa](https://content.timeweb.com/assets/6635be6b-7f68-44f4-a611-cf53a5d09943.png?width=2124&height=1594) # Управление App Platform в панели Source: https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli?utm_source=llms_txt&utm_medium=ai Вы можете управлять параметрами деплоя, привязывать домены, останавливать и перезапускать контейнеры с помощью инструментов панели Timeweb Cloud. ## Автодеплой Вы можете включить автоматический деплой при создании приложения в панели, оставив включенной опцию «Сборка по последнему выполненному коммиту». ![Selection 239](https://content.timeweb.com/assets/6442a0b2-e653-46d5-8f89-87f304850f83.png?width=525&height=606) В этом случае сервис будет отслеживать изменения в репозитории и при появлении новых коммитов обновлять приложение автоматически. > [!NOTE] > Автодеплой недоступен, если приложение было развернуто из репозитория, подключенного по ссылке. В этом случае после нового коммита будет необходимо запустить новый деплой вручную. В дальнейшем вы всегда можете отключать или включать автодеплой в панели управления, в настройках вашего приложения. 1. Перейдите в раздел «App Platform» и кликните на нужное приложение в списке. 2. На вкладке «Настройки» кликните «Редактировать» в блоке «Настройки деплоя». 3. Включите или выключите опцию «Сборка по последнему выполненному коммиту» и сохраните изменения. ![Selection 238](https://content.timeweb.com/assets/f20aba69-3d5c-4105-82de-876bf53e09c6.png?width=408&height=891) ## Смена параметров и новый деплой Параметры сборки, указанные при первом деплое приложения, можно изменить в панели управления, чтобы применить их для следующего развертывания.  1. Перейдите в раздел «App Platform» и кликните на нужное приложение в списке. 2. На вкладке «Настройки» кликните «Редактировать» в блоке «Настройки деплоя». 3. Укажите нужные вам параметры. 4. Выберите коммит и сохраните изменения. 5. В следующем окне подтвердите запуск деплоя. ## Повторный деплой Чтобы запустить деплой заново: 1. Перейдите в раздел «App Platform» и выберите нужное приложение в списке. 2. На вкладке «Деплой» выберите нужный коммит (текущий коммит уже будет выбран по умолчанию). 3. Нажмите «Выполнить откат к коммиту». ![Selection 240](https://content.timeweb.com/assets/6e4ed12d-b95a-4acc-9814-6fb70d94bef4.png?width=1015&height=851) ## Остановка деплоя Чтобы остановить текущий деплой: 1. Перейдите в раздел «App Platform» и кликните на нужное приложение в списке. 2. На вкладке «Деплой» нажмите на кнопку «Остановить деплой». ![Selection 241](https://content.timeweb.com/assets/cbf2c6b6-406d-4abf-8032-a8b7cddd1e20.png?width=1024&height=868) ## Логи деплоя Логи деплоя доступны на странице вашего приложения на вкладке «Деплой».  ![Screenshot 04 04 25 18:04:44](https://content.timeweb.com/assets/056bcc58-09b1-45bf-8789-22a6b14cd054.png?width=1015&height=841) Логи доступны в двух режимах: стандартном и расширенном, при котором в панель будут выводиться все логи в режиме отладке (DEBUG). ![Selection 242](https://content.timeweb.com/assets/412909f4-9277-447b-9dae-8ade48c91d80.png?width=1010&height=846) ## Статистика использования ресурсов - **Backend-приложения** Для Backend-приложений и приложений, развернутых через Dockerfile или Docker Compose, в панели управления доступен Дашборд, где можно отслеживать использование ресурсов: процессора, памяти, интернет-канала, дискового пространства. ![Без Названия](https://content.timeweb.com/assets/e6aff630-ca6c-4282-97ad-1168f61ff4db.png?width=1558&height=1502) Если вы видите, что нагрузка регулярно достигает критических значений и приложению требуется больше ресурсов для стабильной работы, вы можете перейти на более мощный сервер, выбрав его параметры в разделе «Настройки» → «Выбрать конфигурацию». - **Frontend-приложения** Для frontend-приложений подобная статистика не ведется, и раздел «Дашборд» у них отсутствует. Для фронтенда мы отслеживаем только количество запросов в месяц, однако в настоящий момент эти данные не отображаются в панели управления — функционал появится позже. В случае, если приложение достигнет лимита запросов, мы свяжемся с вами по email и сориентируем по последующим шагам. ## Привязка домена ### Технический домен При создании любого приложения мы автоматически привяжем к нему бесплатный технический домен и выпустим SSL-сертификат Let's Encrypt. После деплоя приложения вы можете привязать к нему свой собственный домен вместо технического. ### Собственный домен К приложению можно привязать домен из панели Timeweb Cloud, внешний домен, зарегистрированный у другого провайдера, или поддомен. После привязки домена мы автоматически выпустим для него бесплатный SSL-сертификат Let's Encrypt. Сертификат будет продлеваться автоматически за неделю до истечения срока действия. > [!NOTE] > Если вы хотите привязать поддомен, сначала создайте его [по инструкции](https://timeweb.cloud/docs/domains/subdomains#sozdanie-poddomena). Чтобы привязать домен к приложению: 1. Перейдите в раздел «App Platform» и кликните на нужное приложение. 2. Откройте вкладку «Настройки». 3. В блоке «Домены» нажмите «Редактировать». 4. В открывшемся окне выберите вариант привязки: - если домен находится в панели Timeweb Cloud, выберите его из списка; - если домен зарегистрирован у другого провайдера, выберите «Внешний домен» и укажите доменное имя. На стороне провайдера [добавьте A-запись](https://timeweb.cloud/docs/domains/dns-records-management-other-registrars) из подсказки в панели и дождитесь обновления DNS-записи. 6. Нажмите «Сохранить». ![Привязка домена в App Platform](https://content.timeweb.com/assets/3b9e33ea-df70-412a-8e43-e04f5a1a612a.png?width=2782&height=1958) Если домен находится в панели Timeweb Cloud и уже был привязан к другому сервису, при выборе этого домена для приложения его A-запись будет изменена. К одному приложению можно привязать любое количество доменов. Чтобы отвязать домен, откройте окно редактирования доменов и нажмите на крестик рядом с нужным доменом. Привязка и отвязка домена запускают повторный деплой приложения. ## Просмотр логов Для backend-приложений логи доступны во вкладке «Логи приложения». ![Screenshot 04 04 25 18:03:43](https://content.timeweb.com/assets/464eb23c-115b-48d6-aee6-cfe888438403.png?width=1003&height=850) Для frontend-приложений логи расположены во вкладке «Логи доступа». Логи отображаются только за последние сутки. При скачивании будут загружены последние 10 000 строк логов. ![Scr 20260219 Olbu](https://content.timeweb.com/assets/d2f01e7c-5a87-43b2-bea4-faf82f66160f.png?width=2104&height=1528) ## Перезагрузка приложения Если вы наблюдаете какие-то неполадки в работе приложения, можно попробовать выполнить перезапуск контейнера/сервера, в котором оно запущено. > [!NOTE] > Опция доступна для Backend-приложений и приложений, развернутых через Dockerfile или Docker Compose. Это можно сделать из панели управления: ![Selection 243](https://content.timeweb.com/assets/bb8f66be-d3d3-4732-8c7b-954a7aecb3c3.png?width=1013&height=797) ## Приостановка приложения Если по каким-то причинам вам нужно временно приостановить работу приложения и сделать его недоступным, можно остановить контейнер/сервер в панели: ![Selection 244](https://content.timeweb.com/assets/6e70689d-2671-4d4c-9fac-48057cc7adb2.png?width=1017&height=798) Запустить его заново можно будет здесь же. ## Изменение конфигурации сервера Бэкенд-приложения и приложения, развернутые через Dockerfile или Docker Compose, работают на отдельных облачных серверах. Если приложению требуется больше ресурсов, вы можете изменить конфигурацию сервера, на котором оно запущено. Менять тариф можно только в сторону увеличения, так как уменьшить размер диска невозможно без риска серьезных повреждений файловой системы. Чтобы увеличить тариф: 1. Перейдите в раздел «App Platform» и кликните на нужное приложение. 2. На вкладке «Настройки» кликните «Выбрать конфигурацию». 3. Выберите новый конфиг и нажмите «Сохранить и перезагрузить». ## Настройка сети Настройка доступна только для backend-приложений. Во вкладке «Сеть» вы можете увидеть, к какой приватной сети подключено приложение. Изменить приватную сеть нельзя — ее выбор доступен только при создании приложения. Вы также можете подключить для приложения файрвол, нажав на кнопку «Настроить» в разделе «Firewall». Можно выбрать существующий файрвол или создать новый. ## Удаление приложения Чтобы удалить приложение: 1. Перейдите в раздел «App Platform». 2. Кликните на три точки у нужного приложения и кликните «Удалить» 3. Подтвердите действие. # Подключение корневых сертификатов Source: https://timeweb.cloud/docs/apps/trusted-certificates?utm_source=llms_txt&utm_medium=ai Корневой сертификат подтверждает доверие к центру сертификации, который выпускает цифровые сертификаты. Если добавить корневой сертификат в доверенное хранилище, приложение сможет проверять подлинность выпущенных этим центром сертификатов и устанавливать защищенное HTTPS-соединение с ресурсами, которые их используют. В App Platform можно подключить сертификаты следующих центров сертификации: - Минцифры — корневой сертификат Национального удостоверяющего центра Минцифры России (Russian Trusted CA). - ТЦИ — корневой ECDSA-сертификат [Центра сертификации ООО «ТЦИ»](https://tlscc.ru/). Центр выпускает TLS-сертификаты ECDSA и ГОСТ. В App Platform подключает только корневой ECDSA-сертификат. Эти сертификаты могут потребоваться, например, при работе с API банков и государственных организаций. По умолчанию они отсутствуют в доверенных хранилищах многих операционных систем, языковых сред и HTTP-библиотек, поэтому их необходимо добавить самостоятельно. Подключить сертификаты можно для backend-приложениий, а также для приложений, развернутых с помощью Dockerfile или Docker Compose. Для  frontend-приложений сертификаты не требуются. ## Подключение сертификатов Сертификаты можно подключить при создании нового приложения или позже в настройках уже существующего. Подключайте сертификаты того центра сертификации, которым выпущен сертификат ресурса, к которому обращается приложение. ### При создании приложения Чтобы подключить сертификаты при создании приложения, на этапе «Настройка приложения» включите переключатели для нужных сертификатов: - «Сертификаты Минцифры»; - «Сертификаты ТЦИ». ![Включение сертификатов ](https://content.timeweb.com/assets/2bc2d53e-602b-4835-88af-7672c41d6dde.png?width=1056&height=546) ### В существующем приложении Чтобы подключить сертификаты к уже созданному приложению: 1. Перейдите в раздел «App Platform» и выберите нужное приложение. 2. Откройте вкладку «Настройки». 3. В строке «Сертификаты» нажмите на кнопку «Изменить» 4. В открывшемся окне отметьте нужные сертификаты и нажмите на кнопку «Сохранить». После сохранения запустится повторный деплой приложения. ![Настройка сертификатов ](https://content.timeweb.com/assets/ba208aaa-ed0c-4711-8c50-ab0edc42fe24.png?width=2782&height=1622) ## Установка сертификатов для приложений из Dockerfile и Docker Compose Для приложений, развернутых с помощью Dockerfile или Docker Compose, App Platform добавляет файлы сертификатов в контейнер, но не устанавливает их в доверенное хранилище автоматически. Настроить доверие к сертификатам необходимо самостоятельно. Для этого добавьте нужные инструкции в `Dockerfile` сервиса, который будет обращаться к внешнему ресурсу. Минцифры App Platform добавит в контейнер три файла: - `/usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca.crt` — корневой сертификат; - `/usr/local/share/ca-certificates/russian-trusted/russian_trusted_sub_ca.crt` — промежуточный сертификат; - `/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt` — корневой и промежуточный сертификаты в одном файле. В зависимости от рантайма может потребоваться объединенный файл или два отдельных сертификата. ### Node.js Задайте переменную `NODE_EXTRA_CA_CERTS`: ```bash ENV NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt ``` Переменная используется при запросах через `https`, `fetch`, `axios` и другие HTTP-клиенты. Вносить изменения в код приложения не требуется. ### Python Для приложений, использующих `requests`, `httpx` или `aiohttp`, задайте переменные: ```docker ENV REQUESTS_CA_BUNDLE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt ``` Переменная `REQUESTS_CA_BUNDLE` используется библиотекой requests, а `SSL_CERT_FILE` — стандартным модулем `ssl` и библиотеками, которые работают через него. ### Go Задайте переменную `SSL_CERT_FILE`: ```docker ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt ``` ### Java и другие JVM-языки JVM использует собственное хранилище сертификатов, поэтому указать путь к объединенному PEM-файлу недостаточно. Импортируйте корневой и промежуточный сертификаты по отдельности: ```bash RUN keytool -importcert -noprompt -trustcacerts \ -alias russian_trusted_root \ -file /usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca.crt \ -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit && \ keytool -importcert -noprompt -trustcacerts \ -alias russian_trusted_sub \ -file /usr/local/share/ca-certificates/russian-trusted/russian_trusted_sub_ca.crt \ -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit ``` Инструкция подходит для Java, Kotlin, Scala и других языков, которые работают на JVM. ### .NET Задайте переменную `SSL_CERT_FILE`: ```docker ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/russian-trusted/russian_trusted_ca_bundle.crt ``` ### Установка в системное хранилище Если приложение обращается к API через `curl`, `wget`, `OpenSSL` или другие инструменты, которые используют системное хранилище сертификатов, установите сертификаты в это хранилище: ```bash RUN cp /usr/local/share/ca-certificates/russian-trusted/russian_trusted_root_ca.crt \ /usr/local/share/ca-certificates/russian-trusted/russian_trusted_sub_ca.crt \ /usr/local/share/ca-certificates/ \ && update-ca-certificates ``` Для выполнения команды в образе должен быть установлен пакет `ca-certificates`. После установки указывать путь к сертификатам для `curl`, `wget` и большинства приложений, использующих системное хранилище, не требуется. ТЦИ App Platform добавит в контейнер корневой ECDSA-сертификат ТЦИ: - `/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt`. ### Node.js Задайте переменную `NODE_EXTRA_CA_CERTS`: ```docker ENV NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt ``` Переменная используется при запросах через `https`, `fetch`, `axios` и другие HTTP-клиенты. Вносить изменения в код приложения не требуется. ### Python Для приложений, использующих `requests`, `httpx` или `aiohttp`, задайте переменные: ```docker ENV REQUESTS_CA_BUNDLE=/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt ``` Переменная `REQUESTS_CA_BUNDLE` используется библиотекой requests, а `SSL_CERT_FILE` — стандартным модулем `ssl` и библиотеками, которые работают через него. ### Go Задайте переменную `SSL_CERT_FILE`: ```docker ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt ``` ### Java и другие JVM-языки JVM использует собственное хранилище сертификатов, поэтому импортируйте сертификат с помощью `keytool`: ```bash RUN keytool -importcert -noprompt -trustcacerts \ -alias tci_ecdsa_root \ -file /usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt \ -keystore "$JAVA_HOME/lib/security/cacerts" -storepass changeit ``` Инструкция подходит для Java, Kotlin, Scala и других языков, которые работают на JVM. ### .NET Задайте переменную `SSL_CERT_FILE`: ```docker ENV SSL_CERT_FILE=/usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt ``` ### Установка в системное хранилище Если приложение обращается к внешнему ресурсу через `curl`, `wget`, `OpenSSL` или другие инструменты, которые используют системное хранилище сертификатов, установите сертификат в это хранилище: ```bash RUN cp /usr/local/share/ca-certificates/tci-trusted/tci_ecdsa_root_ca.crt \ /usr/local/share/ca-certificates/ \ && update-ca-certificates ``` Для выполнения команды в образе должен быть установлен пакет ca-`certificates`. После установки указывать путь к сертификату для `curl`, `wget` и большинства приложений, использующих системное хранилище, не требуется. # Частые вопросы об App Platform Source: https://timeweb.cloud/docs/apps/faq?utm_source=llms_txt&utm_medium=ai В статье собрали ответы на самые популярные вопросы об App Platform, которые возникают у наших пользователей. ## Мой аккаунт GitHub, Gitlab или Bitbucket подключен, но App Platform не видит нужный репозиторий. Что делать? Обычно это происходит в двух случаях: - Вы авторизовались в свой аккаунт GitHub, Gitlab или Bitbucket в сервисе App Platform, а после этого добавили новый репозиторий. - Вы разрешили подключить только отдельные репозитории, а не все, и нужный репозиторий не выбран. Чтобы решить проблему: 1. Кликните «Добавить аккаунт». ![3f31ba98 1140 4674 8a28 744638edfede](https://content.timeweb.com/assets/4c7c2c8e-8c51-4ca9-8f31-d041ce8dc526?width=745&height=319) 2. Выберите платформу. ![1d2f1c03 Ca39 4520 Bc95 86e22b8ce42f](https://content.timeweb.com/assets/a5a1a163-c7b1-420e-bf80-2c8b3ad73a98?width=785&height=359) 3. Авторизуйтесь, если необходимо. 4. Выберите нужный репозиторий и сохраните изменения. ![Image2](https://content.timeweb.com/assets/65022223-b64e-4415-a63c-ee81a537a786?width=885&height=716) Подключенные репозитории отобразятся в панели управления, и вы сможете выбрать нужный. ## Можно ли удалить подключенный репозиторий? Да, любой добавленный репозиторий можно отвязать от панели управления на странице создания нового приложения. > [!NOTE] > При отключении репозитория любые деплои (как автоматические, так и ручные) всех приложений, созданных из этого репозитория, станут невозможны. 1. Перейдите в раздел «App Platform» и нажмите «Добавить». 2. Кликните на выпадающий список репозиториев и нажмите «Удалить» у нужного из них. 3. На следующем шаге подтвердите действие. ## У меня развернуто локальное хранилище репозиториев Git. Как подключить его к App Platform? Это возможно, если у git-репозитория есть внешний HTTP/HTTPS-адрес. Для этого необходимо воспользоваться опцией [подключения репозиториев по URL](https://timeweb.cloud/docs/apps/connecting-repositories#podkluchenie-repozitoriya-po-ssylke). Обратите внимание, что при этом будет недоступен автодеплой — после обновлений в коде будет необходимо [запускать деплой приложения вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj), выбрав нужный коммит. ## Можно ли подключить репозитории не из GitHub, GitLab или BitBucket? Да, вы можете [подключить репозиторий по ссылке](https://timeweb.cloud/docs/apps/connecting-repositories#podkluchenie-repozitoriya-po-ssylke).  Этим способом можно подключать любые репозитории, у которых есть внешний HTTP- или HTTPS-адрес, в том числе, self-hosted-хранилища или репозитории, размещенные у провайдеров, которые мы не поддерживаем напрямую (например, Gitea). ## Есть ли примеры приложений для развертывания? Примеры фронтенд-приложений, а также пример приложения Flask для запуска через Dockerfile, доступны в нашем [Гитхабе](https://github.com/timeweb-cloud?tab=repositories). Удобнее всего перейти к нужному демо из панели управления при создании нового App, кликнув на иконку Гитхаба у приложения: ![758c1894 3376 48b6 Ac0b A2c84d038a6f](https://content.timeweb.com/assets/5a574fbd-b926-4a56-b75e-d8148985a5f1?width=1475&height=924) ## Можно ли получить FTP-доступ к приложению? Приложение запущено внутри Docker-контейнера, и получить к нему FTP-доступ невозможно. Кроме того, это не имеет смысла: при каждом новом деплое все файлы будут удалены.  Загружать файлы необходимо в репозиторий проекта, тогда App Platform автоматически выгрузит их при деплое. А для размещения пользовательских файлов можно использовать сторонние хранилища, например, [S3](https://timeweb.cloud/my/storage). ## Как получить SSH-доступ к приложению? Для backend-приложений и приложений, развернутых через Dockerfile, можно получить доступ к контейнеру с вашим приложением с помощью консоли в панели управления: ![1cfa455a 9ed5 4eb4 92ca 41b957011817](https://content.timeweb.com/assets/57f7c300-4284-4902-97d9-392e3b2ff44f?width=1490&height=1323) ## Как поменять версию Node.js в среде развертывания контейнера? Какая версия используется? Вы можете выбрать версию Node.js при создании приложения. Доступны версии 20, 22, 24. ![92b67ec8 105c 4fb5 8b97 38199a825f05](https://content.timeweb.com/assets/d2e802f5-4d39-426b-8b9b-f3e71cd60ceb.png?width=1377&height=821) ## Какая версия Python используется? Как ее изменить? В App Platform доступны версии Python 3.10, 3.11, 3.12, 3.13, 3.14. Версию можно выбрать при создании приложения. ![641fa840 F934 4150 8f93 Df7e431392bf](https://content.timeweb.com/assets/a8eb0965-5383-405a-b8b7-393b28229d94.png?width=1370&height=819) ## Как привязать свой домен к приложению? Привязать собственный домен можно [по нашей инструкции](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#privyazka-domena). Также, для тестовых целей можно использовать бесплатный технический домен, который был автоматически привязан к приложению при деплое. ## Как управлять хранилищем (диском) на экземпляре? Такой возможности нет. Необходимо использовать внешнее хранилище для данных, например, S3 или любое другое. Также к экземпляру приложения невозможно примонтировать что-либо по сети; доступна только отправка файлов через API или протокол, не подразумевающий монтирование сетевой файловой системы. ## Поддерживается ли работа с приложением при помощи MCP-сервера? Да, доступна экспериментальная реализация MCP-сервера. Инструкция по интеграции и описание доступных методов опубликованы вместе с пакетом [timeweb-mcp-server](https://www.npmjs.com/package/timeweb-mcp-server?activeTab=readme). # Добавление VCS-провайдеров через API Source: https://timeweb.cloud/docs/apps/adding-vcs-provider-api?utm_source=llms_txt&utm_medium=ai Чтобы добавить VCS-провайдера GitHub, GitLab или BitBucket с помощью метода API [/api/v1/vcs-provider](https://timeweb.cloud/api-docs#tag/Apps/operation/addProvider), вам потребуется токен, который необходимо получить в интерфейсе провайдера.  > [!NOTE] > Авторизация по токену (PAT-авторизация) доступна только при использовании API, а авторизация через OAuth — только в панели управления. > > Для OAuth-авторизации мы будем следить за сроком жизни токена и своевременно его обновлять. Для PAT-авторизации вам необходимо делать это самостоятельно. > > При обращении к ресурсам провайдера через панель или API будет использоваться последняя пройденная авторизация. ## Получение токена в GitHub Для добавления аккаунта GitHub вам будет нужен `Fine-grained personal access token`. Чтобы его получить: 1. Авторизуйтесь в своем аккаунте [GitHub](https://github.com/login). 2. [Верифицируйте свой емейл](https://docs.github.com/en/account-and-profile/setting-up-and-managing-your-personal-account-on-github/managing-email-preferences/verifying-your-email-address), если это еще не было сделано. 3. Перейдите в раздел [Fine-grained tokens](https://github.com/settings/tokens?type=beta) (кликнуть на профиль → **Settings** → **Developer settings** → **Personal access tokens** → **Fine-grained tokens**). 4. Нажмите **Generate new token**. 5. Укажите имя токена в **Token name**. 6. Выберите дату истечения токена в **Expiration**. 7. При желании добавьте описание в поле **Description**. 8. В пункте **Resource owner** выберите владельца ресурса. С помощью токена можно будет получить доступ только для ресурсов выбранного владельца.  9. В пункте **Repository access** выберите, к каким репозиториям должен быть доступ по токену. 10. Если на прошлом шаге вы указали **Only select repositories**, выберите конкретные репозитории из выпадающего списка **Selected repositories**. 11. В разделе **Permissions** выберите разрешения:  - `Webhooks: read and write` - `Contents: read-only` 12. Нажмите **Generate token**. 13. Скопируйте полученный токен и передайте в качестве значения `provider_token` при добавлении провайдера. Подробная инструкция доступна в [документации GitHub](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token). ## Получение токена в GitLab Для добавления аккаунта GitLab вам потребуется `Personal access token`. Получить его можно так: 1. Авторизуйтесь в своем аккаунте [GitLab](https://gitlab.com/users/sign_in). 2. Кликните на аватар аккаунта слева и выберите **Edit profile**. 3. В левом меню выберите **Access tokens** → **Add new token**. 4. Введите имя токена и дату его истечения. Дата истечения может быть не позднее 365 с текущей даты. Этот же период применится по умолчанию, если не указать дату. 5. Укажите разрешение: - `api` 6. Кликните **Create personal access token**. 7. Скопируйте полученный токен и передайте в качестве значения `provider_token` при добавлении провайдера. Сохраните токен у себя — вы не сможете получить доступ к нему после того, как закроете страницу. ## Получение токена в BitBucket Для добавления аккаунта BitBucket необходимо использовать `App Password`. Получить его можно так: 1. Авторизуйтесь в своем аккаунте [BitBucket](https://bitbucket.org/product). 2. Кликните на значок шестеренки справа вверху и перейдите в **Personal Bitbucket settings**. 3. В меню слева выберите **App password** и кликните **Create app password**. 4. Задайте удобное имя (**Label**) и следующие разрешения:  - `Account: Read` - `Projects: Read` - `Repositories: Read` - `Webhooks: Read and write` 5. Нажмите **Create**. 6. Откроется окно с вашим app password. Скопируйте его и передайте в качестве значения `provider_token` при добавлении провайдера. # Переменные Source: https://timeweb.cloud/docs/apps/variables?utm_source=llms_txt&utm_medium=ai В App Platform вы можете использовать переменные — например, для передачи паролей, путей, токенов и других параметров окружения. > [!NOTE] > К одному приложению можно привязать не более 100 переменных, вне зависимости от их вида. ## Виды переменных Переменные делятся на два вида: локальные и глобальные. Локальные переменные: - Привязаны к одному приложению; - Удаляются вместе с приложением; - Настраиваются при создании или редактировании приложения. Глобальные переменные: - Хранятся отдельно от приложений; - Можно использовать в нескольких приложениях; - Управляются централизованно во вкладке «App Platform» → «Переменные». ## Локальные переменные Локальные переменные можно задать при создании приложения или при редактировании настроек уже существующего приложения. ### При создании приложения Локальные переменные можно добавить при деплое приложения. Для этого в разделе «Настройки приложения», в строке «Переменные» нажмите кнопку «Добавить». ![Image9](https://content.timeweb.com/assets/c84f46f2-0751-4cdd-ab42-4ed4bee74714.png?width=932&height=684) В открывшемся окне укажите название и значение переменной. При необходимости добавьте другие переменные с помощью кнопки «Добавить еще». При установке флага «Сохранить как глобальную» переменная станет доступна в других приложениях. ![Image11](https://content.timeweb.com/assets/f0ab6de4-a1e0-486c-832a-0380107e7111.png?width=908&height=758) Также можно загрузить переменные из файла. Для этого нажмите «Загрузить из файла». Загрузить можно только файл с именем `.env`. Переменные должны быть указаны в формате: ```shell APP_NAME=MyApp APP_ENV=production DB_HOST=localhost DB_PORT=3306 ``` ### В существующем приложении 1. Перейдите в раздел App Platform и кликните на нужное приложение. 2. Перейдите во вкладку «Настройки» и нажмите кнопку «Редактировать» в строке «Настройка деплоя». ![Image13](https://content.timeweb.com/assets/5634666b-4589-41d2-a750-298588d563eb.png?width=1999&height=1165) 3. В открывшемся окне нажмите кнопку «Добавить» в блоке «Переменные». Откроется то же окно, что и при создании приложения. ![Image5](https://content.timeweb.com/assets/76ca36a7-2e9a-42b2-88b1-5b8621eef6fe.png?width=1999&height=1499) ### Редактирование локальной переменной 1. Перейдите в раздел App Platform и кликните на нужное приложение. 2. На вкладке «Настройки» нажмите кнопку «Редактировать» в строке «Настройка деплоя». 3. В разделе «Переменные» нажмите на иконку карандаша рядом с нужной переменной. ![Image10](https://content.timeweb.com/assets/5bd3a13c-bf24-4a4e-b143-5bae1473edeb.png?width=1999&height=1451) 4. В открывшемся окне внесите изменения и нажмите «Сохранить». ### Удаление локальной переменной 1. Перейдите в раздел App Platform и кликните на приложение. 2. На вкладке «Настройки» нажмите кнопку «Редактировать» в строке «Настройка деплоя». 3. Нажмите на крестик рядом с переменной, которую нужно удалить. ![Image3](https://content.timeweb.com/assets/fcf63f23-36fc-4717-b6a3-bfcbfaeca599.png?width=1999&height=1473) ## Глобальные переменные Глобальные переменные управляются централизованно и отображаются во вкладке «App Platform» → «Переменные». ![Image1](https://content.timeweb.com/assets/3af9217b-0800-460a-b8d1-74f2479ca242.png?width=1999&height=1446) ### Создание глобальной переменной Перейдите в «App Platform» → «Переменные» и нажмите кнопку «Добавить». ![Image12](https://content.timeweb.com/assets/09cf9cee-831a-41c4-bb36-d1913a909dca.png?width=1999&height=1446) В открывшемся окне укажите название и значение переменной. При необходимости добавьте дополнительные переменные с помощью кнопки «Добавить еще». ![Image7](https://content.timeweb.com/assets/09c48f3c-b2e9-499d-ae85-8fc0925a448f.png?width=1999&height=1290) Также можно загрузить переменные из файла. Для этого нажмите «Загрузить из файла». Загрузить можно только файл с именем `.env`. Переменные должны быть указаны в формате: ```shell APP_NAME=MyApp APP_ENV=production DB_HOST=localhost DB_PORT=3306 ``` Добавленные переменные можно выбрать при создании нового приложения или при редактировании существующего. Для этого используйте выпадающий список в разделе «Переменные». ![Image6](https://content.timeweb.com/assets/54a3a91b-ad71-41dc-b5d5-964133ecc7e7.png?width=1114&height=1080) ### Редактирование глобальной переменной Откройте раздел «App Platform» → «Переменные», нажмите на три точки рядом с нужной переменной и выберите «Редактировать». ![Image4](https://content.timeweb.com/assets/c1f24a34-4437-4c45-93fb-0f690c2392d6.png?width=1999&height=1142) В открывшемся окне внесите изменения и нажмите «Сохранить». ### Удаление глобальной переменной В разделе «App Platform» → «Переменные» нажмите на три точки рядом с переменной и выберите «Удалить». ![Image2](https://content.timeweb.com/assets/b1115e3b-1dfc-454c-8aa9-5d6d72a3208d.png?width=1999&height=1142) Подтвердите удаление в открывшемся окне. Если переменная используется в приложениях, появится список таких приложений. Чтобы переменная осталась в этих приложениях как локальная, установите галочку «Оставить переменную в приложениях». ![Image8](https://content.timeweb.com/assets/d0aa369e-5a80-4300-9dc7-f033232cbee7.png?width=1999&height=1295) # Стенды Source: https://timeweb.cloud/docs/apps/stands?utm_source=llms_txt&utm_medium=ai Стенды — это отдельные окружения, которые позволяют тестировать изменения без влияния на основную версию приложения. Стенд разворачивается как независимый экземпляр приложения с собственной сборкой и доступен по отдельному техническому домену. Стенды доступны для фронтенд-, бэкенд- и Docker-приложений. Максимальное количество стендов для одного приложения — 10. Для бэкенд- и Docker-приложений стенды предоставляются бесплатно и разворачиваются на той же виртуальной машине, что и основное приложение. Стенд использует ресурсы этой же машины — их должно быть достаточно для его запуска и работы. Для фронтенд-приложений запросы [тарифицируются так же](https://timeweb.cloud/docs/apps/frontend-pricing), как и для основного приложения. Стенды не поддерживаются для приложений, развернутых через Docker Compose. ## Создание стенда Чтобы создать стенд, откройте приложение в панели управления и перейдите на вкладку «Стенды». ![Scr 20260401 Oqpo](https://content.timeweb.com/assets/27fb8e0a-8ca3-4c82-8905-9e8bb1572e42.png?width=2120&height=1612) Если стенды еще не создавались, сразу отобразится выбор ветки для создания стенда. В противном случае нажмите «Добавить стенд». В открывшемся окне укажите: - имя стенда; - ветку репозитория; - коммит для сборки или включите использование последнего коммита; - выберите существующие или добавьте новые переменные. ![Scr 20260420 Qgjx](https://content.timeweb.com/assets/36e499dc-70b2-41ba-af9e-e5828af324ab.png?width=2082&height=1608) Нажмите «Создать». После этого будет выполнен деплой стенда. Для него автоматически создается технический домен, по которому будет доступно приложение. ## Управление стендами Во вкладке «Стенды» отображаются все созданные стенды.  При наведении на стенд отображается значок просмотра. Нажмите на него, чтобы скопировать URL, по которому доступно приложение в стенде. ![Scr 20260401 Otlr](https://content.timeweb.com/assets/51e9d536-b9ec-45da-af1c-d42e678285b7.png?width=2104&height=1590) При нажатии на стенд в списке откроется окно с вкладками «Настройки» и «Логи стенда». Во вкладке «Настройки» можно: - включить или выключить стенд; - изменить название стенда; - изменить ветку репозитория; - изменить коммит; - управлять переменными; - скопировать URL стенда. ![Scr 20260420 Qgyi](https://content.timeweb.com/assets/967b1f27-4c71-4916-a2ea-84694c226768.png?width=2112&height=1608) Во вкладке «Логи стенда» отображаются: - логи деплоя; - логи приложения — для бэкенд- и Docker-приложений; - логи доступа — для фронтенд-приложений. ![Scr 20260401 Otzx](https://content.timeweb.com/assets/aea36ec7-231d-489f-a7f4-265ee51851b6.png?width=2142&height=1580) Чтобы удалить стенд, нажмите на меню с тремя точками рядом с ним и выберите «Удалить». ![Scr 20260401 Oueu](https://content.timeweb.com/assets/e75fe52a-9e25-4170-9ca5-d74399a1892f.png?width=2138&height=1586) # Клонирование приложения Source: https://timeweb.cloud/docs/apps/cloning?utm_source=llms_txt&utm_medium=ai С помощью клонирования вы можете быстро создать копию существующего приложения. В новое приложение будут перенесены его тип, подключенный репозиторий и настройки деплоя, в том числе переменные. После клонирования приложения работают независимо друг от друга. Стоимость нового приложения может отличаться от стоимости исходного — она будет рассчитана по актуальным тарифам на момент клонирования. > [!NOTE] > При клонировании приложения [стенды](https://timeweb.cloud/docs/apps/stands) не будут скопированы. Перед клонированием убедитесь, что на балансе достаточно средств для оплаты нового приложения. Если средств не хватает, при запуске клонирования появится уведомление о необходимости оплаты. Чтобы клонировать приложение: 1. Перейдите в раздел «App Platform». 2. Зайдите в панель управления нужного приложения. 3. Нажмите на иконку «Клонировать» в верхнем меню. ![Клонирование приложения](https://content.timeweb.com/assets/515bba1d-b6f0-4815-a2c6-491885073c93.png?width=2156&height=1622) 4. Проверьте настройки нового приложения. При необходимости измените их. 5. Укажите имя приложения и выберите проект, в который нужно его добавить. 6. Нажмите «Заказать». App Platform автоматически создаст новое приложение и запустит его деплой. Процесс может занять несколько минут. Работа исходного приложения при этом не прерывается. После завершения деплоя приложение-клон будет доступно по новому техническому домену. Его можно найти на главной странице раздела «App Platform» или во вкладке «Дашборд» приложения. # Путь проверки состояния Source: https://timeweb.cloud/docs/apps/healthcheck-path?utm_source=llms_txt&utm_medium=ai Путь проверки состояния нужен, если вы хотите выполнять периодическую проверку того, запущено ли приложение и работает ли оно корректно. По умолчанию, если проверка состояния не включена, после деплоя выполняется только базовая проверка: система убеждается, что контейнер с приложением успешно запущен. При этом работоспособность самого приложения не оценивается — оно может отвечать некорректно или не отвечать совсем — статус деплоя останется успешным. Чтобы избежать таких ситуаций, можно настроить путь проверки состояния. Для этого в приложении должен быть реализован эндпоинт, который не зависит от внешних факторов (например, готовности базы данных или сторонних сервисов) и отражает состояние приложения. Этот эндпоинт вы сможете указать при настройке — например, `/health`, `/status` или `/ping`. ## Как работает Во всех случаях запрос к пути проверки состояния выполняется с `localhost`.  Главное требование — возвращать код `2xx`. Содержимое ответа неважно, главное — корректный код ответа. ### При редеплое Если путь проверки состояния указан, система делает до трех последовательных GET-запросов к новому инстансу приложения. - Если хотя бы один запрос возвращает код `2xx` — деплой считается успешным, и новая версия приложения становится активной. - Если три проверки подряд завершаются ошибкой (любой ответ, отличный от `2xx`) — деплой считается неуспешным, и продолжает работать предыдущая версия. - Проверки продолжаются до тех пор, пока не будет: - один успешный ответ, - три неуспешных ответа подряд через 40 секунд после запуска, - или не пройдет 180 секунд — если за это время ни одно из условий не выполнено, деплой считается неуспешным. В логах деплоя появится сообщение, если проверка не пройдена. ### После запуска После успешного деплоя система продолжает регулярно проверять работоспособность приложения: один запрос каждые 30 секунд. Если три проверки подряд завершаются ошибкой, приложение автоматически перезапускается. Это отобразится в логах приложения. ![Scr 20251125 Olid](https://content.timeweb.com/assets/e710bb31-70ef-4448-a157-49f7a170b5c3.png?width=2152&height=1666) ## Настройка Путь проверки состояния можно указать как при создании приложения, так и для уже существующего. ### При создании приложения В разделе «Настройка приложения» укажите путь в поле «Путь проверки состояния». Например, если в приложении реализован эндпоинт `/health`, который доступен по адресу `https://домен/health`, укажите: ```shell /health ``` ![Scr 20251125 Qqdp](https://content.timeweb.com/assets/acf63b28-a9a1-4566-857e-6f257f2898d7.png?width=1010&height=822) ### Для уже созданного приложения 1. Откройте нужное приложение в панели управления. 2. Перейдите на вкладку «Настройки». 3. В блоке «Настройки деплоя» нажмите кнопку «Редактировать». 4. Введите путь проверки состояния. 5. Нажмите «Сохранить данные». После этого автоматически запустится новый деплой с обновленной настройкой. ![Scr 20251125 Qqlz](https://content.timeweb.com/assets/de3a0ff1-626e-4f84-a558-10b221016303.png?width=2140&height=1552) ## Docker и Docker Compose Если вы используете деплой через Dockerfile, в панели управления будет доступна [настройка пути проверки состояния](https://timeweb.cloud/docs/apps/healthcheck-path#nastrojka). Но если в самом Dockerfile прописан `HEALTHCHECK`, он имеет приоритет — настройка из панели в этом случае игнорируется. Настройка через Dockerfile подробно описана в [официальной документации](https://docs.docker.com/reference/dockerfile/#healthcheck). Пример: ```shell HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ CMD curl -f http://localhost/health || exit 1 ``` Для деплоев через Docker Compose настройка пути проверки состояния в панели управления не поддерживается. Если при этом используется Dockerfile, вы можете настроить `HEALTHCHECK` внутри него — правило будет работать, как описано выше.