1. Что такое NocoDB и зачем он нужен
Представьте Excel, в котором можно переключаться между таблицей, Kanban-доской, галереей, формой и календарём — и всё это над одними и теми же данными. Добавьте автоматически сгенерированный REST API, связи между таблицами и управление правами доступа. Вот что такое NocoDB.
Такой инструмент уже существует — это Airtable. Он отличный, но дорогой: бесплатный план ограничен 1 000 строк, а командный стоит от $20 с человека в месяц. Команда из пяти человек — $100/мес только за базу данных. NocoDB делает то же самое, только бесплатно и на вашем сервере.
| Возможность | Airtable Free | NocoDB self-hosted |
|---|---|---|
| Grid / Kanban / Calendar / Form / Gallery | ✅ | ✅ |
| REST API | ✅ | ✅ |
| Связи между таблицами | ✅ | ✅ |
| Совместный доступ | ✅ | ✅ |
| Лимит строк | 1 000 | ∞ |
| Цена за команду 5 чел | ~$100/мес | только стоимость VPS |
| Данные у вас | ❌ | ✅ |
| Подключение своей PostgreSQL | ❌ | ✅ |
Для чего реально используют NocoDB:
CRM без кода
Клиенты, сделки, контакты — таблица с нужными полями, Kanban по стадиям, форма для добавления лидов. Без Salesforce и без ежемесячного счёта.
Учёт и инвентарь
Склад, оборудование, расходы — таблица с формулами, фильтрами, связями. Несколько человек редактируют одновременно, данные у вас.
Контент-план
Статьи, посты, задачи. Calendar-вид показывает что выходит когда. Kanban — по статусам. Form — чтобы авторы могли добавлять заявки.
Сбор заявок через формы
Form-вид становится публичной формой по ссылке — как Google Forms. Ответы падают прямо в таблицу. Данные хранятся на вашем сервере.
Backend для no-code приложений
REST API генерируется автоматически для каждой таблицы. Фронтенд читает и пишет данные через API без отдельного бэкенда.
Каталог с картинками
Поле Attachment хранит файлы и изображения, Gallery-вид показывает каждую строку как карточку с картинкой. Удобно для каталогов товаров или библиотек.
2. Требования к серверу
| Параметр | Минимум | Комфортно |
|---|---|---|
| RAM | 1 ГБ | 2 ГБ (рекомендуется) |
| CPU | 1 vCPU | 2 vCPU |
| Диск | 10 ГБ SSD | 20+ ГБ (вложения и файлы) |
| ОС | Ubuntu 22.04 LTS | Ubuntu 22.04 / 24.04 LTS |
| Docker | 24.0+ | Последняя стабильная версия |
NocoDB запускает два контейнера: само приложение на Node.js (~200–300 МБ) и PostgreSQL (~100–200 МБ). На 1 ГБ RAM всё умещается. Если на сервере уже работают другие сервисы — берите 2 ГБ.
3. Установка через Docker Compose
Мы запустим NocoDB с PostgreSQL в качестве хранилища. Это важно: без явного указания базы NocoDB использует SQLite — встроенный файл внутри контейнера. SQLite работает, но ненадёжен для продакшена: данные теряются при пересоздании контейнера, нет нормального бэкапа, плохо справляется с параллельными запросами. С PostgreSQL всё надёжно.
Шаг 1: установка Docker
Если Docker ещё не установлен:
curl -fsSL https://get.docker.com | shШаг 2: директория проекта
mkdir -p /opt/nocodb && cd /opt/nocodbШаг 3: JWT-секрет
NocoDB использует JWT-токены для аутентификации сессий. Если не задать секрет явно, он генерируется случайно при каждом старте контейнера — и все пользователи будут разлогинены при каждом перезапуске. Сгенерируйте постоянный секрет:
openssl rand -hex 32Шаг 4: файл .env
Создайте файл с настройками. Замените выделенные значения на свои:
# Публичный URL (с вашим доменом)
NC_PUBLIC_URL=https://nocodb.ваш-домен.ru
# JWT-секрет — ВСТАВЬТЕ РЕЗУЛЬТАТ openssl rand -hex 32
NC_AUTH_JWT_SECRET=вставьте_сюда_сгенерированный_секрет
# Пароль PostgreSQL — задаётся здесь и используется в NC_DB ниже
POSTGRES_PASSWORD=StrongPass123
# Подключение к PostgreSQL (формат специфичный для NocoDB!)
NC_DB=pg://db:5432?u=nocodb&p=StrongPass123&d=nocodb
# Отключить анонимную телеметрию
NC_DISABLE_TELE=true
# Суперадмин — задайте сразу, чтобы не было лишнего экрана при первом входе
# (пароль: мин. 8 символов, заглавная буква, цифра, спецсимвол)
# NC_ADMIN_EMAIL=admin@ваш-домен.ru
# NC_ADMIN_PASSWORD=Sup3rS3cr3t!Формат NC_DB — не стандартный PostgreSQL URI
NocoDB использует собственный формат строки подключения, отличный от обычного postgresql://user:pass@host/db. Здесь: u= — логин, p= — пароль, d= — имя базы. Хост db — это имя сервиса PostgreSQL в docker-compose. Если в пароле есть спецсимволы (@ # &) — URL-закодируйте их: @ → %40, # → %23, & → %26.
Шаг 5: docker-compose.yml
services:
nocodb:
image: nocodb/nocodb:latest
depends_on:
db:
condition: service_healthy
env_file: .env
ports:
- "127.0.0.1:8080:8080"
restart: unless-stopped
volumes:
- nc_data:/usr/app/data
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: nocodb
POSTGRES_USER: nocodb
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U nocodb -d nocodb"]
interval: 10s
timeout: 5s
retries: 10
restart: unless-stopped
volumes:
- db_data:/var/lib/postgresql/data
volumes:
nc_data:
db_data:Пароль нужно заменить в двух строках .env
Замените StrongPass123 на своё значение в двух строках файла .env: POSTGRES_PASSWORD=... и в строке NC_DB=...&p=...&d=.... Они должны совпадать. Docker-compose.yml подставит значение из .env автоматически через ${POSTGRES_PASSWORD}.
Почему 127.0.0.1:8080, а не 0.0.0.0:8080?
Запись 127.0.0.1:8080 означает, что NocoDB слушает только на локальном интерфейсе — снаружи к нему не подключиться напрямую. Все запросы идут через Nginx (настроим ниже), который занимается SSL. Это правильная и безопасная схема.
Шаг 6: запуск
cd /opt/nocodb
docker compose up -dПервый запуск занимает около минуты — NocoDB ждёт, пока PostgreSQL пройдёт healthcheck, затем запускается сам и создаёт схему базы. Проверьте статус:
docker compose psОба сервиса должны быть в статусе Up. Если nocodb упал — смотрите логи: docker compose logs nocodb. Самая частая причина — ошибка в строке NC_DB в .env.
4. Nginx и SSL
NocoDB готов на порту 8080. Теперь настроим Nginx, чтобы он был доступен по нормальному домену с HTTPS.
DNS-запись
Добавьте A-запись у своего регистратора:
nocodb.ваш-домен.ru → A → IP_ВАШЕГО_VPSКонфиг Nginx
nano /etc/nginx/sites-available/nocodbserver {
listen 80;
server_name nocodb.ваш-домен.ru;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name nocodb.ваш-домен.ru;
ssl_certificate /etc/letsencrypt/live/nocodb.ваш-домен.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nocodb.ваш-домен.ru/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
# Для загрузки файлов-вложений
client_max_body_size 50m;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Для WebSocket (используется в реальном времени)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}ln -s /etc/nginx/sites-available/nocodb /etc/nginx/sites-enabled/
nginx -tufw allow 80/tcp
ufw allow 443/tcp
ufw reload# Установить certbot, если ещё не установлен
apt install -y certbot python3-certbot-nginx
certbot --nginx -d nocodb.ваш-домен.rusystemctl reload nginxТеперь NocoDB доступен по адресу https://nocodb.ваш-домен.ru.
5. Первый вход и создание базы
Откройте NocoDB в браузере. Если вы не задали NC_ADMIN_EMAIL в .env, первый экран — форма регистрации суперадмина. Это единственный аккаунт с полным доступом ко всему.
Требования к паролю суперадмина
NocoDB проверяет пароль на сложность: минимум 8 символов, хотя бы одна заглавная буква, одна цифра и один спецсимвол. Если пароль не проходит проверку — контейнер пишет ошибку в логи, но не падает, просто не устанавливает суперадмина.
- 1Введите email и пароль суперадмина → нажмите Sign Up. Первый зарегистрировавшийся — всегда суперадмин.
- 2После входа нажмите + New Base. Дайте базе название, например «CRM» или «Контент-план».
- 3Внутри базы нажмите + Add table — создастся первая таблица с дефолтными полями.
- 4Добавьте нужные поля через + в шапке таблицы. Доступно более 20 типов: Number, Single Select, Date, URL, Email, Checkbox, Attachment и другие.
- 5Начните заполнять строки — кликайте на ячейки и вводите данные, как в Excel.
Что такое Base в NocoDB?
Base (база) — это набор таблиц, объединённых одной темой: «CRM», «Склад», «Контент». Внутри одной базы таблицы могут быть связаны через поле Links — аналог FOREIGN KEY в SQL. Разные базы изолированы: у каждой свои участники и права доступа.
6. Представления: Grid, Gallery, Form, Kanban, Calendar
Одни и те же данные — пять способов их показать. Представление (view) не копирует данные: таблица одна, а вот фильтры, сортировки и скрытые поля у каждого представления свои. Создавайте сколько угодно представлений для одной таблицы.
Grid — Таблица
Классическая сетка как в Excel. Быстрая сортировка, фильтрация, группировка. Можно скрыть ненужные колонки или зафиксировать первый столбец при горизонтальной прокрутке.
Когда использовать: Основной вид для ввода и редактирования данных.
Gallery — Галерея
Каждая строка — карточка с изображением (из поля Attachment) и несколькими выбранными полями. Похоже на Pinterest или интернет-магазин.
Когда использовать: Каталог товаров, библиотека изображений, список объектов недвижимости.
Form — Форма
Превращает таблицу в форму ввода. Можно задать порядок полей, добавить подсказки, сделать поля обязательными. Форму можно открыть по публичной ссылке без входа.
Когда использовать: Заявки, опросы, регистрации, форма обратной связи.
Kanban — Доска
Карточки, разбитые по столбцам на основе поля Single Select. Перетащите карточку в другой столбец — значение поля изменится автоматически.
Когда использовать: Воронка продаж, статусы задач, редакционный пайплайн.
Calendar — Календарь
Строки с полем Date отображаются как события. Виды по дню, неделе, месяцу и году. Нажмите на событие — откроется строка с полными данными.
Когда использовать: Контент-план, расписание, дедлайны, календарь мероприятий.
Чтобы создать новое представление: в левой панели под названием таблицы нажмите + Add View — выберите тип. У каждого представления свои настройки фильтрации, сортировки и видимых полей. Одно представление не влияет на другое.
7. REST API — автоматически для каждой таблицы
Каждая таблица в NocoDB автоматически получает полноценный REST API. Это значит: фронтенд на React, мобильное приложение, Python-скрипт или n8n-автоматизация могут читать и писать данные через HTTP-запросы — без отдельного бэкенда.
Swagger — интерактивная документация
NocoDB автоматически генерирует Swagger UI для вашего API. Откройте в браузере:
https://nocodb.ваш-домен.ru/api/swaggerТам вы увидите все доступные методы: получить список строк, создать, обновить, удалить. Прямо в Swagger можно попробовать запросы без написания кода.
Как получить API-токен
Перейдите в Team & Settings → API Tokens → + Add new token. Дайте токену название и скопируйте его — он показывается только один раз.
Примеры запросов
Получить все строки таблицы:
curl "https://nocodb.ваш-домен.ru/api/v1/db/data/noco/PROJECT_ID/TABLE_ID" \
-H "xc-token: ВАШ_ТОКЕН"Создать новую строку:
curl -X POST "https://nocodb.ваш-домен.ru/api/v1/db/data/noco/PROJECT_ID/TABLE_ID" \
-H "xc-token: ВАШ_ТОКЕН" \
-H "Content-Type: application/json" \
-d '{"Title": "Новая запись", "Status": "Активен"}'Где найти PROJECT_ID и TABLE_ID
Откройте любую таблицу в NocoDB и посмотрите на URL в браузере:/nc/p_abcd1234/t_efgh5678/...Часть после p_ — PROJECT_ID, после t_ — TABLE_ID. Или найдите их в Swagger UI — там уже подставлены правильные пути.
9. Импорт из CSV и Excel
Если у вас уже есть данные в Excel или CSV — не нужно вводить их вручную. NocoDB импортирует файл и создаёт таблицу автоматически, определяя типы полей.
- 1В боковой панели базы нажмите + Add table, затем вкладку Import Data.
- 2Выберите источник: CSV, Excel (.xlsx) или Airtable.
- 3Загрузите файл. NocoDB покажет предпросмотр — проверьте типы полей, при необходимости поправьте.
- 4Нажмите Import — создастся новая таблица с вашими данными.
Данные можно экспортировать обратно в CSV или Excel в любой момент: нажмите ... рядом с названием таблицы → Download → CSV / Excel.
10. Обновление и бэкап
Бэкап перед обновлением
При обновлении между версиями NocoDB автоматически выполняет миграции схемы. Обычно всё проходит гладко, но иногда при больших прыжках в версии могут быть проблемы. Сделайте дамп базы на всякий случай:
cd /opt/nocodb
docker compose exec db pg_dump -U nocodb nocodb > backup-$(date +%Y%m%d-%H%M).sqlОбновление NocoDB
cd /opt/nocodb
docker compose pull nocodb
docker compose up -d nocodbNocoDB пересоздаётся, данные в PostgreSQL volume остаются. После запуска откройте интерфейс и убедитесь, что всё работает.
Восстановление из бэкапа
# Остановить NocoDB
docker compose stop nocodb
# Восстановить базу
docker compose exec -T db psql -U nocodb nocodb < backup-20260308-1200.sql
# Запустить NocoDB обратно
docker compose start nocodbАвтоматические бэкапы в облако
Для регулярных автоматических бэкапов подойдёт Restic + Rclone — подробная инструкция в статье «Бэкап VPS с Restic и Rclone». Добавьте /opt/nocodb и файл дампа в список резервируемых путей.
11. Частые проблемы
❗ Контейнер nocodb постоянно рестартует или не стартует
Посмотрите логи. Самые частые причины: 1) Неверный формат NC_DB в .env — формат pg://db:5432?u=nocodb&p=ПАРОЛЬ&d=nocodb, убедитесь что нет лишних символов. 2) Пароль в NC_DB и POSTGRES_PASSWORD в docker-compose.yml не совпадают. 3) PostgreSQL ещё не готов — подождите минуту и проверьте снова.
docker compose logs nocodb --tail=50❗ После перезапуска все пользователи разлогинены
Вы не задали NC_AUTH_JWT_SECRET в .env. При каждом запуске контейнера NocoDB генерирует новый случайный JWT-секрет, и все выданные токены становятся недействительными. Добавьте постоянный секрет в .env и перезапустите контейнер:
# Добавить в /opt/nocodb/.env:
# NC_AUTH_JWT_SECRET=$(openssl rand -hex 32)
# (скопируйте вывод команды и вставьте вручную)
docker compose up -d nocodb❗ Белый экран или ошибки CORS при открытии через HTTPS
Убедитесь что NC_PUBLIC_URL в .env указан с вашим реальным доменом и схемой https://. NocoDB использует этот URL для генерации ссылок, редиректов и CORS-заголовков. Если URL не задан или указан с HTTP вместо HTTPS — могут быть проблемы с авторизацией. После исправления перезапустите контейнер.
docker compose up -d nocodb