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 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
| Parameter | Wert |
|---|---|
| Odoo-Image | odoo:17.0 (LTS, stabil) |
| Datenbank-Image | postgres:15 (offizielle Empfehlung) |
| Web-Port | 8069 (HTTP) |
| Longpolling-Port | 8072 (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-Datenbankdateienweb-data– Odoo-Filestore: Anhänge, Dokumente, Produktbilder, Session-Datenaddons– eigene oder Community-Addons (optional, aber empfohlen)config– Odoo-Konfigurationsdateiodoo.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:
:latestwü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_passwortan 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.confgesetzte 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:
- Addon-Dateien (entpackt) in
/volume1/docker/odoo/addons/legen - In Odoo: Einstellungen > Entwicklermodus aktivieren (URL-Parameter
?debug=1oder über den Link in den Einstellungen) - Apps > App-Liste aktualisieren
- 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:
| Datentyp | Speicherort | Backup-Methode |
|---|---|---|
| Strukturierte Daten (Kunden, Rechnungen, Konfiguration) | PostgreSQL-Datenbank | pg_dump |
| Dateianhänge, Bilder, Berichte | Filestore /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 unddepends_oncondition: service_healthyenthält. Stack stoppen und neu starten. - Datenbank-Manager leer nach Erststart: Der Ordner
/volume1/docker/odoo/web-datafehlt 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.yamlstehen. Nur dann funktioniert die interne Docker-DNS-Auflösung. - Eigene Addons werden nicht gefunden: Der
addons_pathinodoo.conffehlt 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- undConnection-Header. Eintrag im Synology Anmeldeportal bearbeiten und Header unter „Eigener Header" ergänzen. - Inkomplettes Backup – fehlende Anhänge nach Restore: Nur
pg_dumpohne Filestore gesichert. Nach einer solchen Wiederherstellung fehlen alle Dateianhänge und Bilder. Immer beide Teile synchron sichern. - Postgres-Kompatibilitätsproblem:
postgres:17stattpostgres:15kann zu Problemen mit Odoo 17 führen. Die offizielle Empfehlung lautetpostgres: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
- Kimai auf dem Synology NAS installieren: professionelle Zeiterfassung für KMU
- DocuSeal auf dem Synology NAS installieren: digitale Signaturen selbst hosten
- MySQL & PostgreSQL Backup automatisieren mit cron: pg_dump, Rotation und rclone-Cloud-Sync
- Container Manager auf dem Synology NAS: Docker-Compose-Projekt anlegen, starten und aktualisieren
- Nginx Proxy Manager auf der Synology mit Container Manager einrichten: Reverse Proxy und SSL
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).