VPSРейтинг
Self-hosted5 марта 2026 · 14 мин чтения

NocoDB на VPS: своя база данных как Excel — без Airtable

Airtable берёт $20 с человека в месяц. Google Таблицы не умеют в Kanban, формы и REST API. NocoDB — бесплатный open-source аналог: таблицы, связи, пять типов представлений, автоматический REST API. Ставится на VPS за 10 минут.

1. Что такое NocoDB и зачем он нужен

Представьте Excel, в котором можно переключаться между таблицей, Kanban-доской, галереей, формой и календарём — и всё это над одними и теми же данными. Добавьте автоматически сгенерированный REST API, связи между таблицами и управление правами доступа. Вот что такое NocoDB.

Такой инструмент уже существует — это Airtable. Он отличный, но дорогой: бесплатный план ограничен 1 000 строк, а командный стоит от $20 с человека в месяц. Команда из пяти человек — $100/мес только за базу данных. NocoDB делает то же самое, только бесплатно и на вашем сервере.

ВозможностьAirtable FreeNocoDB 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. Требования к серверу

ПараметрМинимумКомфортно
RAM1 ГБ2 ГБ (рекомендуется)
CPU1 vCPU2 vCPU
Диск10 ГБ SSD20+ ГБ (вложения и файлы)
ОСUbuntu 22.04 LTSUbuntu 22.04 / 24.04 LTS
Docker24.0+Последняя стабильная версия

NocoDB запускает два контейнера: само приложение на Node.js (~200–300 МБ) и PostgreSQL (~100–200 МБ). На 1 ГБ RAM всё умещается. Если на сервере уже работают другие сервисы — берите 2 ГБ.

3. Установка через Docker Compose

Мы запустим NocoDB с PostgreSQL в качестве хранилища. Это важно: без явного указания базы NocoDB использует SQLite — встроенный файл внутри контейнера. SQLite работает, но ненадёжен для продакшена: данные теряются при пересоздании контейнера, нет нормального бэкапа, плохо справляется с параллельными запросами. С PostgreSQL всё надёжно.

Шаг 1: установка Docker

Если Docker ещё не установлен:

Установить Docker одной командой
curl -fsSL https://get.docker.com | sh

Шаг 2: директория проекта

Создать папку для NocoDB
mkdir -p /opt/nocodb && cd /opt/nocodb

Шаг 3: JWT-секрет

NocoDB использует JWT-токены для аутентификации сессий. Если не задать секрет явно, он генерируется случайно при каждом старте контейнера — и все пользователи будут разлогинены при каждом перезапуске. Сгенерируйте постоянный секрет:

Сгенерировать JWT-секрет — скопируйте результат
openssl rand -hex 32

Шаг 4: файл .env

Создайте файл с настройками. Замените выделенные значения на свои:

/opt/nocodb/.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

/opt/nocodb/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: запуск

Запустить NocoDB и PostgreSQL
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-запись у своего регистратора:

DNS-запись (у регистратора домена)
nocodb.ваш-домен.ru  →  A  →  IP_ВАШЕГО_VPS

Конфиг Nginx

Создать файл конфигурации
nano /etc/nginx/sites-available/nocodb
/etc/nginx/sites-available/nocodb — вставить это содержимое
server {
    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 -t
Открыть порты 80 и 443 (если UFW включён)
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload
Получить SSL-сертификат
# Установить certbot, если ещё не установлен
apt install -y certbot python3-certbot-nginx

certbot --nginx -d nocodb.ваш-домен.ru
Перезапустить Nginx
systemctl reload nginx

Теперь NocoDB доступен по адресу https://nocodb.ваш-домен.ru.

5. Первый вход и создание базы

Откройте NocoDB в браузере. Если вы не задали NC_ADMIN_EMAIL в .env, первый экран — форма регистрации суперадмина. Это единственный аккаунт с полным доступом ко всему.

Требования к паролю суперадмина

NocoDB проверяет пароль на сложность: минимум 8 символов, хотя бы одна заглавная буква, одна цифра и один спецсимвол. Если пароль не проходит проверку — контейнер пишет ошибку в логи, но не падает, просто не устанавливает суперадмина.

  1. 1Введите email и пароль суперадмина → нажмите Sign Up. Первый зарегистрировавшийся — всегда суперадмин.
  2. 2После входа нажмите + New Base. Дайте базе название, например «CRM» или «Контент-план».
  3. 3Внутри базы нажмите + Add table — создастся первая таблица с дефолтными полями.
  4. 4Добавьте нужные поля через + в шапке таблицы. Доступно более 20 типов: Number, Single Select, Date, URL, Email, Checkbox, Attachment и другие.
  5. 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. Откройте в браузере:

Адрес Swagger UI
https://nocodb.ваш-домен.ru/api/swagger

Там вы увидите все доступные методы: получить список строк, создать, обновить, удалить. Прямо в Swagger можно попробовать запросы без написания кода.

Как получить API-токен

Перейдите в Team & Settings → API Tokens → + Add new token. Дайте токену название и скопируйте его — он показывается только один раз.

Примеры запросов

Получить все строки таблицы:

GET — получить строки таблицы
curl "https://nocodb.ваш-домен.ru/api/v1/db/data/noco/PROJECT_ID/TABLE_ID" \
  -H "xc-token: ВАШ_ТОКЕН"

Создать новую строку:

POST — создать строку
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 — там уже подставлены правильные пути.

8. Шаринг и совместная работа

NocoDB поддерживает два уровня совместного доступа: добавление коллег в базу как участников и публичный шаринг отдельных представлений по ссылке.

Роли участников

РольЧто может делать
OwnerПолный доступ, может удалять базу и управлять ролями
CreatorСоздавать и изменять таблицы, поля, представления
EditorДобавлять, редактировать и удалять строки, но не менять структуру
CommenterОставлять комментарии к строкам, только чтение данных
ViewerТолько просматривать данные

Чтобы пригласить коллегу: Base Settings → Collaborators → + Invite. Введите email и выберите роль. Если SMTP не настроен — скопируйте ссылку-приглашение и отправьте вручную через мессенджер.

Публичная ссылка на представление

Любое представление можно сделать публичным — тогда его видит любой по ссылке, без входа в систему. Можно также защитить ссылку паролем.

  1. 1Откройте нужное представление (например, Form-вид).
  2. 2В правом верхнем углу нажмите кнопку Share.
  3. 3Включите переключатель Enable public viewing.
  4. 4Скопируйте ссылку — отправьте тому, кто должен увидеть таблицу или заполнить форму.
  5. 5Опционально: включите Require password и задайте пароль для доступа.

Публичная форма — как Google Forms, но данные у вас

Создайте Form-представление, сделайте его публичным и отправьте ссылку. Люди заполнят форму без регистрации, ответы появятся в вашей таблице в реальном времени. Можно добавить Welcome-сообщение, сообщение после отправки и настроить, какие поля обязательны.

9. Импорт из CSV и Excel

Если у вас уже есть данные в Excel или CSV — не нужно вводить их вручную. NocoDB импортирует файл и создаёт таблицу автоматически, определяя типы полей.

  1. 1В боковой панели базы нажмите + Add table, затем вкладку Import Data.
  2. 2Выберите источник: CSV, Excel (.xlsx) или Airtable.
  3. 3Загрузите файл. NocoDB покажет предпросмотр — проверьте типы полей, при необходимости поправьте.
  4. 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

Обновить NocoDB до последней версии
cd /opt/nocodb
docker compose pull nocodb
docker compose up -d nocodb

NocoDB пересоздаётся, данные в 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

12. Частые вопросы

Нужен VPS для NocoDB и других self-hosted инструментов?

VPS для Docker-проектов →

Смотрите также