# Источники кода

> Репозиторий GitHub, GitLab или Bitbucket, архив с папкой проекта, готовый образ из публичного реестра: как подключить каждый.

Раздел: Деплой
Источник: https://nodbox.ru/docs/deploy/sources/

---
Платформа запускает код из трёх источников: репозитория GitHub, GitLab или Bitbucket, zip-архива с папкой проекта и готового образа. Источник выбирается при создании приложения, и от него зависит, как приложение обновляется.

## Как выбрать источник

| Источник | Подходит для | Новая версия |
| --- | --- | --- |
| Репозиторий | кода в git: GitHub, GitLab или Bitbucket | заводится сама, по push в выбранную ветку |
| Архив | папки проекта без git | заказывается вручную, каждый раз с новой загрузкой архива |
| Образ | уже собранного приложения | заказывается вручную |

Заказать версию вручную можно из панели или по API.

## Репозиторий

Код берётся только через подключённый git-аккаунт: адрес репозитория вставлять не нужно, ты выбираешь его из списка. Так работают и приватные репозитории, и публичные.

Подключить можно GitHub, GitLab на gitlab.com и Bitbucket на bitbucket.org. Способ у каждого свой, он разобран на странице [Подключение GitHub, GitLab и Bitbucket](/docs/deploy/git-accounts/).

Платформа клонирует выбранную ветку, собирает приложение и выкатывает его. Каждый следующий push в эту ветку заводит новую версию сам, подробности - в разделе [Автодеплой по push](/docs/deploy/auto-deploy/).

## Архив

Архив - деплой без git: репозиторий не нужен. Упакуй папку проекта в zip и загрузи его в панели или по API. Подойдёт и архив самой папки, и архив её содержимого: результат один.

Каждая новая версия приложения из архива - это новая загрузка. Загрузка живёт 15 минут: за это время нужно залить архив и заказать версию, иначе загрузку придётся повторить. Одну загрузку можно потратить на одну версию.

Порядок для API:

1. Создать загрузку
2. Залить в неё архив
3. Подтвердить загрузку
4. Заказать версию, указав `upload_id`

Без новой загрузки приложение из архива выкатывается в двух случаях: при откате на прежнюю версию в пределах трёх последних и при запуске после остановки. Оба берут уже собранную версию.

## Проверка архива

Платформа проверяет архив при деплое, а не при загрузке. Загрузка проверяет только, что файл на месте и не превышает допустимый размер. Остальное идёт на первом шаге деплоя: платформа читает список файлов до распаковки, а при распаковке ещё раз проверяет каждый путь и фактический объём.

Первая же нарушенная проверка отклоняет весь архив: отдельные файлы платформа не пропускает. Версия получает причину отказа, архив больше не используется, а повторить деплой с ним нельзя: нужны новая загрузка и новая версия. Отклонённый архив ничего не стоит, потому что тарификация начинается только с подтверждённого выката.

Причин отказа четыре:

| Причина | Что случилось |
| --- | --- |
| `archive_invalid` | архив не разбирается: он пустой или содержит пути с выходом за пределы папки, абсолютные пути, букву диска, обратный слэш, символические ссылки, устройства, дубликаты имён, в том числе отличающиеся только регистром |
| `archive_encrypted` | архив защищён паролем, а платформа пароль не спрашивает |
| `compression_unsupported` | принимаются только методы сжатия store и deflate |
| `limit_exceeded` | превышен один из потолков: объём, число файлов и записей, длина и глубина пути, коэффициент сжатия |

Потолки по числу и форме файлов:

- до 20 000 файлов
- до 50 000 записей в архиве
- путь до 255 символов
- глубина пути до 32 уровней

Предельный размер архива и распакованного проекта - в разделе [Лимиты и квоты](/docs/project/limits/).

## Образ

Готовый образ платформа не собирает, а запускает: сборка пропускается. Образ должен быть публичным и лежать в Docker Hub или GitHub Container Registry. Образ из другого реестра платформа отклоняет сразу, при создании или правке приложения: ошибка стоит на поле с адресом образа.

Адрес записывается как обычно:

- `nginx:1.27` - образ из Docker Hub, хост можно не указывать
- `ghcr.io/owner/app:1.0` - образ из GitHub Container Registry

## Что дальше

- [Подключение GitHub, GitLab и Bitbucket](/docs/deploy/git-accounts/) - как подключить git-аккаунт
- [Сборка без Dockerfile](/docs/deploy/build/) - как платформа определяет язык и собирает приложение
- [Автодеплой по push](/docs/deploy/auto-deploy/) - когда новая версия заводится сама
- [Версии и откат](/docs/deploy/versions/) - как вернуться к прежней версии
- [Границы платформы](/docs/help/limitations/) - что платформа не поддерживает
