<!-- Bothost docs | HTML: https://bothost.ru/docs/main-file-entrypoint | Markdown: https://bothost.ru/docs/main-file-entrypoint.md | Index: https://bothost.ru/llms.txt -->

# Главный файл (точка входа)

При деплое Bothost нужно знать, **какой файл запускать**. Если оставить поле пустым, система подберёт его автоматически. Если имя файла нестандартное или код лежит во вложенной папке — укажите путь вручную.

## Когда указывать вручную

Заполните поле **«Главный файл (точка входа)»**, если:

- файл называется не `main.py` / `bot.py` / `index.js` и т.п. (например `userbot.py`, `start_bot.py`);
- код бота лежит **во вложенной папке**, а не в корне репозитория (`bot/main.py`, `discord-html-watcher/index.js`);
- автодетект выбирает не тот файл (в репозитории несколько кандидатов);
- после деплоя в логах `Cannot find module '/app/index.js'` или аналог для Python/Go.

Если проект простой и главный файл лежит в корне под стандартным именем — поле можно не трогать.

## Где найти настройку

В форме создания или редактирования бота откройте блок **«Дополнительные настройки»**. Поле **«Главный файл (точка входа)»** находится между опциями домена и Dockerfile:

![Поле «Главный файл (точка входа)» в дополнительных настройках бота](/docs/images/main-file-entrypoint-settings.png)

## Как указать в Bothost

1. Откройте форму создания бота или настройки существующего.
2. Раскройте блок **«Дополнительные настройки»**.
3. В поле **«Главный файл (точка входа)»** укажите путь **от корня репозитория**.
4. Сохраните и выполните **новый деплой** (одного рестарта может быть недостаточно).

Примеры значений:

| Ситуация | Что указать |
|----------|-------------|
| Python-бот в корне | `main.py`, `bot.py`, `userbot.py` |
| Node.js в корне | `index.js`, `bot.js`, `server.js` |
| Код во вложенной папке | `discord-html-watcher/index.js`, `bot/main.py` |
| Go | `main.go` (или путь к нужному `.go`, если структура нестандартная) |

## Как работает автоопределение

Если поле пустое, Bothost ищет файл по приоритету (сначала в корне, затем по найденным файлам проекта):

**Python:** `main.py` → `app.py` → `bot.py` → `server.py` → `index.py` → `run.py`

**Node.js:** `index.js` → `main.js` → `app.js` → `bot.js` → `server.js` → `start.js`  
(также учитываются `package.json` → `main` / `scripts.start`)

**Go:** `main.go` → `bot.go` → `app.go` → `server.go`

## Типичная ошибка: nested-репозиторий

```text
repo/
├── package.json          ← "start": "node index.js"
└── my-bot/
    └── index.js          ← реальный код здесь
```

Контейнер стартует `node index.js` из `/app`, файла в корне нет → `Cannot find module '/app/index.js'`.

**Быстрый фикс:** в поле главного файла указать `my-bot/index.js` и задеплоить заново.

![Пример: в поле указан discord-html-watcher/index.js](/docs/images/main-file-nested-entry.png)

Подробный разбор и альтернативы (правка `package.json`, перенос кода в корень): [Справочник ошибок при деплое](common-errors).

## Связь с кастомным Dockerfile

Если включён **«Использовать собственный Dockerfile»**, команду запуска задаёт ваш `CMD` / `ENTRYPOINT` в Dockerfile. Поле «Главный файл» влияет на **автогенерацию** Dockerfile; при своём Dockerfile ориентируйтесь на `CMD` в репозитории.

См. также: [Кастомный Dockerfile](custom-dockerfile).

## Чеклист

- Путь указан от корня Git, без ведущего `/` (правильно: `bot/main.py`, неправильно: `/app/bot/main.py`).
- Файл реально есть в выбранной ветке репозитория.
- После смены точки входа выполнен **новый деплой**.
- Если ошибка про `dist/` / `build/` — это другой кейс (bind mount `/app`), смотрите [справочник ошибок](common-errors).

---

## См. также

- [Быстрый старт](getting-started)
- [Ветка репозитория при деплое](repository-branch-deploy)
- [Кастомный Dockerfile](custom-dockerfile)
- [Справочник ошибок при деплое](common-errors)
- [FAQ](faq)
