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 Community Edition auf dem Synology NAS: Compose-Stack mit PostgreSQL, persistente Volumes und Backup-Strategie – ehrliche KMU-Einordnung inklusive.

Odoo: ERP auf dem NAS. CRM und Verkauf, Lager verwalten, Backups sichern. Illustration mit Laptop und NAS. KI-generiert

Odoo ist das meistinstallierte Open-Source-ERP der Welt – über 12 Millionen Nutzer, 52.000 GitHub-Stars, aktiv weiterentwickelt. Die Community Edition ist vollständig kostenlos (LGPLv3) und bringt CRM, Verkauf, Rechnungsstellung, Lagerverwaltung, Einkauf, Projektmanagement, Website und E-Mail-Marketing direkt mit. Auf dem Synology NAS lässt sich Odoo als Zwei-Container-Stack (Odoo + PostgreSQL) mit dem Container Manager betreiben – ohne monatliche Lizenzkosten, ohne Cloud-Abhängigkeit. Diese Anleitung zeigt den vollständigen Aufbau inklusive persistenter Volumes, Datenbank-Konfiguration, Backup-Strategie und der ehrlichen Abgrenzung zwischen Community- und Enterprise-Features.

Voraussetzungen

  • Synology NAS mit DSM 7.2 oder neuer, x86_64-Prozessor (z. B. DS923+, DS720+, RS1221+); das offizielle Odoo-Image unterstützt amd64, arm64v8 und ppc64le
  • Mindestens 4 GB RAM im NAS (8 GB empfohlen für Produktivbetrieb mit mehreren Nutzern)
  • Mindestens 20 GB freier Speicher auf Volume 1 – Datenbank und Filestore wachsen je nach Nutzung kontinuierlich
  • Container Manager in DSM 7.2 installiert und erreichbar (ersetzt das alte Docker-Paket)
  • File Station-Zugriff zum Anlegen der Verzeichnisstruktur
  • Optional: SSH-Zugang für manuelle Eingriffe und Backup-Skripte (Anleitung: SSH auf dem Synology NAS aktivieren und verbinden)
  • Optional: feste IP oder DDNS für externen Zugriff, SSL-Zertifikat (Let's Encrypt via DSM-Systemsteuerung)

Eckdaten auf einen Blick

ParameterWert
Odoo-Imageodoo:17.0 (LTS, stabil)
Datenbank-Imagepostgres:15 (offizielle Empfehlung)
Web-Port8069 (HTTP)
Longpolling-Port8072 (optional, nur bei Live-Chat)
Filestore-Volume/volume1/docker/odoo/web-data:/var/lib/odoo
DB-Volume/volume1/docker/odoo/db:/var/lib/postgresql/data
Addons-Volume/volume1/docker/odoo/addons:/mnt/extra-addons
Config-Volume/volume1/docker/odoo/config:/etc/odoo
RAM (Minimum)4 GB (8 GB empfohlen)
Speicher (Minimum)20 GB auf /volume1

Schritt 1: Verzeichnisstruktur anlegen

Öffne die File Station und lege unter /volume1/docker/ den Ordner odoo an. Darin erstellst du vier Unterordner:

  • db – PostgreSQL-Datenbankdateien
  • web-data – Odoo-Filestore: Anhänge, Dokumente, Produktbilder, Session-Daten
  • addons – eigene oder Community-Addons (optional, aber empfohlen)
  • config – Odoo-Konfigurationsdatei odoo.conf

Alle vier Ordner müssen vor dem ersten Containerstart existieren. Der web-data-Ordner ist besonders kritisch: Fehlt er oder hat er falsche Berechtigungen, bleibt der Datenbank-Manager nach dem Erststart leer. Wie du Ordner korrekt anlegst und Berechtigungen (PUID/PGID) prüfst, erklärt die Grund-Anleitung Docker-Ordner und Berechtigungen auf dem Synology NAS.

Verifizieren: In der File Station siehst du unter /volume1/docker/odoo exakt die vier Unterordner db, web-data, addons und config. Alle sind leer und für den Container beschreibbar.

Schritt 2: Master-Passwort in odoo.conf setzen

Ohne Konfigurationsdatei ist der Odoo-Datenbank-Manager unter http://NAS-IP:8069/web/database/manager ohne jedes Passwort erreichbar – jeder im Netzwerk könnte Datenbanken anlegen oder löschen. Lege deshalb vor dem ersten Start eine Datei odoo.conf im config-Ordner an.

Erstelle die Datei über einen Texteditor (z. B. Notepad++ auf Windows oder direkt über den DSM Text Editor) mit folgendem Inhalt:

[options]
admin_passwd = DEIN_STARKES_MASTER_PASSWORT
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons

Ersetze DEIN_STARKES_MASTER_PASSWORT durch ein langes, zufälliges Passwort. Der addons_path-Eintrag sorgt dafür, dass Odoo später eigene Community-Addons aus dem gemounteten Verzeichnis findet – ohne diesen Eintrag werden Addons in /mnt/extra-addons ignoriert. Speichere die Datei als odoo.conf direkt in /volume1/docker/odoo/config/.

Verifizieren: Öffne in der File Station /volume1/docker/odoo/config/odoo.conf. Die Datei existiert und enthält die admin_passwd-Zeile. Achte darauf, dass keine zusätzliche Dateiendung (.txt) angehängt wurde.

Schritt 3: Compose-Stack im Container Manager anlegen

Öffne den Container Manager in DSM, wechsle zu „Projekt" und klicke auf „Erstellen". Vergib den Projektnamen odoo und wähle als Pfad /volume1/docker/odoo. Füge im Compose-Editor folgenden Stack ein:

services:
  odoo-db:
    image: postgres:15
    container_name: odoo-db
    restart: unless-stopped
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo_sicheres_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:17.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=odoo_sicheres_passwort
    volumes:
      - /volume1/docker/odoo/web-data:/var/lib/odoo
      - /volume1/docker/odoo/addons:/mnt/extra-addons
      - /volume1/docker/odoo/config:/etc/odoo

Einige wichtige Details zu diesem Stack:

  • postgres:15 statt postgres:17: Die offizielle Odoo-Docker-Dokumentation empfiehlt PostgreSQL 15 für Odoo 17. Postgres 17 ist laut Kompatibilitätsmatrix noch nicht vollständig getestet.
  • odoo:17.0 mit festem Tag: :latest würde bei einem Image-Update auf eine neue Hauptversion aktualisieren und eine Datenbankmigration erzwingen. Immer festen Versions-Tag verwenden.
  • depends_on mit condition: service_healthy: Odoo startet erst, wenn PostgreSQL tatsächlich bereit ist (pg_isready). Ohne diesen Healthcheck-basierten Start schlägt die Datenbankverbindung beim Erststart regelmäßig fehl.
  • HOST=odoo-db: Dieser Wert muss exakt dem Service-Namen im Compose entsprechen. Da beide Services im selben Projekt definiert sind, funktioniert die interne DNS-Auflösung über das Docker-Netzwerk automatisch.
  • Passwort ändern: Ersetze odoo_sicheres_passwort an beiden Stellen (Odoo-Container und DB-Container) durch dasselbe, starke Passwort.

Klicke auf „Weiter" und dann „Fertig". Der Container Manager lädt die Images herunter und startet den Stack. Das Odoo-Image ist mehrere Gigabyte groß – einmalig einige Minuten Wartezeit einplanen. Wie das Anlegen eines Compose-Projekts im Container Manager generell funktioniert, erklärt die Grund-Anleitung Container Manager: Docker-Compose-Projekt anlegen, starten und aktualisieren.

Verifizieren: Im Container Manager unter „Projekt" zeigt das Projekt odoo den Status „Wird ausgeführt". Beide Container (odoo-db und odoo) sind grün. Über SSH lässt sich der Start beobachten:

docker logs odoo --tail 20

Erwartete Ausgabe nach erfolgreichem Start: Zeilen mit odoo.service.server und HTTP service (werkzeug) running on 0.0.0.0:8069. Fehlermeldungen wie connection refused deuten auf ein DB-Startproblem hin – Stack stoppen, 30 Sekunden warten, neu starten.

Schritt 4: Erste Datenbank anlegen und Odoo einrichten

Der Erststart dauert 2–5 Minuten, da Odoo intern die Datenbankstruktur initialisiert. Rufe dann im Browser auf:

http://NAS-IP:8069

Du siehst automatisch den Datenbank-Manager. Fülle das Formular so aus:

  • Master Password: das in odoo.conf gesetzte Master-Passwort
  • Database Name: ein kurzer, sprechender Name ohne Leerzeichen (z. B. meinefirma)
  • Email: deine Admin-E-Mail-Adresse
  • Password: ein starkes Passwort für den ersten Admin-Nutzer
  • Language: German / Deutsch
  • Country: Germany (oder AT/CH je nach Standort)
  • Demo data: bei Produktivbetrieb nicht anhaaken – Demo-Daten lassen sich später nur durch eine komplett neue Datenbank entfernen

Klicke auf „Create Database". Der Vorgang dauert erneut 2–5 Minuten. Danach landest du direkt im Odoo-Dashboard.

Verifizieren: Du bist als Administrator eingeloggt und siehst das Odoo-Dashboard mit den installierbaren Apps. Unter Einstellungen > Allgemeine Einstellungen ist die Datenbanksprache auf Deutsch gesetzt. Die URL zeigt /odoo oder /web als Pfad.

Schritt 5: Erstes Modul installieren (Beispiel CRM)

Navigiere im Odoo-Menü zu Apps. Wichtig: Setze den Filter auf „Apps" (nicht „Module"), sonst siehst du hunderte interne Abhängigkeiten. Suche nach CRM und klicke auf „Installieren". Bei der Erstinstallation werden alle Abhängigkeiten automatisch mitinstalliert. Der Vorgang dauert je nach Modul 1–3 Minuten.

Für eigene Community-Addons aus dem Odoo App Store gilt:

  1. Addon-Dateien (entpackt) in /volume1/docker/odoo/addons/ legen
  2. In Odoo: Einstellungen > Entwicklermodus aktivieren (URL-Parameter ?debug=1 oder über den Link in den Einstellungen)
  3. Apps > App-Liste aktualisieren
  4. Addon in der App-Liste suchen und installieren

Verifizieren: Nach der CRM-Installation erscheint im Hauptmenü der Eintrag „CRM". Ein erster Test-Lead lässt sich unter CRM > Leads anlegen und speichern – damit ist der Stack vollständig funktionsfähig.

Schritt 6: Backup-Strategie einrichten

Odoo speichert Daten an zwei getrennten Orten – dieser Punkt wird in vielen Anleitungen zu wenig betont und ist der häufigste Grund für inkomplette Wiederherstellungen:

DatentypSpeicherortBackup-Methode
Strukturierte Daten (Kunden, Rechnungen, Konfiguration)PostgreSQL-Datenbankpg_dump
Dateianhänge, Bilder, BerichteFilestore /var/lib/odoo/filestore/Ordner-Kopie

Ein Backup, das nur die Datenbank sichert, führt nach einer Wiederherstellung zu fehlenden Anhängen und Bildern – und umgekehrt. Beide Teile müssen zeitlich synchron gesichert werden.

Manueller Datenbank-Dump per SSH:

docker exec odoo-db pg_dump -U odoo meinefirma > /volume1/docker/odoo/backup_$(date +%Y%m%d).sql

Ersetze meinefirma durch den tatsächlichen Datenbanknamen. Die Dump-Datei landet direkt auf dem NAS-Volume. Danach das gesamte Verzeichnis /volume1/docker/odoo/web-data auf ein externes Backup-Ziel kopieren (zweite Festplatte, NAS-zu-NAS, Cloud).

Synology Hyper Backup kann alternativ den gesamten Ordner /volume1/docker/odoo als Aufgabe einbinden und versioniert sichern – dabei werden beide Teile in einem Rutsch abgedeckt. Eine detaillierte Anleitung zu Backup-Rotationsstrategien mit pg_dump und Cloud-Sync findest du unter MySQL & PostgreSQL Backup automatisieren mit cron: pg_dump, Rotation und rclone-Cloud-Sync.

Verifizieren: Die Dump-Datei existiert und hat eine plausible Größe (> 0 Bytes). Teste die Wiederherstellung einmal auf einer zweiten Test-Datenbank:

docker exec -i odoo-db psql -U odoo -c "CREATE DATABASE test_restore;"
docker exec -i odoo-db psql -U odoo test_restore < /volume1/docker/odoo/backup_YYYYMMDD.sql

Schritt 7: HTTPS und Reverse Proxy einrichten (optional)

Für externen Zugriff und HTTPS nutze den Synology Reverse Proxy unter Systemsteuerung > Anmeldeportal > Erweitert. Lege einen neuen Reverse-Proxy-Eintrag an mit Quelle HTTPS (Port 443, deine Domain) und Ziel HTTP (localhost, Port 8069).

Odoo benötigt WebSocket-Unterstützung für Echtzeit-Features wie den Chat (Chatter) und Live-Chat. Füge im Reverse-Proxy-Eintrag unter „Eigener Header" zwei Header hinzu:

Upgrade: $http_upgrade
Connection: $connection_upgrade

Ohne diese Header funktionieren der Odoo-Chatter und Browser-Benachrichtigungen nicht korrekt. Eine vollständige Schritt-für-Schritt-Anleitung zum Reverse Proxy mit SSL auf Synology bietet Nginx Proxy Manager auf der Synology mit Container Manager einrichten.

Verifizieren: Odoo ist über https://deine-domain.de erreichbar, das Browser-Schloss zeigt ein gültiges Zertifikat. Im Odoo-Chatter (z. B. in einem CRM-Lead) erscheinen Nachrichten in Echtzeit ohne Seiten-Reload.

Troubleshooting / Typische Fehler

  • „could not connect to server" / „connection refused": Odoo startet, bevor PostgreSQL bereit ist. Stelle sicher, dass der healthcheck-Block im Compose vorhanden ist und depends_on condition: service_healthy enthält. Stack stoppen und neu starten.
  • Datenbank-Manager leer nach Erststart: Der Ordner /volume1/docker/odoo/web-data fehlt oder hat falsche Berechtigungen. Ordner in der File Station anlegen, dann Container neu starten.
  • „could not translate host name odoo-db": Beide Services sind nicht im selben Compose-Projekt definiert. Prüfe, ob beide Services in derselben compose.yaml stehen. Nur dann funktioniert die interne Docker-DNS-Auflösung.
  • Eigene Addons werden nicht gefunden: Der addons_path in odoo.conf fehlt oder der Entwicklermodus ist nicht aktiv. Nach dem Ablegen der Addon-Dateien den Entwicklermodus aktivieren und die App-Liste aktualisieren.
  • WebSocket-Fehler im Browser-Log: Reverse Proxy fehlen die Upgrade- und Connection-Header. Eintrag im Synology Anmeldeportal bearbeiten und Header unter „Eigener Header" ergänzen.
  • Inkomplettes Backup – fehlende Anhänge nach Restore: Nur pg_dump ohne Filestore gesichert. Nach einer solchen Wiederherstellung fehlen alle Dateianhänge und Bilder. Immer beide Teile synchron sichern.
  • Postgres-Kompatibilitätsproblem: postgres:17 statt postgres:15 kann zu Problemen mit Odoo 17 führen. Die offizielle Empfehlung lautet postgres:15.

Häufige Fragen

Was leistet die Community Edition – und was kostet Enterprise?

Die Community Edition (LGPLv3, vollständig kostenlos für kommerzielle Nutzung) deckt CRM, Verkauf, einfache Rechnungsstellung, Lagerverwaltung, Einkauf, Produktion, Projektmanagement, Website, eCommerce, HR-Grundfunktionen und E-Mail-Marketing ab. Das reicht für viele KMU-Szenarien aus. Enterprise (ca. 20–24 EUR/Nutzer/Monat) ergänzt: vollständige Buchhaltung (GuV, Bilanz, Bankabgleich), Studio (visueller App-Builder), Payroll, Helpdesk, Marketing Automation, offizielle mobile Apps und Hersteller-Support. Wer eine GoBD-konforme Buchhaltung in Odoo abbilden will, kommt an Enterprise nicht vorbei.

Wie lange dauert der Erststart und wann ist Odoo erreichbar?

Rechne beim allerersten Start mit 2–5 Minuten, bis Odoo die Datenbankstruktur initialisiert hat. Ein leerer Browser-Tab oder eine Verbindungsablehnung direkt nach dem Stack-Start ist normal – einfach warten und nach 2–3 Minuten neu laden.

Kann ich später auf Enterprise upgraden, ohne Daten zu verlieren?

Ja. Community und Enterprise nutzen dieselbe Datenbankstruktur. Die Migration erfordert einen Enterprise-Lizenzvertrag mit Odoo S.A. und das Einspielen der Enterprise-Module in den laufenden Container. Bestehende Daten bleiben erhalten.

Welche Odoo-Version soll ich verwenden – 17, 18 oder 19?

Für KMU-Produktivbetrieb auf dem Synology NAS empfiehlt sich odoo:17.0 (aktueller LTS-Stand, breit getestet) oder odoo:18.0 (November 2024, neueste stabile Version). odoo:19.0 ist eine Entwicklungsversion ohne finalen Release und nicht für Produktionsbetrieb geeignet. Den Image-Tag nach der Erstinstallation nie ohne vorherige Testmigration wechseln.

Wie sichere ich meine Odoo-Installation am einfachsten?

Der einfachste Weg auf Synology: Hyper Backup richtest du auf den gesamten Ordner /volume1/docker/odoo ein. Das sichert Datenbank und Filestore gemeinsam. Für granulare Wiederherstellung einzelner Datenbanken ist zusätzlich ein täglicher pg_dump-Cron-Job empfehlenswert.

Kann ich mehrere Unternehmen in einer Odoo-Instanz betreiben?

Multi-Company in einer Datenbank ist ein Enterprise-Feature. Im Community-Betrieb kannst du jedoch mehrere getrennte Datenbanken in einer Instanz anlegen – über den Datenbank-Manager, jede mit eigenem Namen und Admin-Account. Das ist praktisch für IT-Dienstleister, die mehrere Mandanten betreuen.

Fazit

Odoo auf dem Synology NAS ist eine realistische Self-Hosting-Option für KMU bis ca. 10–20 Nutzer. Die Community Edition liefert ohne Lizenzkosten ein vollständiges ERP-Fundament. Der Zwei-Container-Stack mit PostgreSQL ist dank des offiziellen Docker-Images stabil und wartbar; der Container Manager in DSM 7.2 macht Deployment und Updates komfortabel. Die wichtigsten Punkte: Backup immer aus DB und Filestore, Master-Passwort vor dem Erststart in odoo.conf setzen und den Healthcheck für den DB-Container nicht weglassen.

Für Zeiterfassung parallel zu Odoo bietet sich Kimai auf dem Synology NAS an. Digitale Vertragsunterschriften lassen sich mit DocuSeal auf dem Synology NAS selbst hosten – beide Tools ergänzen Odoo sinnvoll im KMU-Stack.

Weiterführende Anleitungen und Quellen

Quellen: Offizielle Odoo-Docker-Dokumentation auf hub.docker.com/_/odoo (Images, Umgebungsvariablen, Volumes); Odoo-GitHub-Repository für Versionshistorie und Kompatibilitätsmatrix; Odoo Docker GitHub für Dockerfile-Details; Marius Hosting als fachliche Ablauf-Referenz (Inhalt eigenständig adaptiert und gegen offizielle Doku verifiziert).