---
title: "Выбор бэкенда базы данных"
description: "Выберите DB_BACKEND_MODE — PostgreSQL-primary, Firebase-full или Supabase Postgres для вашего клона Ring"
locale: "ru"
---
# Выбор бэкенда базы данных

  Production-клоны Ring используют **`DB_BACKEND_MODE=k8s-postgres-fcm`** — PostgreSQL для данных приложения, Firebase Admin **только для FCM push**, если настроен. Устаревший `DATABASE_MODE` удалён. Выберите режим до первого boot.

  
- **[Backend modes (architecture)](/docs/architecture/backend-modes-and-databases.md)** — Адаптеры, FCM vs Firestore, `DB_HYBRID_MODE`

  
- **[Database migrations](/docs/getting-started/migrations.md)** — Порядок `schema.sql` + kingdom-миграций

  
- **[Quick Start](/docs/customization/quick-start.md)** — Первый клон с Postgres

```mermaid
flowchart TD
  Start([New Ring clone])
  Start --> Q1{Production v1.6 features?}
  Q1 -->|Yes| PG[Postgres-primary]
  Q1 -->|Firestore prototype only| FB[firebase-full]
  PG --> Q2{Who runs Postgres?}
  Q2 -->|You / k3s / VPS| K8S[k8s-postgres-fcm]
  Q2 -->|Supabase hosted| SUP[supabase-fcm]
  K8S --> Mig[schema.sql + migrations]
  SUP --> Mig
```

## Три режима

| `DB_BACKEND_MODE` | Данные приложения | Firestore как DB? | Push |
|-------------------|------------------|-------------------|------|
| **`k8s-postgres-fcm`** | PostgreSQL (self-hosted, k3s, Docker) | **Нет** | FCM + Apple при настройке |
| **`supabase-fcm`** | PostgreSQL на Supabase | **Нет** | Тот же паттерн FCM |
| **`firebase-full`** | Пути Firestore | **Да** | Полный стек Firebase |

Реализация: `lib/database/backend-mode-config.ts`, `lib/database/DatabaseService.ts`, `lib/database/BackendSelector.ts`.

> **Info**
> **ConnectPlatform** ([connect-brand.com](https://connect-brand.com)) — realtime collaboration, **не** адаптер `DB_BACKEND_MODE`. См. [Tunnel protocol](/docs/features/tunnel-protocol.md).

## Настройка по режимам

  OSS self-host, k3s, handoff Ringdom, PaymentConductor, News Kingdom, `data/schema.sql` v4.

Задайте режим и подключение в `.env.local`:

{`DB_BACKEND_MODE=k8s-postgres-fcm
DB_HOST=localhost
DB_PORT=5432
DB_NAME=ring_platform
DB_USER=ring_user
DB_PASSWORD=your_password
DB_SSL=false`}

Опционально: `DB_POOL_SIZE`, `DB_TIMEOUT`, `DB_RETRIES`.

Поднимите PostgreSQL **14+** (локально рекомендуется 18) — Docker `docker-compose.dev.yml`, Homebrew-bootstrap или ваш кластер.

Примените схему и миграции:

{`export DATABASE_URL="postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}"
./scripts/run-migration.sh`}

Полный порядок: [Database migrations](/docs/getting-started/migrations.md).

**FCM (опционально):** задайте `NEXT_PUBLIC_FIREBASE_*` + service account из `env.local.template`. Данные приложения остаются на Postgres.

> **Success**
> Managed Postgres без эксплуатации k8s — та же SQL-схема, что и у других production-клонов.

Создайте проект Supabase; зафиксируйте URL + service role key.

{`DB_BACKEND_MODE=supabase-fcm
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your_service_role_key`}

Примените [migrations](/docs/getting-started/migrations.md) к подключению Supabase Postgres.

Опционально: `NEXT_PUBLIC_TUNNEL_TRANSPORT=supabase` для Realtime — ортогонально к `DB_BACKEND_MODE`.

> **Warning**
> Только для прототипирования — PaymentConductor и большинство фич v1.6 ожидают PostgreSQL.

Создайте проект Firebase (Firestore, Auth, Storage по необходимости).

{`DB_BACKEND_MODE=firebase-full
AUTH_FIREBASE_PROJECT_ID=your-project-id
AUTH_FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\\n..."
AUTH_FIREBASE_CLIENT_EMAIL=firebase-adminsdk@...`}

На Firestore нет `data/schema.sql` — спланируйте миграцию на `k8s-postgres-fcm` до масштабирования.

## Что не использовать

| Legacy / invalid | Replacement |
|------------------|-------------|
| `DATABASE_MODE=firebase_only` / `postgresql_only` | значения `DB_BACKEND_MODE` выше |
| `npm run db:migrate` / `db:backup` | `./scripts/run-migration.sh`, `pg_dump` |
| `DB_HYBRID_MODE` как основной переключатель | `DB_BACKEND_MODE` — см. страницу architecture |

## Смена режима позже

Экспортируйте данные из источника (Firestore export или `pg_dump`).

Поднимите целевой Postgres; примените [migrations](/docs/getting-started/migrations.md).

Обновите `DB_BACKEND_MODE` и секреты подключения на staging.

Smoke-тест auth, store, payments, news перед cutover в production.

**Чеклист перед запуском (Postgres-primary):**

- [ ] `DB_BACKEND_MODE` задан — приложение стартует чисто
- [ ] `data/schema.sql` + kingdom-миграции применены
- [ ] Настроены бэкапы (`pg_dump`, CNPG, снимки провайдера)
- [ ] Переменные FCM — только если нужен push
- [ ] `004_payment_transactions.sql`, если используете payments

`DatabaseService` держит код приложения backend-agnostic — **данные** всё равно мигрируют осознанно. Auth-таблицы: `lib/auth/postgres-adapter.ts`. Валидация конфига: `validateBackendModeConfig()` в `backend-mode-config.ts`.

  
- **[Environment config](/docs/deployment/environment.md)** — Группы секретов и переменные локалей

  
- **[Payment integration](/docs/customization/payment-integration.md)** — Требует Postgres ledger

  
- **[Quick Start (new clone)](/docs/customization/quick-start.md)** — Один деплой на клиента — паттерн Ringdom
