---
title: "NocoDB: Docker Compose и хостинг в один клик"
description: "Self-hosted NocoDB превращает базу данных в электронные таблицы, формы и канбан-доски, понятные каждому. Альтернатива Airtable с PostgreSQL в один клик."
---

[← Все шаблоны](https://pethost.dev/ru/templates/) · [Продуктивность](https://pethost.dev/ru/templates/productivity/)

# Задеплойте NocoDB в один клик

No-code база данных в виде электронных таблиц, с формами, канбан-досками, календарями и API

Альтернатива Airtable на вашей машине.

[Задеплоить на Pethost](https://console.pethost.dev/?template=nocodb)

## Что такое NocoDB?

NocoDB — no-code платформа для баз данных: таблицы выглядят и работают как электронные, а каждую из них можно показать еще и как форму, галерею, канбан-доску, календарь, карту или диаграмму Ганта. В полях хранятся текст, числа, даты, варианты выбора, вложения, формулы, ссылки на другие таблицы, подстановки (Lookup) и свертки (Rollup). У каждой таблицы есть REST API, вебхуки срабатывают, когда записи создаются, меняются или удаляются, а таблицы можно импортировать из Airtable, CSV, Excel и JSON.

Команды используют NocoDB вместо Airtable, чтобы вести CRM, учет инвентаря, контент-план или любой общий список в базе данных под своим контролем. Этот шаблон запускает бесплатную редакцию Community с PostgreSQL, создает супер-администратора по данным из полей еще до того, как NocoDB начнет кому-либо отвечать, и закрывает регистрацию, так что люди попадают в него только по приглашению. Подвох: лицензия Sustainable Use License от NocoDB разрешает внутреннее и личное использование, но не перепродажу, а SSO и права доступа на уровне таблиц и полей входят в платные тарифы для self-hosted.

## Хостинг NocoDB на Pethost

1. Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
2. Окно «Новый проект» открывается на приложении NocoDB. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: **Электронная почта**, **Пароль администратора**.
3. Через минуту-две NocoDB работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
4. Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.

## Вопросы про NocoDB

**NocoDB бесплатный?**

Self-hosted редакция Community бесплатна, без ограничений на число записей и пользователей, и распространяется по лицензии Sustainable Use License от NocoDB: ее можно использовать внутри своей компании или для личных целей, но не продавать другим. Платные тарифы для self-hosted стоят от 24 $ за пользователя в месяц при оплате за год и добавляют SSO и права доступа на уровне таблиц и полей.

**NocoDB или Airtable: в чем разница?**

Оба показывают таблицы как электронные, с формами, канбаном и галереями. Airtable работает только в облаке Airtable, с оплатой за каждого пользователя, а NocoDB — там, где вы его задеплоите, и его редакция Community не ограничивает число записей.

**Можно ли импортировать базы Airtable в NocoDB?**

Да. NocoDB импортирует базу по ее общей ссылке с персональным токеном доступа Airtable (personal access token), которому разрешено читать записи, и переносит таблицы, представления и записи. Поля с формулами не переносятся, а ссылка на общее представление переносит только одну эту таблицу.

**Есть ли у NocoDB API?**

Да. У каждой таблицы есть REST API, который вызывают с API-токеном, а вебхуки отправляют запрос, когда запись создается, меняется или удаляется, так что другие приложения и скрипты могут читать и записывать данные.

**Как добавить людей в NocoDB?**

В разделе «Members & teams» → «Добавить участников», по почте или по приватной ссылке-приглашению, с выбором роли. Этот шаблон закрывает публичную регистрацию, поэтому без приглашения никто не присоединится. Приглашения NocoDB отправляет по почте, как только в .env проекта появятся NC_SMTP_HOST и остальные настройки NC_SMTP_.

**Сколько памяти и диска нужно NocoDB?**

NocoDB занимает около 800 MB памяти вместе с Postgres, а его база данных растет вместе с вашими записями; вложения занимают столько, сколько весят их файлы. На Pethost ему хватит тарифа Starter, и рядом останется место для других приложений.

## NocoDB: файл Docker Compose

Шаблон — это этот compose.yaml и переменные, которые пишутся в .env проекта при его создании. Pethost запускает файл так, как он написан.

**Контейнеры:** nocodb (nocodb/nocodb:2026.10.0), postgres (postgres:18-alpine).

**Тома, в ночном бэкапе:** data, db.

```
services:
  nocodb:
    image: nocodb/nocodb:2026.10.0
    restart: unless-stopped
    # Any setting of NocoDB can be added to the project's .env, such as NC_SMTP_HOST and the other
    # NC_SMTP_ settings, which send its invitations and password resets by email.
    env_file: .env
    environment:
      NC_DB: pg://postgres:5432?u=nocodb&p=${POSTGRES_PASSWORD}&d=nocodb
      NC_AUTH_JWT_SECRET: ${JWT_SECRET}
      NC_SITE_URL: ${URL}
      # The super admin is made from these at the first start, before NocoDB answers anyone, and
      # its email and password are set again from them at every start: change them here.
      NC_ADMIN_EMAIL: ${ADMIN_EMAIL}
      NC_ADMIN_PASSWORD: ${ADMIN_PASSWORD}
      # Uploaded files are served only to those signed in, through links that expire.
      NC_SECURE_ATTACHMENTS: "true"
    # A new NocoDB lets anyone sign up, and only its super admin closes that, in Account → Setup.
    # So until that setting has been saved once, NocoDB runs on port 8081, which nobody reaches,
    # and the super admin closes sign-up there; only then does it answer on 8080. Turned on again
    # in NocoDB later, sign-up stays open.
    command:
      - sh
      - -c
      - |
        set -e
        cd /usr/src/app
        if ! node -e '
          const { Client } = require("pg");
          const url = new URL(process.env.NC_DB);
          const params = url.searchParams;
          const connection = { host: url.hostname, port: Number(url.port), user: params.get("u"), password: params.get("p"), database: params.get("d") };
          (async () => {
            for (let i = 0; i < 60; i++) {
              const db = new Client(connection);
              try {
                await db.connect();
                const result = await db.query("select 1 from nc_store where key = $$1", ["nc-app-settings"]);
                process.exit(result.rowCount > 0 ? 0 : 1);
              } catch (error) {
                // No such table: a new database, which the migrations of NocoDB have yet to fill.
                if (error.code === "42P01") process.exit(1);
                await db.end().catch(() => {});
                await new Promise((done) => setTimeout(done, 1000));
              }
            }
            process.exit(1);
          })();
        '; then
          PORT=8081 node --no-wasm-dynamic-tiering --no-wasm-tier-up docker/index.js &
          setup=$$!
          node -e '
            const base = "http://127.0.0.1:8081";
            const call = async (path, body, token) => {
              const response = await fetch(base + path, {
                method: "POST",
                headers: { "content-type": "application/json", ...(token ? { "xc-auth": token } : {}) },
                body: JSON.stringify(body)
              });
              if (!response.ok) throw new Error(path + ": " + response.status + " " + (await response.text()));
              return response.json();
            };
            const closeSignUp = async () => {
              const { token } = await call("/api/v1/auth/user/signin", { email: process.env.NC_ADMIN_EMAIL, password: process.env.NC_ADMIN_PASSWORD });
              await call("/api/v1/app-settings", { invite_only_signup: true }, token);
            };
            (async () => {
              let failure;
              for (let i = 0; i < 300; i++) {
                try {
                  return await closeSignUp();
                } catch (error) {
                  failure = error;
                  await new Promise((done) => setTimeout(done, 1000));
                }
              }
              console.error(failure);
              process.exit(1);
            })();
          '
          kill $$setup
          wait $$setup || true
        fi
        exec /usr/src/appEntry/start.sh
    volumes:
      - data:/usr/app/data
    depends_on:
      postgres:
        condition: service_healthy
    # The port listens before NocoDB is ready: the deploy waits for its health.
    healthcheck:
      test: ["CMD-SHELL", "wget -q --tries=1 --spider http://127.0.0.1:8080/api/v1/health || exit 1"]
      interval: 5s
      timeout: 5s
      retries: 5
      start_period: 120s

  postgres:
    image: postgres:18-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: nocodb
      POSTGRES_USER: nocodb
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - db:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -h 127.0.0.1 -U nocodb -d nocodb"]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 30s

volumes:
  data:
  db:
```

[compose.yaml](https://pethost.dev/templates/nocodb/compose.yaml)[Открыть на GitHub](https://github.com/pethost-dev/templates/tree/main/nocodb)

## [Еще в категории «Продуктивность»](https://pethost.dev/ru/templates/productivity/)

- [**Mealie**Менеджер рецептов и планировщик питания](https://pethost.dev/ru/templates/mealie/)
- [**Ryot**Трекер фильмов, сериалов, книг, игр и тренировок](https://pethost.dev/ru/templates/ryot/)
- [**Vikunja**Списки задач и проекты, с канбаном и диаграммой Ганта](https://pethost.dev/ru/templates/vikunja/)
- [**Excalidraw**Доска для диаграмм и набросков в стиле рисунка от руки, с совместной работой в реальном времени](https://pethost.dev/ru/templates/excalidraw/)
- [**Odoo**Бизнес-приложения в одной системе: CRM, продажи, выставление счетов, склад, сайт, проекты и многое другое](https://pethost.dev/ru/templates/odoo/)
- [**PLANKA**Канбан-доски для проектов и команд, которые обновляются у всех в реальном времени](https://pethost.dev/ru/templates/planka/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Шаблоны](https://pethost.dev/ru/templates/)
- [О нас](https://pethost.dev/about/)
- [Документация](https://pethost.dev/docs/)
- [Блог](https://pethost.dev/ru/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Плагин](https://github.com/pethost-dev/plugin)
- [Условия](https://pethost.dev/terms/)
- [Конфиденциальность](https://pethost.dev/privacy/)
- [Возвраты](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Базы данных

- [Postgres](https://pethost.dev/ru/postgres/)

Сравнения

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/ru/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/ru/blog/coolify-cloud-vs-dokploy-cloud/)
- [Цены Railway, Render и Fly.io](https://pethost.dev/ru/blog/railway-vs-render-vs-fly-io-pricing/)
- [Управляемый хостинг Docker Compose](https://pethost.dev/ru/blog/managed-docker-compose-hosting/)

Альтернативы

- [Альтернативы Railway](https://pethost.dev/ru/blog/railway-alternatives/)
- [Альтернативы Heroku](https://pethost.dev/ru/blog/heroku-alternatives/)
- [Альтернативы Dokploy](https://pethost.dev/ru/blog/dokploy-alternatives/)
- [Альтернативы Coolify](https://pethost.dev/ru/blog/coolify-alternatives/)
- [Альтернативы Render](https://pethost.dev/ru/blog/render-alternatives/)
- [Альтернативы Sliplane](https://pethost.dev/ru/blog/sliplane-alternatives/)
