infra/@nocodb.app/CLAUDE.md

@nocodb.app — База данных MVP Marketplace

Версия: 3.0.0
Дата: 2025-12-18
URL: https://data.0kt.ru:8443
Статус: Работает (HTTP/2 + Brotli + Optimized)


Доступ

Параметр Значение
URL https://data.0kt.ru:8443
Email admin@0kt.ru
Base ID pt7k98pv0fwi1el

Password: см. infra/SECRETS.md


Таблицы MVP (Marketplace)

Таблица ID Назначение
Users mjn9vbjh6w2u70y Пользователи системы
LegalEntity m89pxa9yd7jnm9q Юридические лица
Channel mk9pdznl2v56jyz Каналы продаж (Ozon, WB, YM)
Warehouse mghfe5vq5dlyklz Склады
DeliveryService mxrcrlcx1to5f5m Службы доставки
ArticleMapping m6f7osauinwbbq0 Сопоставление артикулов
ArticleMappingItem m6nolo6edicut6u Состав сопоставления
Order mfuzn6vrx8qd8kq Заказы
OrderItem mr3zpqii2o6a86h Позиции заказов
OrderAnalytics m5fh9o7v6r16ohn Аналитика заказов
ProductAverages m3ze9hs62n76plg Средние показатели

Таблицы PIM (Товары)

Таблица ID Назначение
Products mvgzjcg9tpanapf Мастер товаров с ценами
SKU_Mappings mraly3huoxim3rk Связь артикул → маркетплейс SKU
Suppliers m0mtzqqaitsfi2t Поставщики
PIM_Catalog ma24gsd6kh0qt5s Характеристики пиротехники
Prices_History ml7h9pchiiosbqm История цен от поставщиков
Categories mfvfy5g9ybn0jpe Категории с наценками
Bundles ma8sbzap2q9euq1 Бандлы (наборы)
Images m7efpfuygb4sl11 Изображения товаров
Features mjndz5qbemnq9rn Системная (по умолчанию)

FK Связи (Foreign Keys)

Таблица Колонка FK Ссылается на
LegalEntity user_id Users
Channel entity_id LegalEntity
Warehouse channel_id Channel
DeliveryService channel_id Channel
ArticleMapping channel_id Channel
ArticleMapping pim_product_id Products
ArticleMappingItem mapping_id ArticleMapping
ArticleMappingItem product_id Products
Order channel_id Channel
Order entity_id LegalEntity
Order warehouse_id Warehouse
OrderItem order_id Order
OrderItem product_id Products
OrderAnalytics order_id Order
ProductAverages product_id Products
ProductAverages channel_id Channel

Структура Products

Поле Тип Описание
article SingleLineText Артикул (primary)
name SingleLineText Название
code_1c SingleLineText Код 1С
category SingleLineText Категория
brand SingleLineText Бренд
supplier SingleLineText Поставщик
caliber SingleLineText Калибр (через запятую, точка десятичная)
purchase_price Decimal Закупочная цена
base_price Decimal Базовая цена
ozon_price Decimal Цена OZON
wb_price Decimal Цена WB
retail_price Decimal Розничная цена

Структура SKU_Mappings

Поле Тип Описание
article SingleLineText Артикул товара
marketplace SingleLineText O1/O2/O3/WB/YM/OpenCart/PIM
marketplace_sku SingleLineText SKU на маркетплейсе
marketplace_product_id SingleLineText ID товара на маркетплейсе
status SingleLineText active/paused/archived

Структура PIM_Catalog

Поле Тип Описание
article SingleLineText Артикул (primary)
caliber SingleLineText Калибр (мм)
shots_count Number Кол-во выстрелов
duration_sec Number Время работы (сек)
height_m Number Высота подъёма (м)
effects LongText Описание эффектов
safety_distance_m Number Безопасная дистанция (м)
weight_kg Decimal Вес (кг)
dimensions SingleLineText Габариты (ДхШхВ)
certificate_number SingleLineText Номер сертификата
certificate_expiry Date Срок действия серт.
hazard_class SingleLineText Класс опасности
un_code SingleLineText Код ООН
country SingleLineText Страна производства
video_url URL Ссылка на видео
description LongText Описание

Структура Prices_History

Поле Тип Описание
article SingleLineText Артикул
supplier SingleLineText Код поставщика
price_date Date Дата прайса
purchase_price Decimal Закупочная цена
min_order_qty Number Мин. заказ (шт)
in_stock Checkbox Есть в наличии
source_file SingleLineText Файл-источник

Структура Categories

Поле Тип Описание
code SingleLineText Код категории
name SingleLineText Название
parent_code SingleLineText Родительская категория
margin_percent Decimal Наценка (%)
ozon_category_id SingleLineText ID категории OZON
wb_category_id SingleLineText ID категории WB

Структура Bundles

Поле Тип Описание
bundle_article SingleLineText Артикул бандла
bundle_name SingleLineText Название набора
component_article SingleLineText Артикул компонента
quantity Number Количество

Структура Images

Поле Тип Описание
article SingleLineText Артикул
image_url URL URL изображения
is_main Checkbox Главное фото
sort_order Number Порядок сортировки
source SingleLineText Источник (supplier/manual)

API Примеры

Получить токен

# Password: см. infra/SECRETS.md
curl -s -X POST "https://data.0kt.ru:8443/api/v1/auth/user/signin" \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@0kt.ru","password":"$NOCODB_PASSWORD"}'

Получить все товары

TOKEN="..." # из предыдущего запроса

curl -s "https://data.0kt.ru:8443/api/v2/tables/mvgzjcg9tpanapf/records" \
  -H "xc-auth: $TOKEN"

Добавить товар

curl -s -X POST "https://data.0kt.ru:8443/api/v2/tables/mvgzjcg9tpanapf/records" \
  -H "xc-auth: $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"article":"JF-001","name":"Фейерверк Тест","purchase_price":100}'

Docker

# Статус
docker ps | grep nocodb

# Логи
docker logs nocodb-products

# Перезапуск
cd $WORKSPACE/infra/@nocodb.app
docker compose restart

Оптимизация памяти и производительности

Лимиты памяти (LOCKED)

Контейнер Лимит Типичное потребление
nocodb-products 256MB 150-200MB (60-80%)
nocodb-products-db 256MB 40-60MB (15-25%)
СУММАРНО 512MB ~250MB

LOCKED: Лимиты зафиксированы в docker-compose.yml. Не увеличивать без необходимости.

NocoDB настройки

environment:
  NODE_OPTIONS: "--max-old-space-size=192"  # 192MB heap для 256MB контейнера
  NC_DISABLE_AUDIT: "true"     # Отключить аудит (экономия памяти)
  NC_DISABLE_TELE: "true"      # Отключить телеметрию
  NC_DISABLE_ERR_REPORT: "true" # Отключить отправку ошибок

PostgreSQL настройки

command:
  - "postgres"
  - "-c" - "shared_buffers=64MB"      # Буфер БД
  - "-c" - "work_mem=4MB"              # Память на операцию
  - "-c" - "maintenance_work_mem=32MB" # Память на VACUUM/CREATE INDEX
  - "-c" - "effective_cache_size=128MB" # Оценка кэша ОС
  - "-c" - "random_page_cost=1.1"      # Для SSD
  - "-c" - "max_connections=50"        # Максимум соединений

Производительность (бенчмарк)

Операция Время Записей
COUNT 104ms 5623
SELECT * LIMIT 100 111ms 100
SELECT * LIMIT 1000 242ms 1000
SELECT * (все) 684ms 5623
SELECT с фильтром 188ms ~500
JOIN двух таблиц 112ms ~2000

Способы ускорения UI

  1. Пагинация — не загружать >500 записей за раз
  2. Ограничение колонок — скрыть ненужные в View
  3. Индексы — создать на часто фильтруемые поля
  4. Views — создать готовые представления для частых запросов

Nginx сжатие


Связанные файлы


Спецификация MVP

Подробная документация: pirotehnika/_shared/products/nocode-mvp/