---
title: "NocoDB Docker Compose und Hosting mit einem Klick"
description: "NocoDB selbst hosten: eine Datenbank als Tabellen, Formulare und Kanban-Boards für alle. Die Airtable-Alternative mit PostgreSQL, mit einem Klick."
---

[← Alle Vorlagen](https://pethost.dev/de/templates/) · [Produktivität](https://pethost.dev/de/templates/productivity/)

# 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.

[Auf Pethost deployen](https://console.pethost.dev/?template=nocodb)

## 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

1. 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.
2. „Neues Projekt“ öffnet sich bei NocoDB. Du füllst aus, was die App braucht, und klickst auf „Projekt erstellen“: **E-Mail**, **Admin-Passwort**.
3. 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.
4. 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:
```

[compose.yaml](https://pethost.dev/templates/nocodb/compose.yaml)[Auf GitHub ansehen](https://github.com/pethost-dev/templates/tree/main/nocodb)

## [Mehr in Produktivität](https://pethost.dev/de/templates/productivity/)

- [**Mealie**Eine Rezeptverwaltung mit Essensplaner](https://pethost.dev/de/templates/mealie/)
- [**Ryot**Ein Tracker für Filme, Serien, Bücher, Spiele und Workouts](https://pethost.dev/de/templates/ryot/)
- [**Vikunja**To-do-Listen und Projekte, mit Kanban- und Gantt-Ansicht](https://pethost.dev/de/templates/vikunja/)
- [**Excalidraw**Whiteboard für handgezeichnete Diagramme und Skizzen, mit Live-Zusammenarbeit](https://pethost.dev/de/templates/excalidraw/)
- [**Odoo**Business-Apps in einem: CRM, Verkauf, Rechnungsstellung, Lager, Website, Projekte und mehr](https://pethost.dev/de/templates/odoo/)
- [**PLANKA**Kanban-Boards für Projekte und Teams, für alle in Echtzeit aktuell](https://pethost.dev/de/templates/planka/)

Pethost · Stephan Gomer · NIP 1133096755

Pethost

- [Vorlagen](https://pethost.dev/de/templates/)
- [Über uns](https://pethost.dev/about/)
- [Doku](https://pethost.dev/docs/)
- [Blog](https://pethost.dev/de/blog/)
- [API](https://pethost.dev/docs/api/)
- [CLI](https://pethost.dev/docs/cli/)
- [Plugin](https://github.com/pethost-dev/plugin)
- [AGB](https://pethost.dev/terms/)
- [Datenschutz](https://pethost.dev/privacy/)
- [Erstattung](https://pethost.dev/refunds/)
- [support@pethost.dev](mailto:support@pethost.dev)

Datenbanken

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

Vergleiche

- [Coolify vs Dokploy vs CapRover vs Dokku](https://pethost.dev/de/blog/coolify-vs-dokploy-vs-caprover-vs-dokku/)
- [Coolify Cloud vs Dokploy Cloud](https://pethost.dev/de/blog/coolify-cloud-vs-dokploy-cloud/)
- [Railway vs Render vs Fly.io Preise](https://pethost.dev/de/blog/railway-vs-render-vs-fly-io-pricing/)
- [Managed Hosting für Docker Compose](https://pethost.dev/de/blog/managed-docker-compose-hosting/)

Alternativen

- [Railway-Alternativen](https://pethost.dev/de/blog/railway-alternatives/)
- [Heroku-Alternativen](https://pethost.dev/de/blog/heroku-alternatives/)
- [Dokploy-Alternativen](https://pethost.dev/de/blog/dokploy-alternatives/)
- [Coolify-Alternativen](https://pethost.dev/de/blog/coolify-alternatives/)
- [Render-Alternativen](https://pethost.dev/de/blog/render-alternatives/)
- [Sliplane-Alternativen](https://pethost.dev/de/blog/sliplane-alternatives/)
