Работа с доменами и портами
На платформе Bothost вы можете подключить собственный домен или использовать бесплатный поддомен платформы для доступа к боту или веб-сервису через браузер (в зависимости от тарифа и настроек это может быть зона.bothost.ru или автоматический поддомен вида .bothost.tech).
Эта статья — базовая: как работает прокси, какой порт нужен приложению, зачем 0.0.0.0, и как не получить 502/504 из-за несовпадения настроек.
Практика (вебхук, деплой, частые ошибки, диагностика): Веб-приложения и домены.
Когда читать эту страницу
- Нужна базовая модель работы домена и прокси на платформе.
- Настраиваете порт впервые и хотите избежать типичных ошибок.
- Проверяете, почему сервис не открывается по домену.
Как это работает
Когда вы включаете опцию «Использовать домен», Bothost автоматически настраивает Reverse Proxy (обратный прокси). Это работает следующим образом:- Внешний мир: Пользователь заходит по адресу вашего домена (например,
https://my-bot.bothost.ruилиhttps://my-bot.bothost.tech). Все запросы приходят на стандартный порт 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 или 504 Gateway Timeout.
Порт в панели и переменная PORT
Поле «Порт» в панели задаёт, на какой порт внутри контейнера смотрит прокси. Переменная окруженияPORT в контейнере должна совпадать с этим значением. Если вы задаёте свой порт только в переменных окружения, но не меняете порт в настройках бота, прокси и приложение «разъедутся» — снаружи будет таймаут или ошибка шлюза.
Автоматический поддомен и символы в имени
Для автоматически выданных поддоменов в имени хоста подчёркивания в идентификаторе бота заменяются на дефисы — так имя соответствует правилам DNS.Автоматическая HTTP-обертка
Если вы используете домен, но в вашем коде нет веб-сервера (например, вы просто хотите видеть статус бота через веб), система может автоматически создать легкую HTTP-обертку. Однако для полноценных веб-приложений (Dashboard, Webhooks, API) рекомендуется использовать собственный сервер на базе FastAPI, Flask или Express.Дальше по теме: практический гайд Веб-приложения и домены.