MAATRIX / Блог / NocoDB на Ubuntu 24.04: пошаговая установка

NocoDB на Ubuntu 24.04: пошаговая установка

MAATRIX

Если команда привыкла работать в Airtable, но данные должны оставаться у вас, а не в чужом облаке — NocoDB закрывает этот вопрос. Он превращает обычную SQL-базу в удобный интерфейс с таблицами, вьюхами, kanban-досками и формами, при этом сами данные остаются реляционными и доступны через API и напрямую по SQL. Ниже — весь путь на чистом VPS с Ubuntu 24.04: Docker, docker-compose с PostgreSQL в качестве хранилища метаданных и рабочих таблиц, домен с HTTPS и то, как всё это бэкапить и обновлять без сюрпризов.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое NocoDB и когда он оправдан

NocoDB не хранит данные в собственном непрозрачном формате — он подключается к обычной реляционной базе (PostgreSQL, MySQL, MariaDB, SQL Server) и строит поверх неё табличный интерфейс: сортировки, фильтры, связи между таблицами, вложения, формы для сбора данных, kanban и календарные вьюхи. По сути это открытая альтернатива Airtable, но с полным контролем над данными и без лимитов на количество записей или пользователей, которые обычно упираются в тариф SaaS-сервиса.

Типичные сценарии: внутренняя CRM для отдела продаж, каталог оборудования с фото и статусами, трекер задач для небольшой команды, база клиентов, которую нельзя выгружать за периметр компании из-за требований 152-ФЗ или внутренней политики безопасности. Если данные уже лежат в существующей PostgreSQL или MySQL базе — NocoDB можно подключить к ней напрямую, не мигрируя ничего, и получить удобный UI поверх production-таблиц (с осторожностью, конечно — лучше через реплику или отдельную схему).

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

Требования к серверу и подготовка Ubuntu 24.04

Для одиночной команды до 10-20 пользователей достаточно 2 vCPU и 2 ГБ RAM — NocoDB сам по себе лёгкий, основной расход памяти уйдёт на PostgreSQL под ним. Если планируете держать несколько баз и активно работать с вложениями (загрузка файлов в записи), берите 4 ГБ RAM и SSD от 40 ГБ — вложения хранятся на диске сервера, если не подключено внешнее S3-хранилище.

Локацию сервера выбирайте по аудитории: для внутреннего инструмента российской команды логичен RU-сервер — так ниже задержка и данные физически остаются в стране. Для интернациональной команды или интеграций с зарубежными API подойдёт US или UK.

Перед началом обновите систему и создайте пользователя с sudo, если работаете не под ним:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl ca-certificates gnupg

Сразу закройте лишние порты фаерволом — открытым наружу должен быть только SSH и, позже, 80/443 для веб-доступа. Как настроить UFW с нуля, разобрано в статье про установку и настройку фаервола UFW на Ubuntu 24.04.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Docker и Docker Compose

NocoDB официально распространяется как Docker-образ, и это самый предсказуемый способ его развернуть — без конфликтов версий Node.js и системных зависимостей. Ставим Docker из официального репозитория:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Добавьте своего пользователя в группу docker, чтобы не писать sudo перед каждой командой, и перелогиньтесь:

sudo usermod -aG docker $USER
newgrp docker

Проверьте, что всё встало:

docker --version
docker compose version

Развёртывание NocoDB через docker-compose с PostgreSQL

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

Создайте рабочую директорию и файл docker-compose.yml:

mkdir -p ~/nocodb && cd ~/nocodb
nano docker-compose.yml

Содержимое файла:

services:
  nocodb-db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: nocodb
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: замените_на_свой_пароль
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U nocodb"]
      interval: 5s
      timeout: 5s
      retries: 10

  nocodb:
    image: nocodb/nocodb:latest
    restart: unless-stopped
    depends_on:
      nocodb-db:
        condition: service_healthy
    environment:
      NC_DB: "pg://nocodb-db:5432?u=nocodb&p=замените_на_свой_пароль&d=nocodb"
      NC_AUTH_JWT_SECRET: замените_на_случайную_строку_32+_символа
      NC_PUBLIC_URL: https://nocodb.ваш-домен.ru
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./ncdata:/usr/app/data

Пароль и JWT-секрет сгенерируйте сразу, не оставляя заглушки:

openssl rand -hex 24

Обратите внимание на порт: контейнер NocoDB слушает на 127.0.0.1:8080, а не на всех интерфейсах — наружу его открывать не нужно, доступ будет идти через reverse proxy с HTTPS, о котором ниже. Запускаем:

docker compose up -d
docker compose logs -f nocodb

В логах дождитесь строки о старте сервера на порту 8080 без ошибок подключения к базе. Если PostgreSQL ещё не успел проинициализироваться при первом старте — depends_on с condition: service_healthy как раз для этого и нужен, но иногда всё равно стоит перезапустить контейнер nocodb командой docker compose restart nocodb, если он стартовал раньше готовности базы.

Домен, HTTPS и переменные окружения

Открывать NocoDB по IP и HTTP в 2026 году не стоит — браузеры это не любят, а данные пользователей и cookies сессии будут идти в открытом виде. Сначала привяжите домен или поддомен к IP сервера через A-запись — как это сделать с нуля, описано в статье про настройку домена и DNS на Ubuntu 24.04.

Дальше нужен reverse proxy с автоматическим выпуском сертификата. Простой вариант — nginx с certbot:

sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/nocodb

Конфиг:

server {
    listen 80;
    server_name nocodb.ваш-домен.ru;

    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;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Активируйте сайт и получите сертификат:

sudo ln -s /etc/nginx/sites-available/nocodb /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d nocodb.ваш-домен.ru

После того как HTTPS настроен, обновите NC_PUBLIC_URL в docker-compose.yml на итоговый адрес с https:// и перезапустите: docker compose up -d. Это важно для корректной работы шеринга публичных вьюх и вебхуков — если URL не совпадает с реальным, ссылки на вложения и формы будут генерироваться неправильно.

Резервное копирование и обновление

Все данные NocoDB — и метаданные конфигурации, и содержимое таблиц — живут в PostgreSQL внутри тома ./pgdata, плюс вложения в ./ncdata. Бэкапить нужно оба каталога, но основной актив — база. Простой скрипт для дампа:

#!/bin/bash
BACKUP_DIR=/home/$USER/nocodb-backups
mkdir -p $BACKUP_DIR
docker compose -f /home/$USER/nocodb/docker-compose.yml exec -T nocodb-db \
  pg_dump -U nocodb nocodb | gzip > $BACKUP_DIR/nocodb-$(date +%F).sql.gz
# храним 14 дней
find $BACKUP_DIR -name "*.sql.gz" -mtime +14 -delete

Повесьте его на cron раз в сутки (crontab -e, строка вида 0 3 * * * /home/user/backup-nocodb.sh). Для более полного решения — с версионированием, шифрованием и хранением вне сервера — дамп PostgreSQL и каталог вложений можно добавить как обычные источники в BorgBackup или другой инструмент резервного копирования, который уже используется на сервере.

Обновление NocoDB — это обновление образа:

cd ~/nocodb
docker compose pull
docker compose up -d

Перед серьёзным обновлением (смена мажорной версии) обязательно сделайте свежий дамп базы — NocoDB активно развивается, и в редких случаях миграции схемы между версиями могут идти не идеально гладко. Проверяйте release notes на GitHub-странице проекта перед апдейтом продакшн-инстанса, а не обновляйтесь вслепую по latest.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

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

Можно ли подключить NocoDB к уже существующей базе данных с продакшн-данными?

Да, NocoDB умеет подключаться к внешним PostgreSQL/MySQL как к дополнительному источнику данных через раздел Data Sources в интерфейсе, отдельно от своей внутренней базы метаданных. Для продакшн-таблиц лучше давать read-only пользователя или подключаться через реплику, чтобы случайное редактирование через UI не задело боевые процессы.

Чем NocoDB отличается от связки n8n + база?

Это разные инструменты: n8n — движок автоматизации и workflow, а NocoDB — интерфейс для просмотра и редактирования табличных данных. Они хорошо дополняют друг друга: NocoDB отдаёт REST API и вебхуки, которые n8n может использовать как триггер или источник данных.

Нужен ли отдельный сервер под NocoDB или можно на общем с другими сервисами?

Можно держать на общем сервере вместе с другими Docker-приложениями, если ресурсов достаточно. Для управления несколькими сервисами на одной машине с автоматическим SSL и деплоем удобны панели вроде Coolify — в них NocoDB разворачивается по шаблону в пару кликов поверх того же docker-compose подхода.

Как ограничить доступ к NocoDB только для сотрудников офиса?

Проще всего — через фаервол или VPN: закрыть 443 порт nginx правилом UFW для конкретных IP-адресов офиса, либо поднять WireGuard и пускать трафик к NocoDB только через VPN-туннель, не публикуя сервис в открытый интернет вообще.

Что будет, если закончится место на диске под вложениями?

NocoDB начнёт выдавать ошибки при загрузке файлов, а PostgreSQL может перестать принимать записи. Мониторьте свободное место (df -h) и при росте объёма вложений либо расширяйте диск, либо переключайтесь на внешнее S3-совместимое хранилище через переменные NC_S3_* — тогда файлы уходят в объектное хранилище, а не на локальный диск сервера.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →