База знаний

Supabase — open-source альтернатива Firebase на базе PostgreSQL

Open-source backend-as-a-service: PostgreSQL, авторизация, хранилище, Realtime и Edge Functions в одной коробке. Можно использовать облако или поднять локально через Docker.

Опубликовано
Supabase — это «Firebase на Postgres»: готовый backend с базой, авторизацией, хранилищем и Realtime, который можно запустить в облаке за минуту или поднять у себя через Docker.

Что это такое

Supabase — open-source backend-as-a-service, построенный поверх PostgreSQL. Компания из Сингапура, проект живой, активно развивается с 2020 года.

В одной коробке собраны:

  • Postgres-база — полноценная, без урезанных режимов, с расширениями (pgvector, PostGIS, pg_cron).
  • Auth — регистрация по email, magic link, OAuth (Google, GitHub, Apple и ещё десяток), OTP, SSO.
  • Storage — S3-совместимое файловое хранилище с правами доступа на уровне RLS.
  • Realtime — подписки на изменения в таблицах через WebSocket.
  • Edge Functions — serverless-функции на Deno, запускаются ближе к пользователю.
  • Auto-generated API — REST и GraphQL поверх схемы Postgres, без написания бэкенда.

Клиентские SDK есть для JavaScript, TypeScript, Python, Dart/Flutter, Swift, Kotlin.


Зачем нужен

Когда хочется начать проект быстро и не писать с нуля авторизацию, CRUD, загрузку файлов и вебсокеты.

Типичные задачи:

  • MVP и прототипы с полноценным бэком за пару часов
  • Мобильные и веб-приложения, где нужен быстрый auth + БД
  • Замена Firebase для тех, кому нужен SQL, а не NoSQL
  • Локальный backend для дев-окружения без облака
  • Pet-проекты на бесплатном тарифе

Почему Postgres важен: в отличие от Firebase вы получаете нормальную реляционную БД с JOIN-ами, транзакциями, миграциями и возможностью в любой момент забрать дамп и уехать на свой сервер.


Два способа использовать

1. Облако (supabase.com)

Регистрируетесь, создаёте проект — получаете URL вида https://xxx.supabase.co, API-ключи и доступ к дашборду. Бесплатный тариф: 500 МБ БД, 1 ГБ storage, 50 000 MAU. Для прода — Pro от $25/мес.

2. Self-hosted через Docker

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


Быстрая установка локально (Docker)

Предполагается, что у вас уже есть Docker — на Mac удобнее всего через OrbStack.

Шаг 1. Клонировать репозиторий

git clone --depth 1 https://github.com/supabase/supabase
cd supabase/docker

Шаг 2. Скопировать env

cp .env.example .env

В .env минимум поменяйте:

  • POSTGRES_PASSWORD — пароль к базе
  • JWT_SECRET — длинная случайная строка (минимум 32 символа)
  • ANON_KEY и SERVICE_ROLE_KEY — сгенерируйте на supabase.com/docs/guides/self-hosting (там есть online-генератор)
  • DASHBOARD_USERNAME / DASHBOARD_PASSWORD — доступ к Studio

Шаг 3. Поднять стек

docker compose pull
docker compose up -d

Первый запуск — минуту-две, качаются образы. Дальше — секунды.

Шаг 4. Открыть дашборд

На OrbStack контейнер дополнительно доступен по supabase-studio.orb.local без проброса портов.

Шаг 5. Остановить / сбросить

# Остановить
docker compose down

# Снести вместе с данными
docker compose down -v

Подключение из приложения

JavaScript / TypeScript

npm install @supabase/supabase-js
import { createClient } from '@supabase/supabase-js'

const supabase = createClient(
  'http://localhost:8000',
  'YOUR_ANON_KEY'
)

// Запрос к таблице
const { data, error } = await supabase
  .from('posts')
  .select('*')
  .order('created_at', { ascending: false })

// Авторизация
await supabase.auth.signInWithPassword({
  email: 'user@example.com',
  password: 'secret',
})

// Realtime подписка
supabase
  .channel('posts')
  .on('postgres_changes', { event: '*', schema: 'public', table: 'posts' }, (payload) => {
    console.log('Change:', payload)
  })
  .subscribe()

CLI для миграций

npm install -g supabase

# Инициализация проекта
supabase init

# Новая миграция
supabase migration new create_posts_table

# Применить к локальной БД
supabase db push

Row Level Security (RLS) — главная фишка

Supabase завязан на RLS-политики Postgres. Вместо бэкенда с проверками прав вы пишете SQL-политики, и база сама решает, кто что видит.

-- Включить RLS
alter table posts enable row level security;

-- Пользователь видит только свои посты
create policy "Users see own posts"
  on posts for select
  using (auth.uid() = user_id);

-- Создавать может только авторизованный
create policy "Authenticated can insert"
  on posts for insert
  with check (auth.role() = 'authenticated');

На клиенте вы ходите напрямую в базу — политики защищают данные. Это сокращает бэкенд до нуля для большинства CRUD-сценариев.


Лицензия и цены

  • Self-hosted — бесплатно, Apache 2.0. Без ограничений.
  • Free (облако) — 500 МБ БД, 1 ГБ storage, 50 000 MAU, проект засыпает через 7 дней простоя.
  • Pro — от $25/мес. 8 ГБ БД, 100 ГБ storage, 100 000 MAU, без сна.
  • Team — от $599/мес. SSO, SOC 2, приоритетная поддержка.
  • Enterprise — по договору.

Когда Supabase не подойдёт

  • Нужен NoSQL / документная модель — Postgres есть Postgres, JSONB помогает, но это не Mongo.
  • Жёсткие требования по комплаенсу на бесплатном тарифе — аудит и соглашения начинаются с Team-плана.
  • Edge Functions как основа бэкенда — они есть, но для сложной логики лучше отдельный сервис (Hono, Fastify, Go).
  • Полноценный realtime-чат на миллионы подключений — Realtime отличный, но для таких нагрузок стоит смотреть специализированные решения.

Итог

Supabase закрывает 80% типового бэкенда коробочно: auth, БД, storage, API, realtime. Для pet-проектов — бесплатно в облаке, для прода и закрытых контуров — self-hosted через Docker за 5 минут.

Если вам нужно «Firebase, но на SQL и open-source» — это оно.

Сайт: https://supabase.com

Документация: https://supabase.com/docs

GitHub: https://github.com/supabase/supabase


По теме

Supabase хорошо ложится рядом с Directus и Strapi: если нужен полноценный backend с auth и realtime — берёте Supabase, если нужен headless CMS под контент — Directus или Strapi. Все три легко поднимаются локально через Docker и OrbStack.