# App Platform — полный текст документации > Полный текст раздела «App Platform» документации Timeweb Cloud в markdown. Каждая статья начинается с заголовка первого уровня и ссылки на свою каноническую страницу. Индекс: https://timeweb.cloud/docs/apps/llms.txt Статей: 52 Последнее обновление: 2026-10-02 # App Platform Source: https://timeweb.cloud/docs/apps 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 Основная функция сервиса приложений — автоматический деплой. 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 Подключить нужный репозиторий вы можете в процессе создания нового приложения в разделе «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. Кликните на иконку нужной платформы. 3. Авторизуйтесь в своем аккаунте. 4. Предоставьте доступ к нужным репозиториям. 5. Выберите в панели репозиторий для деплоя. **Если вы уже авторизованы в своем аккаунте GitHub, GitLab или Bitbucket**, панель автоматически отобразит доступные репозитории. Вам достаточно выбрать нужный. **Если вы авторизованы, но нужного репозитория нет в списке:** 1. Раскройте список репозиториев и нажмите «Добавить аккаунт». 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. Если какие-то репозитории уже добавлены, раскройте список с ними и нажмите «Добавить аккаунт». 3. Нажмите «Подключите git-репозиторий по URL». 4. Укажите ссылку на репозиторий и реквизиты доступа, если репозиторий приватный. 5. Нажмите «Подключить». ![2fd04f76 58a9 4a37 9149 31b00e2734a9](https://content.timeweb.com/assets/e634aa9c-ff9a-432a-bb2c-3f9a3d8c8270?width=664&height=713) Подключенный репозиторий и доступные коммиты отобразятся в панели управления. ### Получение ссылки в 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. Кликните на список репозиториев и кликните иконку удаления у нужного из них. 3. Подтвердите действие. ![Добавить App 2026 09 22 13 40](https://content.timeweb.com/assets/14bde1cf-80eb-4ac8-9995-878fed27bb06.png?width=1572&height=861) ## Сервис App Platform не видит нужный репозиторий Если ваш аккаунт GitHub, GitLab или Bitbucket подключен, но в панели управления не отображается нужный репозиторий, причин может быть две: - Вы авторизовались в свой аккаунт GitHub, GitLab или Bitbucket в сервисе App Platform, а после этого добавили новый репозиторий. - Вы разрешили подключить только отдельные репозитории, и нужный репозиторий не выбран. Чтобы решить проблему: 1. Кликните на список репозиториев и нажмите «Добавить аккаунт». 2. Выберите платформу. 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 Для фронтенд-приложений применяется поресурсная модель списания — вы оплачиваете только фактическое использование ресурсов. Списания происходят за любые входящие 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 ## Шаг 1. Подключение репозитория Вы можете [подключить репозиторий](https://timeweb.cloud/docs/apps/connecting-repositories) одним из следующих способов: Из аккаунта GitHub, GitLab или Bitbucket 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если вы уже залогинены в Git-аккаунт, панель отобразит все доступные репозитории. Выберите нужный. - Если нужно авторизоваться в другой Git-аккаунт, раскройте список репозиториев и кликните «Добавить аккаунт». 2. Кликните на иконку нужной платформы. 3. Авторизуйтесь в своем Git-аккаунте и разрешите Timeweb Cloud доступ ко всем или отдельным репозиториям. 4. Выберите нужный репозиторий в панели Timeweb Cloud. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток, а также ветку по умолчанию (`master`, `main` или `default`). 6. Оставьте опцию «Сборка по последнему выполненному коммиту» включенной, чтобы автоматически перезапускать деплой приложения при появлении новых коммитов в репозитории. Если хотите выбирать коммит для деплоя вручную, отключите эту опцию. Автодеплой можно [отключить](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) и позже, в любой момент. По ссылке 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если какие-то репозитории уже подключены, раскройте список с ними и кликните «Добавить аккаунт». 2. Кликните «Подключите git-репозиторий по URL». 3. Укажите Git URL репозитория. 4. Если репозиторий приватный, введите реквизиты доступа. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток. 6. Выберите нужный коммит. > [!NOTE] > При подключении по ссылке недоступен автодеплой. Если вы внесли изменения в репозиторий, запустите новую сборку проекта [вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj). После подключения репозитория App Platform автоматически определит язык, фреймворк и версию окружения вашего приложения, но вы также можете скорректировать их вручную. Для приложений [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). ## Шаг 2. Регион и конфигурация Выберите регион размещения сервера. Конфигурация оборудования для всех frontend-приложений идентична: приложению выделяется 2 ГБ NVMe-диска. Стоимость сервиса формируется [из количества входящих запросов](https://timeweb.cloud/docs/apps/frontend-pricing). Если ранее вы включили поддержку SSR для Nuxt / Next.js, выберите конфигурацию облачного сервера, на котором будет запущено приложение. ## Шаг 3. Дополнительные настройки App Platform автоматически определит основные параметры приложения: - Команды сборки и запуска - Системные зависимости - Директорию сборки и точку входа На этом этапе вы можете скорректировать их, если требуется, а также указать дополнительные параметры. Все эти параметры можно [изменить позже](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj) и запустить деплой заново. Кликните «Показать расширенные настройки». #### Команда сборки и директория сборки Сервис автоматически предложит команду и директорию сборки для вашего проекта. При необходимости вы можете их отредактировать, однако в большинстве случаев изменения не требуются. Параметр «Директория сборки» не меняет директорию, из которой выполняется команда сборки. Он указывает путь (относительно корня репозитория) к директории, в которой будут находиться собранные файлы, например, `index.html`. Если одновременно указаны «Путь до директории проекта» и «Директория сборки», итоговый путь, из которого будут отдаваться файлы сайта, формируется как: ```shell Путь до директории проекта + Директория сборки ``` Например, если указано: - Путь до директории проекта: `/apps/frontend` - Директория сборки: `dist` то файлы будут браться из директории `/apps/frontend/dist`. #### Зависимости В разделе зависимостей можно указать системные пакеты, которые необходимы, например, для сборки проекта. Все перечисленные пакеты будут переданы в команду `apt install`. Если пакетов несколько — укажите их через пробел. #### Путь до директории проекта По умолчанию команда сборки запускается в корне репозитория. Если файлы вашего проекта, включая `package.json`, размещены в поддиректории (например: `/apps/frontend`), укажите путь к ней относительно корня в поле «Путь до директории проекта». При указании пути: - Рабочая директория переключается на указанную папку. - Зависимости устанавливаются из файлов проекта в этой папке. - Команды сборки и запуска также выполняются из этой папки. #### Переменные Вы можете [задать переменные окружения](https://timeweb.cloud/docs/apps/variables), если это требуется для вашего проекта. ## Шаг 4. Информация о приложении Укажите имя приложения и при необходимости добавьте комментарий. Эти данные будут отображаться в панели управления. Также выберите проект, в который нужно добавить приложение. Эти настройки также можно изменить в дальнейшем. ## Шаг 5. Деплой Нажмите «Заказать». Как только процесс начнется, на вкладке «Деплой» появится лог. Если во время деплоя произойдет ошибка, в логе отобразится ее причина. Лог будет автоматически проанализирован нейросетью, и вы увидите список возможных причин возникновения ошибки. После завершения деплоя статус приложения обновится, а в логе появится сообщение об успешном завершении. Технический домен, привязанный по умолчанию, отображается на главной странице раздела «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 Пример 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 Пример 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 Пример 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 Пример 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 Пример 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 Пример 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 Пример 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 Пример 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 Для сборки проекта на любом 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 Формат 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 ## Шаг 1. Подключение репозитория Вы можете [подключить репозиторий](https://timeweb.cloud/docs/apps/connecting-repositories) одним из следующих способов: Из аккаунта GitHub, GitLab или Bitbucket 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если вы уже залогинены в Git-аккаунт, панель отобразит все доступные репозитории. Выберите нужный. - Если нужно авторизоваться в другой Git-аккаунт, раскройте список репозиториев и кликните «Добавить аккаунт». 2. Кликните на иконку нужной платформы. 3. Авторизуйтесь в своем Git-аккаунте и разрешите Timeweb Cloud доступ ко всем или отдельным репозиториям. 4. Выберите нужный репозиторий в панели Timeweb Cloud. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток, а также ветку по умолчанию (`master`, `main` или `default`). 6. Оставьте опцию «Сборка по последнему выполненному коммиту» включенной, чтобы автоматически перезапускать деплой приложения при появлении новых коммитов в репозитории. Если хотите выбирать коммит для деплоя вручную, отключите эту опцию. Автодеплой можно [отключить](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) и позже, в любой момент. По ссылке 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если какие-то репозитории уже подключены, раскройте список с ними и кликните «Добавить аккаунт». 2. Кликните «Подключите git-репозиторий по URL». 3. Укажите Git URL репозитория. 4. Если репозиторий приватный, введите реквизиты доступа. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток. 6. Выберите нужный коммит. > [!NOTE] > При подключении по ссылке недоступен автодеплой. Если вы внесли изменения в репозиторий, запустите новую сборку проекта [вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj). После подключения репозитория App Platform автоматически определит язык, фреймворк и версию окружения вашего приложения, но вы также можете скорректировать их вручную. ## Шаг 2. Регион и конфигурация Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная». В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф. ## Шаг 3. Дополнительные настройки Кликните «Показать расширенные настройки», чтобы задать дополнительные параметры. App Platform автоматически определит основные параметры приложения: - Команды сборки и запуска - Системные зависимости - Директорию сборки и точку входа - Путь проверки состояния Вы можете скорректировать их, если требуется, а также настроить приватную сеть и другие параметры. Все эти параметры, кроме приватной сети, можно [изменить позже](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj) и запустить деплой заново. #### Приватная сеть Выберите приватную сеть, в которую будет добавлено приложение, и укажите IP-адрес, который оно будет использовать. Если приватная сеть не нужна — выберите «Без приватной сети». > [!NOTE] > Изменить приватную сеть после деплоя нельзя. Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. #### Команда сборки Сервис автоматически предложит команду сборки для вашего проекта. При необходимости вы можете ее отредактировать, однако в большинстве случаев изменения не требуются. #### Зависимости Если нужны дополнительные системные пакеты (например, для сборки проекта), укажите их в разделе «Зависимости». Они будут переданы в команду `apt install`. Несколько зависимостей указываются через пробел. #### Команда запуска В большинстве случаев команда запуска определяется автоматически — ее можно не менять. #### Путь до директории проекта Если файлы вашего проекта размещены не в корне репозитория, а в поддиректории, укажите путь к ней в поле «Путь до директории проекта». При указании пути: - Рабочая директория переключается на указанную папку. - Зависимости устанавливаются из файлов проекта в этой папке. - Команды сборки и запуска также выполняются из этой папки. #### Путь проверки состояния Путь проверки состояния позволяет проверять, корректно ли работает приложение. [Подробнее](https://timeweb.cloud/docs/apps/healthcheck-path). #### Переменные Переменные можно использовать для передачи паролей, путей, токенов и других параметров окружения. [Подробнее](https://timeweb.cloud/docs/apps/variables). #### Сертификаты Минцифры / Сертификаты ТЦИ Могут потребоваться для работы с API российских банков и государственных организаций. [Подробнее](https://timeweb.cloud/docs/apps/trusted-certificates). ## Шаг 4. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. Эти настройки также можно изменить в дальнейшем. ## Шаг 5. Деплой Нажмите «Запустить деплой». Как только процесс начнется, вы увидите лог деплоя на вкладке «Деплой». Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы. При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе. ![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 > [!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 > [!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 > [!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 > [!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 > [!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 > [!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 В 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 В 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 В 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 В 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 > [!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 > [!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 > [!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 > [!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 > [!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 > [!NOTE] > Пример FastAPI-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-fastapi). ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версия выбирается при создании приложения) - `pip` - `uvicorn` По умолчанию во время сборки будут выполнены следующие команды: ```shell apt install -y p--no-install-recommends curl build-essential libpq-dev pip install --upgrade pip pip install fastapi uvicorn ``` Для установки зависимостей в команду сборки добавьте следующую строку: ```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`, иначе внешние подключения работать не будут. # Python: Tornado Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/tornado > [!NOTE] > Пример Tornado-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-tornado). ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версия выбирается при создании приложения) - `pip` По умолчанию во время подготовки среды сборки выполняются следующие команды: ```bash apt-get install -y --no-install-recommends curl build-essential libpq-dev pip install --upgrade pip pip install tornado ``` Затем для установки зависимостей проекта по умолчанию выполняется команда сборки: ```shell pip install --upgrade -r requirements.txt ``` Для запуска по умолчанию используется команда: ```shell python3 main.py ``` ## Требования к приложению - Убедитесь, что в файле `requirements.txt` указаны Tornado и остальные зависимости проекта. - Убедитесь, что основной файл проекта называется `main.py` и запускает сервер приложения. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Python: aiohttp Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/aiohttp > [!NOTE] > Пример aiohttp-приложения для деплоя можно найти на [Гитхабе](https://github.com/timeweb-cloud-apps/app-example-aiohttp). ## Сборка приложения При сборке приложения используется следующая среда: - Python 3.10–3.14 (версию можно выбрать при создании приложения) - `pip` По умолчанию во время подготовки среды сборки выполняются следующие команды: ```bash apt-get install -y --no-install-recommends curl build-essential libpq-dev pip install --upgrade pip pip install aiohttp ``` Затем для установки зависимостей проекта по умолчанию выполняется команда сборки: ```shell pip install --upgrade -r requirements.txt ``` Для запуска по умолчанию используется команда: ```shell python3 main.py ``` ## Требования к приложению - Убедитесь, что в файле `requirements.txt` указаны `aiohttp` и остальные зависимости проекта. - Убедитесь, что основной файл проекта называется `main.py` и запускает сервер приложения. - Убедитесь, что приложение слушает `0.0.0.0`, а не `127.0.0.1`, иначе внешние подключения работать не будут. # Деплой приложения Flask Source: https://timeweb.cloud/docs/apps/deploying-backend-applications/flask > [!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 > [!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 > [!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 Сервис 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. Подключение репозитория Вы можете [подключить репозиторий](https://timeweb.cloud/docs/apps/connecting-repositories) одним из следующих способов: Из аккаунта GitHub, GitLab или Bitbucket 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если вы уже залогинены в Git-аккаунт, панель отобразит все доступные репозитории. Выберите нужный. - Если нужно авторизоваться в другой Git-аккаунт, раскройте список репозиториев и кликните «Добавить аккаунт». 2. Кликните на иконку нужной платформы. 3. Авторизуйтесь в своем Git-аккаунте и разрешите Timeweb Cloud доступ ко всем или отдельным репозиториям. 4. Выберите нужный репозиторий в панели Timeweb Cloud. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток, а также ветку по умолчанию (`master`, `main` или `default`). 6. Оставьте опцию «Сборка по последнему выполненному коммиту» включенной, чтобы автоматически перезапускать деплой приложения при появлении новых коммитов в репозитории. Если хотите выбирать коммит для деплоя вручную, отключите эту опцию. Автодеплой можно [отключить](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) и позже, в любой момент. По ссылке 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если какие-то репозитории уже подключены, раскройте список с ними и кликните «Добавить аккаунт». 2. Кликните «Подключите git-репозиторий по URL». 3. Укажите Git URL репозитория. 4. Если репозиторий приватный, введите реквизиты доступа. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток. 6. Выберите нужный коммит. > [!NOTE] > При подключении по ссылке недоступен автодеплой. Если вы внесли изменения в репозиторий, запустите новую сборку проекта [вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj). После подключения репозитория App Platform автоматически определит язык, фреймворк и версию окружения вашего приложения, но вы также можете скорректировать их вручную. Убедитесь, что в пункте «Фреймворк» выбран «Dockerfile». ## Шаг 2. Регион и конфигурация сервера Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная». В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф. ## Шаг 3. Дополнительные настройки Кликните «Показать расширенные настройки», чтобы задать дополнительные параметры. App Platform автоматически прочитает инструкции из докерфайла и соберет приложение в соответствии с ними. Здесь вы можете добавить приложение в приватную сеть и задать другие настройки. #### Приватная сеть Выберите приватную сеть, в которую будет добавлено приложение, и укажите IP-адрес, который оно будет использовать. Если приватная сеть не нужна — выберите «Без приватной сети». > [!NOTE] > Изменить приватную сеть после деплоя нельзя. Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. #### Путь к директории проекта Если Dockerfile размещен в корне репозитория, оставьте это поле пустым. Если Dockerfile размещен в поддиректории, укажите путь к ней относительно корня. Этот путь используется как расположение Dockerfile и становится контекстом сборки. #### Путь проверки состояния Путь проверки состояния позволяет проверять, корректно ли работает приложение. [Подробнее](https://timeweb.cloud/docs/apps/healthcheck-path). #### Переменные Переменные можно использовать для передачи паролей, путей, токенов и других параметров окружения. [Подробнее](https://timeweb.cloud/docs/apps/variables). #### Сертификаты Минцифры / Сертификаты ТЦИ Могут потребоваться для работы с API российских банков и государственных организаций. [Подробнее](https://timeweb.cloud/docs/apps/trusted-certificates). Для приложений, развернутых из Dockerfile, для установки сертификатов потребуется [дополнительная настройка](https://timeweb.cloud/docs/apps/trusted-certificates#ustanovka-sertifikatov-dlya-prilojenij-iz-dockerfile-i-docker-compose). ## Шаг 4. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. Эти настройки также можно изменить в дальнейшем. ## Шаг 5. Деплой Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя на вкладке «Деплой». Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы. При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе. ![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 Сервис 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. Подключение репозитория Вы можете [подключить репозиторий](https://timeweb.cloud/docs/apps/connecting-repositories) одним из следующих способов: Из аккаунта GitHub, GitLab или Bitbucket 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если вы уже залогинены в Git-аккаунт, панель отобразит все доступные репозитории. Выберите нужный. - Если нужно авторизоваться в другой Git-аккаунт, раскройте список репозиториев и кликните «Добавить аккаунт». 2. Кликните на иконку нужной платформы. 3. Авторизуйтесь в своем Git-аккаунте и разрешите Timeweb Cloud доступ ко всем или отдельным репозиториям. 4. Выберите нужный репозиторий в панели Timeweb Cloud. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток, а также ветку по умолчанию (`master`, `main` или `default`). 6. Оставьте опцию «Сборка по последнему выполненному коммиту» включенной, чтобы автоматически перезапускать деплой приложения при появлении новых коммитов в репозитории. Если хотите выбирать коммит для деплоя вручную, отключите эту опцию. Автодеплой можно [отключить](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#avtodeploj) и позже, в любой момент. По ссылке 1. Перейдите в раздел «App Platform» и нажмите кнопку «Создать» или «Добавить». - Если какие-то репозитории уже подключены, раскройте список с ними и кликните «Добавить аккаунт». 2. Кликните «Подключите git-репозиторий по URL». 3. Укажите Git URL репозитория. 4. Если репозиторий приватный, введите реквизиты доступа. 5. Выберите ветку для деплоя. Панель отобразит 200 последних веток. 6. Выберите нужный коммит. > [!NOTE] > При подключении по ссылке недоступен автодеплой. Если вы внесли изменения в репозиторий, запустите новую сборку проекта [вручную](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#smena-parametrov-i-novyj-deploj). После подключения репозитория App Platform автоматически определит язык, фреймворк и версию окружения вашего приложения, но вы также можете скорректировать их вручную. Убедитесь, что в поле «Фреймворк» выбрана опция «Docker Compose». ## Шаг 2. Регион и конфигурация сервера Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная». В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф. ## Шаг 3. Дополнительные настройки App Platform автоматически прочитает инструкции из `docker-compose.yml` и соберет приложение в соответствии с ними. Кликните «Показать расширенные настройки», чтобы просмотреть и задать дополнительные параметры. #### Приватная сеть Выберите приватную сеть, в которую будет добавлено приложение, и укажите IP-адрес, который оно будет использовать. Если приватная сеть не нужна — выберите «Без приватной сети». > [!NOTE] > Изменить приватную сеть после деплоя нельзя. Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. #### Переменные На этом этапе вы можете задать [переменные](https://timeweb.cloud/docs/apps/variables), если это необходимо. Если они прописаны в `docker-compose.yml` или в `Dockerfile`, дублировать их не требуется. Переменные можно использовать как на этапе сборки, так и во время выполнения приложения. Чтобы использовать переменные в качестве аргументов сборки, передайте их в `docker-compose.yml` следующим образом: ```yaml build: context: . args: - ARGUMENT_VAR=${example_var} ``` После этого вы сможете использовать переменную в `Dockerfile`: ```yaml ARG ARGUMENT_VAR=${example_var} ``` #### Сертификаты Минцифры / Сертификаты ТЦИ Могут [потребоваться](https://timeweb.cloud/docs/apps/trusted-certificates) для работы с API российских банков и государственных организаций. Для установки сертификатов нужна [дополнительная настройка](https://timeweb.cloud/docs/apps/trusted-certificates#ustanovka-sertifikatov-dlya-prilojenij-iz-dockerfile-i-docker-compose). ## Шаг 4. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. Эти настройки также можно изменить в дальнейшем. ## Шаг 5. Деплой Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя во вкладке «Деплой». Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы. При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе. ![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 Сервис App Platform позволяет развернуть приложение напрямую из Docker Hub без подключения аккаунтов и авторизации. Единственное условие — образ должен быть публичным. Такой способ подходит для быстрого запуска готовых решений, если вам не требуется изменять образ вручную. Например, вы можете развернуть n8n или другие сервисы, распространяемые через Docker Hub. ## Особенности работы App Platform автоматически настраивает доступ к приложению через обратный прокси. Порт приложения определяется из: - метаданных Docker-образа (например, `EXPOSE`); - переменных окружения, если они явно задают порт. Если порт не указан, используется значение по умолчанию. Пользователю не требуется вручную настраивать проксирование — сервис автоматически направляет трафик с внешних портов `80` и `443` на порт контейнера. Помимо доступа по домену через HTTPS, для приложений из Docker Hub также может быть доступно прямое подключение к сервисным портам по адресу `домен:порт`. Это может быть полезно для сервисов, которые работают не по HTTP. Например, после запуска MySQL-контейнера вы сможете подключиться к базе данных напрямую через клиент, указав домен приложения и порт MySQL. При редеплое приложение может временно становиться недоступным. ## Шаг 1. Выбор образа и настройка приложения 1. Перейдите в раздел [«App Platform»](https://timeweb.cloud/my/apps) и нажмите «Создать» или «Добавить». 2. Перейдите на вкладку «Docker Hub». 3. Укажите имя образа в Docker Hub, из которого будет развернуто приложение. 4. Укажите тег или дайджест для выбора конкретной версии образа. 5. Задайте [переменные окружения](https://timeweb.cloud/docs/apps/variables) (можно выбрать существующие или задать новые). 6. Оставьте включенной или отключите установку [сертификатов Минцифры и/или ТЦИ](https://timeweb.cloud/docs/apps/trusted-certificates). > [!NOTE] > Учтите, что развертывание возможно только из публичных образов. В дальнейшем вы сможете изменить образ, тег и переменные в настройках приложения и выполнить новый деплой. ## Шаг 2. Регион и конфигурация сервера Приложения разворачиваются на отдельных облачных серверах. Выберите регион размещения и подходящую конфигурацию сервера. Вы можете выбрать один из готовых тарифов или настроить конфигурацию вручную на вкладке «Произвольная». В дальнейшем, если потребуется, вы сможете перейти на более мощный тариф. ## Шаг 3. Настройка приватной сети Выберите приватную сеть, в которую будет добавлено приложение, и укажите IP-адрес, который оно будет использовать. Если сеть не нужна, выберите «Без приватной сети». Изменить приватную сеть после деплоя нельзя. Если для приложения настроен приватный IP-адрес, во время повторного деплоя возможна кратковременная недоступность приложения. Это связано с тем, что перед запуском новой версии необходимо освободить занятые порты. ## Шаг 4. Информация о приложении Задайте свое имя приложения, если требуется, и комментарий к нему. Это данные, которые будут отображаться в панели управления. Также выберите, в какой проект его нужно добавить. Эти настройки также можно изменить в дальнейшем. ## Шаг 5. Деплой Нажмите Запустить деплой. Как только процесс начнется, вы увидите лог деплоя во вкладке «Деплой». Как правило, он содержит всю необходимую информацию для устранения возможных ошибок. Если что-то пойдет не так, например, из-за наличия ошибок в коде, в логе будут выведены уведомления о них с уточнением причины проблемы. При первом развертывании проекта установка сервера может занять некоторое время. Как только процесс завершится, статус приложения обновится, а также вы увидите сообщение об этом в логе. ![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) # Управление приложениями в панели Source: https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli Вы можете управлять параметрами деплоя, привязывать домены, останавливать и перезапускать контейнеры с помощью инструментов панели Timeweb Cloud. ## Автодеплой Вы можете включить автоматический деплой при создании приложения в панели, оставив включенной опцию «Сборка по последнему выполненному коммиту». В этом случае сервис будет отслеживать изменения в репозитории и при появлении новых коммитов обновлять приложение автоматически. > [!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-приложений и приложений, развернутых через Dockerfile, Docker Compose и Docker Hub. Во вкладке «Сеть» вы можете увидеть, к какой приватной сети подключено приложение. Изменить приватную сеть нельзя — ее выбор доступен только при создании приложения. Вы также можете подключить для приложения файрвол, нажав на кнопку «Настроить» в разделе «Firewall». Можно выбрать существующий файрвол или создать новый. ## Удаление приложения Чтобы удалить приложение: 1. Перейдите в раздел «App Platform». 2. Кликните на три точки у нужного приложения и кликните «Удалить» 3. Подтвердите действие. # Подключение корневых сертификатов Source: https://timeweb.cloud/docs/apps/trusted-certificates Корневой сертификат подтверждает доверие к центру сертификации, который выпускает цифровые сертификаты. Если добавить корневой сертификат в доверенное хранилище, приложение сможет проверять подлинность выпущенных этим центром сертификатов и устанавливать защищенное HTTPS-соединение с ресурсами, которые их используют. В App Platform можно подключить сертификаты следующих центров сертификации: - Минцифры — корневой сертификат Национального удостоверяющего центра Минцифры России (Russian Trusted CA). - ТЦИ — корневой ECDSA-сертификат [Центра сертификации ООО «ТЦИ»](https://tlscc.ru/). Центр выпускает TLS-сертификаты ECDSA и ГОСТ. В App Platform подключает только корневой ECDSA-сертификат. Эти сертификаты могут потребоваться, например, при работе с API банков и государственных организаций. По умолчанию они отсутствуют в доверенных хранилищах многих операционных систем, языковых сред и HTTP-библиотек, поэтому их необходимо добавить самостоятельно. Подключить сертификаты можно для backend-приложениий, а также для приложений, развернутых с помощью Dockerfile, Docker Compose или из Docker Hub. Для frontend-приложений сертификаты не требуются. ## Подключение сертификатов Сертификаты можно подключить при создании нового приложения или позже в настройках уже существующего. Подключайте сертификаты того центра сертификации, которым выпущен сертификат ресурса, к которому обращается приложение. ### При создании приложения Чтобы подключить сертификаты при создании приложения, на этапе «Расширенные настройки» кликните «Показать расширенные настройки» и включите переключатели для нужных сертификатов: - «Сертификаты Минцифры»; - «Сертификаты ТЦИ». ### В существующем приложении Чтобы подключить сертификаты к уже созданному приложению: 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 или из Docker Hub, 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 В статье собрали ответы на самые популярные вопросы об App Platform, которые возникают у наших пользователей. ## Мой аккаунт GitHub, GitLab или Bitbucket подключен, но App Platform не видит нужный репозиторий. Что делать? Обычно это происходит в двух случаях: - Вы авторизовались в свой аккаунт GitHub, GitLab или Bitbucket в сервисе App Platform, а после этого добавили новый репозиторий. - Вы разрешили подключить только отдельные репозитории, а не все, и нужный репозиторий не выбран. Чтобы решить проблему: 1. Раскройте список репозиториев и нажмите «Добавить аккаунт». 2. Выберите платформу. 3. Авторизуйтесь, если необходимо. 4. Выберите нужный репозиторий и сохраните изменения. Подключенные репозитории отобразятся в панели управления, и вы сможете выбрать нужный. ## Можно ли удалить подключенный репозиторий? Да, любой добавленный репозиторий можно отвязать от панели управления на странице создания нового приложения. > [!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). ## Есть ли примеры приложений для развертывания? Да, примеры приложений можно найти на [Гитхабе](https://github.com/timeweb-cloud?tab=repositories). ## Можно ли получить 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. ## Какая версия Python используется? Как ее изменить? В App Platform доступны версии Python 3.10, 3.11, 3.12, 3.13, 3.14. Версию можно выбрать при создании приложения. ## Как привязать свой домен к приложению? Привязать собственный домен можно [по нашей инструкции](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 Чтобы добавить VCS-провайдера GitHub, GitLab или Bitbucket с помощью метода API [/api/v1/vcs-provider](https://timeweb.cloud/tools/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 В App Platform вы можете использовать переменные — например, для передачи паролей, путей, токенов и других параметров окружения. > [!NOTE] > К одному приложению можно привязать не более 1000 переменных, вне зависимости от их вида. ## Виды переменных Переменные делятся на два вида: локальные и глобальные. Локальные переменные: - Привязаны к одному приложению; - Удаляются вместе с приложением; - Настраиваются при создании или редактировании приложения. Глобальные переменные: - Хранятся отдельно от приложений; - Можно использовать в нескольких приложениях; - Управляются централизованно во вкладке «App Platform» → «Переменные». ## Локальные переменные Локальные переменные можно задать при создании приложения или при редактировании настроек уже существующего приложения. ### При создании приложения Локальные переменные можно добавить при деплое приложения. Для этого: 1. В блоке «Расширенные настройки» кликните «Показать расширенные настройки» 2. В строке «Переменные» нажмите кнопку «Добавить». 3. Укажите название и значение переменной. При необходимости добавьте другие переменные с помощью кнопки «Добавить еще». При установке флага «Сохранить как глобальную» переменная станет доступна в других приложениях. ![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 ``` Добавленные переменные можно выбрать при создании нового приложения или при редактировании существующего. Для этого используйте выпадающий список в разделе «Переменные». ![Добавить App 2026 09 22 14 00](https://content.timeweb.com/assets/100a0a9f-bee5-4bae-a522-51044e7f1f5b.png?width=614&height=738) ### Редактирование глобальной переменной Откройте раздел «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/healthcheck-path Путь проверки состояния нужен, если вы хотите выполнять периодическую проверку того, запущено ли приложение и работает ли оно корректно. По умолчанию, если проверка состояния не включена, после деплоя выполняется только базовая проверка: система убеждается, что контейнер с приложением успешно запущен. При этом работоспособность самого приложения не оценивается — оно может отвечать некорректно или не отвечать совсем — статус деплоя останется успешным. Чтобы избежать таких ситуаций, можно настроить путь проверки состояния. Для этого в приложении должен быть реализован эндпоинт, который не зависит от внешних факторов (например, готовности базы данных или сторонних сервисов) и отражает состояние приложения. Этот эндпоинт вы сможете указать при настройке — например, `/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) ## Настройка Путь проверки состояния можно указать как при создании приложения, так и для уже существующего. ### При создании приложения App Platform автоматически определит путь проверки состояния, если он реализован для вашего приложения, но вы можете просмотреть и при необходимости отредактировать его. Для этого в разделе «Расширенные настройки» кликните «Показать расширенные настройки» и найдите поле «Путь проверки состояния». Например, если в приложении реализован эндпоинт `/health`, который доступен по адресу `https://домен/health`, нужно указать: ```shell /health ``` ![Добавить App 2026 09 22 14 05](https://content.timeweb.com/assets/d456d66b-f73c-4468-8d99-41480018c86f.png?width=618&height=739) ### Для уже созданного приложения 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). Путь проверки состояния, указанный в панели управления, имеет приоритет над `HEALTHCHECK` в Dockerfile. Проверка из Dockerfile используется только в том случае, если поле «Путь проверки состояния» в панели оставлено пустым. Настройка через 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` внутри него — правило будет работать, как описано выше. # Стенды Source: https://timeweb.cloud/docs/apps/stands Стенды — это отдельные окружения, которые позволяют тестировать изменения без влияния на основную версию приложения. Стенд разворачивается как независимый экземпляр приложения с собственной сборкой и доступен по отдельному техническому домену. Стенды доступны для фронтенд-, бэкенд- и 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) # Автоматическое создание стендов по Pull Request Source: https://timeweb.cloud/docs/apps/pull-request-stands В App Platform можно настроить автоматическое создание стендов при открытии Pull Request в GitHub. Для изменений из ветки будет развернута отдельная версия приложения с собственным техническим доменом. На ней можно проверить работу приложения до слияния изменений в целевую ветку. Pull Request — это запрос на слияние изменений из одной ветки репозитория в другую. Например, из ветки с новой функцией в main. Пока Pull Request открыт, вы можете вносить изменения в исходную ветку и проверять их на стенде. Общие условия использования описаны в [статье о стендах](https://timeweb.cloud/docs/apps/stands). ## Ограничения - Автоматическое создание стендов доступно только для приложений из репозиториев GitHub,[подключенных через аккаунт](https://timeweb.cloud/docs/apps/connecting-repositories#podkluchenie-repozitoriya-iz-gitlab-github-ili-bitbucket). Для репозиториев, подключенных по URL, функция недоступна. - Для одного приложения доступно не более 10 стендов. Если лимит достигнут, при открытии нового Pull Request стенд не создастся, даже если автоматическое создание стендов включено. - Автоматизация включается отдельно для каждого приложения. Если из одного репозитория развернуто несколько приложений, стенды будут создаваться только для тех, у которых включена эта настройка, с учетом путей измененных файлов. ### Репозитории с несколькими приложениями Если в одном репозитории находятся несколько приложений, при открытии Pull Request App Platform сопоставляет пути измененных файлов с директорией, из которой развернуто приложение. Стенд создается, если изменения затрагивают эту директорию. Например, в репозитории есть директории `frontend` и `backend`, а приложение в App Platform развернуто из `frontend`: - Если при открытии Pull Request есть изменения в `frontend`, для приложения создается стенд. - Если изменения затрагивают только `backend`, стенд для фронтенд-приложения не создается. - Если после открытия такого Pull Request добавить изменения в `frontend`, это не запустит создание стенда. Чтобы создать его, закройте Pull Request без слияния и откройте повторно либо создайте новый Pull Request, в котором уже есть изменения в `frontend`. > [!NOTE] > Если в Pull Request изменено больше 300 файлов, сравнение изменений через GitHub недоступно. В этом случае App Platform создает стенд независимо от того, какие директории затронуты изменениями. ## Настройка автоматического создания стендов 1. Перейдите в раздел «App Platform» и выберите нужное приложение. 2. Откройте вкладку «Стенды». 3. Нажмите «Автоматизация». 4. Включите опцию «Автоматический деплой по Pull Request». 5. При необходимости включите опцию «Автоматически передавать переменные приложения». 6. Нажмите «Сохранить». ![Включение автоматизации](https://content.timeweb.com/assets/e337ed95-9fbc-4203-952e-d5ff6868412f.png?width=2786&height=1960) После включения автоматизации откройте Pull Request в подключенном репозитории GitHub. App Platform создаст стенд и запустит его деплой. ### Передача переменных приложения Опция «Автоматически передавать переменные приложения» позволяет передавать переменные основного приложения в стенд при его создании. Она работает независимо от автоматического создания стендов по Pull Request. После создания стенда переменные не синхронизируются с основным приложением. Если вы измените переменные основного приложения, для существующего стенда их потребуется обновить отдельно. Если для запуска приложения нужны [переменные](https://timeweb.cloud/docs/apps/variables), например параметры подключения к базе данных или внешнему сервису, включите их автоматическую передачу или задайте необходимые значения в настройках стенда. > [!NOTE] > Проверьте, к каким ресурсам обращается стенд. Если использовать те же параметры подключения, что и у основного приложения, стенд будет работать с той же базой данных или внешним сервисом. Для тестирования можно задать отдельные значения переменных. ## Настройка разрешений GitHub Чтобы бот Timeweb Cloud Apps мог добавлять в Pull Request комментарии со ссылками на стенд, интеграции GitHub необходим доступ к Pull Request на чтение и запись. Новые интеграции уже имеют эти разрешения, в том числе после отключения и повторного подключения в панели App Platform. Для ранее подключенных интеграций может потребоваться обновить права. Без этого разрешения стенды будут создаваться, но комментарии в GitHub не появятся. Перейти к стенду можно будет из панели App Platform. Для проверки разрешений откройте приложение в разделе «App Platform», перейдите на вкладку «Стенды» и нажмите «Автоматизация». Если в открывшемся окне отображается предупреждение «Нет доступа к комментариям в GitHub», обновите разрешения интеграции Timeweb Cloud Apps: 1. Нажмите «Настроить доступы» в предупреждении. 2. В GitHub на вкладке «Installed GitHub Apps» найдите «Timeweb Cloud Apps» и нажмите «Configure». ![Конфигурация GitHub](https://content.timeweb.com/assets/f15f175b-3d59-4716-bfac-f50b0c9404be.png?width=3404&height=1970) _Интерфейс выдачи прав [GitHub](https://github.com/)_ 3. В блоке с запросом на обновление разрешений нажмите «Review request». ![Конфигурация GitHub](https://content.timeweb.com/assets/91b636bb-a851-4890-9a09-6f4d4e9b3680.png?width=3414&height=1958) _Интерфейс выдачи прав [GitHub](https://github.com/)_ 4. Проверьте запрашиваемое разрешение — «Read and write access to Pull requests» — и нажмите «Accept new permissions». ![Конфигурация GitHub](https://content.timeweb.com/assets/544e7e85-86f2-4fad-8ce7-f53daad8f68b.png?width=3378&height=1331) _Интерфейс выдачи прав [GitHub](https://github.com/)_ После обновления разрешений Timeweb Cloud Apps сможет добавлять в Pull Request комментарии со ссылками на стенды. Если предупреждения нет, обновлять разрешения не требуется. ## Жизненный цикл стенда App Platform управляет стендом в зависимости от действий в GitHub: создает его при открытии Pull Request, обновляет при новых коммитах в исходной ветке и по умолчанию удаляет при закрытии Pull Request. ### Создание При открытии Pull Request App Platform создает стенд для исходной ветки и запускает деплой. Стенд появляется во вкладке «Стенды» с меткой «PR». Например, для Pull Request с номером 1 создается стенд PR-1. В списке отображаются ветка, коммит, комментарий к коммиту и статус деплоя. ![Создание стнеда](https://content.timeweb.com/assets/c3d700cb-4386-4f4b-8658-fae020678c4d.png?width=2304&height=1782) Бот Timeweb Cloud Apps добавляет в Pull Request комментарий с информацией о деплое и ссылками для перехода к стенду. После успешного деплоя приложение доступно по отдельному техническому домену. Его также можно найти в настройках стенда в панели управления. Открытие Pull Request само по себе не переносит изменения в целевую ветку. Вы можете проверить их на стенде до слияния. ### Обновление Стенд создается с включенной опцией «Сборка по последнему выполненному коммиту». Когда вы отправляете новые коммиты в исходную ветку Pull Request, App Platform автоматически запускает повторный деплой этого стенда. Его адрес остается прежним. В комментарии бота обновляются сведения о коммите и статусе деплоя. ### Удаление По умолчанию стенд автоматически удаляется при закрытии Pull Request. Это происходит как при закрытии без слияния, так и при слиянии изменений. - При закрытии без слияния стенд удаляется, а изменения из Pull Request не попадают в целевую ветку. - При слиянии стенд удаляется, а изменения попадают в целевую ветку. Если основное приложение развернуто из этой ветки и для него включен автодеплой, оно автоматически обновится. Если стенд нужен после закрытия Pull Request, заранее отключите его автоматическое удаление. ## Управление стендом Чтобы открыть настройки, перейдите во вкладку «Стенды» приложения и нажмите на нужный стенд в списке. В настройках можно изменить название стенда, управлять переменными и скопировать технический домен. Для просмотра логов откройте вкладку «Логи стенда». Подробнее об этих действиях — в [инструкции по управлению стендами](https://timeweb.cloud/docs/apps/stands). У стенда, созданного по Pull Request, нельзя изменить ветку сборки, но можно выбрать конкретный коммит. Для этого отключите опцию «Сборка по последнему выполненному коммиту», выберите коммит и сохраните настройки. Стенд перестанет автоматически обновляться, а в Pull Request появится уведомление о закреплении стенда на выбранном коммите. Для стендов, созданных по Pull Request, можно отключить автоматическое удаление после его закрытия. ![Конфигурация стенда](https://content.timeweb.com/assets/479c6092-93cb-4d33-9263-2c01029e2f0a.png?width=2250&height=1756) Для сохранение стенда после закрытия Pull Request: 1. Откройте вкладку «Настройки» стенда. 2. Отключите опцию «Удалять стенд при закрытии Pull Request». 3. Нажмите «Сохранить». После этого закрытие или слияние Pull Request не приведет к удалению стенда. Когда он больше не понадобится, удалите его вручную. # Клонирование приложения Source: https://timeweb.cloud/docs/apps/cloning С помощью клонирования вы можете быстро создать копию существующего приложения. В новое приложение будут перенесены его тип, подключенный репозиторий и настройки деплоя, в том числе переменные. После клонирования приложения работают независимо друг от друга. Стоимость нового приложения может отличаться от стоимости исходного — она будет рассчитана по актуальным тарифам на момент клонирования. > [!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/reverse-proxy App Platform автоматически настраивает веб-сервер при создании приложения. При необходимости вы можете изменить параметры обработки запросов и ответов: настроить редиректы, HTTP-заголовки, включить сжатие данных. Набор доступных параметров зависит от типа приложения. Для frontend-приложений также можно настроить обработку несуществующих путей, а для backend- и Docker-приложений — ограничить размер тела запроса и время ожидания заголовков ответа. Настройки веб-сервера применяются к доменам, привязанным к приложению. ## Настройка веб-сервера Чтобы изменить настройки веб-сервера: 1. Перейдите в раздел «App Platform» и выберите нужное приложение. 2. Откройте вкладку «Настройки». 3. В строке «Настройки веб-сервера» нажмите «Настроить». 4. Укажите нужные параметры и нажмите «Сохранить». ![Настройка параметров веб-сервера](https://content.timeweb.com/assets/2815ee04-97b0-4fe9-b36f-8d9e3be40240.png?width=1078&height=1418) 5. После сохранения настроек запустится деплой приложения. ## Общие параметры Для всех типов приложений доступна настройка редиректов, HTTP-заголовков и сжатия. ### Редиректы Редиректы позволяют перенаправлять запросы с одного пути или домена на другой. Для одного приложения можно добавить не более 10 редиректов. Для настройки редиректа укажите: - тип — `path` или `host`; - исходный путь или домен в поле `Source`; - целевой путь или домен в поле `Destination`; - код ответа в поле `Code`. Доступны следующие коды ответа: - `301` — постоянный редирект; - `302` — временный редирект; - `307` — временный редирект с сохранением метода и тела запроса; - `308` — постоянный редирект с сохранением метода и тела запроса. #### Редирект по пути Для редиректа по пути выберите тип `path`. Значения `Source` и `Destination` должны начинаться с `/`, например `/old` и `/new`. При настройке учитывайте ограничения: - исходный и целевой пути не должны совпадать; - в путях нельзя указывать параметры запроса после `?` и фрагменты после `#`; - параметры исходного запроса сохраняются при редиректе. Например, при редиректе с `/old` на `/new` запрос к `/old?source=mail` будет перенаправлен на `/new?source=mail`. #### Редирект по домену Для редиректа по домену выберите тип `host`. Исходный и целевой домены можно выбрать только среди доменов, привязанных к приложению. ### Заголовки Вы можете добавить, заменить или удалить HTTP-заголовки в ответах веб-сервера. Для одного приложения можно настроить не более 10 правил. Для каждого заголовка выберите тип: - `set` — задать новое значение заголовка или заменить существующее; - `add` — добавить еще одно значение заголовка; - `delete` — удалить заголовок из ответа. Для типов `set` и `add` укажите имя и значение заголовка. Для типа `delete` укажите только имя. Для одного имени заголовка нельзя: - создать несколько правил типа `set`; - одновременно использовать разные типы — например, `set` и `add` или `add` и `delete`. Несколько правил типа `add` для одного заголовка разрешены. ### Сжатие Сжатие уменьшает объем данных, которые веб-сервер передает клиенту, и может ускорить загрузку приложения. Чтобы включить сжатие, выберите один или несколько алгоритмов: - `gzip`; - `zstd`. ## Параметры frontend-приложений Для frontend-приложений дополнительно доступна настройка SPA Fallback. ### SPA Fallback SPA Fallback определяет, какой файл приложение будет возвращать при обращении к несуществующему пути. Если опция включена, веб-сервер вернет файл `/index.html`. Если опция выключена и в сборке есть файл `/404.html`, веб-сервер вернет его. Если файла нет, откроется пустая страница с кодом ответа `404`. ## Параметры backend- и Docker-приложений Для backend-приложений, а также приложений, развернутых с помощью Dockerfile, Docker Compose или образа из Docker Hub, дополнительно доступна настройка ограничения размера тела запроса и таймаута ожидания заголовков ответа. ### Максимальный размер тела запроса Параметр ограничивает размер тела входящего HTTP-запроса. Например, с его помощью можно ограничить размер загружаемых файлов. Укажите число больше `0`. Значение рассчитывается в КБ, единицу измерения вводить не нужно. Максимально допустимый размер тела запроса — `1 048 576` КБ, что эквивалентно `1` ГБ. Если тело запроса превышает установленное ограничение, веб-сервер отклонит запрос до его передачи приложению. ### Таймаут ожидания заголовков ответа Параметр определяет, сколько времени веб-сервер будет ждать заголовки ответа от приложения. Укажите число больше `0`. Значение рассчитывается в миллисекундах, единицу измерения вводить не нужно. Например, чтобы задать таймаут в одну секунду, укажите `1000`. Максимально допустимый таймаут — `120 000` миллисекунд, то есть `120` секунд. # Настройка SSL-сертификатов Source: https://timeweb.cloud/docs/apps/ssl-certificates SSL-сертификат нужен для защищенного HTTPS-соединения. При привязке домена App Platform автоматически выпускает для него бесплатный сертификат Let's Encrypt и продлевает его до окончания срока действия. При необходимости вы можете заменить сертификат Let's Encrypt на собственный или платный сертификат, купленный в Timeweb Cloud. ## Виды сертификатов Для приложения можно использовать: - **Сертификат Let's Encrypt** — бесплатный сертификат, который устанавливается и продлевается автоматически. - **Пользовательский сертификат** — собственный сертификат, который вы загружаете вместе с приватным ключом. Продлевать его необходимо самостоятельно. - **Сертификат, заказанный в Timeweb Cloud** — сертификат, купленный в разделе «SSL-сертификаты». Можно выбрать уже выпущенный сертификат для нужного домена или заказать новый. ## Ограничения - Заменить сертификат можно только для собственного домена, привязанного к приложению. Сертификатом технического домена управляет App Platform. - Пока приложение не оплачено или заблокировано, сменить сертификат нельзя. - Установить сертификат не получится, если срок его действия истек, он выпущен для другого домена или приватный ключ не соответствует сертификату. - Wildcard-сертификат `*.example.com` не покрывает сам домен `example.com`. Для установки на этот домен он также должен быть указан в сертификате. > [!NOTE] > Любая смена сертификата запускает повторный деплой приложения. Новый сертификат начнет использоваться только после завершения деплоя. ## Установка сертификата Перед установкой [привяжите собственный домен к приложению](https://timeweb.cloud/docs/apps/upravlenie-apps-v-paneli#sobstvennyj-domen), если еще не сделали этого. Чтобы перейти к настройкам сертификата: 1. Перейдите в раздел «App Platform» и выберите нужное приложение. 2. Откройте вкладку «Настройки». 3. В строке «SSL-сертификаты» нажмите на кнопку «Настроить». ![Настройка SSL-сертификата](https://content.timeweb.com/assets/9d40dd98-1d32-40d2-ab68-622da8e1c44a.png?width=2110&height=1944) 4. Выберите домен из выпадающего списка. В настройках доступны три вкладки. Выберите нужную в зависимости от того, какой сертификат хотите установить: 1. «Let's Encrypt» — бесплатный сертификат с автоматическим продлением. Если на домене уже используется Let's Encrypt, дополнительных действий не требуется. Чтобы вернуться к нему после установки пользовательского или платного сертификата, откройте вкладку «Let's Encrypt. ![Сертификат LE](https://content.timeweb.com/assets/132486f2-72d1-46a8-a29e-81eba3be5e0a.png?width=1948&height=1948) 2. «Пользовательский» — загрузка собственного сертификата. В поле «Сертификат» вставьте текст сертификата или нажмите «Загрузить из файла» и выберите файл .crt. Можно передать всю цепочку сертификатов целиком. В поле «Приватный ключ» вставьте текст ключа или загрузите файл .key. ![Пользовательский сертификат](https://content.timeweb.com/assets/8b0aefe6-2149-4af9-bacf-159975a039f7.png?width=2004&height=1934) > [!NOTE] > App Platform не продлевает загруженные пользовательские сертификаты. До окончания срока действия загрузите новый сертификат. 3. «Заказать SSL» — установка платного сертификата, [заказанного у нас](https://timeweb.cloud/docs/ssl/ssl-order-and-renewal#zakaz-sertifikata). Вы можете выбрать уже выпущенный для этого домена сертификат из раздела «SSL-сертификаты» или заказать новый. Если вы заказываете новый сертификат, он установится автоматически после выпуска. В этот момент App Platform запустит повторный деплой приложения. ![Заказать SSL](https://content.timeweb.com/assets/1dc10eb1-dd1e-4269-be69-ff7b22072885.png?width=1974&height=1934) Для установки сертификата нажмите кнопку «Переустановить». В диалоговом окне согласитесь с установкой сертификата. После смены сертификата дождитесь завершения деплоя, чтобы новый сертификат начал использоваться на домене. ## Удаление сертификата Для удаления сертификата, перейдите во вкладку «Пользовательский» и нажмите на кнопку «Удалить». В диалоговом окне подтвердите удаление сертификата. При удалении пользовательского сертификата App Platform возвращает для домена сертификат Let's Encrypt. Домен не может остаться без сертификата. После удаления запустится повторный деплой приложения. Дождитесь его завершения, чтобы на домене начал использоваться сертификат Let's Encrypt. App Platform будет продлевать его автоматически # Настройка балансировщика для приложений Source: https://timeweb.cloud/docs/apps/configuring-load-balancer Балансировщик нагрузки распределяет входящий трафик между приложениями. Это позволяет горизонтально масштабировать сервис и повысить его доступность и отказоустойчивость. ## Ограничения - Балансировщик нагрузки не поддерживается для frontend-приложений. - Балансировщик и приложения должны находиться в одной приватной сети. Приложения добавляются в балансировку только по приватному IP-адресу. - Для корректной работы необходимо указать порт приложения в настройках проверки доступности балансировщика. ## Настройка В примере рассмотрим, как добавить приложение App Platform в балансировщик нагрузки, настроить домен и SSL-сертификат. Дополнительные параметры, которые можно настроить для балансировщика, описаны в статье [про управление балансировщиками нагрузки](https://timeweb.cloud/docs/load-balancer/manage-balancer). ### Создание приложения и балансировщика 1. [Создайте приватную сеть](https://timeweb.cloud/docs/vpc/managing-bgp-networks/creating-bgp-networks) в локации, в которой хотите разместить приложение и балансировщик. 2. Создайте приложение и добавьте его в ранее созданную приватную сеть. > [!NOTE] > Приватную сеть можно выбрать только при создании приложения. Если приложение уже создано в другой сети, [создайте его копию](https://timeweb.cloud/docs/apps/cloning) и при клонировании выберите нужную приватную сеть. 3. [Создайте балансировщик нагрузки](https://timeweb.cloud/docs/load-balancer/create-balancer) и добавьте его в ту же приватную сеть. Остальные параметры можно оставить по умолчанию — настройки приложения вы укажете после создания балансировщика. Теперь приложение и балансировщик находятся в одной локации и приватной сети. ### Добавление приложения в балансировку > [!NOTE] > В примере добавим в балансировку одно приложение, чтобы показать порядок настройки. Использовать балансировщик с одним приложением не имеет смысла, этот вариант рассматривается только в качестве примера: нагрузка не будет распределяться между несколькими экземплярами. Вы можете [создать копию приложения](https://timeweb.cloud/docs/apps/cloning) и добавить ее в балансировку вместе с исходным приложением. 1. Перейдите в раздел «Балансировщики» и выберите нужный балансировщик. 2. Откройте вкладку «Серверы». 3. Нажмите «Добавить» или «Изменить». 4. Выберите нужное приложение из выпадающего списка. 5. Нажмите «Сохранить». ![Раздел «Серверы»](https://content.timeweb.com/assets/e847341b-203b-4c80-8e2d-5c3dbfc8f69c.png?width=2176&height=1634) ### Настройка правил балансировки 1. Откройте вкладку «Конфигурация» балансировщика. 2. В строке «Правила балансировки» нажмите «Изменить». 3. Настройте правило для HTTP-трафика: - для балансировщика выберите протокол `HTTP` и укажите порт `80`; - для приложения выберите протокол `HTTP` и укажите порт, на котором оно запускается. Например, для Django по умолчанию используется порт `8000`. 5. Добавьте правило для HTTPS-трафика: - для балансировщика выберите протокол `HTTPS` и укажите порт `443`; - для приложения выберите протокол `HTTP` и укажите порт, на котором оно запускается. ![Правила балансировки](https://content.timeweb.com/assets/046888d3-52c4-4cd6-91d3-44729ab7e4cf.png?width=874&height=1074) 5. Нажмите «Сохранить». ### Настройка проверки доступности Для корректной работы балансировщика настройте проверку доступности приложения: 1. Откройте вкладку «Конфигурация» балансировщика. 2. В строке «Расширенные настройки» нажмите «Настроить». 3. В разделе «Проверка доступности» выберите протокол `TCP` и укажите порт приложения. Остальные настройки можно оставить по умолчанию. ![Расширенные настройки балансировщика](https://content.timeweb.com/assets/69399b37-a3de-45f3-8abd-6b5edc0f5d66.png?width=814&height=960) 4. Пролистайте страницу ниже и включите опцию «Переадресация HTTP на HTTPS». Она понадобится для настройки домена на следующем этапе. 5. Нажмите «Сохранить». ### Настройка домена и SSL-сертификата 1. Откройте вкладку «Конфигурация» балансировщика. 2. В строке «SSL-сертификат» нажмите «Редактировать». 3. Выберите сертификат и домен, по которому должно быть доступно приложение. 4. Нажмите «Сохранить». Дождитесь применения настроек и выпуска сертификата и проверьте работу приложения по домену, привязанному к балансировщику.