Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Synology / NAS 11.09.2026 · 11 min Lesezeit

Odoo auf dem Synology NAS installieren: ERP und CRM für kleine Unternehmen

Odoo 20.0 Community mit PostgreSQL 17 im Synology Container Manager: Master-Passwort, gesperrter Datenbank-Manager, Backup aus Dump und Filestore, Updates und Versionswechsel.

Geprüft am 14.10.2026 · für odoo 20.0

WerbelinksMit * 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

Schwarzes NAS auf einem Holzregal neben Papierstapel, Karton und Zimmerpflanze im sonnigen Büro

Odoo ist ein quelloffenes ERP-System mit Apps für CRM, Verkauf, Rechnungsstellung, Lager, Einkauf und Projekte. Die Community Edition steht unter LGPLv3 und lässt sich auf einem Synology NAS als Zwei-Container-Stack aus Odoo und PostgreSQL im Container Manager betreiben. Diese Anleitung führt Sie durch Ordnerstruktur, Konfiguration, Compose-Projekt, erste Datenbank, Absicherung des Datenbank-Managers, Backup und Versionswechsel.

Voraussetzungen

  • Synology NAS mit DSM 7.2 oder neuer und installiertem Container Manager. Das offizielle Image odoo wird laut Dockerfile für amd64, arm64 und ppc64le gebaut.
  • 4 GB RAM als Untergrenze für einen kleinen Betrieb, 8 GB, wenn auf dem NAS weitere Dienste laufen.
  • Mindestens 20 GB frei auf dem Volume; Datenbank und Filestore wachsen mit Belegen und Anhängen.
  • File Station und einen Texteditor (DSM Text Editor oder lokal) für die Konfigurationsdatei.
  • SSH nur für Backup-Befehle und Logs (SSH auf dem Synology NAS aktivieren und verbinden). Die Einrichtung selbst läuft über die DSM-Oberfläche.
  • Für Zugriff von außen: eigene Domain und ein Zertifikat in DSM.

Eckdaten auf einen Blick

ParameterWert
Odoo-Imageodoo:20.0 (Release September 2026)
Datenbank-Imagepostgres:17 (Odoo 20 verlangt PostgreSQL 16 oder neuer)
Web-Port8069 (HTTP)
Port 8072nur im Multiprocessing-Modus (workers größer 0) für Websockets, im Standardmodus nicht nötig
Filestore/volume1/docker/odoo/web-data:/var/lib/odoo
Datenbank/volume1/docker/odoo/db:/var/lib/postgresql/data
Addons/volume1/docker/odoo/addons:/mnt/extra-addons
Konfiguration/volume1/docker/odoo/config:/etc/odoo

Schritt 1: Verzeichnisstruktur anlegen

Öffnen Sie die File Station und legen Sie im Ordner /volume1/docker den Ordner odoo an. Darin erstellen Sie vier Unterordner:

  • db: Datendateien von PostgreSQL
  • web-data: Odoo-Datenverzeichnis mit dem Filestore (Anhänge, Bilder, Berichte)
  • addons: zusätzliche Module, darf leer bleiben
  • config: die Datei odoo.conf

Bind-Mounts übernehmen die Rechte des NAS-Ordners. Kann der Container nicht schreiben, scheitert später das Anlegen der Datenbank oder das Speichern von Anhängen. Wie Sie Rechte für Container-Ordner setzen, zeigt Docker-Ordner und Berechtigungen auf dem Synology NAS.

Verifizieren: In der File Station zeigt /volume1/docker/odoo genau die Unterordner db, web-data, addons und config.

Schritt 2: Master-Passwort in odoo.conf setzen

Das Master-Passwort (admin_passwd) schützt die Bildschirme des Datenbank-Managers, über die sich Datenbanken anlegen, löschen, sichern und wiederherstellen lassen. Laut Odoo-Dokumentation lässt es sich nur in der Konfigurationsdatei setzen und soll ein zufällig erzeugter Wert sein. In der Vorlage des Docker-Images ist die Zeile auskommentiert. Legen Sie deshalb vor dem ersten Start /volume1/docker/odoo/config/odoo.conf mit diesem Inhalt an:

[options]
admin_passwd = IHR_ZUFAELLIGES_MASTER_PASSWORT
addons_path = /mnt/extra-addons
data_dir = /var/lib/odoo
http_interface = 0.0.0.0
proxy_mode = True

Die Zeilen addons_path und data_dir entsprechen der Vorlage des offiziellen Images. http_interface = 0.0.0.0 lässt Odoo auf allen Schnittstellen im Container lauschen; in unserem Test mit Odoo 20.0 meldete das Log ohne diese Zeile HTTP service running on 127.0.0.1:8069, und die Oberfläche war trotz Portfreigabe nicht erreichbar. proxy_mode = True benötigen Sie, sobald Odoo hinter einem Reverse Proxy läuft (Schritt 7); dann wertet Odoo die X-Forwarded-*-Header aus. Ein geeignetes Passwort erzeugt die Odoo-Doku zum Beispiel per SSH mit:

python3 -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'

Bewahren Sie das Master-Passwort im Passwortmanager auf, getrennt von den Benutzerkonten.

Verifizieren: Die Datei heißt exakt odoo.conf (ohne .txt) und enthält eine Zeile admin_passwd mit Ihrem Wert statt des Platzhalters.

Schritt 3: Compose-Stack im Container Manager anlegen

Öffnen Sie den Container Manager, wählen Sie Projekt und dann Erstellen. Projektname odoo, Pfad /volume1/docker/odoo, Quelle „compose.yaml erstellen“. Fügen Sie ein:

services:
  odoo-db:
    image: postgres:17
    container_name: odoo-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=IHR_DB_PASSWORT
    volumes:
      - /volume1/docker/odoo/db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U odoo"]
      interval: 10s
      timeout: 5s
      retries: 5

  odoo:
    image: odoo:20.0
    container_name: odoo
    restart: unless-stopped
    depends_on:
      odoo-db:
        condition: service_healthy
    ports:
      - "8069:8069"
    environment:
      - HOST=odoo-db
      - PORT=5432
      - USER=odoo
      - PASSWORD=IHR_DB_PASSWORT
    volumes:
      - /volume1/docker/odoo/web-data:/var/lib/odoo
      - /volume1/docker/odoo/addons:/mnt/extra-addons
      - /volume1/docker/odoo/config:/etc/odoo
  • HOST, USER, PASSWORD: So verbindet sich das Odoo-Image laut Docker-Hub-Beschreibung mit PostgreSQL. USER und PASSWORD müssen zu POSTGRES_USER und POSTGRES_PASSWORD passen. Die Beispiele auf Docker Hub zeigen odoo:17.0 mit postgres:15; für Odoo 20 ist das zu alt.
  • Fester Tag: odoo:20.0 erhält laut Docker Hub regelmäßig neue Builds derselben Hauptversion. latest würde irgendwann auf eine neue Hauptversion springen, mit der Ihre Datenbank nicht ohne Migration läuft. Datierte Tags wie 20.0-20260926 frieren einen Build ein.
  • Healthcheck: Odoo startet erst, wenn PostgreSQL Verbindungen annimmt.

Klicken Sie auf Weiter und Fertig. Das Herunterladen der Images dauert beim ersten Mal einige Minuten. Allgemeines zu Projekten im Container Manager finden Sie unter Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren.

Verifizieren: Das Projekt odoo steht auf „Wird ausgeführt“, beide Container sind grün. Im Protokoll des Containers odoo (oder per SSH mit sudo docker logs odoo --tail 20) erscheint HTTP service running on 0.0.0.0:8069.

Schritt 4: Erste Datenbank anlegen und Odoo einrichten

Rufen Sie http://NAS-IP:8069 auf. Ohne vorhandene Datenbank zeigt Odoo das Formular zum Anlegen:

  • Master Password: der Wert aus odoo.conf
  • Database Name: kurz, ohne Leerzeichen, zum Beispiel meinefirma
  • Email und Password: Ihr erstes Administratorkonto. Die Odoo-Doku rät, nicht admin als Login zu verwenden und dieses Konto nicht für die tägliche Arbeit zu nutzen.
  • Language und Country: Deutsch und Ihr Land
  • Demo data: aus. Datenbanken mit Demodaten enthalten laut Odoo Standardkonten und gehören nicht auf erreichbare Server.

Nach Create Database dauert die Einrichtung einige Minuten, danach landen Sie im Odoo-Dashboard.

Verifizieren: Sie sind mit dem neuen Konto angemeldet, das Menü zeigt die App-Übersicht, und im Ordner web-data ist ein Unterordner filestore entstanden.

Schritt 5: Erstes Modul installieren (Beispiel CRM)

Öffnen Sie Apps, suchen Sie CRM und klicken Sie auf Aktivieren bzw. Installieren. Abhängigkeiten installiert Odoo selbst.

Zusätzliche Module legen Sie entpackt nach /volume1/docker/odoo/addons, starten den Container odoo neu, aktivieren den Entwicklermodus (URL-Parameter ?debug=1) und wählen unter Apps den Punkt App-Liste aktualisieren. Installieren Sie nur Module aus Quellen, denen Sie vertrauen, denn Module laufen mit vollen Rechten in Odoo.

Verifizieren: Im Hauptmenü erscheint „CRM“, und ein Test-Lead lässt sich anlegen und speichern.

Schritt 6: Datenbank-Manager sperren und Backup einrichten

Die Odoo-Sicherheitsempfehlungen sind eindeutig: Sobald das System eingerichtet ist, soll der Zugriff auf den Datenbank-Manager eingeschränkt werden. Mit list_db = False sperrt Odoo die Datenbankauswahl und alle Verwaltungsbildschirme. Bei nur einer Datenbank ergänzen Sie in odoo.conf:

dbfilter = ^meinefirma$
list_db = False

Starten Sie danach den Container odoo neu. Brauchen Sie den Manager später wieder (zweite Datenbank, Wiederherstellung), kommentieren Sie list_db vorübergehend aus.

Odoo hält Daten an zwei Orten, und die Odoo-Doku empfiehlt tägliche Sicherungen beider Teile auf ein entferntes Archiv, das vom Server selbst nicht erreichbar ist:

DatentypSpeicherortSicherung
Strukturierte Daten (Kunden, Rechnungen, Einstellungen)PostgreSQLpg_dump
Anhänge, Bilder, Berichteweb-data/filestoreOrdnerkopie

Legen Sie den Ordner /volume1/docker/odoo/backup an und erzeugen Sie per SSH einen Dump im Custom-Format:

sudo docker exec odoo-db pg_dump -U odoo -Fc meinefirma > /volume1/docker/odoo/backup/meinefirma_$(date +%Y%m%d).dump

Erzeugen Sie Dump und Filestore-Kopie zeitnah hintereinander, am besten außerhalb der Arbeitszeit, damit beide zueinander passen. Sichern Sie mit Hyper Backup die Ordner backup, web-data und config auf ein externes Ziel. Den Ordner db mit den laufenden PostgreSQL-Dateien nutzen Sie nicht als Sicherung, maßgeblich ist der Dump. Für Zeitplan und Rotation siehe MySQL & PostgreSQL Backup automatisieren mit cron.

Verifizieren: Ein Aufruf von http://NAS-IP:8069/web/database/manager zeigt keine Datenbankverwaltung mehr. Die Dump-Datei ist größer als 0 Byte, und eine Probewiederherstellung in eine Testdatenbank läuft ohne Fehler durch:

sudo docker exec odoo-db createdb -U odoo test_restore
sudo docker exec -i odoo-db pg_restore -U odoo -d test_restore --no-owner < /volume1/docker/odoo/backup/meinefirma_JJJJMMTT.dump
sudo docker exec odoo-db dropdb -U odoo test_restore

Schritt 7: HTTPS und Reverse Proxy einrichten (optional)

Für den Zugriff per HTTPS legen Sie in DSM unter Systemsteuerung > Anmeldeportal > Erweitert > Reverse Proxy eine Regel an: Quelle HTTPS, Ihre Domain, Port 443; Ziel HTTP, localhost, Port 8069. Im Reiter für benutzerdefinierte Header (englisch „Custom Header“) fügen Sie über Erstellen > WebSocket die Header Upgrade und Connection hinzu. Odoo nutzt Websockets für Chatter und Benachrichtigungen; im Standardmodus des Images (Multithreading) laufen sie über Port 8069 mit. Weisen Sie das Zertifikat der Domain unter Sicherheit > Zertifikat zu. proxy_mode = True aus Schritt 2 sorgt dafür, dass Odoo Hostname und Schema des Proxys übernimmt. Als Alternative eignet sich Nginx Proxy Manager auf der Synology.

Odoo empfiehlt für erreichbare Server zusätzlich HTTPS ausschließlich, einen Schutz gegen Anmeldeversuche per Brute Force und starke, eindeutige Admin-Passwörter.

Verifizieren: https://ihre-domain.de öffnet die Odoo-Anmeldung mit gültigem Zertifikat, und eine Nachricht im Chatter eines CRM-Leads erscheint in einem zweiten Browserfenster ohne Neuladen.

Updates und Wechsel der Hauptversion

Updates innerhalb von 20.0 erhalten Sie, indem Sie das Image odoo:20.0 neu herunterladen und das Projekt neu erstellen; das Vorgehen im Container Manager zeigt die oben verlinkte Grund-Anleitung. Sichern Sie vorher wie in Schritt 6. Laut Docker Hub betrifft das nur Releases derselben Hauptversion; ein Sprung zwischen Hauptversionen braucht Migrationsskripte.

Für Odoo 17 endete der Standard-Support im September 2026. Ein Tagwechsel von odoo:17.0 auf odoo:20.0 tauscht nur das Programm, nicht die Datenbank. Der Upgrade-Dienst von Odoo (upgrade.odoo.com) migriert Datenbanken; nach der Odoo-Doku ist das Upgrade mit Enterprise-Abonnement enthalten, ein Wechsel der Edition ist nicht Teil des Upgrades. Für die Community Edition existiert das Community-Projekt OCA/OpenUpgrade; prüfen Sie dort die Abdeckung Ihrer Module.

Zusätzlich muss PostgreSQL mindestens Version 16 sein. Ein älteres Datenverzeichnis überführen Sie per pg_dump und Wiederherstellung in einen neuen postgres:17-Container mit leerem db-Ordner. Spielen Sie die Migration immer zuerst auf einer Kopie durch (zweites Projekt, eigener Port, eigene Ordner).

Verifizieren: Die migrierte Kopie startet ohne Fehler im Log, und Stichproben aus Kunden, Rechnungen und Anhängen sind vollständig.

Troubleshooting / Typische Fehler

  • „connection refused“ beim Start: Odoo startet vor PostgreSQL. Healthcheck und condition: service_healthy prüfen, Projekt neu starten.
  • „could not translate host name odoo-db“: Beide Dienste stehen nicht im selben Projekt, oder HOST passt nicht zum Dienstnamen.
  • Oberfläche nicht erreichbar, Container läuft: Log zeigt 127.0.0.1:8069. http_interface = 0.0.0.0 ergänzen, Container neu starten.
  • Fehler beim Anlegen der Datenbank oder beim Hochladen: Der Container kann nicht nach web-data schreiben. Ordnerrechte prüfen.
  • Datenbank-Manager weg: Gewollt durch list_db = False. Für Wartung kurz auskommentieren.
  • Zu alte PostgreSQL-Version: Odoo 20 verlangt PostgreSQL 16 oder neuer. Datenverzeichnisse lassen sich nicht durch Tagwechsel heben, nötig sind Dump und Wiederherstellung.
  • Anhänge fehlen nach Wiederherstellung: Nur der Dump wurde gesichert. Filestore immer mitsichern.
  • Eigene Module fehlen in der Liste: Container neu starten, Entwicklermodus aktivieren, App-Liste aktualisieren.

Häufige Fragen

Worin unterscheiden sich Community und Enterprise?

Community ist quelloffen (LGPLv3), Enterprise ist ein Abonnement von Odoo S.A. mit zusätzlichen Apps, Hersteller-Support und Upgrade-Dienst. Welche Apps zu welcher Edition gehören, ändert sich je Version. Prüfen Sie den Bedarf vor der Entscheidung in der Editionsübersicht auf odoo.com. Ein offizielles Enterprise-Image gibt es laut Docker Hub nicht; Enterprise-Module werden in das Community-Image eingebunden.

Wie lange dauert der Erststart?

Der Container ist kurz nach dem Start erreichbar. Das Anlegen der ersten Datenbank dauert je nach NAS einige Minuten. Bleibt die Seite unerreichbar, prüfen Sie im Log die Adresse, auf der Odoo lauscht.

Kann ich später auf Enterprise wechseln?

Ja. Die Odoo-Doku beschreibt den Wechsel: Datenbank sichern, Server stoppen, Modul web_enterprise installieren, Server starten und den Abonnement-Code eingeben. Im Docker-Betrieb binden Sie dafür die Enterprise-Module als Addons ein.

Welche Version nehmen Sie für eine Neuinstallation?

Odoo 20.0. Laut Odoo endet der Standard-Support für 20.0 voraussichtlich im September 2029, für 19.0 im September 2028 und für 18.0 im September 2027. Für 17.0 endete er im September 2026.

Reicht Hyper Backup über den ganzen Odoo-Ordner?

Nicht als alleinige Datenbanksicherung. Sichern Sie die Datenbank per pg_dump und lassen Sie Hyper Backup den Dump, den Filestore und die Konfiguration auf ein externes Ziel kopieren, wie in Schritt 6 beschrieben.

Kann eine Instanz mehrere Datenbanken bedienen?

Ja, Odoo ist laut Doku mandantenfähig. Mit mehreren Datenbanken brauchen Sie einen passenden dbfilter, etwa je Hostname mit %h oder %d. Für die Website-App verlangt Odoo dann zwingend einen gesetzten Filter.

Fazit

Auf einem Synology NAS läuft Odoo 20 mit PostgreSQL 17 als überschaubares Compose-Projekt. Entscheidend sind die Details vor und nach dem Erststart: zufälliges Master-Passwort, danach gesperrter Datenbank-Manager, Backup aus Dump und Filestore auf ein externes Ziel und Hauptversionswechsel als eigenes Migrationsprojekt. Für Zeiterfassung ergänzt Kimai auf dem Synology NAS, für digitale Unterschriften DocuSeal auf dem Synology NAS.

Weiterführende Anleitungen und Quellen