← Alle Vorlagen · Produktivität
NocoDB mit einem Klick deployen
No-Code-Datenbank: Tabellen wie in einer Tabellenkalkulation, Formulare, Kanban-Boards und Kalender, mit API
Eine selbst gehostete Alternative zu Airtable.
Was ist NocoDB?
NocoDB ist eine No-Code-Datenbankplattform: Tabellen sehen aus und funktionieren wie eine Tabellenkalkulation, und jede lässt sich auch als Formular, Galerie, Kanban-Board, Kalender, Karte oder Gantt-Diagramm ansehen. Felder enthalten Text, Zahlen, Datumsangaben, Auswahlen, Anhänge, Formeln, Verknüpfungen zu anderen Tabellen, Nachschlagefelder und Rollups. Jede Tabelle hat eine REST-API, Webhooks werden ausgelöst, wenn Datensätze erstellt, geändert oder gelöscht werden, und Tabellen lassen sich aus Airtable, CSV, Excel und JSON importieren.
Teams nutzen NocoDB statt Airtable, um ein CRM, ein Inventar, einen Redaktionskalender oder irgendeine gemeinsame Liste in einer Datenbank zu führen, die sie selbst kontrollieren. Diese Vorlage betreibt die kostenlose Community Edition mit PostgreSQL, legt den Super-Admin aus den Feldern an, bevor NocoDB irgendwem antwortet, und schließt die Registrierung, sodass nur dazukommt, wer eingeladen wurde. Der Haken: Die Sustainable Use License von NocoDB erlaubt interne und private Nutzung, aber keinen Weiterverkauf, und SSO sowie Berechtigungen pro Tabelle und Feld gehören zu den kostenpflichtigen Tarifen zum Selbsthosten.
NocoDB-Hosting auf Pethost
- Du meldest dich bei Pethost an, mit Passkey, GitHub oder Google. Noch keine Maschine? Du wählst einen Tarif, und der Link wartet, bis sie bereit ist.
- „Neues Projekt“ öffnet sich bei NocoDB. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: E-Mail, Admin-Passwort.
- In ein, zwei Minuten läuft NocoDB unter eigener Adresse mit HTTPS. Die Secrets werden zufällig erzeugt, und die Daten sind im nächtlichen Backup.
- Es ist ein Projekt wie jedes andere: Du oder dein Agent könnt es ändern, zurückrollen oder wiederherstellen.
Fragen zu NocoDB
Ist NocoDB kostenlos?
Die Community Edition zum Selbsthosten ist kostenlos, mit unbegrenzt vielen Datensätzen und Benutzern, unter der Sustainable Use License von NocoDB: Du darfst sie in deinem eigenen Unternehmen oder privat nutzen, aber nicht an andere verkaufen. Die kostenpflichtigen Tarife zum Selbsthosten beginnen bei 24 $ pro Benutzer im Monat bei jährlicher Abrechnung und bringen SSO und Berechtigungen pro Tabelle und Feld dazu.
NocoDB oder Airtable: Was ist der Unterschied?
Beide zeigen Tabellen wie eine Tabellenkalkulation, mit Formularen, Kanban und Galerien. Airtable läuft nur in seiner eigenen Cloud und kostet pro Benutzer, NocoDB dagegen läuft dort, wo du es deployst, und seine Community Edition begrenzt die Zahl der Datensätze nicht.
Kann ich meine Bases aus Airtable in NocoDB importieren?
Ja. NocoDB importiert eine Base über ihren geteilten Link, mit einem Personal Access Token von Airtable, das Datensätze lesen darf, und übernimmt Tabellen, Ansichten und Datensätze. Formelfelder kommen nicht mit, und der Link einer geteilten Ansicht bringt nur diese eine Tabelle.
Hat NocoDB eine API?
Ja. Jede Tabelle hat eine REST-API, die mit einem API-Token aufgerufen wird, und Webhooks schicken einen Request, wenn ein Datensatz erstellt, geändert oder gelöscht wird, sodass andere Apps und Skripte die Daten lesen und schreiben können.
Wie füge ich in NocoDB Personen hinzu?
Unter „Members & teams“ → „Mitglieder hinzufügen“, per E-Mail oder mit einem privaten Einladungslink, mit der Rolle, die du wählst. Diese Vorlage schließt die öffentliche Registrierung, sodass ohne Einladung niemand dazukommt. NocoDB verschickt Einladungen per E-Mail, sobald NC_SMTP_HOST und die übrigen NC_SMTP_-Einstellungen in der .env des Projekts stehen.
Wie viel RAM und Speicherplatz braucht NocoDB?
NocoDB braucht mit Postgres etwa 800 MB RAM, und seine Datenbank wächst mit deinen Datensätzen; Anhänge belegen so viel, wie ihre Dateien groß sind. Auf Pethost reicht dafür der Tarif Starter, mit Platz für weitere Apps daneben.
NocoDB: die Docker-Compose-Datei
Die Vorlage ist diese compose.yaml und die Variablen, die beim Erstellen in die .env des Projekts geschrieben werden. Pethost führt die Datei so aus, wie sie geschrieben ist.
Container: nocodb (nocodb/nocodb:2026.10.0), postgres (postgres:18-alpine).
Volumes, im nächtlichen Backup: 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:
Mehr in Produktivität
- MealieEine Rezeptverwaltung mit Essensplaner
- RyotEin Tracker für Filme, Serien, Bücher, Spiele und Workouts
- VikunjaTo-do-Listen und Projekte, mit Kanban- und Gantt-Ansicht
- ExcalidrawWhiteboard für handgezeichnete Diagramme und Skizzen, mit Live-Zusammenarbeit
- OdooBusiness-Apps in einem: CRM, Verkauf, Rechnungsstellung, Lager, Website, Projekte und mehr
- PLANKAKanban-Boards für Projekte und Teams, für alle in Echtzeit aktuell