<!-- Bothost docs | HTML: https://bothost.ru/docs/domains-and-ports | Markdown: https://bothost.ru/docs/domains-and-ports.md | Index: https://bothost.ru/llms.txt -->

# Работа с доменами и портами

На платформе Bothost вы можете подключить собственный домен или использовать бесплатный поддомен платформы для доступа к боту или веб-сервису через браузер (в зависимости от тарифа и настроек это может быть зона `*.bothost.ru` или автоматический поддомен вида `*.bothost.tech`).

Эта статья — базовая: как работает прокси, какой порт нужен приложению, зачем `0.0.0.0`, и как не получить `502/504` из-за несовпадения настроек.

**Практика (вебхук, деплой, частые ошибки, диагностика):** [Веб-приложения и домены](web-apps-domains).

![Опция «Использовать домен» в дополнительных настройках бота](/docs/images/domain-settings-use-domain.png)

## Когда читать эту страницу

- Нужна базовая модель работы домена и прокси на платформе.
- Настраиваете порт впервые и хотите избежать типичных ошибок.
- Проверяете, почему сервис не открывается по домену.

## Как это работает

Когда вы включаете опцию **«Использовать домен»**, Bothost автоматически настраивает **Reverse Proxy** (обратный прокси). Это работает следующим образом:

1.  **Внешний мир:** Пользователь заходит по адресу вашего домена (например, `https://my-bot.bothost.ru` или `https://my-bot.bothost.tech`). Все запросы приходят на стандартный порт 443 (HTTPS).
2.  **Шлюз хостинга:** Система Bothost принимает запрос, проверяет SSL-сертификат и перенаправляет трафик внутрь вашего Docker-контейнера.
3.  **Ваш контейнер:** Внутри контейнера ваш Python/Node.js сервер принимает этот запрос на том порту, который вы указали в настройках (по умолчанию 3000 или 8000).

## Важность адреса 0.0.0.0

Для того чтобы Reverse Proxy смог передать запрос вашему коду, сервер внутри контейнера должен слушать на всех сетевых интерфейсах.

*   ❌ **Неправильно:** `127.0.0.1` или `localhost`. Это «внутренний адрес» контейнера. Если сервер запущен на этом адресе, его увидит только сам бот внутри себя, а внешняя система проксирования получит ошибку соединения.
*   ✅ **Правильно:** `0.0.0.0`. Это означает, что сервер готов принимать входящие соединения со всех сторон, включая шлюз хостинга.

### Пример на Python (FastAPI/Uvicorn)

```python
import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

if __name__ == "__main__":
    # Указываем host="0.0.0.0" обязательно!
    uvicorn.run(app, host="0.0.0.0", port=8000)
```

### Пример на Node.js (Express)

```javascript
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

// Слушаем на 0.0.0.0
app.listen(port, '0.0.0.0', () => {
  console.log(`Server running on port ${port}`);
});
```

## Настройка порта в панели

В настройках бота есть поле **«Порт»**. Значение в этом поле должно строго совпадать с тем портом, который вы указываете в коде своего приложения.

### Использование переменной окружения PORT

Система Bothost автоматически передает выбранный вами порт в переменную окружения `PORT`. Рекомендуется использовать её в коде, чтобы при изменении порта в панели управления вам не приходилось менять код:

```python
import os
import uvicorn

port = int(os.getenv("PORT", 8000))
uvicorn.run(app, host="0.0.0.0", port=port)
```

Если вы изменили порт в коде вручную (например, жестко прописали `5000`), обязательно обновите его и в панели управления Bothost, иначе система будет пытаться отправить запросы на старый порт и вы увидите ошибку **502 Bad Gateway** или **504 Gateway Timeout**.

### Порт в панели и переменная PORT

Поле **«Порт»** в панели задаёт, на какой порт внутри контейнера смотрит прокси. Переменная окружения `PORT` в контейнере должна совпадать с этим значением. Если вы задаёте свой порт только в переменных окружения, но не меняете порт в настройках бота, прокси и приложение «разъедутся» — снаружи будет таймаут или ошибка шлюза.

### Автоматический поддомен и символы в имени

Для автоматически выданных поддоменов в имени хоста **подчёркивания** в идентификаторе бота заменяются на **дефисы** — так имя соответствует правилам DNS.

## Автоматическая HTTP-обертка

Если вы используете домен, но в вашем коде нет веб-сервера (например, вы просто хотите видеть статус бота через веб), система может автоматически создать легкую HTTP-обертку. Однако для полноценных веб-приложений (Dashboard, Webhooks, API) рекомендуется использовать собственный сервер на базе FastAPI, Flask или Express.

---

*Дальше по теме: практический гайд [Веб-приложения и домены](web-apps-domains).*

