Docker Odoo-Bereitstellung: Produktionsbereites Container-Setup

Stellen Sie Odoo in Docker-Containern für die Produktion bereit. Vollständige Anleitung zur Docker Compose-Konfiguration, PostgreSQL-Einrichtung, Nginx-Reverse-Proxy, SSL, Backups und Skalierung.

E

ECOSIRE Research and Development Team

ECOSIRE-Team

5. März 20264 Min. Lesezeit850 Wörter

Docker Odoo-Bereitstellung: Produktionsbereites Container-Setup

Docker hat sich mit über 10 Millionen Odoo Docker-Image-Pulls auf Docker Hub zur Standard-Bereitstellungsmethode für Odoo in Produktionsumgebungen entwickelt. Containerisierte Bereitstellung bietet reproduzierbare Umgebungen, einfache Skalierung, vereinfachte Backups und saubere Trennung zwischen Odoo-Instanzen. Dieser Leitfaden behandelt ein vollständiges, produktionsbereites Docker Odoo-Setup.

Wichtige Erkenntnisse

– Docker Compose orchestriert Odoo, PostgreSQL und Nginx als verbundene Dienste – Persistente Volumes stellen sicher, dass die Daten Container-Neustarts und -Updates überstehen – Der Nginx-Reverse-Proxy übernimmt die SSL-Terminierung, das Caching statischer Dateien und den Lastausgleich

  • Automatisierte Backups schützen vor Datenverlust mit minimalem manuellen Eingriff

Architekturübersicht

Eine Odoo Docker-Produktionsbereitstellung besteht aus drei Kerndiensten:

  1. Odoo-Anwendungsserver: Der Odoo-Container, auf dem der Webserver und die Anwendungslogik ausgeführt werden
  2. PostgreSQL-Datenbank: Ein dedizierter Datenbankcontainer, in dem alle Odoo-Daten gespeichert sind
  3. Nginx-Reverse-Proxy: Verarbeitet SSL, stellt statische Dateien bereit und leitet Anfragen an Odoo weiter

Zu den optionalen Diensten gehören Redis (für Caching und Sitzungsspeicherung), ein Backup-Container (automatisierte Datenbank-Dumps) und Überwachung (Prometheus + Grafana).


Docker Compose-Konfiguration

Die Grundlage der Bereitstellung ist eine docker-compose.yml-Datei, die alle Dienste definiert:

version: "3.8"

services:
  odoo:
    image: odoo:17.0
    depends_on:
      - db
    ports:
      - "8069:8069"
      - "8072:8072"
    volumes:
      - odoo-data:/var/lib/odoo
      - ./config:/etc/odoo
      - ./addons:/mnt/extra-addons
    environment:
      - HOST=db
      - PORT=5432
      - USER=odoo
      - PASSWORD=odoo_db_password
    restart: unless-stopped

  db:
    image: postgres:16
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=odoo
      - POSTGRES_PASSWORD=odoo_db_password
      - PGDATA=/var/lib/postgresql/data/pgdata
    volumes:
      - postgres-data:/var/lib/postgresql/data/pgdata
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      - ./certbot/conf:/etc/letsencrypt
      - ./certbot/www:/var/www/certbot
    depends_on:
      - odoo
    restart: unless-stopped

volumes:
  odoo-data:
  postgres-data:

Odoo-Konfigurationsdatei

Erstellen Sie config/odoo.conf mit produktionsoptimierten Einstellungen:

[options]
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
admin_passwd = your_strong_admin_password
db_host = db
db_port = 5432
db_user = odoo
db_password = odoo_db_password
db_name = production_db
dbfilter = ^production_db$
list_db = False
proxy_mode = True
workers = 4
max_cron_threads = 2
limit_memory_hard = 2684354560
limit_memory_soft = 2147483648
limit_time_cpu = 600
limit_time_real = 1200
log_level = warn

Wichtige Einstellungen erklärt:

  • proxy_mode = True: Erforderlich bei Ausführung hinter Nginx, um weitergeleitete Header korrekt zu verarbeiten
  • workers = 4: Anzahl der Worker-Prozesse (Faustregel: 2 Worker pro CPU-Kern)
  • max_cron_threads = 2: Dedizierte Threads für geplante Aktionen
  • list_db = False: Verhindert die Auflistung der Datenbank auf der Anmeldeseite (Sicherheit)
  • dbfilter: Beschränkt den Zugriff auf eine einzelne Datenbank

Nginx-Reverse-Proxy-Konfiguration

upstream odoo {
    server odoo:8069;
}
upstream odoochat {
    server odoo:8072;
}

server {
    listen 80;
    server_name your-domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    client_max_body_size 200m;
    proxy_read_timeout 720s;
    proxy_connect_timeout 720s;
    proxy_send_timeout 720s;

    location /websocket {
        proxy_pass http://odoochat;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    location / {
        proxy_pass http://odoo;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location ~* /web/static/ {
        proxy_cache_valid 200 90m;
        proxy_buffering on;
        expires 864000;
        proxy_pass http://odoo;
    }
}

Backup-Strategie

Automatisierte Datenbanksicherungen

Erstellen Sie ein Backup-Skript, das täglich über cron ausgeführt wird:

#!/bin/bash
BACKUP_DIR=/backups/odoo
DATE=$(date +%Y%m%d_%H%M%S)
docker exec odoo-db pg_dump -U odoo production_db | gzip > $BACKUP_DIR/odoo_$DATE.sql.gz
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete

Filestore-Sicherung

Der Odoo-Dateispeicher (hochgeladene Dokumente, Anhänge) befindet sich im Volume odoo-data. Sichern Sie es zusammen mit der Datenbank:

docker run --rm -v odoo-data:/data -v /backups:/backup alpine \
  tar czf /backup/odoo-filestore_$DATE.tar.gz /data

Sicherheitshärtung

  • Ändern Sie den Standardwert admin_passwd in odoo.conf in ein sicheres Zufallskennwort – Legen Sie list_db = False fest, um eine Datenbankaufzählung zu verhindern – Verwenden Sie dbfilter, um den Datenbankzugriff auf eine einzelne Datenbank zu beschränken – Führen Sie Container nach Möglichkeit als Nicht-Root-Benutzer aus
  • Halten Sie Docker-Images mit Sicherheitspatches auf dem neuesten Stand
  • Verwenden Sie Docker-Geheimnisse oder Umgebungsvariablendateien (keine Inline-Passwörter).
  • Beschränken Sie den Zugriff auf das Containernetzwerk mithilfe von Docker-Netzwerken

Häufig gestellte Fragen

F: Wie viele gleichzeitige Benutzer kann ein einzelner Odoo-Container verarbeiten?

Mit 4 Workern verwaltet ein Odoo-Container bequem etwa 20–30 gleichzeitige Benutzer. Für eine höhere Parallelität erhöhen Sie die Anzahl der Worker (begrenzt durch CPU/RAM) oder stellen Sie mehrere Odoo-Container hinter einem Load Balancer bereit.

F: Wie aktualisiere ich Odoo in Docker?

Ziehen Sie das neue Image, stoppen Sie den aktuellen Container und führen Sie das neue Image mit den vorhandenen Volumes aus. Die persistenten Volumes behalten Ihre Daten und Ihren Dateispeicher über Image-Updates hinweg.

F: Soll ich das offizielle Odoo Docker-Image verwenden oder mein eigenes erstellen?

Das offizielle Image funktioniert für Standardbereitstellungen. Erstellen Sie ein benutzerdefiniertes Image, wenn Sie bestimmte Python-Pakete, Systemabhängigkeiten für benutzerdefinierte Module oder vorinstallierte Community-Module benötigen.

F: Wie gehe ich mit Odoo Enterprise in Docker um?

Odoo Enterprise ist nicht als öffentliches Docker-Image verfügbar. Hängen Sie das Unternehmens-Addons-Verzeichnis als Volume ein und verweisen Sie darauf in der Konfiguration „addons_path“. Sie benötigen ein gültiges Odoo Enterprise-Abonnement.


Was kommt als nächstes?

Durch die Docker-Bereitstellung erhalten Sie eine reproduzierbare, skalierbare und wartbare Odoo-Produktionsumgebung. Beginnen Sie mit dieser Konfiguration und passen Sie die Worker-Anzahl, Speicherlimits und Caching basierend auf Ihren Nutzungsmustern an.

Kontaktieren Sie ECOSIRE für Unterstützung bei der Odoo-Bereitstellung oder erkunden Sie unsere Odoo-Supportdienste für verwaltetes Hosting.


Herausgegeben von ECOSIRE – unterstützt Unternehmen bei der Skalierung mit Unternehmenssoftwarelösungen.

E

Geschrieben von

ECOSIRE Research and Development Team

Entwicklung von Enterprise-Digitalprodukten bei ECOSIRE. Einblicke in Odoo-Integrationen, E-Commerce-Automatisierung und KI-gestützte Geschäftslösungen.

Chatten Sie auf WhatsApp