Supabase
Весь бэкенд на вашем сервере: Postgres, авто-REST и GraphQL API поверх таблиц, аутентификация, realtime, хранилище файлов и веб-админка Studio. Self-host замена Firebase - без чужого облака Google, без вендор-лока и оплаты за чтения. Подняли официальный docker-стек в боевом режиме, замерили RAM по контейнерам и проверили вживую: таблица мгновенно стала REST API.
Вердикт
- нужен полноценный бэкенд (БД, auth, API, realtime, хранилище) на своем сервере, а не в облаке Google
- уходите с Firebase из-за вендор-лока и оплаты за каждое чтение
- любите Postgres и хотите авто-REST и GraphQL поверх своих таблиц без ручного бэкенда
- нужен легкий бэкенд под MVP на одном бинаре - это к PocketBase, а не к стеку из 11 контейнеров
- сервер меньше CPU4-RAM8: стек тяжелый, в простое ест ~2.2 ГБ RAM
- критично нужны Edge Functions прямо из РФ - дефолтная функция тянет пакет из реестра Deno и падает по гео-блоку
Что это и какую задачу решает
Supabase - open-source платформа-бэкенд (BaaS, backend-as-a-service), self-host замена Firebase. Из коробки дает то, ради чего обычно берут облако Google: базу данных, аутентификацию, автоматический API поверх таблиц, подписки на изменения в реальном времени, хранилище файлов и админку. Разница в одном - все это работает НА ВАШЕМ сервере, данные лежат у вас, а не в чужом облаке.
Боль, от которой уходят: Firebase - это SaaS Google с вендор-локом и оплатой за чтения, где счет растет вместе с трафиком, а данные вы не контролируете. Облачный Supabase - тоже SaaS. Self-host Supabase снимает и то и другое: весь бэкенд у вас, лимитов и счетчика чтений нет, лицензия Apache-2.0 разрешает коммерческое использование и хостинг.
В основе - обычный Postgres. Это ключевая идея: вы создаете таблицу в базе, и она мгновенно становится REST API. Не нужно писать роуты, контроллеры и ORM - PostgREST генерирует API прямо из схемы, а GoTrue закрывает его аутентификацией и построчными политиками доступа (RLS) самого Postgres.
Чем отличается от Firebase и PocketBase
Триада выбора: Firebase - облако Google; PocketBase - легкий self-host под MVP; Supabase - мощный self-host на Postgres.
| Параметр | Firebase (облако) | PocketBase (легкий) | Supabase (мощный) |
|---|---|---|---|
| Где данные | в облаке Google | на вашем сервере | на вашем сервере |
| Модель | SaaS, вендор-лок | open-source | open-source (Apache-2.0) |
| Оплата за чтения | да, счет растет с трафиком | нет | нет |
| База данных | Firestore (NoSQL) | SQLite (1 файл) | PostgreSQL 17 |
| Развес стека | - | 1 бинарь, ~30 МБ | ~11 контейнеров, ~2 ГБ RAM |
| Под что | быстрый старт в облаке | MVP и небольшие проекты | серьезный прод |
Как выбрать: нужен свой бэкенд без облака и проект небольшой - берите PocketBase (легкий, SQLite). Нужен мощный бэкенд на Postgres с готовыми auth, realtime и Studio под серьезный прод - Supabase. Firebase здесь - точка отсчета, от которой оба уводят на ваш сервер.
Тех-стек и архитектура
Supabase self-host - это не один продукт с единой версией, а композиция сервисов вокруг Postgres. Единого номера версии у него нет, поэтому в бейдже стоит только лицензия Apache-2.0, а версии компонентов - в таблице ниже. Все внешние запросы идут через один вход - API-gateway Kong, который маршрутизирует их по сервисам и закрывает Studio basic-авторизацией.
Ядро - Postgres 17. Поверх него PostgREST отдает автоматический REST API прямо из схемы таблиц, GoTrue выдает и проверяет JWT для аутентификации, Realtime транслирует изменения БД по WebSocket, Storage хранит файлы (с imgproxy для превью), postgres-meta и Studio дают веб-админку, supavisor пулит соединения к базе, а Edge Functions выполняют серверный код на Deno.
| Сервис | Роль | Версия |
|---|---|---|
| Postgres | база данных, ядро всего | 17.6 |
| Kong | API-gateway, единый вход, basic-auth для Studio | 3.9.3 |
| GoTrue (auth) | аутентификация, выдача JWT | v2.189.0 |
| PostgREST (rest) | авто-REST API поверх таблиц | v14.12 |
| Realtime | подписки на изменения БД по WebSocket | v2.102.3 |
| Storage + imgproxy | хранилище файлов и превью | v1.60.4 / v3.30.1 |
| postgres-meta | управление схемой для Studio | v0.96.6 |
| Studio | веб-админка (таблицы, SQL, auth, storage) | 2026.08.03 |
| Edge Functions | серверный код на Deno (опционально) | v1.74.0 |
| supavisor | пулер соединений к Postgres | - |
Минимальная конфигурация
Стек тяжелый - реальные требования против того, что кажется на глаз.
| Минимум для теста | CPU4-RAM8-DISK100 |
| Контейнеров в стеке | ~11 за Kong |
| RAM в простое (весь стек) | ~2.2 GB (2172 MiB) |
| Образы на диске | ~9.1 GB |
| Рекомендуем тариф | CPU4-RAM8-DISK100 |
Важно: это не легкий бэкенд. Даже в простое, без единого запроса, стек занимает ~2.2 ГБ RAM - больше всех ест Kong (450 МиБ), затем Studio (214), pooler (208) и realtime (188). Плюс ~9 ГБ образов на диске. Тариф ниже CPU4-RAM8 брать не стоит: под нагрузкой Postgres и сервисам станет тесно.
В маркетплейсе Fatmetal
Развернуть в 1 клик
Этот стек есть в маркетплейсе Fatmetal - можно не собирать 11 контейнеров, секреты и подписанные JWT-ключи вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS, Studio за basic-auth и уже сгенерированные API-ключи - вход паролем сервера.
Рекомендуемая конфигурация: CPU4-RAM8-DISK100
Развертывание на Fatmetal
Базовый путь - Cloud Server CPU4-RAM8 + Ubuntu 24.04 + официальный docker-стек за Caddy.
Создать VM
Ubuntu 24.04 с Docker, тариф CPU4-RAM8-DISK100. Стек тяжелый: ~11 контейнеров и ~9 ГБ образов, меньше 8 ГБ RAM не берите.
Взять официальный docker-стек
git clone --depth 1 github.com/supabase/supabase cp docker/.env.example docker/.envВ
.envпрописать домен, секреты и вход в Studio.Сгенерировать секреты и ключи
POSTGRES_PASSWORD=... JWT_SECRET=... (>=32 символов) ANON_KEY=... (JWT, подписан на JWT_SECRET) SERVICE_ROLE_KEY=... (JWT, подписан на JWT_SECRET) DASHBOARD_USERNAME=admin DASHBOARD_PASSWORD=пароль-сервераANON_KEYиSERVICE_ROLE_KEY- это HS256-JWT, подписанные на вашемJWT_SECRET. Демо-ключи из примера не годятся - Kong отдаст 401. В карте маркетплейса они генерятся автоматически.Поднять стек
docker compose pull docker compose up -dСтарт тяжелый: Postgres 17, миграции всех сервисов, тянутся ~9 ГБ образов. Health поднимается по частям - подождите.
Закрыть TLS
Caddy обратным прокси на Kong
localhost:8000- автоматический сертификат Let's Encrypt на magic-DNS домен.
Что измерили после запуска
Цифры со свежей установки, весь стек без нагрузки.
| Контейнеров | ~11 за Kong |
| RAM в простое (весь стек) | ~2.2 GB (2172 MiB) |
| Топ по RAM | Kong 450, Studio 214, pooler 208, realtime 188, storage 160 MiB |
| Легкие сервисы | imgproxy 104, db 102, meta 92, rest 46, auth 8 MiB |
| Образы на диске | ~9.1 GB |
| Внешний отклик | https 200, валидный Let's Encrypt (YE1) |
Что проверено заказ-тестом
- стек встал за Caddy на magic-DNS домене с валидным TLS Let's Encrypt
- Studio за Kong basic-auth (admin / пароль сервера) открывается - редирект 307; без auth возвращает 401
- Auth:
/auth/v1/healthс anon-ключом = 200 (GoTrue отвечает) - REST с service-ключом = 200 (PostgREST отвечает)
- Доказан авто-API: создали таблицу
public.pingsв Postgres, и сразуGET /rest/v1/pingsс anon-ключом вернул строку. Это ядро Supabase - таблица мгновенно становится REST API, без единой строки серверного кода.
Проверено на стеке от 2026.08.03, август 2026 (Postgres 17.6, Kong 3.9.3, GoTrue v2.189, PostgREST v14.12). На новых версиях компонентов результаты могут отличаться.
Где может сломаться
Реальные грабли Supabase self-host - ключи, Caddyfile и гео-блок.
Причина. ANON_KEY и SERVICE_ROLE_KEY - это HS256-JWT с payload (role, iss=supabase, iat, exp), подписанные на JWT_SECRET. Если ключи сгенерированы неправильно или на другом секрете, подпись не сходится и Kong режет все запросы.
Решение. Сгенерируйте оба ключа именно на своем JWT_SECRET. В карте маркетплейса они генерятся автоматически и уже согласованы.
Причина. В Caddyfile блок header { ...; ... } записан в одну строку через точку с запятой - Caddy такой синтаксис не парсит.
Решение. Директивы внутри блока пишите с новой строки, каждую отдельно.
Edge Functions не поднимаются из РФ
Дефолтная edge-функция тянет JSR-пакет @panva/jose из реестра Deno, который недоступен и таймаутит из РФ - контейнер уходит в unhealthy. Это опциональный сервис: ядро BaaS (БД, auth, REST, realtime, storage, Studio) работает без него. Если Edge Functions не нужны критично - ограничение не мешает.
Тяжелый старт. Postgres 17, миграции всех сервисов и ~9 ГБ образов - первый запуск идет заметно дольше легких стеков. Смотрите health по частям, не пугайтесь, что не все контейнеры готовы сразу.
Безопасность и обновления
Studio закрыт basic-авторизацией на Kong: логин admin, пароль - пароль сервера. Наружу торчит только Kong через Caddy с TLS; сам Kong слушает localhost:8000 и напрямую не публикуется. API-ключи разделены по ролям: anon - публичный (для клиента, ограничен построчными политиками RLS), service_role - секретный, обходит RLS, его нельзя отдавать в браузер. Оба лежат в файле кредов на сервере.
Обновление - смена тегов образов в compose:
docker compose pull && docker compose up -d
Бэкап - дамп Postgres (в нем и данные, и вся конфигурация auth/storage):
docker exec supabase-db pg_dumpall -U postgres > supabase-db.sql
Перед продом закройте: смену пароля Studio, TLS на прокси, порт Kong не публиковать наружу напрямую, service_role-ключ держать только на бэкенде, включить RLS на таблицах и настроить регулярный дамп Postgres.
Связь с другими стеками
- PocketBase - легкий self-host бэкенд на SQLite (1 бинарь, ~30 МБ) для MVP, когда весь стек Supabase избыточен.
- Обратный прокси - Caddy или Nginx Proxy Manager для TLS и единого домена перед Kong.
- Почта - внешний SMTP для писем аутентификации (подтверждение, сброс пароля через GoTrue).
- Мониторинг - Prometheus и Grafana или Beszel по метрикам контейнеров и Postgres.
Когда это НЕ ваш выбор
Нужен легкий бэкенд под MVP
Если проект небольшой и не хочется держать 11 контейнеров и ~2 ГБ RAM, берите PocketBase - один бинарь на SQLite. Supabase здесь избыточен.
Сервер слабее CPU4-RAM8
Стек тяжелый: ~2.2 ГБ RAM в простое и ~9 ГБ образов. На меньшем тарифе Postgres и сервисам будет тесно уже без нагрузки.
Критичны Edge Functions из РФ
Дефолтная функция падает по гео-блоку реестра Deno. Ядро работает без них, но если серверный код на Deno - ключевая часть проекта, заложите обход заранее.
Частые вопросы
Чем это лучше Firebase?
Данные и весь бэкенд у вас на сервере, а не в облаке Google. Нет вендор-лока и оплаты за чтения, лицензия Apache-2.0. Набор возможностей тот же: БД, auth, API, realtime, хранилище.
А чем отличается от PocketBase?
PocketBase - легкий (1 бинарь на SQLite, ~30 МБ) под MVP. Supabase - мощный стек на Postgres из ~11 сервисов (~2 ГБ RAM) под серьезный прод. Firebase - облако Google, от которого оба уводят на ваш сервер.
Правда, что таблица сразу становится API?
Да, это ядро Supabase. Мы создали таблицу в Postgres, и запрос `GET /rest/v1/<таблица>` с anon-ключом сразу вернул строку - без единой строки серверного кода. API генерирует PostgREST прямо из схемы.
Какая версия у Supabase?
Единой версии нет - это композиция сервисов. У каждого компонента своя версия (Postgres 17.6, Kong 3.9.3, GoTrue v2.189 и так далее). Общий ярлык - лицензия Apache-2.0.
Хватит ли 4 ГБ RAM?
Нет. Только в простое стек ест ~2.2 ГБ, а под нагрузкой Postgres нужен запас. Берите CPU4-RAM8, это минимум.
Как входить в админку?
Studio закрыт basic-auth на Kong: логин admin, пароль - пароль сервера. Наружу торчит только Kong через прокси с TLS.
Почему не работают Edge Functions?
Из РФ дефолтная функция тянет пакет из реестра Deno, который недоступен, и контейнер падает. Это опциональный сервис - ядро (БД, auth, REST, realtime, storage) работает без него.
Какие ограничения лицензии?
Лицензия Apache-2.0 - свободное использование, включая коммерческое и хостинг. Ограничений на self-host нет.
Итог
Supabase self-host - это весь бэкенд на вашем сервере: Postgres, авто-REST и GraphQL API, аутентификация, realtime, хранилище и админка Studio. Замена Firebase без чужого облака, вендор-лока и оплаты за чтения. Мы подняли официальный docker-стек в боевом режиме, замерили RAM по контейнерам (~2.2 ГБ в простое) и доказали ядро вживую: таблица в Postgres мгновенно стала REST API. Стек тяжелый - берите CPU4-RAM8, - но взамен получаете полноценный BaaS на open-source лицензии Apache-2.0. Легкая альтернатива под MVP - PocketBase.
Этот стек у нас запущен на тарифе CPU4-RAM8. Полный разбор в Базе знаний: fatmetal.ru/knowledge-base/supabase. Нашли баг в гайде - напишите, поправим в течение дня.