Архитектура платформы
Модель состоит из трёх уровней: аккаунт → проекты → сервисы и базы данных внутри проекта.
Три уровня
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-сервисы напрямую из интернета недоступны.
С чего начать
Порядок первого развёртывания:
- Подготовьте репозиторий к сборке. Локально работающий код не всегда готов к развёртыванию. Что проверить — в статье «Что нужно, чтобы деплой прошёл» и в статье по вашему стеку: Python, Node.js, PHP.
- Выберите тип сервиса — Web или Worker.
- Создайте проект, добавьте сервис, подключите репозиторий. Для приватного репозитория понадобится deploy key.
- Вынесите настройки в переменные окружения — «Переменные окружения и секреты».
- Храните данные в базе данных, а не в файлах контейнера — «Данные не сохраняются в контейнере».