МожливостіСутності
Документація
    Ring Platform

    Децентралізоване самобудівне майбутнє

    Увійти
    Сутності
    Можливості
    Магазин
    Документація
    Концепції
    RING ЕкономікаSonoratek LLCГлобальний впливAI зустрічає Web3
    Розпочати
    Швидкий стартКалькуляторДорожня карта
    Конфіденційність|Контакти
    v1.104.17|Sonoratek LLC

    Documentation

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

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    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
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    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
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    Повідомлення
    Завдання Ring
    WebRTC-дзвінки та STUNner TURN
    Ігри з друзями
    Модуль Новин - Цифровий Газетний Досвід
    Блоги учасників
    Сторінки публічного профілю
    Віджети профілю облікового запису
    Ring File Cabinet
    Система Резервування Імен Користувачів
    Науковий редактор
    Notifications
    Push-сповіщення через FCM (Ring)
    Email AI-CRM
    Ring Mailer і RingdomX Mail
    Протокол Tunnel
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Безпека та відповідність
    Консоль адміністратора
    Адмінська Wiki
    Керування через Telegram
    Система локалей
    Мобільний Досвід
    Паттерни Оптимізації Продуктивності
    Приклади
    Швидкий старт
    Базове налаштування
    Білий лейбл
    Користувацьке брендування
    Інтеграція Web3
    Реальні приклади
    Розширені функції
    Кастомізація
    Швидкий старт — ваш перший клон Ring
    Повний посібник налаштування
    Вертикальні пресети (SSOT)
    Ringization playbook
    Брендування
    Теми
    Функції
    Локалізація
    Налаштування токеноміки
    Інтеграція платіжних шлюзів
    Еталонні деплої Ring
    Конфігурація
    Публічні змінні середовища
    Секрети Order Lab
    Project ID WalletConnect (Reown Cloud)
    Підтримувані сервіси
    Вікі NODUS (знання проєкту)
    Плейбук конфігурації
    Web3
    Token launch jurisdictions
    Гаманець
    Поради з безпеки гаманця
    Інтеграції
    Ethereum гаманці (Wagmi v3)
    RingFileBase (API об’єктного сховища)
    Ring CDN (edge RingFileBase)
    Розгортання
    Self-hosted розгортання
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    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)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

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

    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
    1. Документація
    2. /Розробка
    3. /Розгортання

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

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

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

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

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