NocoDB auf dem Synology NAS installieren: Airtable-Alternative auf eigener Datenbank
NocoDB legt eine Airtable-ähnliche Tabellenoberfläche über PostgreSQL, auf eigener Hardware. Die Anleitung zeigt den Stack aus vier Containern im Synology Container Manager mit Compose-Datei und Prüfung nach jedem Schritt.
Werbung Mit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Wer relationale Daten intern verwalten möchte, etwa Inventarlisten, CRM-Kontakte, Projekttracking oder Onboarding-Formulare, steht vor der Wahl: Airtable mit laufenden Kosten und Abhängigkeit von einer US-Cloud oder ein eigenes Werkzeug auf eigener Hardware. NocoDB legt eine tabellenähnliche Oberfläche über eine PostgreSQL-Datenbank, bietet Kanban-, Galerie-, Formular- und Kalenderansichten und liefert eine vollständige REST-API mit. Das Projekt erscheint in monatlichen Releases (Stand Oktober 2026: 2026.10.1) und eignet sich für den internen Einsatz im Unternehmen. Diese Anleitung richtet einen Stack aus vier Containern auf Ihrem Synology NAS ein: PostgreSQL als Datenbank statt SQLite, Redis als Job-Queue und ein eigener Worker-Container für CSV-Importe und Automationen.
Voraussetzungen
- Synology NAS mit DSM 7.2 oder neuer, Container Manager installiert
- Mindestens 2 GB freier RAM (empfohlen: 4 GB für den Stack mit PostgreSQL, Redis und Worker)
- Mindestens 10 GB freier Speicherplatz auf
/volume1für Datenbank und Anhänge - SSH-Zugang zum NAS, nötig für Ordneranlage und Rechtevergabe (Anleitung: SSH auf dem Synology NAS aktivieren und verbinden)
- Internetzugang für den Download der Images
nocodb/nocodb:latest,postgres:17.10,redis:7 - Optional: Synology-DDNS-Adresse (
*.synology.me) oder eigene Domain für HTTPS über einen Reverse Proxy
Schritt 1: Ordnerstruktur anlegen und Rechte setzen
Die Ordner müssen vor dem Start existieren, sonst scheitert das Projekt mit Bind mount failed. Neue Ordner erben auf dem Synology NAS die ACL der Freigabe. Redis schreibt als UID 999 und darf das dann trotz passendem Besitzer nicht; der Befehl chmod entfernt die ACL. PostgreSQL setzt Besitzer und Rechte seines Ordners selbst, NocoDB schreibt als root. Legen Sie die Ordner per SSH an und setzen Sie die Rechte für Redis:
sudo mkdir -p /volume1/docker/nocodb/{data,db,redis}
sudo chown -R 999:999 /volume1/docker/nocodb/redis
sudo chmod -R 755 /volume1/docker/nocodb/redis
Danach existieren drei Unterordner: data für NocoDB-Anhänge, db für die PostgreSQL-Dateien und redis für die Redis-Persistenz.
Prüfen Sie per SSH, ob alle drei Ordner existieren:
ls -la /volume1/docker/nocodb/Erwartet: drei Ordner (data, db, redis), redis mit dem Besitzer 999 und den Rechten drwxr-xr-x. Fehlt ein Ordner, wiederholen Sie mkdir.
Schritt 2: JWT-Secret und Passwörter generieren
NC_AUTH_JWT_SECRET signiert die Anmelde-Token. Ohne diese Variable erzeugt NocoDB selbst ein Secret und speichert es in der Datenbank. Ein fest gesetzter Wert macht die Installation aber unabhängig vom Datenbankinhalt und gilt für nocodb und worker gleichermaßen. Erzeugen Sie einmalig einen Zufallswert und notieren Sie ihn sicher. Ändern Sie ihn später, werden alle Nutzer abgemeldet.
openssl rand -hex 32
Der Befehl liefert 32 Byte als 64 Hexzeichen, zum Beispiel:
a3f8c2e1d94b67f0123456789abcdef0a3f8c2e1d94b67f0123456789abcdef0
Erzeugen Sie außerdem ein Datenbankpasswort (mindestens 16 Zeichen, Groß- und Kleinbuchstaben, Zahlen) und ein Admin-Passwort. Verzichten Sie im Datenbankpasswort auf &, ? und @, da es später Teil des NC_DB-Strings ist. Bewahren Sie alle Werte in einem Passwortmanager auf, etwa in Vaultwarden auf der Synology.
Die Ausgabe ist genau 64 Zeichen lang und enthält nur 0-9 und a-f. Länge prüfen:
openssl rand -hex 32 | wc -cErwartete Ausgabe: 65 (64 Zeichen plus Zeilenumbruch).
Schritt 3: Compose-Datei erstellen und Projekt anlegen
Öffnen Sie im Container Manager den Bereich Projekt und klicken Sie auf Erstellen. Vergeben Sie den Projektnamen nocodb und wählen Sie über Pfad festlegen den Ordner /docker/nocodb. Das Vorgehen im Detail beschreibt Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren.
Wählen Sie als Quelle docker-compose.yml erstellen und tragen Sie folgenden Inhalt ein. Er folgt dem offiziellen Beispiel quickstart-demo des Projekts. Ersetzen Sie SICHERES_DB_PASSWORT, HIER_64_ZEICHEN_ZUFALLSSTRING_EINSETZEN, NAS-IP sowie Admin-E-Mail und Admin-Passwort durch Ihre Werte:
services:
nocodb:
image: nocodb/nocodb:latest
container_name: nocodb
environment:
NC_DB: 'pg://db:5432?u=nocodb&p=SICHERES_DB_PASSWORT&d=nocodb'
NC_REDIS_URL: 'redis://redis:6379'
NC_SITE_URL: 'http://NAS-IP:8631'
NC_AUTH_JWT_SECRET: 'HIER_64_ZEICHEN_ZUFALLSSTRING_EINSETZEN'
NC_ADMIN_EMAIL: 'admin@beispiel.de'
NC_ADMIN_PASSWORD: 'SicheresAdmin!Passwort1'
NC_DISABLE_TELE: 'true'
NC_DISABLE_MUX: 'true'
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
ports:
- '8631:8080'
volumes:
- /volume1/docker/nocodb/data:/usr/app/data
networks:
- nocodb-network
healthcheck:
test: ['CMD-SHELL', 'wget -q --tries=1 --spider http://localhost:8080/api/v1/health || exit 1']
interval: 30s
timeout: 5s
retries: 5
start_period: 30s
worker:
image: nocodb/nocodb:latest
container_name: nocodb-worker
environment:
NC_DB: 'pg://db:5432?u=nocodb&p=SICHERES_DB_PASSWORT&d=nocodb'
NC_REDIS_URL: 'redis://redis:6379'
NC_SITE_URL: 'http://NAS-IP:8631'
NC_AUTH_JWT_SECRET: 'HIER_64_ZEICHEN_ZUFALLSSTRING_EINSETZEN'
NC_WORKER_CONTAINER: 'true'
depends_on:
nocodb:
condition: service_healthy
restart: unless-stopped
volumes:
- /volume1/docker/nocodb/data:/usr/app/data
networks:
- nocodb-network
db:
image: postgres:17.10
container_name: nocodb-db
environment:
POSTGRES_USER: nocodb
POSTGRES_PASSWORD: SICHERES_DB_PASSWORT
POSTGRES_DB: nocodb
volumes:
- /volume1/docker/nocodb/db:/var/lib/postgresql/data
restart: unless-stopped
networks:
- nocodb-network
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U nocodb -d nocodb']
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7
container_name: nocodb-redis
volumes:
- /volume1/docker/nocodb/redis:/data
restart: unless-stopped
networks:
- nocodb-network
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 10s
timeout: 5s
retries: 5
networks:
nocodb-network:
driver: bridge
Wichtige Details:
- NC_DB-Format: NocoDB erwartet das eigene Format
pg://HOST:PORT?u=USER&p=PASS&d=DBNAME. Das übliche PostgreSQL-URL-Format (postgresql://user:pass@host/db) funktioniert nicht. - Gemeinsames Volume:
nocodbundworkermüssen denselben Ordner auf/usr/app/dataeinbinden, damit der Worker auf hochgeladene Anhänge zugreifen kann. - PostgreSQL-Version: Das offizielle Beispiel nutzt
postgres:17.10,postgres:17zieht jeweils das neueste 17er-Release. Wechseln Sie nicht ohne Weiteres aufpostgres:18: Ab Version 18 erwartet das Image sein Volume unter/var/lib/postgresql, und eine bestehende 17er-Datenbank muss migriert werden. - depends_on mit Healthcheck: Ohne
condition: service_healthystartet der Worker, bevor die API bereit ist, und startet ständig neu. - NC_SITE_URL: Diese Adresse erscheint in E-Mail-Links und Webhooks. Nach Einrichtung eines Reverse Proxy tragen Sie hier die HTTPS-Adresse ein.
Prüfen Sie nach dem Fertigstellen in Schritt 4 per SSH, ob die Compose-Datei am richtigen Ort liegt:
grep "NC_DB" /volume1/docker/nocodb/docker-compose.ymlErwartet: zwei Zeilen mit NC_DB: 'pg://db:5432?u=nocodb (für nocodb und worker). Ohne Ausgabe liegt die Datei nicht im Projektordner.
Schritt 4: Projekt starten und Container-Status prüfen
Klicken Sie zweimal auf Weiter und dann auf Fertig. Docker lädt zunächst die drei Images, je nach Verbindung dauert das 2 bis 5 Minuten. Das Terminal endet mit Exit Code: 0, in der Projektliste zeigt nocodb den grünen Status. Die Startreihenfolge regeln die Healthchecks:
nocodb-db(PostgreSQL) undnocodb-redisstarten zuerst und parallel.nocodbstartet, sobald beide(healthy)melden.nocodb-workerstartet zuletzt, wennnocodbden Health-Endpunkt beantwortet.
Prüfen Sie per SSH den Status aller vier Container:
sudo docker ps --filter "name=nocodb" --format "table {{.Names}}\t{{.Status}}"Erwartete Ausgabe nach 60 bis 90 Sekunden:
NAMES STATUS
nocodb-worker Up X minutes
nocodb Up X minutes (healthy)
nocodb-redis Up X minutes (healthy)
nocodb-db Up X minutes (healthy)
Zeigt ein Container dauerhaft „Restarting“, prüfen Sie die Logs mit sudo docker logs nocodb. Häufigste Ursache ist ein falsch formatierter NC_DB-String.

Schritt 5: Erstanmeldung im Dashboard durchführen
Öffnen Sie im Browser (ist die DSM-Firewall aktiv, geben Sie vorher Port 8631 wie in Schritt 6 frei):
http://NAS-IP:8631/dashboard
Mit gesetzten Variablen NC_ADMIN_EMAIL und NC_ADMIN_PASSWORD erscheint die Anmeldemaske, sonst ein Registrierungsformular für den ersten Superadmin. Melden Sie sich mit den Zugangsdaten aus der Compose-Datei an, erstellen Sie eine neue Basis (entspricht einer Base in Airtable) und legen Sie eine Testtabelle an.
Rufen Sie per SSH den Health-Endpunkt auf:
curl -s http://localhost:8631/api/v1/healthErwartet wird eine JSON-Antwort, die mit {"message":"OK" beginnt und zusätzlich timestamp und uptime enthält. Zusammen mit der sichtbaren Oberfläche ist der Stack betriebsbereit.
Schritt 6: Firewall freischalten
Bei aktiver DSM-Firewall ist Port 8631 gesperrt. Geben Sie ihn unter Systemsteuerung → Sicherheit → Firewall → Regeln bearbeiten für Ihr lokales Subnetz frei. Details beschreibt DSM-Firewall: Ports für Docker-Container freigeben.
Für den Zugriff von außen öffnen Sie Port 8631 nicht direkt, sondern setzen einen Reverse Proxy ein (etwa den Nginx Proxy Manager auf der Synology), der HTTPS bereitstellt und nur Port 443 öffnet. Tragen Sie dann die HTTPS-Adresse in NC_SITE_URL ein. Aktivieren Sie im Proxy die WebSocket-Unterstützung (Header Upgrade und Connection), sonst aktualisieren sich geteilte Ansichten bei gleichzeitiger Bearbeitung nicht.
Rufen Sie http://NAS-IP:8631/dashboard von einem anderen Gerät im Heimnetz auf. Erscheint die Anmeldemaske, ist die Firewall-Regel korrekt. Mit Reverse Proxy prüfen Sie zusätzlich die HTTPS-Adresse.
Schritt 7: CSV-Import testen und API-Token erstellen
Zwei Funktionen sollten Sie direkt nach der Installation prüfen, beide hängen vom Worker und von Redis ab.
CSV-Import über den Worker
Öffnen Sie eine Tabelle, klicken Sie auf das Pluszeichen neben dem letzten Reiter und wählen Sie Import → CSV/Excel/JSON. Laden Sie eine kleine CSV-Testdatei hoch. Der Worker verarbeitet den Import als Hintergrundjob, ein Fortschrittsbalken zeigt den Stand. 100 Zeilen sind in wenigen Sekunden importiert.
API-Token erstellen
Öffnen Sie Team & Einstellungen → API-Tokens → + Neues Token, vergeben Sie einen sprechenden Namen (z. B. „Inventar-Integration“) und kopieren Sie das Token sofort, es wird nur einmal angezeigt. Die REST-API erreichen Sie anschließend unter http://NAS-IP:8631/api/v2. Die Swagger-Dokumentation einer Basis liegt unter /api/v1/db/meta/projects/BASIS-ID/swagger. Testen Sie das Token mit einem Aufruf, der Ihre Basen auflistet:
curl -s -H "xc-token: IHR_API_TOKEN" \
http://localhost:8631/api/v2/meta/bases/
Nach dem Import erscheinen alle Zeilen in der Tabelle, ohne Fehlermeldung. Der API-Aufruf liefert JSON mit einer Liste Ihrer Basen, nicht Unauthorized. Erscheint Unauthorized, wurde das Token unvollständig kopiert.
Grundlagen zum Betrieb finden Sie in Docker Compose absichern: Secrets, Healthchecks, Non-Root und Linux-Server absichern mit UFW und Fail2ban.
Troubleshooting / Typische Fehler
- „Invalid database url“ beim Start
NC_DBsteht im PostgreSQL-Standardformat. NocoDB erwartetpg://HOST:PORT?u=USER&p=PASS&d=DBNAME. Korrigieren Sie den Wert und erstellen Sie das Projekt neu.- Worker startet ständig neu
Redis ist nicht erreichbar oder
NC_REDIS_URLfehlt. Prüfen Siesudo docker logs nocodb-workerund obNC_REDIS_URL: 'redis://redis:6379'gesetzt ist.- Nutzer werden unerwartet abgemeldet
Anmelde-Token laufen standardmäßig nach 10 Stunden ab (
NC_JWT_EXPIRES_IN). Werden alle Nutzer nach einem Neustart abgemeldet, hat sichNC_AUTH_JWT_SECRETgeändert. Setzen Sie wieder den ursprünglichen Wert.- PostgreSQL startet nicht, „data directory has wrong ownership“
Der Ordner hat falsche Rechte oder das Volume-Ziel stimmt nicht. Für
postgres:17lautet es/var/lib/postgresql/data.- PostgreSQL startet nach Wechsel auf
postgres:18nicht Version 18 erwartet das Volume unter
/var/lib/postgresqlund kann 17er-Daten nicht direkt öffnen. Bleiben Sie beipostgres:17oder migrieren Sie per Dump und Restore.- „502 Bad Gateway“ im Browser
NocoDB ist noch nicht bereit. Warten Sie 60 bis 90 Sekunden und prüfen Sie mit
sudo docker ps, obnocodb(healthy)meldet.- Einladungslinks zeigen „localhost“
NC_SITE_URLfehlt oder zeigt aufhttp://localhost:8080. Tragen Sie die tatsächliche Adresse ein, z. B.https://nas.beispiel.de.- CSV-Import hängt oder bricht ohne Meldung ab
Redis oder der Worker laufen nicht. Prüfen Sie beide mit
sudo docker ps.
Häufige Fragen
Kann ich eine bestehende PostgreSQL-Instanz mitnutzen?
Technisch ja: Zeigen Sie NC_DB auf den externen Container und stellen Sie sicher, dass beide im selben Docker-Netzwerk liegen. Für den Produktivbetrieb empfiehlt sich eine eigene Instanz, damit Updates und das in PostgreSQL-Performance-Tuning für Einsteiger beschriebene Tuning keine anderen Anwendungen beeinflussen.
Wie unterscheidet sich NocoDB von Metabase?
Metabase ist ein Werkzeug für Auswertung und Reporting: Dashboards, SQL-Abfragen, Diagramme. NocoDB dient der Erfassung und Pflege von Daten in einer Tabellenoberfläche. Beide ergänzen sich: Pflege in NocoDB, Auswertung in Metabase.
Ist die Sustainable Use License wirklich „Open Source“?
Nein, nicht im Sinne der OSI. Die Sustainable Use License erlaubt die Nutzung für eigene interne Geschäftszwecke sowie für private und nicht kommerzielle Zwecke. Eine Weitergabe an andere ist nur unentgeltlich und nicht kommerziell erlaubt, ein Angebot als bezahlter Dienst für Dritte also nicht. Der interne Einsatz im eigenen Unternehmen auf eigenem NAS ist abgedeckt.
Wie führe ich ein Update auf eine neue NocoDB-Version durch?
Sichern Sie zuerst den Ordner /volume1/docker/nocodb/db bei gestopptem Projekt. Aktualisieren Sie dann im Container Manager die Images nocodb/nocodb:latest und postgres:17.10 (oder postgres:17) und erstellen Sie das Projekt über Aktion, Erstellen neu. NocoDB führt Datenbankmigrationen beim Start automatisch aus.
Version 2026.10.0 führt laut Release Notes die bisherigen Interfaces als klassische Apps unter Apps; Seiten, Zugriffe und veröffentlichte Versionen bleiben erhalten. Neu sind unter anderem das Nachverfolgen vergangener Workflow-Läufe und die Formatierung von Textformeln als farbige Einfachauswahl. Im Test des Updates von 2026.09.1 auf 2026.10.0 am 26.10.2026 mit dieser Compose-Datei (Pfade lokal) waren nocodb und worker nach rund 20 Sekunden wieder bereit, /api/v1/version meldete 2026.10.0, die vorher angelegte Basis war vorhanden, die Anmeldung des Admins funktionierte, und ein falsches Passwort wurde mit 400 abgelehnt. Wer ein bestimmtes Release festhalten will, ersetzt latest bei nocodb und worker durch denselben Versions-Tag, etwa nocodb/nocodb:2026.10.0.
Kann ich NocoDB mit Odoo verbinden?
Ja, über die REST-API von NocoDB oder über Webhooks, etwa wenn auf dem NAS auch Odoo als ERP/CRM läuft. Alternativ binden Sie die Odoo-Datenbank als externe Datenquelle in NocoDB ein.
Was passiert mit den Daten, wenn ich den nocodb-Container neu erstelle?
Die Nutzdaten liegen in /volume1/docker/nocodb/data (Anhänge) und /volume1/docker/nocodb/db (PostgreSQL). Solange diese Ordner erhalten bleiben und NC_AUTH_JWT_SECRET unverändert ist, stehen nach dem Neuerstellen alle Tabellen und Datensätze sofort wieder bereit.
Fazit
NocoDB ist eine aktiv gepflegte Airtable-Alternative, die sich auf dem Synology NAS mit vertretbarem Aufwand betreiben lässt. Mit PostgreSQL, Redis als Job-Queue und dem eigenen Worker ist der Stack für den Teambetrieb ausgelegt: CSV-Importe, Automationen und gleichzeitige Bearbeitung funktionieren zuverlässig. Die Daten bleiben auf eigener Hardware, ohne Abhängigkeit von einer US-Cloud.
Weiterführende Anleitungen und Quellen
- Container Manager auf dem Synology NAS: Docker-Compose-Projekt anlegen, starten und aktualisieren
- DSM-Firewall auf dem Synology NAS: Ports für Docker-Container freigeben
- Nginx Proxy Manager auf der Synology mit Container Manager einrichten: Reverse Proxy und SSL
- PostgreSQL-Performance-Tuning für Einsteiger
- Odoo auf dem Synology NAS installieren: ERP und CRM für kleine Unternehmen
- Vaultwarden auf der Synology: eigener Passwortmanager mit Docker und SQLite-Backup
Offizielle Quellen: NocoDB Self-Hosting Environment Variables | NocoDB Compose-Beispiele auf GitHub | NocoDB GitHub Repository | NocoDB auf Docker Hub


