← Все шаблоны · Продуктивность
Задеплойте NocoDB в один клик
No-code база данных в виде электронных таблиц, с формами, канбан-досками, календарями и API
Альтернатива Airtable на вашей машине.
Что такое 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
- Вы входите в Pethost — с passkey, через GitHub или Google. Машины еще нет? Вы выбираете тариф, и ссылка ждет, пока машина не будет готова.
- Окно «Новый проект» открывается на приложении NocoDB. Вы заполняете то, что оно просит, и нажимаете «Создать проект»: Электронная почта, Пароль администратора.
- Через минуту-две NocoDB работает по своему адресу с HTTPS. Секреты создаются случайно, а данные попадают в ночной бэкап.
- Это проект как любой другой: вы или ваш агент можете его изменить, откатить или восстановить.
Вопросы про 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:
Еще в категории «Продуктивность»
- MealieМенеджер рецептов и планировщик питания
- RyotТрекер фильмов, сериалов, книг, игр и тренировок
- VikunjaСписки задач и проекты, с канбаном и диаграммой Ганта
- ExcalidrawДоска для диаграмм и набросков в стиле рисунка от руки, с совместной работой в реальном времени
- OdooБизнес-приложения в одной системе: CRM, продажи, выставление счетов, склад, сайт, проекты и многое другое
- PLANKAКанбан-доски для проектов и команд, которые обновляются у всех в реальном времени