Hostim Docs

Архитектура платформы

Модель состоит из трёх уровней: аккаунт → проекты → сервисы и базы данных внутри проекта.

Три уровня

1. Аккаунт

Ваш вход на платформу. К одному аккаунту привязано любое число проектов. Важно: ресурсы и оплата считаются не на аккаунт, а на каждый проект отдельно.

2. Проект

Центральная единица платформы. Проект — это изолированное окружение с выделенными вычислительными ресурсами (vCPU, оперативная память, диск) по выбранному тарифу. Три ключевых свойства:

  • Изоляция. Проекты не видят друг друга — между ними нет сетевого доступа. Нагрузка или сбой в одном проекте не затрагивают остальные.
  • Отдельная оплата. Каждый проект тарифицируется сам по себе, посуточным списанием с кошелька. Один аккаунт может держать проекты на разных тарифах.
  • Свои лимиты. Все сервисы и базы данных проекта делят ресурсы его тарифа. Если контейнер превысит доступную память, он будет перезапущен (подробнее — в статье «Почему падает деплой или контейнер»).

3. Сервисы и базы данных

Это то, что реально работает внутри проекта.

Сервис — деплоимая единица: ваш код из git-репозитория, собранный в контейнер. Два типа:

  • Web — принимает входящие HTTP-запросы. Получает домен и TLS-сертификат, то есть доступен снаружи по HTTPS. Примеры: сайт, HTTP API.
  • Worker — фоновый процесс без входящего HTTP и без домена. Примеры: Telegram-бот на long-polling, обработчик очереди задач.

База данных — управляемое хранилище, которое платформа поднимает и обслуживает за вас: PostgreSQL, Redis, MySQL, MariaDB, MongoDB, ClickHouse, Dragonfly, KeyDB. Вы получаете готовую строку подключения.

Пример

Аккаунт
│
├── Проект «shop» · тариф Pro
│   ├── Сервис Web «HTTP API»   ◀── HTTPS · домен (доступ из интернета)
│   │      ⇄ PostgreSQL, Redis         · частная сеть проекта
│   └── Сервис Worker «очередь»
│          ⇄ Redis
│
└── Проект «bot» · тариф Hobby
    └── Сервис Worker «Telegram-бот»
           ⇄ PostgreSQL

⇄ — связь по частной сети проекта (наружу не видна)

Один аккаунт держит два независимых проекта. Внутри каждого сервисы и базы данных связаны частной сетью. Снаружи по HTTPS доступен только Web-сервис — Worker и базы данных из интернета недоступны. Между проектами сети нет.

Связи и изоляция

  • Внутри проекта. Сервисы и базы данных одного проекта соединены частной сетью. Сервис обращается к другому сервису по адресу http://<имя-сервиса>:<порт>, к базе данных — по её внутреннему хосту из строки подключения. Наружу эти адреса не видны. Подробнее — «Связь сервисов и подключение к базе данных».
  • Между проектами. Прямой связи нет. Если двум частям системы нужно общаться по частной сети — держите их в одном проекте.
  • Наружу. Доступ из интернета получают только Web-сервисы — через свой домен по HTTPS. Базы данных и Worker-сервисы напрямую из интернета недоступны.

С чего начать

Порядок первого развёртывания:

  1. Подготовьте репозиторий к сборке. Локально работающий код не всегда готов к развёртыванию. Что проверить — в статье «Что нужно, чтобы деплой прошёл» и в статье по вашему стеку: Python, Node.js, PHP.
  2. Выберите тип сервисаWeb или Worker.
  3. Создайте проект, добавьте сервис, подключите репозиторий. Для приватного репозитория понадобится deploy key.
  4. Вынесите настройки в переменные окружения«Переменные окружения и секреты».
  5. Храните данные в базе данных, а не в файлах контейнера«Данные не сохраняются в контейнере».