Работа с доменами и портами

На платформе Bothost вы можете подключить собственный домен или использовать бесплатный поддомен *.bothost.ru для доступа к вашему боту или веб-сервису через браузер.

Как это работает

Когда вы включаете опцию «Использовать домен», Bothost автоматически настраивает Reverse Proxy (обратный прокси). Это работает следующим образом:
    • Внешний мир: Пользователь заходит по адресу вашего домена (например, https://my-bot.bothost.ru). Все запросы приходят на стандартный порт 443 (HTTPS).
    • Шлюз хостинга: Система Bothost принимает запрос, проверяет SSL-сертификат и перенаправляет трафик внутрь вашего Docker-контейнера.
    • Ваш контейнер: Внутри контейнера ваш Python/Node.js сервер принимает этот запрос на том порту, который вы указали в настройках (по умолчанию 3000 или 8000).

Важность адреса 0.0.0.0

Для того чтобы Reverse Proxy смог передать запрос вашему коду, сервер внутри контейнера должен слушать на всех сетевых интерфейсах.
  • Неправильно: 127.0.0.1 или localhost. Это «внутренний адрес» контейнера. Если сервер запущен на этом адресе, его увидит только сам бот внутри себя, а внешняя система проксирования получит ошибку соединения.
  • Правильно: 0.0.0.0. Это означает, что сервер готов принимать входящие соединения со всех сторон, включая шлюз хостинга.

Пример на Python (FastAPI/Uvicorn)

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)

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. Рекомендуется использовать её в коде, чтобы при изменении порта в панели управления вам не приходилось менять код:
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.

Автоматическая HTTP-обертка

Если вы используете домен, но в вашем коде нет веб-сервера (например, вы просто хотите видеть статус бота через веб), система может автоматически создать легкую HTTP-обертку. Однако для полноценных веб-приложений (Dashboard, Webhooks, API) рекомендуется использовать собственный сервер на базе FastAPI, Flask или Express.