Разделы документации
Источники кода
Репозиторий GitHub, GitLab или Bitbucket, архив с папкой проекта, готовый образ из публичного реестра: как подключить каждый.
Платформа запускает код из трёх источников: репозитория GitHub, GitLab или Bitbucket, zip-архива с папкой проекта и готового образа. Источник выбирается при создании приложения, и от него зависит, как приложение обновляется.
Как выбрать источник
| Источник | Подходит для | Новая версия |
|---|---|---|
| Репозиторий | кода в git: GitHub, GitLab или Bitbucket | заводится сама, по push в выбранную ветку |
| Архив | папки проекта без git | заказывается вручную, каждый раз с новой загрузкой архива |
| Образ | уже собранного приложения | заказывается вручную |
Заказать версию вручную можно из панели или по API.
Репозиторий
Код берётся только через подключённый git-аккаунт: адрес репозитория вставлять не нужно, ты выбираешь его из списка. Так работают и приватные репозитории, и публичные.
Подключить можно GitHub, GitLab на gitlab.com и Bitbucket на bitbucket.org. Способ у каждого свой, он разобран на странице Подключение GitHub, GitLab и Bitbucket.
Платформа клонирует выбранную ветку, собирает приложение и выкатывает его. Каждый следующий push в эту ветку заводит новую версию сам, подробности - в разделе Автодеплой по push.
Архив
Архив - деплой без git: репозиторий не нужен. Упакуй папку проекта в zip и загрузи его в панели или по API. Подойдёт и архив самой папки, и архив её содержимого: результат один.
Каждая новая версия приложения из архива - это новая загрузка. Загрузка живёт 15 минут: за это время нужно залить архив и заказать версию, иначе загрузку придётся повторить. Одну загрузку можно потратить на одну версию.
Порядок для API:
- Создать загрузку
- Залить в неё архив
- Подтвердить загрузку
- Заказать версию, указав
upload_id
Без новой загрузки приложение из архива выкатывается в двух случаях: при откате на прежнюю версию в пределах трёх последних и при запуске после остановки. Оба берут уже собранную версию.
Проверка архива
Платформа проверяет архив при деплое, а не при загрузке. Загрузка проверяет только, что файл на месте и не превышает допустимый размер. Остальное идёт на первом шаге деплоя: платформа читает список файлов до распаковки, а при распаковке ещё раз проверяет каждый путь и фактический объём.
Первая же нарушенная проверка отклоняет весь архив: отдельные файлы платформа не пропускает. Версия получает причину отказа, архив больше не используется, а повторить деплой с ним нельзя: нужны новая загрузка и новая версия. Отклонённый архив ничего не стоит, потому что тарификация начинается только с подтверждённого выката.
Причин отказа четыре:
| Причина | Что случилось |
|---|---|
archive_invalid |
архив не разбирается: он пустой или содержит пути с выходом за пределы папки, абсолютные пути, букву диска, обратный слэш, символические ссылки, устройства, дубликаты имён, в том числе отличающиеся только регистром |
archive_encrypted |
архив защищён паролем, а платформа пароль не спрашивает |
compression_unsupported |
принимаются только методы сжатия store и deflate |
limit_exceeded |
превышен один из потолков: объём, число файлов и записей, длина и глубина пути, коэффициент сжатия |
Потолки по числу и форме файлов:
- до 20 000 файлов
- до 50 000 записей в архиве
- путь до 255 символов
- глубина пути до 32 уровней
Предельный размер архива и распакованного проекта - в разделе Лимиты и квоты.
Образ
Готовый образ платформа не собирает, а запускает: сборка пропускается. Образ должен быть публичным и лежать в Docker Hub или GitHub Container Registry. Образ из другого реестра платформа отклоняет сразу, при создании или правке приложения: ошибка стоит на поле с адресом образа.
Адрес записывается как обычно:
nginx:1.27- образ из Docker Hub, хост можно не указыватьghcr.io/owner/app:1.0- образ из GitHub Container Registry
Что дальше
- Подключение GitHub, GitLab и Bitbucket - как подключить git-аккаунт
- Сборка без Dockerfile - как платформа определяет язык и собирает приложение
- Автодеплой по push - когда новая версия заводится сама
- Версии и откат - как вернуться к прежней версии
- Границы платформы - что платформа не поддерживает
Страница в markdown, так её читает агент: /docs/deploy/sources.md