<!-- Bothost docs | HTML: https://bothost.ru/docs/upload-bot-archive | Markdown: https://bothost.ru/docs/upload-bot-archive.md | Index: https://bothost.ru/llms.txt -->

# Загрузка бота из архива

Если репозитория нет или код лежит только на компьютере, бота можно задеплоить файлом: упакуйте проект в `.zip` или `.tar.gz` и загрузите его через дашборд. Сборка и запуск такие же, как при деплое из Git: Docker-образ, контейнер, логи.

> Сейчас функция работает **на одной тестовой ноде**. Остальные ноды подключим позже. Доступна на тарифах **Базовый** и **Pro**.

![Как включить загрузку из архива: профиль, кнопка на дашборде, настройка бота](/docs/images/archive-deploy-overview.png)

## Что понадобится

1. Аккаунт Bothost с тарифом [Базовый или Pro](https://bothost.ru/pricing.php).
2. Токен бота (для Telegram — у [@BotFather](https://t.me/BotFather)).
3. Архив с кодом: `.zip`, `.tar.gz` или `.tgz`, **не больше 100 МБ**.

GitHub, GitLab и webhook для этой схемы не нужны.

## Шаг 1. Включить опцию в профиле

Кнопка на дашборде скрыта, пока её не включите.

1. Откройте [профиль](https://bothost.ru/profile.php).
2. В блоке **«Интерфейс»** включите **«Загрузка бота из архива»**.
3. Сохраните настройки.

![Профиль: переключатель «Загрузка бота из архива»](/docs/images/archive-deploy-profile.png)

На бесплатном тарифе переключатель можно включить, но мастер загрузки отправит на страницу тарифов.

## Шаг 2. Кнопка на дашборде

После включения на странице [«Мои боты»](https://bothost.ru/dashboard.php) появляется фиолетовая кнопка **«Загрузить из архива»** рядом с «Добавить бота».

![Дашборд: кнопка «Загрузить из архива»](/docs/images/archive-deploy-dashboard.png)

Нажмите её — откроется мастер из трёх шагов: **Архив → Настройка → Деплой**.

## Шаг 3. Подготовить архив

Упакуйте **папку с кодом бота**, а не случайный набор файлов с рабочего стола.

### Что должно быть внутри

| Язык | Минимум в архиве |
|------|------------------|
| Python | `main.py` (или другой главный файл) и `requirements.txt` |
| Node.js | `index.js` (или другой главный файл) и `package.json` |
| Go | `main.go` и `go.mod` |

Если код лежит во вложенной папке (`my-bot/main.py`), либо укажите путь в поле «Главный файл», либо положите в корень архива файл `bothost.json` (см. ниже).

Если в архиве одна корневая папка, Bothost поднимет её содержимое наверх автоматически. Несколько папок в корне не схлопываются.

### Что не класть в архив

Эти каталоги только раздувают файл и мешают сборке:

- `venv`, `.venv`, `__pycache__`
- `node_modules`
- `.git`
- `.idea`, `.vscode`
- большие датасеты, видео, дампы БД

Зависимости ставятся на сервере из `requirements.txt` / `package.json` / `go.mod`.

### Опционально: bothost.json

В корне проекта можно положить `bothost.json`, чтобы явно задать точку входа и язык:

```json
{
  "main": "src/bot.py",
  "language": "python",
  "python_version": "3.11"
}
```

| Поле | Назначение |
|------|------------|
| `main` | Главный файл относительно корня проекта |
| `language` | `python`, `node` или `go` |
| `python_version` | Подсказка для образа, например `3.11` |

Поле «Главный файл» в мастере перекрывает `main` из файла, если вы его заполнили.

## Шаг 4. Мастер загрузки

### 1. Архив

Перетащите файл в зону загрузки или выберите его с диска. Поддерживаются `.zip` и `.tar.gz` (в том числе `.tgz`), максимум 100 МБ. Нажмите **«Далее»**.

### 2. Настройка бота

![Шаг 2: название, токен, язык и главный файл](/docs/images/archive-deploy-settings.png)

| Поле | Обязательно | Что указать |
|------|-------------|-------------|
| **Название** | Да | Имя бота в панели |
| **Токен бота** | Да | Токен от @BotFather или другой платформы |
| **Язык / шаблон** | Нет | `Авто` — определение по файлам. Или вручную: aiogram, Python, Telegraf, Node.js, Go |
| **Главный файл** | Нет | Например `main.py` или `src/bot.js`. Пустое поле — автодетект или `bothost.json` |

### 3. Деплой

Нажмите **«Задеплоить»** и **не закрывайте страницу**, пока архив грузится на сервер. Дальше Bothost:

1. Распаковывает архив.
2. Определяет язык.
3. Генерирует Dockerfile (если своего нет).
4. Собирает Docker-образ.
5. Создаёт контейнер и запускает бота.

Прогресс и лог сборки видны на третьем шаге. После успеха можно перейти на дашборд или загрузить ещё одного бота.

## Как обновить бота новым архивом

Для бота, который уже создан из файла, на карточке есть кнопка **залить новый архив** (иконка загрузки файла). Git-кнопка «Обновить» у таких ботов не показывается.

При перезаливке **сохраняются**:

- ID бота, токен, переменные окружения;
- домен и порт;
- данные в `/app/data`.

Пересобирается только код из нового архива. Бот должен остаться «архивным»: перезалить zip в бота, который создан из Git, нельзя.

## Чем это отличается от Git

| | Из архива | Из Git |
|--|-----------|--------|
| Источник кода | Файл `.zip` / `.tar.gz` | Репозиторий |
| Автообновление по push | Нет | Есть на платных тарифах |
| Обновление кода | Залить новый архив | «Обновить из Git» или webhook |
| Приватный репозиторий | Не нужен | [Отдельная настройка](git-repository-access) |
| Ноды | Пока одна тестовая | Обычный выбор ноды |

Если проект уже в Git, удобнее [создать бота из репозитория](getting-started).

## Типичные ошибки

**«Загрузка из архива доступна только на тарифах Базовый и Pro»**  
Нужен платный тариф. Проверьте оплату на [Мои платежи](check-payment), если тариф не активировался.

**«Архив слишком большой (максимум 100 МБ)»**  
Уберите `node_modules`, `venv`, `.git` и тяжёлые файлы, затем упакуйте заново.

**«Поддерживаемые форматы: .zip, .tar.gz»**  
Расширение должно быть `.zip`, `.tar.gz` или `.tgz`. Обычный `.rar` и `.7z` не подойдут.

**«Нода для деплоя из архива недоступна»**  
Тестовая нода временно не принимает загрузки. Подождите или напишите в [@bothostru](https://t.me/bothostru).

**Бот не стартует после сборки**  
Чаще всего неверный главный файл или нет зависимостей в `requirements.txt` / `package.json`. Укажите путь вручную и смотрите [справочник ошибок](common-errors) и [главный файл](main-file-entrypoint).

**Лимит ботов**  
На Базовом — 5 ботов, на Pro — 20. Если лимит достигнут, мастер покажет предупреждение до загрузки файла.

## Что дальше

- [Главный файл (точка входа)](main-file-entrypoint)
- [Переменные окружения](environment-variables)
- [Кастомный Dockerfile](custom-dockerfile)
- [Хранение базы данных](database-storage)

---

**Проблемы?** Напишите в поддержку: [@bothostru](https://t.me/bothostru)
