Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)

    Documentation

    Концепції, цінність і типові сценарії

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Інтеграція платежів
    Інтеграція WayForPay
    Web3 Гаманець
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Система Стейкінга Токенів
    Сутності
    Можливості
    Повідомлення
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Протокол Tunnel
    Authentication
    Безпека та відповідність
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Білий лейбл
    Інтеграція Web3
    Реальні приклади
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Web3
    Token launch jurisdictions
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та аналітика
    Оптимізація продуктивності
    Резервне копіювання та відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Архітектура PaymentConductor
    Розробка
    Ring MCP Server

    Швидкий вхід (CTO · аудитори · агенти)

    Вітаємо — місія та аудиторії
    Швидкий довідник
    Початок роботи
    Архітектура та Auth.js
    Режими бекенду та БД (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Деплой (Docker · k8s)
    Безпека та відповідність
    ringdom.org — база LegioX
    Код — ліцензія MIT (GitHub)
    1. Документація
    2. /Розробка
    3. /Розгортання

    Оновлено 28 черв. 2026 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Документація
    2. /Розробка
    3. /Розгортання

    Оновлено 28 черв. 2026 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Документація
    2. /Розробка
    3. /Розгортання

    Оновлено 28 черв. 2026 р.5 хв прослуховування

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    Посібник з розгортання

    Ring Platform підтримує три цільові середовища розгортання: k3s кластер (продакшн), Vercel (попередній перегляд) та Docker (саморозміщення). Платформа використовує уніфіковану конфігурацію середовища; лише DB_BACKEND_MODE та RING_DEPLOY_TARGET змінюються залежно від цільового середовища.

    Ця сторінка є оглядом стратегії розгортання. Покрокові інструкції дивіться на відповідних сторінках: Vercel, Docker, Self-hosted та Конфігурація середовища.

    Вибір цільового середовища розгортання

    k3s кластер (продакшн — рекомендовано)

    Основним продакшн цільовим середовищем є Kubernetes кластер (5.161.246.54). Усі клони імперії Ringdom працюють на цьому кластері.

    • Повноцінний PostgreSQL з нативним WSS Tunnel (TUNNEL_HUB_MODE=k8s-postgres)
    • Усі функції реального часу (обмін повідомленнями, спільна робота, живі сповіщення)
    • WayForPay платіжні вебхуки
    • Cron завдання для очищення імен користувачів, майнінгу рефкодів

    Vercel (попередній перегляд)

    Vercel підходить для попереднього перегляду розгортань та швидкого прототипування. Безсерверні обробники маршрутів працюють на Vercel Edge — власний сервер (server.ts) не використовується, тому нативний WebSocket Tunnel недоступний. Tunnel переходить на SSE + довге опитування.

    • Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    • Використовуйте DB_BACKEND_MODE=firebase-full (Firestore) або k8s-postgres-fcm (потребує доступного PostgreSQL хоста)
    • WayForPay вебхуки потребують публічної кінцевої точки — функції Vercel обробляють це нативно

    Docker (саморозміщення)

    Розгортання Docker задокументовано для самостійного розміщення спільнотою (OSS репозиторій). Dockerfile створює продакшн образ із власним сервером (server.ts) та підтримкою нативного WSS Tunnel. PostgreSQL працює як супутній контейнер або зовнішній сервіс.

    • Повна паритетність функцій із k3s розгортанням
    • PostgreSQL є обов'язковим (DB_BACKEND_MODE=k8s-postgres-fcm)
    • Дивіться Розгортання Docker та Саморозміщення

    Стратегія змінних середовища

    Єдиним джерелом істини для всіх змінних середовища є env.local.template у корені репозиторію. Ключові рішення:

    ЗміннаПризначення
    DB_BACKEND_MODEАдаптер бази даних: k8s-postgres-fcm (рекомендовано), firebase-full або supabase-fcm
    RING_DEPLOY_TARGETРежим Tunnel та середовища виконання: k8s, vercel або self-hosted
    AUTH_SECRETШифрування сесій Auth.js (згенерувати за допомогою openssl rand -base64 32)
    AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRETОблікові дані Google OAuth

    Повний довідник змінних дивіться в Конфігурація середовища.

    Ніколи не комітьте реальні секрети в Git. Скопіюйте env.local.template у .env.local (входить до gitignore) і заповніть продакшн значеннями. На k3s інжектуйте секрети через Kubernetes secrets; на Vercel використовуйте змінні середовища панелі керування Vercel.

    Передумови для всіх цільових середовищ

    • Node.js 20+ (22 рекомендовано)
    • npm або pnpm
    • Екземпляр PostgreSQL (для режимів k8s-postgres-fcm та supabase-fcm)
    • Firebase проєкт (необов'язково — лише якщо потрібні FCM push-сповіщення)

    Цільові середовища розгортання

    1. k3s кластер (продакшн)

    Продакшн k3s кластер використовує Kubernetes маніфести (не включені в публічний OSS репозиторій). Розгортання керується через Ring CLI та CI/CD конвеєр.

    Необхідні змінні середовища для продакшну:

    У продакшні чутливі значення інжектуються через Kubernetes secrets під час виконання, а не вбудовуються в Docker образ.

    2. Vercel

    Розгортання Vercel використовує безсерверні обробники маршрутів. Власний сервер (server.ts) не використовується — Tunnel працює в режимі SSE + довге опитування.

    vercel.json (платформа постачається з цим файлом):

    Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel у панелі керування Vercel. Без цього Tunnel може намагатися ініціалізувати нативний WebSocket, який недоступний у безсерверному середовищі.

    Кроки:

    1. Запуште репозиторій на GitHub
    2. Імпортуйте проєкт у Vercel
    3. Встановіть змінні середовища в панелі керування Vercel (усі DB_*, AUTH_*, NEXT_PUBLIC_*, WAYFORPAY_* тощо)
    4. Розгорніть основну гілку

    Деталі дивіться в Розгортання Vercel.

    Пов'язана документація

    Environment configuration

    Vercel deployment

    Docker deployment

    Self-hosted deployment

    Backend modes and databases

    Local setup

    Посібник з розгортання

    Ring Platform підтримує три цільові середовища розгортання: k3s кластер (продакшн), Vercel (попередній перегляд) та Docker (саморозміщення). Платформа використовує уніфіковану конфігурацію середовища; лише DB_BACKEND_MODE та RING_DEPLOY_TARGET змінюються залежно від цільового середовища.

    Ця сторінка є оглядом стратегії розгортання. Покрокові інструкції дивіться на відповідних сторінках: Vercel, Docker, Self-hosted та Конфігурація середовища.

    Вибір цільового середовища розгортання

    k3s кластер (продакшн — рекомендовано)

    Основним продакшн цільовим середовищем є Kubernetes кластер (5.161.246.54). Усі клони імперії Ringdom працюють на цьому кластері.

    • Повноцінний PostgreSQL з нативним WSS Tunnel (TUNNEL_HUB_MODE=k8s-postgres)
    • Усі функції реального часу (обмін повідомленнями, спільна робота, живі сповіщення)
    • WayForPay платіжні вебхуки
    • Cron завдання для очищення імен користувачів, майнінгу рефкодів

    Vercel (попередній перегляд)

    Vercel підходить для попереднього перегляду розгортань та швидкого прототипування. Безсерверні обробники маршрутів працюють на Vercel Edge — власний сервер (server.ts) не використовується, тому нативний WebSocket Tunnel недоступний. Tunnel переходить на SSE + довге опитування.

    • Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    • Використовуйте DB_BACKEND_MODE=firebase-full (Firestore) або k8s-postgres-fcm (потребує доступного PostgreSQL хоста)
    • WayForPay вебхуки потребують публічної кінцевої точки — функції Vercel обробляють це нативно

    Docker (саморозміщення)

    Розгортання Docker задокументовано для самостійного розміщення спільнотою (OSS репозиторій). Dockerfile створює продакшн образ із власним сервером (server.ts) та підтримкою нативного WSS Tunnel. PostgreSQL працює як супутній контейнер або зовнішній сервіс.

    • Повна паритетність функцій із k3s розгортанням
    • PostgreSQL є обов'язковим (DB_BACKEND_MODE=k8s-postgres-fcm)
    • Дивіться Розгортання Docker та Саморозміщення

    Стратегія змінних середовища

    Єдиним джерелом істини для всіх змінних середовища є env.local.template у корені репозиторію. Ключові рішення:

    ЗміннаПризначення
    DB_BACKEND_MODEАдаптер бази даних: k8s-postgres-fcm (рекомендовано), firebase-full або supabase-fcm
    RING_DEPLOY_TARGETРежим Tunnel та середовища виконання: k8s, vercel або self-hosted
    AUTH_SECRETШифрування сесій Auth.js (згенерувати за допомогою openssl rand -base64 32)
    AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRETОблікові дані Google OAuth

    Повний довідник змінних дивіться в Конфігурація середовища.

    Ніколи не комітьте реальні секрети в Git. Скопіюйте env.local.template у .env.local (входить до gitignore) і заповніть продакшн значеннями. На k3s інжектуйте секрети через Kubernetes secrets; на Vercel використовуйте змінні середовища панелі керування Vercel.

    Передумови для всіх цільових середовищ

    • Node.js 20+ (22 рекомендовано)
    • npm або pnpm
    • Екземпляр PostgreSQL (для режимів k8s-postgres-fcm та supabase-fcm)
    • Firebase проєкт (необов'язково — лише якщо потрібні FCM push-сповіщення)

    Цільові середовища розгортання

    1. k3s кластер (продакшн)

    Продакшн k3s кластер використовує Kubernetes маніфести (не включені в публічний OSS репозиторій). Розгортання керується через Ring CLI та CI/CD конвеєр.

    Необхідні змінні середовища для продакшну:

    У продакшні чутливі значення інжектуються через Kubernetes secrets під час виконання, а не вбудовуються в Docker образ.

    2. Vercel

    Розгортання Vercel використовує безсерверні обробники маршрутів. Власний сервер (server.ts) не використовується — Tunnel працює в режимі SSE + довге опитування.

    vercel.json (платформа постачається з цим файлом):

    Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel у панелі керування Vercel. Без цього Tunnel може намагатися ініціалізувати нативний WebSocket, який недоступний у безсерверному середовищі.

    Кроки:

    1. Запуште репозиторій на GitHub
    2. Імпортуйте проєкт у Vercel
    3. Встановіть змінні середовища в панелі керування Vercel (усі DB_*, AUTH_*, NEXT_PUBLIC_*, WAYFORPAY_* тощо)
    4. Розгорніть основну гілку

    Деталі дивіться в Розгортання Vercel.

    Пов'язана документація

    Environment configuration

    Vercel deployment

    Docker deployment

    Self-hosted deployment

    Backend modes and databases

    Local setup

    Посібник з розгортання

    Ring Platform підтримує три цільові середовища розгортання: k3s кластер (продакшн), Vercel (попередній перегляд) та Docker (саморозміщення). Платформа використовує уніфіковану конфігурацію середовища; лише DB_BACKEND_MODE та RING_DEPLOY_TARGET змінюються залежно від цільового середовища.

    Ця сторінка є оглядом стратегії розгортання. Покрокові інструкції дивіться на відповідних сторінках: Vercel, Docker, Self-hosted та Конфігурація середовища.

    Вибір цільового середовища розгортання

    k3s кластер (продакшн — рекомендовано)

    Основним продакшн цільовим середовищем є Kubernetes кластер (5.161.246.54). Усі клони імперії Ringdom працюють на цьому кластері.

    • Повноцінний PostgreSQL з нативним WSS Tunnel (TUNNEL_HUB_MODE=k8s-postgres)
    • Усі функції реального часу (обмін повідомленнями, спільна робота, живі сповіщення)
    • WayForPay платіжні вебхуки
    • Cron завдання для очищення імен користувачів, майнінгу рефкодів

    Vercel (попередній перегляд)

    Vercel підходить для попереднього перегляду розгортань та швидкого прототипування. Безсерверні обробники маршрутів працюють на Vercel Edge — власний сервер (server.ts) не використовується, тому нативний WebSocket Tunnel недоступний. Tunnel переходить на SSE + довге опитування.

    • Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel
    • Використовуйте DB_BACKEND_MODE=firebase-full (Firestore) або k8s-postgres-fcm (потребує доступного PostgreSQL хоста)
    • WayForPay вебхуки потребують публічної кінцевої точки — функції Vercel обробляють це нативно

    Docker (саморозміщення)

    Розгортання Docker задокументовано для самостійного розміщення спільнотою (OSS репозиторій). Dockerfile створює продакшн образ із власним сервером (server.ts) та підтримкою нативного WSS Tunnel. PostgreSQL працює як супутній контейнер або зовнішній сервіс.

    • Повна паритетність функцій із k3s розгортанням
    • PostgreSQL є обов'язковим (DB_BACKEND_MODE=k8s-postgres-fcm)
    • Дивіться Розгортання Docker та Саморозміщення

    Стратегія змінних середовища

    Єдиним джерелом істини для всіх змінних середовища є env.local.template у корені репозиторію. Ключові рішення:

    ЗміннаПризначення
    DB_BACKEND_MODEАдаптер бази даних: k8s-postgres-fcm (рекомендовано), firebase-full або supabase-fcm
    RING_DEPLOY_TARGETРежим Tunnel та середовища виконання: k8s, vercel або self-hosted
    AUTH_SECRETШифрування сесій Auth.js (згенерувати за допомогою openssl rand -base64 32)
    AUTH_GOOGLE_ID / AUTH_GOOGLE_SECRETОблікові дані Google OAuth

    Повний довідник змінних дивіться в Конфігурація середовища.

    Ніколи не комітьте реальні секрети в Git. Скопіюйте env.local.template у .env.local (входить до gitignore) і заповніть продакшн значеннями. На k3s інжектуйте секрети через Kubernetes secrets; на Vercel використовуйте змінні середовища панелі керування Vercel.

    Передумови для всіх цільових середовищ

    • Node.js 20+ (22 рекомендовано)
    • npm або pnpm
    • Екземпляр PostgreSQL (для режимів k8s-postgres-fcm та supabase-fcm)
    • Firebase проєкт (необов'язково — лише якщо потрібні FCM push-сповіщення)

    Цільові середовища розгортання

    1. k3s кластер (продакшн)

    Продакшн k3s кластер використовує Kubernetes маніфести (не включені в публічний OSS репозиторій). Розгортання керується через Ring CLI та CI/CD конвеєр.

    Необхідні змінні середовища для продакшну:

    У продакшні чутливі значення інжектуються через Kubernetes secrets під час виконання, а не вбудовуються в Docker образ.

    2. Vercel

    Розгортання Vercel використовує безсерверні обробники маршрутів. Власний сервер (server.ts) не використовується — Tunnel працює в режимі SSE + довге опитування.

    vercel.json (платформа постачається з цим файлом):

    Встановіть RING_DEPLOY_TARGET=vercel та NEXT_PUBLIC_RING_DEPLOY_TARGET=vercel у панелі керування Vercel. Без цього Tunnel може намагатися ініціалізувати нативний WebSocket, який недоступний у безсерверному середовищі.

    Кроки:

    1. Запуште репозиторій на GitHub
    2. Імпортуйте проєкт у Vercel
    3. Встановіть змінні середовища в панелі керування Vercel (усі DB_*, AUTH_*, NEXT_PUBLIC_*, WAYFORPAY_* тощо)
    4. Розгорніть основну гілку

    Деталі дивіться в Розгортання Vercel.

    Пов'язана документація

    Environment configuration

    Vercel deployment

    Docker deployment

    Self-hosted deployment

    Backend modes and databases

    Local setup

    3. Docker (саморозміщення)

    Dockerfile створює багатостадійний продакшн образ із власним сервером та нативним WSS Tunnel. Він використовує dumb-init як точку входу та виконує перевірку стану на /api/health.

    Збірка:

    Лише безпечні для часу збірки змінні (NEXT_PUBLIC_*, DB_BACKEND_MODE) слід передавати як build args. Чутливі секрети (AUTH_GOOGLE_SECRET, DB_PASSWORD, WAYFORPAY_SECRET_KEY) інжектуються під час виконання через змінні середовища або менеджери секретів.

    Запуск:

    Дивіться Розгортання Docker для конфігурації docker-compose та налаштування PostGIS, а також Саморозміщення для OSS налаштування спільноти за допомогою install.sh.

    Налаштування бази даних для різних цільових середовищ

    Платформа використовує єдиний рівень абстракції бази даних через getDatabaseService() (див. lib/database/DatabaseService.ts). Активний адаптер обирається за допомогою DB_BACKEND_MODE:

    • k8s-postgres-fcm — PostgreSQL для всіх CRUD, Firebase Admin SDK лише для FCM push. Рекомендовано для продакшну та локальної розробки.
    • firebase-full — Firestore (Firebase) для всіх CRUD. Найшвидше налаштування для прототипування та Vercel.
    • supabase-fcm — Supabase PostgreSQL для бази даних, Firebase Admin SDK лише для FCM push.

    Глибоке порівняння дивіться в Режими бекенду та бази даних.

    Firestore client SDK (db.collection(...).doc(...).get()) не використовується в цій платформі. Увесь доступ до бази даних відбувається через getDatabaseService() з методами findById(collection, id), create(collection, data), update(collection, id, data), delete(collection, id) та query({ collection, filters?, orderBy?, pagination? }).

    Усунення неполадок

    Збій збірки з помилками TypeScript

    Очистіть кеш та повторіть спробу:

    Сесія Auth.js не працює

    Переконайтеся, що AUTH_SECRET встановлено та є однаковим у всіх розгортаннях. Auth.js v5 використовує AUTH_SECRET (не NEXTAUTH_SECRET). Змінні Google OAuth: AUTH_GOOGLE_ID та AUTH_GOOGLE_SECRET (не GOOGLE_CLIENT_ID).

    Відмовлено у з'єднанні з базою даних

    Перевірте, чи PostgreSQL доступний з цільового середовища розгортання:

    Переконайтеся, що DB_HOST, DB_PORT, DB_NAME, DB_USER та DB_PASSWORD відповідають вашій конфігурації PostgreSQL.

    Tunnel / WebSocket не підключається

    Переконайтеся, що RING_DEPLOY_TARGET та NEXT_PUBLIC_RING_DEPLOY_TARGET встановлено. На Vercel нативний WebSocket недоступний — Tunnel автоматично переходить на SSE + довге опитування. На k3s або Docker переконайтеся, що TUNNEL_HUB_MODE=k8s-postgres встановлено.

    bash
    
    # База даних
    DB_BACKEND_MODE=k8s-postgres-fcm
    DB_HOST=postgres.ring-platform-org.svc.cluster.local
    DB_PORT=5432
    DB_NAME=ring_platform
    DB_USER=ring_user
    DB_PASSWORD=<from-k8s-secret>
    DB_SSL=true
    DB_POOL_SIZE=20
    DB_TIMEOUT=30000
    
    # Auth.js
    AUTH_SECRET=<from-k8s-secret>
    AUTH_GOOGLE_ID=<from-k8s-secret>
    AUTH_GOOGLE_SECRET=<from-k8s-secret>
    
    # Tunnel
    RING_DEPLOY_TARGET=k8s
    NEXT_PUBLIC_RING_DEPLOY_TARGET=k8s
    TUNNEL_HUB_MODE=k8s-postgres
    
    # Firebase Admin (FCM лише — необов'язково)
    AUTH_FIREBASE_PROJECT_ID=<your-project-id>
    AUTH_FIREBASE_CLIENT_EMAIL=<your-service-account-email>
    AUTH_FIREBASE_PRIVATE_KEY="<your-private-key>"
    
    # Платежі
    WAYFORPAY_MERCHANT_ACCOUNT=<from-k8s-secret>
    WAYFORPAY_SECRET_KEY=<from-k8s-secret>
    json
    
    {
      "crons": [
        {
          "path": "/api/cron/cleanup-usernames",
          "schedule": "*/5 * * * *"
        }
      ]
    }

    3. Docker (саморозміщення)

    Dockerfile створює багатостадійний продакшн образ із власним сервером та нативним WSS Tunnel. Він використовує dumb-init як точку входу та виконує перевірку стану на /api/health.

    Збірка:

    Лише безпечні для часу збірки змінні (NEXT_PUBLIC_*, DB_BACKEND_MODE) слід передавати як build args. Чутливі секрети (AUTH_GOOGLE_SECRET, DB_PASSWORD, WAYFORPAY_SECRET_KEY) інжектуються під час виконання через змінні середовища або менеджери секретів.

    Запуск:

    Дивіться Розгортання Docker для конфігурації docker-compose та налаштування PostGIS, а також Саморозміщення для OSS налаштування спільноти за допомогою install.sh.

    Налаштування бази даних для різних цільових середовищ

    Платформа використовує єдиний рівень абстракції бази даних через getDatabaseService() (див. lib/database/DatabaseService.ts). Активний адаптер обирається за допомогою DB_BACKEND_MODE:

    • k8s-postgres-fcm — PostgreSQL для всіх CRUD, Firebase Admin SDK лише для FCM push. Рекомендовано для продакшну та локальної розробки.
    • firebase-full — Firestore (Firebase) для всіх CRUD. Найшвидше налаштування для прототипування та Vercel.
    • supabase-fcm — Supabase PostgreSQL для бази даних, Firebase Admin SDK лише для FCM push.

    Глибоке порівняння дивіться в Режими бекенду та бази даних.

    Firestore client SDK (db.collection(...).doc(...).get()) не використовується в цій платформі. Увесь доступ до бази даних відбувається через getDatabaseService() з методами findById(collection, id), create(collection, data), update(collection, id, data), delete(collection, id) та query({ collection, filters?, orderBy?, pagination? }).

    Усунення неполадок

    Збій збірки з помилками TypeScript

    Очистіть кеш та повторіть спробу:

    Сесія Auth.js не працює

    Переконайтеся, що AUTH_SECRET встановлено та є однаковим у всіх розгортаннях. Auth.js v5 використовує AUTH_SECRET (не NEXTAUTH_SECRET). Змінні Google OAuth: AUTH_GOOGLE_ID та AUTH_GOOGLE_SECRET (не GOOGLE_CLIENT_ID).

    Відмовлено у з'єднанні з базою даних

    Перевірте, чи PostgreSQL доступний з цільового середовища розгортання:

    Переконайтеся, що DB_HOST, DB_PORT, DB_NAME, DB_USER та DB_PASSWORD відповідають вашій конфігурації PostgreSQL.

    Tunnel / WebSocket не підключається

    Переконайтеся, що RING_DEPLOY_TARGET та NEXT_PUBLIC_RING_DEPLOY_TARGET встановлено. На Vercel нативний WebSocket недоступний — Tunnel автоматично переходить на SSE + довге опитування. На k3s або Docker переконайтеся, що TUNNEL_HUB_MODE=k8s-postgres встановлено.

    bash
    
    # База даних
    DB_BACKEND_MODE=k8s-postgres-fcm
    DB_HOST=postgres.ring-platform-org.svc.cluster.local
    DB_PORT=5432
    DB_NAME=ring_platform
    DB_USER=ring_user
    DB_PASSWORD=<from-k8s-secret>
    DB_SSL=true
    DB_POOL_SIZE=20
    DB_TIMEOUT=30000
    
    # Auth.js
    AUTH_SECRET=<from-k8s-secret>
    AUTH_GOOGLE_ID=<from-k8s-secret>
    AUTH_GOOGLE_SECRET=<from-k8s-secret>
    
    # Tunnel
    RING_DEPLOY_TARGET=k8s
    NEXT_PUBLIC_RING_DEPLOY_TARGET=k8s
    TUNNEL_HUB_MODE=k8s-postgres
    
    # Firebase Admin (FCM лише — необов'язково)
    AUTH_FIREBASE_PROJECT_ID=<your-project-id>
    AUTH_FIREBASE_CLIENT_EMAIL=<your-service-account-email>
    AUTH_FIREBASE_PRIVATE_KEY="<your-private-key>"
    
    # Платежі
    WAYFORPAY_MERCHANT_ACCOUNT=<from-k8s-secret>
    WAYFORPAY_SECRET_KEY=<from-k8s-secret>
    json
    
    {
      "crons": [
        {
          "path": "/api/cron/cleanup-usernames",
          "schedule": "*/5 * * * *"
        }
      ]
    }

    3. Docker (саморозміщення)

    Dockerfile створює багатостадійний продакшн образ із власним сервером та нативним WSS Tunnel. Він використовує dumb-init як точку входу та виконує перевірку стану на /api/health.

    Збірка:

    Лише безпечні для часу збірки змінні (NEXT_PUBLIC_*, DB_BACKEND_MODE) слід передавати як build args. Чутливі секрети (AUTH_GOOGLE_SECRET, DB_PASSWORD, WAYFORPAY_SECRET_KEY) інжектуються під час виконання через змінні середовища або менеджери секретів.

    Запуск:

    Дивіться Розгортання Docker для конфігурації docker-compose та налаштування PostGIS, а також Саморозміщення для OSS налаштування спільноти за допомогою install.sh.

    Налаштування бази даних для різних цільових середовищ

    Платформа використовує єдиний рівень абстракції бази даних через getDatabaseService() (див. lib/database/DatabaseService.ts). Активний адаптер обирається за допомогою DB_BACKEND_MODE:

    • k8s-postgres-fcm — PostgreSQL для всіх CRUD, Firebase Admin SDK лише для FCM push. Рекомендовано для продакшну та локальної розробки.
    • firebase-full — Firestore (Firebase) для всіх CRUD. Найшвидше налаштування для прототипування та Vercel.
    • supabase-fcm — Supabase PostgreSQL для бази даних, Firebase Admin SDK лише для FCM push.

    Глибоке порівняння дивіться в Режими бекенду та бази даних.

    Firestore client SDK (db.collection(...).doc(...).get()) не використовується в цій платформі. Увесь доступ до бази даних відбувається через getDatabaseService() з методами findById(collection, id), create(collection, data), update(collection, id, data), delete(collection, id) та query({ collection, filters?, orderBy?, pagination? }).

    Усунення неполадок

    Збій збірки з помилками TypeScript

    Очистіть кеш та повторіть спробу:

    Сесія Auth.js не працює

    Переконайтеся, що AUTH_SECRET встановлено та є однаковим у всіх розгортаннях. Auth.js v5 використовує AUTH_SECRET (не NEXTAUTH_SECRET). Змінні Google OAuth: AUTH_GOOGLE_ID та AUTH_GOOGLE_SECRET (не GOOGLE_CLIENT_ID).

    Відмовлено у з'єднанні з базою даних

    Перевірте, чи PostgreSQL доступний з цільового середовища розгортання:

    Переконайтеся, що DB_HOST, DB_PORT, DB_NAME, DB_USER та DB_PASSWORD відповідають вашій конфігурації PostgreSQL.

    Tunnel / WebSocket не підключається

    Переконайтеся, що RING_DEPLOY_TARGET та NEXT_PUBLIC_RING_DEPLOY_TARGET встановлено. На Vercel нативний WebSocket недоступний — Tunnel автоматично переходить на SSE + довге опитування. На k3s або Docker переконайтеся, що TUNNEL_HUB_MODE=k8s-postgres встановлено.

    bash
    
    # База даних
    DB_BACKEND_MODE=k8s-postgres-fcm
    DB_HOST=postgres.ring-platform-org.svc.cluster.local
    DB_PORT=5432
    DB_NAME=ring_platform
    DB_USER=ring_user
    DB_PASSWORD=<from-k8s-secret>
    DB_SSL=true
    DB_POOL_SIZE=20
    DB_TIMEOUT=30000
    
    # Auth.js
    AUTH_SECRET=<from-k8s-secret>
    AUTH_GOOGLE_ID=<from-k8s-secret>
    AUTH_GOOGLE_SECRET=<from-k8s-secret>
    
    # Tunnel
    RING_DEPLOY_TARGET=k8s
    NEXT_PUBLIC_RING_DEPLOY_TARGET=k8s
    TUNNEL_HUB_MODE=k8s-postgres
    
    # Firebase Admin (FCM лише — необов'язково)
    AUTH_FIREBASE_PROJECT_ID=<your-project-id>
    AUTH_FIREBASE_CLIENT_EMAIL=<your-service-account-email>
    AUTH_FIREBASE_PRIVATE_KEY="<your-private-key>"
    
    # Платежі
    WAYFORPAY_MERCHANT_ACCOUNT=<from-k8s-secret>
    WAYFORPAY_SECRET_KEY=<from-k8s-secret>
    json
    
    {
      "crons": [
        {
          "path": "/api/cron/cleanup-usernames",
          "schedule": "*/5 * * * *"
        }
      ]
    }
    bash
    
    docker build \
      --platform linux/amd64 \
      --build-arg AUTH_SECRET="your-auth-secret" \
      --build-arg DB_BACKEND_MODE=k8s-postgres-fcm \
      --build-arg DB_HOST=postgres.example.com \
      --build-arg DB_PORT=5432 \
      --build-arg DB_NAME=ring_platform \
      --build-arg DB_USER=ring_user \
      --build-arg NEXT_PUBLIC_APP_URL=https://your-domain.com \
      --build-arg NEXT_PUBLIC_API_URL=https://your-domain.com \
      -t ring-platform .
    bash
    
    docker run -d \
      -p 3000:3000 \
      -e AUTH_SECRET=<from-secret-store> \
      -e AUTH_GOOGLE_ID=<from-secret-store> \
      -e AUTH_GOOGLE_SECRET=<from-secret-store> \
      -e DB_BACKEND_MODE=k8s-postgres-fcm \
      -e DB_HOST=postgres.example.com \
      -e DB_PORT=5432 \
      -e DB_NAME=ring_platform \
      -e DB_USER=ring_user \
      -e DB_PASSWORD=<from-secret-store> \
      -e DB_SSL=true \
      -e RING_DEPLOY_TARGET=self-hosted \
      -e NEXT_PUBLIC_RING_DEPLOY_TARGET=self-hosted \
      ring-platform
    bash
    
    # Перевірка з'єднання з базою даних (будь-який режим)
    # Використовує getDatabaseService() — НЕ Firebase client SDK
    # lib/firebase.ts не існує в цій кодовій базі
    bash
    
    rm -rf .next node_modules
    npm install
    npm run type-check
    npm run build
    bash
    
    # З k3s pod
    kubectl exec deploy/ring-platform -- wget -qO- http://postgres:5432
    
    # З Docker
    docker exec ring-platform nc -zv postgres.example.com 5432
    bash
    
    docker build \
      --platform linux/amd64 \
      --build-arg AUTH_SECRET="your-auth-secret" \
      --build-arg DB_BACKEND_MODE=k8s-postgres-fcm \
      --build-arg DB_HOST=postgres.example.com \
      --build-arg DB_PORT=5432 \
      --build-arg DB_NAME=ring_platform \
      --build-arg DB_USER=ring_user \
      --build-arg NEXT_PUBLIC_APP_URL=https://your-domain.com \
      --build-arg NEXT_PUBLIC_API_URL=https://your-domain.com \
      -t ring-platform .
    bash
    
    docker run -d \
      -p 3000:3000 \
      -e AUTH_SECRET=<from-secret-store> \
      -e AUTH_GOOGLE_ID=<from-secret-store> \
      -e AUTH_GOOGLE_SECRET=<from-secret-store> \
      -e DB_BACKEND_MODE=k8s-postgres-fcm \
      -e DB_HOST=postgres.example.com \
      -e DB_PORT=5432 \
      -e DB_NAME=ring_platform \
      -e DB_USER=ring_user \
      -e DB_PASSWORD=<from-secret-store> \
      -e DB_SSL=true \
      -e RING_DEPLOY_TARGET=self-hosted \
      -e NEXT_PUBLIC_RING_DEPLOY_TARGET=self-hosted \
      ring-platform
    bash
    
    # Перевірка з'єднання з базою даних (будь-який режим)
    # Використовує getDatabaseService() — НЕ Firebase client SDK
    # lib/firebase.ts не існує в цій кодовій базі
    bash
    
    rm -rf .next node_modules
    npm install
    npm run type-check
    npm run build
    bash
    
    # З k3s pod
    kubectl exec deploy/ring-platform -- wget -qO- http://postgres:5432
    
    # З Docker
    docker exec ring-platform nc -zv postgres.example.com 5432
    bash
    
    docker build \
      --platform linux/amd64 \
      --build-arg AUTH_SECRET="your-auth-secret" \
      --build-arg DB_BACKEND_MODE=k8s-postgres-fcm \
      --build-arg DB_HOST=postgres.example.com \
      --build-arg DB_PORT=5432 \
      --build-arg DB_NAME=ring_platform \
      --build-arg DB_USER=ring_user \
      --build-arg NEXT_PUBLIC_APP_URL=https://your-domain.com \
      --build-arg NEXT_PUBLIC_API_URL=https://your-domain.com \
      -t ring-platform .
    bash
    
    docker run -d \
      -p 3000:3000 \
      -e AUTH_SECRET=<from-secret-store> \
      -e AUTH_GOOGLE_ID=<from-secret-store> \
      -e AUTH_GOOGLE_SECRET=<from-secret-store> \
      -e DB_BACKEND_MODE=k8s-postgres-fcm \
      -e DB_HOST=postgres.example.com \
      -e DB_PORT=5432 \
      -e DB_NAME=ring_platform \
      -e DB_USER=ring_user \
      -e DB_PASSWORD=<from-secret-store> \
      -e DB_SSL=true \
      -e RING_DEPLOY_TARGET=self-hosted \
      -e NEXT_PUBLIC_RING_DEPLOY_TARGET=self-hosted \
      ring-platform
    bash
    
    # Перевірка з'єднання з базою даних (будь-який режим)
    # Використовує getDatabaseService() — НЕ Firebase client SDK
    # lib/firebase.ts не існує в цій кодовій базі
    bash
    
    rm -rf .next node_modules
    npm install
    npm run type-check
    npm run build
    bash
    
    # З k3s pod
    kubectl exec deploy/ring-platform -- wget -qO- http://postgres:5432
    
    # З Docker
    docker exec ring-platform nc -zv postgres.example.com 5432