Hostim Docs

Какой тип сервиса выбрать

При создании сервиса вы выбираете его тип. Тип определяет, что платформа запустит после сборки и получит ли сервис домен. Вариантов три:

ТипЧто запускаетсяДомен
Сервер с HTTPваш процесс, который слушает порт и отвечает на запросыда, автоматически
Статический сайтничего из вашего кода: собранные файлы раздаёт веб-сервер платформыда, автоматически
Воркерваш процесс без входящего HTTPнет

Первые два типа это Web-сервисы: они видны из интернета и получают домен. Именно так они называются в остальных статьях. Воркер наружу не выходит.

Выбор сводится к двум вопросам:

1. Нужно ли принимать запросы из интернета по своему адресу?

  • Нет, приложение только само куда-то ходит или работает в фоне → Воркер
  • Да → второй вопрос

2. Есть ли в репозитории серверный код, который нужно запустить?

  • Да, свой сервер отвечает на запросы → Сервер с HTTP
  • Нет, сборка выдаёт готовые файлы → Статический сайт

Сервер с HTTP

Выбирайте, если приложение обслуживает входящие HTTP-запросы своим кодом: HTTP API, веб-приложение, сайт с серверной частью. Такой сервис получает поддомен с TLS-сертификатом (доступен по HTTPS), к нему можно подключить собственный домен.

Обязательное условие: приложение слушает порт из переменной PORT на адресе 0.0.0.0, см. подготовку кода.

Сюда же относится случай, когда один сервер отдаёт и API, и собранный фронтенд. Наличие React или Vue в зависимостях ничего не меняет: если ваш код запускается и отвечает на запросы, это сервер, а не статика.

Статический сайт

Выбирайте, если сборка выдаёт готовые файлы и своего сервера в репозитории нет: лендинг, документация, SPA на Vite/React/Vue, Astro, Hugo. Платформа соберёт репозиторий и раздаст указанную папку сборки готовым веб-сервером.

Порт и команда запуска у этого типа не задаются: запускать нечего. Подробности, настройка папки сборки и работа с переменными окружения описаны в статье «Статический сайт».

Воркер

Выбирайте, если приложение не принимает входящий HTTP, а работает в фоне и само инициирует действия:

  • бот на long-polling (сам опрашивает сервер мессенджера);
  • потребитель очереди или брокера сообщений (RabbitMQ, Kafka, Redis);
  • фоновый обработчик, планировщик внутри процесса, синхронизация данных.

Воркер не получает домен и не слушает порт. Ему по-прежнему доступны переменные окружения и подключение к базе данных внутри проекта.

Частый случай: Telegram-бот

Бота можно построить двумя способами, и от этого зависит тип сервиса:

  • Long-polling (бот сам опрашивает Telegram: run_polling(), bot.launch()): входящий HTTP не нужен. Это Воркер.
  • Webhook (Telegram сам присылает обновления на ваш HTTPS-адрес): нужен публичный домен для приёма запросов. Это Сервер с HTTP.

Для большинства ботов проще и надёжнее long-polling, то есть Воркер.

Нужны и то, и другое

Один сервис соответствует одному типу. Если системе нужен и HTTP API, и фоновый обработчик, создайте два сервиса в одном проекте. Они делят частную сеть проекта и обращаются друг к другу по внутренним адресам, см. «Связь сервисов».

Так же решается и связка «статический сайт + API»: отдельный сервис со статикой и отдельный с сервером.

Если тип выбран неверно

Тип можно изменить в настройках сервиса, пока не прошло ни одного успешного развёртывания. После этого он фиксируется, и для смены нужно создать новый сервис. Как выглядит каждая из двух ошибок и что с ней делать, описано в статье «Статический сайт».

Health-check

Платформа может периодически проверять «здоровье» контейнера и перезапускать его при сбое. Проверка выключена по умолчанию и необязательна, включается в настройках сервиса. Разница по типам:

  • Сервер с HTTP: при включении проверка использует HTTP-порт приложения, достаточно указать путь (например, /health).
  • Воркер: так как у него нет HTTP-порта, включить проверку можно только если процесс сам поднимет небольшой HTTP-эндпоинт, и тогда его порт указывается явно.
  • Статический сайт: проверка почти бесполезна. Отвечает веб-сервер платформы, и он вернёт успешный ответ на любой путь, пока контейнер жив.

Влияет ли тип на оплату

Нет. Оплата берётся за проект по его тарифу, а не за отдельные сервисы. Добавление воркера рядом с сервером не создаёт отдельного счёта, но оба сервиса делят вычислительные ресурсы проекта, поэтому следите, чтобы им хватало памяти в рамках тарифа. Подробнее в статье «Оплата».

Дальше