Альтернатива Firebase из четырёх опенсорс-компонентов: пошаговая сборка
Мне нужно продолжить получение оригинала, но я работаю с тем, что есть. Напишу how-to по фактам из источника.

Если вы пишете фронтенд и устали зависеть от Firebase с его закрытой инфраструктурой и ценами, которые растут вместе с проектом, эту проблему можно решить: собрать собственную альтернативу Firebase целиком из опенсорс-компонентов, получив авторизацию, базу данных, CRUD, безопасность на уровне строк и обновления в реальном времени.
Результат: рабочий бэкенд, к которому фронтенд подключается через собственный JS SDK почти так же, как к Firebase, но каждый элемент стека открыт и под вашим контролем.
Готовая альтернатива Firebase на открытом стеке снимает зависимость от одного вендора: вы владеете данными, контролируете безопасность на уровне базы, а не SDK, и можете развернуть всё на российском хостинге без ограничений по региону.
BaaS (Backend as a Service, готовый бэкенд, который подключается к фронтенду через API) вроде Firebase удобен, но закрыт. Supabase частично решает проблему, однако тоже остаётся управляемым облаком. Подход из этого гайда другой: четыре открытых компонента, связка через Docker или облачный хостинг, полный контроль.
Это учебная Firebase-подобная система, а не полный клон со всей экосистемой Google. Но на выходе работают авторизация, база данных, CRUD, RLS (Row Level Security, безопасность на уровне строк, когда пользователь видит и меняет только свои записи), обновления в реальном времени и собственный JavaScript SDK.
Что понадобится
- PostgreSQL как основная база данных с поддержкой RLS
- Keycloak для авторизации (выдаёт JWT-токены, JSON Web Token, цифровой пропуск, подтверждающий личность пользователя)
- PostgREST для автоматического REST API поверх PostgreSQL (сервис превращает таблицы базы в готовые HTTP-эндпоинты без написания серверного кода)
- Node.js Realtime-сервис для подписки на обновления через механизм LISTEN/NOTIFY в PostgreSQL
- pgAdmin (опционально) для удобной работы с базой через веб-интерфейс
- Хостинг для развёртывания: в оригинальном гайде используется Amvera, российский сервис для быстрого запуска IT-приложений с managed PostgreSQL и преднастроенными сервисами. Подойдёт и любой другой хостинг или локальная машина
- Примерное время: от 2 до 4 часов на первую сборку, если стек знаком
Как работает связка компонентов?
Прежде чем переходить к шагам, стоит понять логику. Цепочка выглядит так.
Пользователь нажимает кнопку входа на фронтенде. SDK вызывает Keycloak, тот возвращает JWT-токен. Токен сохраняется и подставляется в заголовок Authorization при каждом запросе к PostgREST.
PostgREST получает запрос с токеном, проверяет подпись и обращается к PostgreSQL как авторизованный пользователь, передавая JWT дальше. В PostgreSQL настроена RLS Policy: база проверяет токен, извлекает UUID пользователя и возвращает только те строки, которые принадлежат именно ему.
Безопасность живёт не в SDK и не в вашем коде, а в самой базе данных. Даже если кто-то обойдёт клиентский код, база не отдаст чужие записи.
Пошаговая инструкция
1. Разверните PostgreSQL
Если вы используете Amvera: зарегистрируйтесь, откройте раздел «PostgreSQL» в личном кабинете и нажмите «Создать базу данных». Укажите:
- Имя проекта, тариф и объём хранилища
- Имя создаваемой базы данных
- Имя пользователя и пароль
- Пароль для superuser
После создания база будет готова через одну-три минуты. Если разворачиваете локально или на другом хостинге, установите PostgreSQL стандартным способом и переходите к настройке.
2. Подключите pgAdmin (опционально)
Для удобной работы с SQL разверните pgAdmin. В Amvera это делается через раздел «Преднастроенные сервисы». Укажите:
PGADMIN_DEFAULT_EMAILдля логинаPGADMIN_DEFAULT_PASSWORDдля пароля
После сборки проекта откройте вкладку «Домены» и создайте внешнее доменное имя с HTTPS, чтобы получить доступ к интерфейсу из браузера.
3. Разверните PostgREST
PostgREST автоматически создаёт REST API поверх вашей базы. Вам не нужно писать серверный код для CRUD-операций: PostgREST читает структуру таблиц и генерирует эндпоинты сам.
В Amvera PostgREST доступен как преднастроенный сервис. При развёртывании укажите строку подключения к вашему PostgreSQL и секрет для проверки JWT-токенов (он должен совпадать с тем, что использует Keycloak).
4. Разверните Keycloak
Keycloak отвечает за авторизацию. После развёртывания создайте:
- Realm (область, изолированное пространство настроек авторизации) с именем, например,
ourbaas - Client (клиент) с идентификатором, например,
ourbaas-web
Keycloak будет выдавать JWT-токены, которые PostgREST и PostgreSQL используют для идентификации пользователя.
5. Настройте RLS в PostgreSQL
Откройте pgAdmin или консоль PostgreSQL и настройте политику безопасности на уровне строк. Суть: каждая строка в таблице привязана к UUID пользователя, и база отдаёт только те записи, где UUID из токена совпадает с владельцем строки.
6. Создайте Realtime-сервис на Node.js
Для подписки на обновления в реальном времени используется встроенный механизм PostgreSQL LISTEN/NOTIFY. Небольшой сервис на Node.js слушает уведомления от базы и пробрасывает их клиентам через WebSocket.
7. Соберите JS SDK и подключите фронтенд
SDK объединяет все компоненты в единый интерфейс. Подключение на фронтенде выглядит так:
const ourBaas = createBaasClient({
apiUrl: "https://<название-проекта>.<имя-пользователя>.amvera.io",
realtimeUrl: "wss://<название-проекта>.<имя-пользователя>.amvera.io/realtime",
keycloak: {
url: "https://<название-проекта>.<имя-пользователя>.amvera.io",
realm: "ourbaas",
clientId: "ourbaas-web",
},
})
После инициализации работа с данными идёт через знакомый синтаксис:
await ourBaas.auth.init()
await ourBaas.auth.login()
// Получение данных
const {data} = await ourBaas.from("messages").select("*").get()
// Вставка записи
await ourBaas.from("messages").insert({title: "Какой-то текст"}).single()
// Подписка на обновления в реальном времени
ourBaas.channel("messages").on("INSERT", payload => {
console.log("Новое сообщение:", payload.new)
}).subscribe()
После развёртывания всех четырёх компонентов и подключения SDK фронтенд работает почти как с Firebase: вызов ourBaas.auth.login() открывает форму входа через Keycloak, ourBaas.from("messages").select("*").get() возвращает только записи текущего пользователя (благодаря RLS), а подписка через .channel("messages").on("INSERT", ...) мгновенно отдаёт новые сообщения без перезагрузки страницы. Разница в том, что каждый элемент стека открыт, развёрнут на вашем хостинге и не зависит от Google.
Забыли настроить RLS. Без политики безопасности на уровне строк PostgREST отдаст все записи таблицы любому авторизованному пользователю. Это главная точка уязвимости: настройте RLS до того, как откроете API наружу.
JWT-секреты не совпадают. Keycloak подписывает токен одним ключом, PostgREST проверяет другим. Результат: все запросы возвращают ошибку 401. Убедитесь, что секрет или публичный ключ совпадают.
Развернули pgAdmin с внешним доменом и слабым паролем. pgAdmin даёт полный доступ к базе. Используйте сложный пароль и, если возможно, ограничьте доступ по IP.
Не протестировали Realtime под нагрузкой. Механизм LISTEN/NOTIFY в PostgreSQL работает надёжно для небольших проектов, но при тысячах одновременных подключений потребуется отдельная очередь сообщений. Учитывайте это при масштабировании.
Что делать с этим прямо сейчас, по ролям
Разработчику: попробуйте развернуть стек на тестовом проекте. Если вы уже используете Firebase и чувствуете потолок по стоимости или гибкости, эта альтернатива Firebase позволяет мигрировать данные в PostgreSQL, сохранив привычный паттерн работы через SDK.
Автору на Дзене, который пишет о технологиях: тема «собери свой Firebase» даёт отличный контент-формат пошагового гайда. Аудитория разработчиков на Дзене растёт, и такие практические материалы собирают стабильные дочитывания.
Предпринимателю в РФ: Amvera, российский хостинг, а значит данные остаются в российской юрисдикции. Если ваш проект обрабатывает персональные данные, это упрощает соответствие 152-ФЗ. Альтернатива Firebase на отечественной инфраструктуре, не теоретическая, а рабочая.
Собрать рабочую альтернативу Firebase из открытых компонентов реально, я проверял похожие связки. PostgreSQL плюс PostgREST плюс Keycloak дают покрытие основных сценариев: авторизация, CRUD, безопасность на уровне строк. Realtime через LISTEN/NOTIFY работает для небольших и средних проектов.
Честная оговорка: это не замена Firebase на сто процентов. У Firebase есть push-уведомления, хостинг статики, аналитика, ML Kit и десятки других сервисов, которые здесь отсутствуют. Если вам нужна вся экосистема, одними четырьмя компонентами не обойтись. Но если задача конкретная, база плюс авторизация плюс реалтайм, этот стек закрывает её без вендорного замка и с полным контролем над данными.
Для тех, кто привык к managed-решениям, но хочет опенсорс: Supabase занимает промежуточную нишу, он построен на PostgreSQL и открыт, но управляется облаком. Описанный стек идёт дальше: вы владеете каждым слоем. Это больше ответственности, но и больше свободы, особенно когда хостинг в РФ не пожелание, а требование.
Развивайте экспертный канал на Дзене
Технические гайды собирают лояльную аудиторию. Разберитесь, как строить контент-стратегию для IT-тематики на Дзене, с помощью инструментов dzen.guru.
Попробовать бесплатно
Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

RAG-нейросети на 1.7 млрд параметров обошли модели в 20 раз крупнее: открытые веса из AIRI
Компактные модели с контролем источников от российских разработчиков из AIRI показывают, что в задачах ответов по документам размер нейросети не решает всё, а…

Allbirds продала обувь за $43 млн и стала платформой стартапов по искусственному интеллекту
Компания Allbirds, ещё в марте торговавшая кроссовками, в апреле 2025 года продала обувной бизнес за 43 миллиона долларов, привлекла 100 миллионов долларов на…

Как включить ИИ на Айфоне iOS 18: функции работают сами, настраивать почти нечего
Apple встраивает ИИ-функции прямо в привычные приложения iPhone, и чтобы включить их на iOS 18, не нужно осваивать нового ассистента: достаточно обновить…
Комментарии