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

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

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

    Documentation

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

    Ласкаво просимо до Ring
    Швидкий довідник
    Початок роботи
    Передумови
    Встановлення
    Валідація першого успіху
    Наступні кроки
    Функції
    Магазин
    Склад і залишки
    Керування вендорами
    Комісії та розрахунки
    SubscriptionConductor
    PaymentConductor
    Ring Oracle
    Інтеграція платежів
    Публічні пули та DAO-банки
    Інтеграція WayForPay
    Web3 Гаманець
    WalletConductor
    Кредитні винагороди
    Партнерська та реферальна підтримка
    Реферальні коди (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Система Стейкінга Токенів
    Лабораторія проєкту власника (Owner Project Lab)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання 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)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (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)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання 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)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (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)
    Сутності
    Можливості
    AI Matcher
    Повідомлення
    Завдання 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)
    Розгортання
    Розгортання на власному сервері
    Vercel
    Docker
    Конфігурація Середовища
    Моніторинг та Аналітика
    Оптимізація продуктивності
    Резервне копіювання і відновлення
    Архітектура
    Data Model
    Security
    Real Time
    Синхронізація discovery після мутацій
    Архітектура PaymentConductor
    Архітектура WalletConductor
    Архітектура News Kingdom
    Бекенд Сервіси
    Інтеграція Firebase
    Розробка
    Ring MCP Server
    OSS і enterprise

    Швидкий вхід (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

    RingFileBase (API об’єктного сховища)

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Поєднуйте її з Ring CDN для публічної доставки завантажених об’єктів. Ring File Cabinet є повноцінним споживачем file() (getCabinetStorageConfig(), gallery derivativesProfile).

    RingFileBase — це власний контур об’єктного сховища Ring: Express API (ring-filebase-api), який приймає автентифіковані multipart-завантаження та записує їх у S3-сумісне сховище (MinIO або Ceph RGW). Застосунки Ring ніколи не звертаються до MinIO з браузера — вони викликають file().upload(...), а той вибирає RingBaseAdapter, коли провайдер сховища — ring_filebase.

    АспектRingFileBase (ця сторінка)Ring CDN
    РольАвтентифікований API записуПублічний edge читання
    Prod URLIn-cluster http://ring-filebase-api.ring-filebase.svc.cluster.localhttps://cdn.<your-domain>
    Dev / CI URLПублічний https://filebase-api.ring-platform.org (лише k3s-or або primary)Той самий CDN (кілька A-edge; master push до slave ingest)
    КлієнтServer-side file() / Server ActionsБраузери, <img>, OG-теги
    AuthBearer token (RINGBASE_API_TOKEN)Немає (GET /files/...)

    Джерело істини: записи завжди йдуть на k3s-or (Oregon). Потім API надсилає об’єкти до ingest endpoint-ів slave MinIO (Finland / Ukraine). Slave ніколи не забирають дані з master; pull CronJob-и вимкнено.

    SSOT провайдера (спільний)

    Порядок визначення в lib/storage/storage-config.ts (віддзеркалює db()):

    1. NEXT_PUBLIC_STORAGE_PROVIDER або STORAGE_PROVIDER
    2. ring-config.json → storage.provider
    3. За замовчуванням: local_storage (розробка) / vercel_blob (продакшн)
    Значення провайдераАдаптерКоли використовувати
    local_storageLocalStorageAdapterЛокальний npm run dev, завантаження на PVC
    vercel_blobVercelAdapterКлони на Vercel із BLOB_READ_WRITE_TOKEN
    ring_filebaseRingBaseAdapterSelf-hosted / Ringdom k8s з RingFileBase API
    firebase_storageУ selector повертається localНаразі не є повноцінним шляхом завантаження

    Чому це важливо для вашого клону

    Зображення продуктів, KYC-скани, вкладення чатів і результати ImageConductor потребують надійного місця зберігання. Vercel Blob підходить для невеликих OSS-демо; маркетплейсу, який володіє своїми даними, зазвичай потрібен RingFileBase, щоб медіа залишалися у вашому кластері, за вашим CDN-хостом і без рахунків Blob за кожен GB.

    Типові сценарії

    Локальна розробка

    Залиште storage.provider / env рівним local_storage — файли потраплятимуть у public/uploads (або на ваш PVC mount).

    Продакшн-маркетплейс

    Задайте ring_filebase, спрямовуйте RINGBASE_API_URL на внутрішньокластерний API, публікуйте URL через Ring CDN (див. Related нижче).

    File Cabinet

    Завантаження учасників викликають з MIME-лімітами cabinet/25MB; елементи публічної галереї повторно використовують CDN .

    Архітектура

    Перевірені модулі

    ШляхРоль
    lib/storage/storage-config.tsSSOT провайдера + getStorageConfig()
    lib/file/FileService.tsfile() / fileService.upload
    lib/file/FileSelector.tsМапа backend-ів; створює RingBaseAdapter із env
    lib/file/adapters/RingBaseAdapter.tsMultipart upload, delete, metadata, deriveDerivatives
    lib/images/derive-webp.tsНеобов’язковий WebP sibling; storage.webpDerivative.provider=ringbase

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

    Related documentation

    Ring CDN (RingFileBase edge)

    Наступний крок: публічний edge /files/..., мапа host→bucket і географічна доставка завантажених об’єктів.

    Ring File Cabinet

    Той самий процес: завантаження учасника /file-cabinet через file() + getCabinetStorageConfig; галерея використовує derivativesProfile gallery; subscriber+ /profile/shared — лише ACL (без власних завантажень).

    Environment Configuration

    Залежність: блок env сховища (RINGBASE_*) і передумови generative conductor.

    Backup & Recovery

    Див. також: object store — окремий ресурс резервного копіювання від Postgres.

    1. Документація
    2. /Інтеграції
    3. /RingFileBase (API об’єктного сховища)

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    RingFileBase (API об’єктного сховища)

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Поєднуйте її з Ring CDN для публічної доставки завантажених об’єктів. Ring File Cabinet є повноцінним споживачем file() (getCabinetStorageConfig(), gallery derivativesProfile).

    RingFileBase — це власний контур об’єктного сховища Ring: Express API (ring-filebase-api), який приймає автентифіковані multipart-завантаження та записує їх у S3-сумісне сховище (MinIO або Ceph RGW). Застосунки Ring ніколи не звертаються до MinIO з браузера — вони викликають file().upload(...), а той вибирає RingBaseAdapter, коли провайдер сховища — ring_filebase.

    АспектRingFileBase (ця сторінка)Ring CDN
    РольАвтентифікований API записуПублічний edge читання
    Prod URLIn-cluster http://ring-filebase-api.ring-filebase.svc.cluster.localhttps://cdn.<your-domain>
    Dev / CI URLПублічний https://filebase-api.ring-platform.org (лише k3s-or або primary)Той самий CDN (кілька A-edge; master push до slave ingest)
    КлієнтServer-side file() / Server ActionsБраузери, <img>, OG-теги
    AuthBearer token (RINGBASE_API_TOKEN)Немає (GET /files/...)

    Джерело істини: записи завжди йдуть на k3s-or (Oregon). Потім API надсилає об’єкти до ingest endpoint-ів slave MinIO (Finland / Ukraine). Slave ніколи не забирають дані з master; pull CronJob-и вимкнено.

    SSOT провайдера (спільний)

    Порядок визначення в lib/storage/storage-config.ts (віддзеркалює db()):

    1. NEXT_PUBLIC_STORAGE_PROVIDER або STORAGE_PROVIDER
    2. ring-config.json → storage.provider
    3. За замовчуванням: local_storage (розробка) / vercel_blob (продакшн)
    Значення провайдераАдаптерКоли використовувати
    local_storageLocalStorageAdapterЛокальний npm run dev, завантаження на PVC
    vercel_blobVercelAdapterКлони на Vercel із BLOB_READ_WRITE_TOKEN
    ring_filebaseRingBaseAdapterSelf-hosted / Ringdom k8s з RingFileBase API
    firebase_storageУ selector повертається localНаразі не є повноцінним шляхом завантаження

    Чому це важливо для вашого клону

    Зображення продуктів, KYC-скани, вкладення чатів і результати ImageConductor потребують надійного місця зберігання. Vercel Blob підходить для невеликих OSS-демо; маркетплейсу, який володіє своїми даними, зазвичай потрібен RingFileBase, щоб медіа залишалися у вашому кластері, за вашим CDN-хостом і без рахунків Blob за кожен GB.

    Типові сценарії

    Локальна розробка

    Залиште storage.provider / env рівним local_storage — файли потраплятимуть у public/uploads (або на ваш PVC mount).

    Продакшн-маркетплейс

    Задайте ring_filebase, спрямовуйте RINGBASE_API_URL на внутрішньокластерний API, публікуйте URL через Ring CDN (див. Related нижче).

    File Cabinet

    Завантаження учасників викликають з MIME-лімітами cabinet/25MB; елементи публічної галереї повторно використовують CDN .

    Архітектура

    Перевірені модулі

    ШляхРоль
    lib/storage/storage-config.tsSSOT провайдера + getStorageConfig()
    lib/file/FileService.tsfile() / fileService.upload
    lib/file/FileSelector.tsМапа backend-ів; створює RingBaseAdapter із env
    lib/file/adapters/RingBaseAdapter.tsMultipart upload, delete, metadata, deriveDerivatives
    lib/images/derive-webp.tsНеобов’язковий WebP sibling; storage.webpDerivative.provider=ringbase

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

    Related documentation

    Ring CDN (RingFileBase edge)

    Наступний крок: публічний edge /files/..., мапа host→bucket і географічна доставка завантажених об’єктів.

    Ring File Cabinet

    Той самий процес: завантаження учасника /file-cabinet через file() + getCabinetStorageConfig; галерея використовує derivativesProfile gallery; subscriber+ /profile/shared — лише ACL (без власних завантажень).

    Environment Configuration

    Залежність: блок env сховища (RINGBASE_*) і передумови generative conductor.

    Backup & Recovery

    Див. також: object store — окремий ресурс резервного копіювання від Postgres.

    1. Документація
    2. /Інтеграції
    3. /RingFileBase (API об’єктного сховища)

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    RingFileBase (API об’єктного сховища)

    Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Поєднуйте її з Ring CDN для публічної доставки завантажених об’єктів. Ring File Cabinet є повноцінним споживачем file() (getCabinetStorageConfig(), gallery derivativesProfile).

    RingFileBase — це власний контур об’єктного сховища Ring: Express API (ring-filebase-api), який приймає автентифіковані multipart-завантаження та записує їх у S3-сумісне сховище (MinIO або Ceph RGW). Застосунки Ring ніколи не звертаються до MinIO з браузера — вони викликають file().upload(...), а той вибирає RingBaseAdapter, коли провайдер сховища — ring_filebase.

    АспектRingFileBase (ця сторінка)Ring CDN
    РольАвтентифікований API записуПублічний edge читання
    Prod URLIn-cluster http://ring-filebase-api.ring-filebase.svc.cluster.localhttps://cdn.<your-domain>
    Dev / CI URLПублічний https://filebase-api.ring-platform.org (лише k3s-or або primary)Той самий CDN (кілька A-edge; master push до slave ingest)
    КлієнтServer-side file() / Server ActionsБраузери, <img>, OG-теги
    AuthBearer token (RINGBASE_API_TOKEN)Немає (GET /files/...)

    Джерело істини: записи завжди йдуть на k3s-or (Oregon). Потім API надсилає об’єкти до ingest endpoint-ів slave MinIO (Finland / Ukraine). Slave ніколи не забирають дані з master; pull CronJob-и вимкнено.

    SSOT провайдера (спільний)

    Порядок визначення в lib/storage/storage-config.ts (віддзеркалює db()):

    1. NEXT_PUBLIC_STORAGE_PROVIDER або STORAGE_PROVIDER
    2. ring-config.json → storage.provider
    3. За замовчуванням: local_storage (розробка) / vercel_blob (продакшн)
    Значення провайдераАдаптерКоли використовувати
    local_storageLocalStorageAdapterЛокальний npm run dev, завантаження на PVC
    vercel_blobVercelAdapterКлони на Vercel із BLOB_READ_WRITE_TOKEN
    ring_filebaseRingBaseAdapterSelf-hosted / Ringdom k8s з RingFileBase API
    firebase_storageУ selector повертається localНаразі не є повноцінним шляхом завантаження

    Чому це важливо для вашого клону

    Зображення продуктів, KYC-скани, вкладення чатів і результати ImageConductor потребують надійного місця зберігання. Vercel Blob підходить для невеликих OSS-демо; маркетплейсу, який володіє своїми даними, зазвичай потрібен RingFileBase, щоб медіа залишалися у вашому кластері, за вашим CDN-хостом і без рахунків Blob за кожен GB.

    Типові сценарії

    Локальна розробка

    Залиште storage.provider / env рівним local_storage — файли потраплятимуть у public/uploads (або на ваш PVC mount).

    Продакшн-маркетплейс

    Задайте ring_filebase, спрямовуйте RINGBASE_API_URL на внутрішньокластерний API, публікуйте URL через Ring CDN (див. Related нижче).

    File Cabinet

    Завантаження учасників викликають з MIME-лімітами cabinet/25MB; елементи публічної галереї повторно використовують CDN .

    Архітектура

    Перевірені модулі

    ШляхРоль
    lib/storage/storage-config.tsSSOT провайдера + getStorageConfig()
    lib/file/FileService.tsfile() / fileService.upload
    lib/file/FileSelector.tsМапа backend-ів; створює RingBaseAdapter із env
    lib/file/adapters/RingBaseAdapter.tsMultipart upload, delete, metadata, deriveDerivatives
    lib/images/derive-webp.tsНеобов’язковий WebP sibling; storage.webpDerivative.provider=ringbase

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

    Related documentation

    Ring CDN (RingFileBase edge)

    Наступний крок: публічний edge /files/..., мапа host→bucket і географічна доставка завантажених об’єктів.

    Ring File Cabinet

    Той самий процес: завантаження учасника /file-cabinet через file() + getCabinetStorageConfig; галерея використовує derivativesProfile gallery; subscriber+ /profile/shared — лише ACL (без власних завантажень).

    Environment Configuration

    Залежність: блок env сховища (RINGBASE_*) і передумови generative conductor.

    Backup & Recovery

    Див. також: object store — окремий ресурс резервного копіювання від Postgres.

    1. Документація
    2. /Інтеграції
    3. /RingFileBase (API об’єктного сховища)

    Оновлено 6 вер. 2026 р.6 хв прослуховування

    file()
    /files/{uuid}

    Керований хостинг Ringdom

    Оператори розгортають namespace-и ring-filebase + ring-filebase-minio; вашому клону потрібне лише підключення ConfigMap/Secret.

    Поєднання з резервним копіюванням

    Дампи Postgres не містять об’єктів MinIO — плануйте резервні копії object store окремо від pg_dump.

    Не спрямовуйте RINGBASE_API_URL на хост Next.js

    Хости api. часто маршрутизуються на ingress застосунку Ring. Завантаження мають потрапляти до ring-filebase-api (внутрішньокластерно) або https://filebase-api.ring-platform.org (публічний запис на primary) — ніколи не до розгортання Next.js. Неправильний URL повертає HTML або HTTP 500 замість JSON з успіхом/fileId/url.

    lib/uploads/server/upload-core.ts
    Уніфіковане завантаження, яке використовує POST /api/uploads
    app/api/uploads/route.tsТочка входу browser/form upload
    infrastructure/ring-file-base/services/ring-filebase-api/Джерело API (derivatives + propagate)
    infrastructure/ring-file-base/k8s/ring-filebase/10-api-deployment.yamlШаблон розгортання
    infrastructure/k3s-or/ring-filebase/60-propagate-slaves-configmap.yamlРеєстр slave ingest

    Змінні середовища

    ЗміннаПотрібна для ring_filebaseПримітки
    NEXT_PUBLIC_STORAGE_PROVIDERТакЗадайте ring_filebase (псевдоніми: ringbase, filebase)
    RINGBASE_API_URLТакHost або host + /api/v1; адаптер нормалізує до …/api/v1
    RINGBASE_API_TOKENТакBearer для middleware автентифікації API
    RINGBASE_PUBLIC_URLРекомендованоПублічна база для URL у відповідях (зазвичай origin CDN)
    NEXT_PUBLIC_RINGBASE_API_URLНеобов’язковоFallback, якщо RINGBASE_API_URL не задано
    BLOB_READ_WRITE_TOKENНіЛише для vercel_blob
    NEXT_PUBLIC_LOCAL_STORAGE_URLНіЛише для local_storage

    Приклад ring-config.json:

    Шаблон k8s ConfigMap / Secret (див. k8s/secrets.example.yaml):

    Мапа типів завантаження (resolveRingBaseUploadType)

    API перевіряє MIME-типи для поля type. Адаптер мапить:

    Вміст / доступtype, який надсилається до API
    access: 'private'document
    image/*image (повноцінний тип; product — застарілий псевдонім)
    video/* або audio/*media
    Усе іншеother

    Необов’язкові перевизначення: ringbaseType, derivativesProfile (none | thumb | gallery | product | news).

    Схема ключів похідних (SSOT)

    ШаблонСтатус
    {fileId}_v_{variant} наприклад _v_thumb.webp, _v_blur.webp, _v_sync_thumb.jpgПоточна — єдина схема, яку записує API
    {fileId}_v_video_frame_N.jpg / _v_video_frame_N_480.webpПоточна — асинхронні HEIC/video frames (_480.webp під _v_ навмисно)
    {fileId}_thumb, {fileId}_thumb_v{N}, {fileId}_thumb_v{N}_480w.webpЗаборонена — ніколи не записуйте; очищайте orphan-и через infrastructure/ring-file-base/scripts/purge-legacy-derivative-keys.sh

    Для raster-файлів надавайте перевагу upload type=image (product — застарілий псевдонім → image). Poll статусу thumbnail: GET /api/v1/files/{fileId}/thumbnail?type=image.

    Підключення застосунку (2026-07-15): upload-core і /api/uploads використовують request ladder, коли storage.provider дорівнює ring_filebase (purpose→profile: news→news, product media→product, nft/chat images→gallery, avatar/logos→thumb, docs→none). Відповіді містять fileId + derivatives. Зберігайте їх як MediaImageAsset у news (featuredImageAsset / gallery) і GalleryItem.derivatives у store/NFT. Відображайте через pickImageSrc / pickGalleryDisplayUrl. Застарілу подвійну сумісність Vikka (vikka-field-normalize / NEXT_PUBLIC_NEWS_VIKKA_COMPAT) видалено — лише camelCase JSONB.

    Надсилання зображень як media не проходить валідацію (A/V + HEIC дозволені лише чинними правилами API).

    Гігієна bucket (після стабілізації push-only)

    Виконайте dry-run на primary, потім на slave FI/UA: ./scripts/purge-legacy-derivative-keys.sh --endpoint https://… --bucket ring-filebase. Додавайте --delete лише після перегляду зразка списку. Команда не зачіпає навмисні _v_video_frame_*_480.webp або _v_thumb.webp.

    Кроки підключення

    1. 1

      Виберіть провайдера

      Задайте env та/або storage.provider у ring-config.json рівним ring_filebase. Після змін env перезапустіть Next.js.

    2. 2

      Розгорніть API + MinIO (кластер)

      Застосуйте маніфести RingFileBase з infrastructure/ring-file-base/k8s/ring-filebase/ (API Deployment/Service, namespace MinIO, CDN stack). Переконайтеся, що API може дістатися minio-service.ring-filebase-minio.svc.cluster.local:9000, а цільовий bucket існує.

    3. 3

      Випустіть Bearer token

      Автентифікація API (services/ring-filebase-api/src/middleware/auth.ts) очікує JWT, чиї декодовані claims містять:

      • iss = kubernetes/serviceaccount
      • kubernetes.io/serviceaccount/namespace
      • kubernetes.io/serviceaccount/service-account.name

      Сьогодні middleware декодує claims і не викликає TokenReview та не перевіряє exp. Надавайте перевагу довгоживучому токену з такими claims у Secrets — не вставляйте одногодинний projected ServiceAccount JWT у RINGBASE_API_TOKEN, забуваючи про його строк дії.

    4. 4

      Smoke-тест із pod застосунку

      Очікуйте JSON із success: true, fileId, url і необов’язковими derivatives під вашим CDN-хостом. Протягом кількох секунд HEAD того самого ключа на slave ingest має повернути 200 (master push).

    5. 5

      Завантаження на рівні застосунку

      Browser forms мають використовувати POST /api/uploads (уніфіковане upload core), а не викликати RingFileBase напряму.

    Типові помилки

    СимптомЙмовірна причина
    HTML / 500 від URL завантаженняRINGBASE_API_URL вказує на Next.js (api. ingress)
    401 Invalid ServiceAccount tokenВідсутня legacy SA claim shape у токені
    Invalid file type … got: image/pngtype=media замість image / other
    Завантаження успішне, CDN на slave короткочасно повертає 404Рідкісна race до push; edge мають зберігати proxy_cache_valid 404 0
    Завантаження успішне, CDN повертає 403У bucket MinIO немає анонімного GetObject (або неправильно налаштовано CDN Host header)
    Node stream.isDisturbed для BlobНадавайте перевагу local_storage або ring_filebase; Vercel adapter завантажує Uint8Array
    Propagate завис у failedPOST /api/v1/replication/redrive на primary (максимум 3 повтори, потім зупинка)

    Integrations

    Див. також: повний хаб каталогу інтеграцій.

    file()
    /files/{uuid}

    Керований хостинг Ringdom

    Оператори розгортають namespace-и ring-filebase + ring-filebase-minio; вашому клону потрібне лише підключення ConfigMap/Secret.

    Поєднання з резервним копіюванням

    Дампи Postgres не містять об’єктів MinIO — плануйте резервні копії object store окремо від pg_dump.

    Не спрямовуйте RINGBASE_API_URL на хост Next.js

    Хости api. часто маршрутизуються на ingress застосунку Ring. Завантаження мають потрапляти до ring-filebase-api (внутрішньокластерно) або https://filebase-api.ring-platform.org (публічний запис на primary) — ніколи не до розгортання Next.js. Неправильний URL повертає HTML або HTTP 500 замість JSON з успіхом/fileId/url.

    lib/uploads/server/upload-core.ts
    Уніфіковане завантаження, яке використовує POST /api/uploads
    app/api/uploads/route.tsТочка входу browser/form upload
    infrastructure/ring-file-base/services/ring-filebase-api/Джерело API (derivatives + propagate)
    infrastructure/ring-file-base/k8s/ring-filebase/10-api-deployment.yamlШаблон розгортання
    infrastructure/k3s-or/ring-filebase/60-propagate-slaves-configmap.yamlРеєстр slave ingest

    Змінні середовища

    ЗміннаПотрібна для ring_filebaseПримітки
    NEXT_PUBLIC_STORAGE_PROVIDERТакЗадайте ring_filebase (псевдоніми: ringbase, filebase)
    RINGBASE_API_URLТакHost або host + /api/v1; адаптер нормалізує до …/api/v1
    RINGBASE_API_TOKENТакBearer для middleware автентифікації API
    RINGBASE_PUBLIC_URLРекомендованоПублічна база для URL у відповідях (зазвичай origin CDN)
    NEXT_PUBLIC_RINGBASE_API_URLНеобов’язковоFallback, якщо RINGBASE_API_URL не задано
    BLOB_READ_WRITE_TOKENНіЛише для vercel_blob
    NEXT_PUBLIC_LOCAL_STORAGE_URLНіЛише для local_storage

    Приклад ring-config.json:

    Шаблон k8s ConfigMap / Secret (див. k8s/secrets.example.yaml):

    Мапа типів завантаження (resolveRingBaseUploadType)

    API перевіряє MIME-типи для поля type. Адаптер мапить:

    Вміст / доступtype, який надсилається до API
    access: 'private'document
    image/*image (повноцінний тип; product — застарілий псевдонім)
    video/* або audio/*media
    Усе іншеother

    Необов’язкові перевизначення: ringbaseType, derivativesProfile (none | thumb | gallery | product | news).

    Схема ключів похідних (SSOT)

    ШаблонСтатус
    {fileId}_v_{variant} наприклад _v_thumb.webp, _v_blur.webp, _v_sync_thumb.jpgПоточна — єдина схема, яку записує API
    {fileId}_v_video_frame_N.jpg / _v_video_frame_N_480.webpПоточна — асинхронні HEIC/video frames (_480.webp під _v_ навмисно)
    {fileId}_thumb, {fileId}_thumb_v{N}, {fileId}_thumb_v{N}_480w.webpЗаборонена — ніколи не записуйте; очищайте orphan-и через infrastructure/ring-file-base/scripts/purge-legacy-derivative-keys.sh

    Для raster-файлів надавайте перевагу upload type=image (product — застарілий псевдонім → image). Poll статусу thumbnail: GET /api/v1/files/{fileId}/thumbnail?type=image.

    Підключення застосунку (2026-07-15): upload-core і /api/uploads використовують request ladder, коли storage.provider дорівнює ring_filebase (purpose→profile: news→news, product media→product, nft/chat images→gallery, avatar/logos→thumb, docs→none). Відповіді містять fileId + derivatives. Зберігайте їх як MediaImageAsset у news (featuredImageAsset / gallery) і GalleryItem.derivatives у store/NFT. Відображайте через pickImageSrc / pickGalleryDisplayUrl. Застарілу подвійну сумісність Vikka (vikka-field-normalize / NEXT_PUBLIC_NEWS_VIKKA_COMPAT) видалено — лише camelCase JSONB.

    Надсилання зображень як media не проходить валідацію (A/V + HEIC дозволені лише чинними правилами API).

    Гігієна bucket (після стабілізації push-only)

    Виконайте dry-run на primary, потім на slave FI/UA: ./scripts/purge-legacy-derivative-keys.sh --endpoint https://… --bucket ring-filebase. Додавайте --delete лише після перегляду зразка списку. Команда не зачіпає навмисні _v_video_frame_*_480.webp або _v_thumb.webp.

    Кроки підключення

    1. 1

      Виберіть провайдера

      Задайте env та/або storage.provider у ring-config.json рівним ring_filebase. Після змін env перезапустіть Next.js.

    2. 2

      Розгорніть API + MinIO (кластер)

      Застосуйте маніфести RingFileBase з infrastructure/ring-file-base/k8s/ring-filebase/ (API Deployment/Service, namespace MinIO, CDN stack). Переконайтеся, що API може дістатися minio-service.ring-filebase-minio.svc.cluster.local:9000, а цільовий bucket існує.

    3. 3

      Випустіть Bearer token

      Автентифікація API (services/ring-filebase-api/src/middleware/auth.ts) очікує JWT, чиї декодовані claims містять:

      • iss = kubernetes/serviceaccount
      • kubernetes.io/serviceaccount/namespace
      • kubernetes.io/serviceaccount/service-account.name

      Сьогодні middleware декодує claims і не викликає TokenReview та не перевіряє exp. Надавайте перевагу довгоживучому токену з такими claims у Secrets — не вставляйте одногодинний projected ServiceAccount JWT у RINGBASE_API_TOKEN, забуваючи про його строк дії.

    4. 4

      Smoke-тест із pod застосунку

      Очікуйте JSON із success: true, fileId, url і необов’язковими derivatives під вашим CDN-хостом. Протягом кількох секунд HEAD того самого ключа на slave ingest має повернути 200 (master push).

    5. 5

      Завантаження на рівні застосунку

      Browser forms мають використовувати POST /api/uploads (уніфіковане upload core), а не викликати RingFileBase напряму.

    Типові помилки

    СимптомЙмовірна причина
    HTML / 500 від URL завантаженняRINGBASE_API_URL вказує на Next.js (api. ingress)
    401 Invalid ServiceAccount tokenВідсутня legacy SA claim shape у токені
    Invalid file type … got: image/pngtype=media замість image / other
    Завантаження успішне, CDN на slave короткочасно повертає 404Рідкісна race до push; edge мають зберігати proxy_cache_valid 404 0
    Завантаження успішне, CDN повертає 403У bucket MinIO немає анонімного GetObject (або неправильно налаштовано CDN Host header)
    Node stream.isDisturbed для BlobНадавайте перевагу local_storage або ring_filebase; Vercel adapter завантажує Uint8Array
    Propagate завис у failedPOST /api/v1/replication/redrive на primary (максимум 3 повтори, потім зупинка)

    Integrations

    Див. також: повний хаб каталогу інтеграцій.

    file()
    /files/{uuid}

    Керований хостинг Ringdom

    Оператори розгортають namespace-и ring-filebase + ring-filebase-minio; вашому клону потрібне лише підключення ConfigMap/Secret.

    Поєднання з резервним копіюванням

    Дампи Postgres не містять об’єктів MinIO — плануйте резервні копії object store окремо від pg_dump.

    Не спрямовуйте RINGBASE_API_URL на хост Next.js

    Хости api. часто маршрутизуються на ingress застосунку Ring. Завантаження мають потрапляти до ring-filebase-api (внутрішньокластерно) або https://filebase-api.ring-platform.org (публічний запис на primary) — ніколи не до розгортання Next.js. Неправильний URL повертає HTML або HTTP 500 замість JSON з успіхом/fileId/url.

    lib/uploads/server/upload-core.ts
    Уніфіковане завантаження, яке використовує POST /api/uploads
    app/api/uploads/route.tsТочка входу browser/form upload
    infrastructure/ring-file-base/services/ring-filebase-api/Джерело API (derivatives + propagate)
    infrastructure/ring-file-base/k8s/ring-filebase/10-api-deployment.yamlШаблон розгортання
    infrastructure/k3s-or/ring-filebase/60-propagate-slaves-configmap.yamlРеєстр slave ingest

    Змінні середовища

    ЗміннаПотрібна для ring_filebaseПримітки
    NEXT_PUBLIC_STORAGE_PROVIDERТакЗадайте ring_filebase (псевдоніми: ringbase, filebase)
    RINGBASE_API_URLТакHost або host + /api/v1; адаптер нормалізує до …/api/v1
    RINGBASE_API_TOKENТакBearer для middleware автентифікації API
    RINGBASE_PUBLIC_URLРекомендованоПублічна база для URL у відповідях (зазвичай origin CDN)
    NEXT_PUBLIC_RINGBASE_API_URLНеобов’язковоFallback, якщо RINGBASE_API_URL не задано
    BLOB_READ_WRITE_TOKENНіЛише для vercel_blob
    NEXT_PUBLIC_LOCAL_STORAGE_URLНіЛише для local_storage

    Приклад ring-config.json:

    Шаблон k8s ConfigMap / Secret (див. k8s/secrets.example.yaml):

    Мапа типів завантаження (resolveRingBaseUploadType)

    API перевіряє MIME-типи для поля type. Адаптер мапить:

    Вміст / доступtype, який надсилається до API
    access: 'private'document
    image/*image (повноцінний тип; product — застарілий псевдонім)
    video/* або audio/*media
    Усе іншеother

    Необов’язкові перевизначення: ringbaseType, derivativesProfile (none | thumb | gallery | product | news).

    Схема ключів похідних (SSOT)

    ШаблонСтатус
    {fileId}_v_{variant} наприклад _v_thumb.webp, _v_blur.webp, _v_sync_thumb.jpgПоточна — єдина схема, яку записує API
    {fileId}_v_video_frame_N.jpg / _v_video_frame_N_480.webpПоточна — асинхронні HEIC/video frames (_480.webp під _v_ навмисно)
    {fileId}_thumb, {fileId}_thumb_v{N}, {fileId}_thumb_v{N}_480w.webpЗаборонена — ніколи не записуйте; очищайте orphan-и через infrastructure/ring-file-base/scripts/purge-legacy-derivative-keys.sh

    Для raster-файлів надавайте перевагу upload type=image (product — застарілий псевдонім → image). Poll статусу thumbnail: GET /api/v1/files/{fileId}/thumbnail?type=image.

    Підключення застосунку (2026-07-15): upload-core і /api/uploads використовують request ladder, коли storage.provider дорівнює ring_filebase (purpose→profile: news→news, product media→product, nft/chat images→gallery, avatar/logos→thumb, docs→none). Відповіді містять fileId + derivatives. Зберігайте їх як MediaImageAsset у news (featuredImageAsset / gallery) і GalleryItem.derivatives у store/NFT. Відображайте через pickImageSrc / pickGalleryDisplayUrl. Застарілу подвійну сумісність Vikka (vikka-field-normalize / NEXT_PUBLIC_NEWS_VIKKA_COMPAT) видалено — лише camelCase JSONB.

    Надсилання зображень як media не проходить валідацію (A/V + HEIC дозволені лише чинними правилами API).

    Гігієна bucket (після стабілізації push-only)

    Виконайте dry-run на primary, потім на slave FI/UA: ./scripts/purge-legacy-derivative-keys.sh --endpoint https://… --bucket ring-filebase. Додавайте --delete лише після перегляду зразка списку. Команда не зачіпає навмисні _v_video_frame_*_480.webp або _v_thumb.webp.

    Кроки підключення

    1. 1

      Виберіть провайдера

      Задайте env та/або storage.provider у ring-config.json рівним ring_filebase. Після змін env перезапустіть Next.js.

    2. 2

      Розгорніть API + MinIO (кластер)

      Застосуйте маніфести RingFileBase з infrastructure/ring-file-base/k8s/ring-filebase/ (API Deployment/Service, namespace MinIO, CDN stack). Переконайтеся, що API може дістатися minio-service.ring-filebase-minio.svc.cluster.local:9000, а цільовий bucket існує.

    3. 3

      Випустіть Bearer token

      Автентифікація API (services/ring-filebase-api/src/middleware/auth.ts) очікує JWT, чиї декодовані claims містять:

      • iss = kubernetes/serviceaccount
      • kubernetes.io/serviceaccount/namespace
      • kubernetes.io/serviceaccount/service-account.name

      Сьогодні middleware декодує claims і не викликає TokenReview та не перевіряє exp. Надавайте перевагу довгоживучому токену з такими claims у Secrets — не вставляйте одногодинний projected ServiceAccount JWT у RINGBASE_API_TOKEN, забуваючи про його строк дії.

    4. 4

      Smoke-тест із pod застосунку

      Очікуйте JSON із success: true, fileId, url і необов’язковими derivatives під вашим CDN-хостом. Протягом кількох секунд HEAD того самого ключа на slave ingest має повернути 200 (master push).

    5. 5

      Завантаження на рівні застосунку

      Browser forms мають використовувати POST /api/uploads (уніфіковане upload core), а не викликати RingFileBase напряму.

    Типові помилки

    СимптомЙмовірна причина
    HTML / 500 від URL завантаженняRINGBASE_API_URL вказує на Next.js (api. ingress)
    401 Invalid ServiceAccount tokenВідсутня legacy SA claim shape у токені
    Invalid file type … got: image/pngtype=media замість image / other
    Завантаження успішне, CDN на slave короткочасно повертає 404Рідкісна race до push; edge мають зберігати proxy_cache_valid 404 0
    Завантаження успішне, CDN повертає 403У bucket MinIO немає анонімного GetObject (або неправильно налаштовано CDN Host header)
    Node stream.isDisturbed для BlobНадавайте перевагу local_storage або ring_filebase; Vercel adapter завантажує Uint8Array
    Propagate завис у failedPOST /api/v1/replication/redrive на primary (максимум 3 повтори, потім зупинка)

    Integrations

    Див. також: повний хаб каталогу інтеграцій.