Déploiement de Docker Odoo : configuration de conteneurs prêts pour la production

Déployez Odoo dans des conteneurs Docker pour la production. Guide complet couvrant la configuration de Docker Compose, la configuration de PostgreSQL, le proxy inverse Nginx, SSL, les sauvegardes et la mise à l'échelle.

E

ECOSIRE Research and Development Team

Équipe ECOSIRE

5 mars 20265 min de lecture1.1k Mots

Déploiement de Docker Odoo : configuration de conteneurs prêts pour la production

Docker est devenu la méthode de déploiement standard pour Odoo dans les environnements de production, avec plus de 10 millions d'images Odoo Docker extraites sur Docker Hub. Le déploiement conteneurisé fournit des environnements reproductibles, une mise à l'échelle facile, des sauvegardes simplifiées et une séparation nette entre les instances Odoo. Ce guide couvre une configuration complète de Docker Odoo prête pour la production.

Points clés à retenir

  • Docker Compose orchestre Odoo, PostgreSQL et Nginx en tant que services connectés
  • Les volumes persistants garantissent que les données survivent aux redémarrages et aux mises à jour des conteneurs
  • Le proxy inverse Nginx gère la terminaison SSL, la mise en cache des fichiers statiques et l'équilibrage de charge
  • Les sauvegardes automatisées protègent contre la perte de données avec une intervention manuelle minimale

Présentation de l'architecture

Un déploiement de production Odoo Docker se compose de trois services principaux :

  1. Serveur d'applications Odoo : Le conteneur Odoo exécutant le serveur Web et la logique de l'application
  2. Base de données PostgreSQL : Un conteneur de base de données dédié stockant toutes les données Odoo
  3. Proxy inverse Nginx : gère SSL, sert des fichiers statiques et envoie des requêtes proxy à Odoo

Les services facultatifs incluent Redis (pour la mise en cache et le stockage de session), un conteneur de sauvegarde (vidages de base de données automatisés) et la surveillance (Prometheus + Grafana).


Configuration de Docker Compose

La base du déploiement est un fichier docker-compose.yml définissant tous les services :

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:

Fichier de configuration Odoo

Créez config/odoo.conf avec des paramètres optimisés pour la production :

[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

Paramètres clés expliqués :

  • proxy_mode = True : requis lors de l'exécution derrière Nginx pour gérer correctement les en-têtes transférés
  • workers = 4 : Nombre de processus de travail (règle générale : 2 travailleurs par cœur de processeur)
  • max_cron_threads = 2 : Threads dédiés aux actions planifiées
  • list_db = False : empêche le référencement des bases de données sur la page de connexion (sécurité)
  • dbfilter : restreint l'accès à une seule base de données

Configuration du proxy inverse Nginx

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;
    }
}

Stratégie de sauvegarde

Sauvegardes automatisées de la base de données

Créez un script de sauvegarde qui s'exécute quotidiennement via cron :

#!/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

Sauvegarde du magasin de fichiers

Le magasin de fichiers Odoo (documents téléchargés, pièces jointes) réside dans le volume odoo-data. Sauvegardez-le avec la base de données :

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

Renforcement de la sécurité

  • Remplacez le admin_passwd par défaut dans odoo.conf par un mot de passe aléatoire fort
  • Définissez list_db = False pour empêcher l'énumération de la base de données
  • Utilisez dbfilter pour restreindre l'accès à la base de données à une seule base de données
  • Exécutez les conteneurs en tant qu'utilisateurs non root lorsque cela est possible
  • Gardez les images Docker à jour avec les correctifs de sécurité
  • Utilisez des secrets Docker ou des fichiers de variables d'environnement (pas de mots de passe en ligne)
  • Restreindre l'accès au réseau de conteneurs à l'aide des réseaux Docker

Questions fréquemment posées

Q : Combien d'utilisateurs simultanés un seul conteneur Odoo peut-il gérer ?

Avec 4 travailleurs, un conteneur Odoo gère confortablement environ 20 à 30 utilisateurs simultanés. Pour une concurrence plus élevée, augmentez les Workers (limités par le CPU/RAM) ou déployez plusieurs conteneurs Odoo derrière un équilibreur de charge.

Q : Comment mettre à jour Odoo dans Docker ?

Extrayez la nouvelle image, arrêtez le conteneur actuel, exécutez la nouvelle image avec les volumes existants. Les volumes persistants conservent vos données et votre magasin de fichiers lors des mises à jour d'images.

Q : Dois-je utiliser l'image officielle Odoo Docker ou créer la mienne ?

L'image officielle fonctionne pour les déploiements standard. Créez une image personnalisée lorsque vous avez besoin de packages Python spécifiques, de dépendances système pour des modules personnalisés ou de modules de communauté préinstallés.

Q : Comment gérer Odoo Enterprise dans Docker ?

Odoo Enterprise n'est pas disponible en tant qu'image Docker publique. Montez le répertoire des modules complémentaires d'entreprise en tant que volume et référencez-le dans la configuration addons_path. Vous avez besoin d'un abonnement Odoo Enterprise valide.


Quelle est la prochaine étape

Le déploiement Docker vous offre un environnement de production Odoo reproductible, évolutif et maintenable. Commencez par cette configuration et ajustez le nombre de travailleurs, les limites de mémoire et la mise en cache en fonction de vos modèles d'utilisation.

Contactez ECOSIRE pour obtenir de l'aide au déploiement d'Odoo, ou explorez nos services d'assistance Odoo pour l'hébergement géré.


Publié par ECOSIRE – aider les entreprises à évoluer grâce à des solutions logicielles d'entreprise.

E

Rédigé par

ECOSIRE Research and Development Team

Création de produits numériques de niveau entreprise chez ECOSIRE. Partage d'analyses sur les intégrations Odoo, l'automatisation e-commerce et les solutions d'entreprise propulsées par l'IA.

Discutez sur WhatsApp