Tutoriel

Héberger Odoo 17 Community sur VPS : installation Docker complète

Self-hosting10 min de lecture10 étapes

Odoo 17 Community Edition est l'un des ERP open-source les plus complets disponibles aujourd'hui. Gratuit, extensible, et soutenu par une large communauté, il couvre la gestion des ventes, de la comptabilité, des stocks, des ressources humaines et bien plus. Pourtant, beaucoup d'entreprises paient encore des abonnements SaaS pour des fonctionnalités qu'elles pourraient héberger elles-mêmes sur un VPS, avec un contrôle total sur leurs données. Ce guide vous accompagne pas à pas pour déployer Odoo 17 Community sur un VPS via Docker Compose, configurer les sauvegardes, sécuriser l'instance et optimiser ses performances.

Sommaire· Pourquoi self-héberger Odoo Community1/12
  1. 01Pourquoi self-héberger Odoo Community
  2. 02Ce qu'Odoo 17 Community inclut
  3. 03Différences entre Community et Enterprise
  4. 04Prérequis VPS pour héberger Odoo 17
  5. 05Installer Odoo 17 avec Docker Compose
  6. 06Configurer la base de données et l'instance
  7. 07Configurer les sauvegardes automatiques
  8. 08Activer les modules clés après installation
  9. 09Optimiser les performances de votre instance
  10. 10Sécuriser l'instance Odoo en production
  11. 11Conseil avancé : intégrer des modules personnalisés
  12. 12Comparatif hébergement : VPS self-hosted vs Odoo SaaS

Pourquoi self-héberger Odoo Community

La version SaaS d'Odoo, commercialisée sous Odoo.sh ou via des partenaires, facture à l'utilisateur et au module activé. Pour une PME de 10 personnes utilisant cinq modules, la facture mensuelle dépasse rapidement plusieurs centaines d'euros. Un VPS à 99 DH/mois suffit à faire tourner la même instance, sans aucune restriction sur le nombre d'utilisateurs ou de modules Community.

Le contrôle des données est l'autre argument de poids. Avec une instance self-hosted, la base de données PostgreSQL reste sur votre serveur, dans votre datacenter de choix. Aucun tiers n'accède à vos clients, devis, factures ou données RH. Pour les entreprises soumises à des obligations de conformité — secteur médical, juridique, fintech — cette maîtrise n'est pas optionnelle.

Enfin, la personnalisation est sans limite. Odoo Community autorise l'installation de n'importe quel module de la communauté ou développé en interne, sans restriction de l'éditeur. Sur une instance SaaS ou managée, les modules tiers doivent souvent être validés, et certaines personnalisations sont simplement impossibles.

Ce qu'Odoo 17 Community inclut

  • CRM : pipeline de vente, leads, activités et suivi client
  • Ventes : devis, bons de commande, tarification et conditions de paiement
  • Comptabilité : plan comptable, journaux, rapprochement bancaire, TVA
  • Facturation : factures clients et fournisseurs, relances automatiques, paiements
  • Inventaire : gestion des stocks, emplacements, règles de réapprovisionnement
  • Achats : demandes d'achat, appels d'offres et suivi fournisseurs
  • Ressources humaines : employés, contrats, congés et présences
  • Email marketing : listes de diffusion, campagnes et statistiques d'envoi
  • Site web & e-commerce : constructeur de pages, boutique en ligne intégrée
  • Helpdesk : ticketing client, SLA et portail libre-service

Différences entre Community et Enterprise

Faites défiler le tableau

FonctionnalitéCommunityEnterpriseAlternative open-source
Comptabilité avancée (rapports analytiques)BasiqueComplèteModule OCA `account-financial-reporting`
Signature électroniqueAbsenteIncluseModule `sign` communauté ou Docusign
Feuilles de présence avancéesAbsenteIncluseModule OCA `hr-attendance`
Support éditeur officielForum communautéSLA garantiPrestataire Odoo partenaire
Mise à jour automatique (Odoo.sh)Non applicableIncluseScript de migration manuel
Nombre d'utilisateursSans plafondSelon licencesSans restriction
Prix (self-hosted)GratuitGratuit si auto-hébergé *Gratuit

Prérequis VPS pour héberger Odoo 17

Odoo est une application Python/PostgreSQL gourmande en RAM, surtout dès que plusieurs utilisateurs travaillent simultanément. Le dimensionnement minimal recommandé pour une PME de 5 à 15 utilisateurs :

- CPU : 4 vCPU minimum ; Odoo est multi-processus et tire parti du parallélisme
- RAM : 8 Go recommandés (4 Go sont fonctionnels pour un test, insuffisants en production)
- Stockage : 40 Go SSD NVMe ; prévoir plus si vous activez l'e-commerce avec des médias
- OS : Ubuntu 22.04 LTS ou Debian 12 — les deux sont stables et bien documentés
- Docker Engine 24+ et Docker Compose v2 (plugin intégré, docker compose sans tiret)
- Un nom de domaine pointé vers l'IP du VPS, avec un enregistrement A ou CNAME actif
- Un reverse proxy (Caddy ou Nginx) pour gérer le TLS et exposer Odoo sur le port 443

Un VPS 299 DH/mois chez ServOrbit.com couvre largement ces besoins avec des ressources dédiées.

Installer Odoo 17 avec Docker Compose

  1. Créer la structure de répertoires

    Connectez-vous en SSH à votre VPS et créez l'arborescence de travail :

    mkdir -p /opt/odoo/{data,addons,config,backups}
    cd /opt/odoo

    Ces dossiers accueilleront respectivement les données persistantes, les modules personnalisés, la configuration Odoo et les sauvegardes.

  2. Rédiger le fichier docker-compose.yml

    Créez /opt/odoo/docker-compose.yml avec le contenu suivant :

    services:
      db:
        image: postgres:16
        restart: unless-stopped
        environment:
          POSTGRES_DB: postgres
          POSTGRES_USER: odoo
          POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
        volumes:
          - ./data/postgres:/var/lib/postgresql/data
        healthcheck:
          test: ["CMD-SHELL", "pg_isready -U odoo"]
          interval: 10s
          retries: 5
    
      odoo:
        image: odoo:17.0
        restart: unless-stopped
        depends_on:
          db:
            condition: service_healthy
        environment:
          HOST: db
          USER: odoo
          PASSWORD: ${POSTGRES_PASSWORD}
        volumes:
          - ./data/odoo:/var/lib/odoo
          - ./addons:/mnt/extra-addons
          - ./config/odoo.conf:/etc/odoo/odoo.conf
        ports:
          - "127.0.0.1:8069:8069"
          - "127.0.0.1:8072:8072"

    Notez que les ports ne sont exposés qu'en localhost — le reverse proxy se chargera de l'accès externe.

  3. Créer le fichier .env et la configuration Odoo

    Créez /opt/odoo/.env :

    POSTGRES_PASSWORD=$(openssl rand -hex 32)
    echo "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}" > /opt/odoo/.env

    Puis créez /opt/odoo/config/odoo.conf :

    [options]
    db_host = db
    db_port = 5432
    db_user = odoo
    db_password = ${POSTGRES_PASSWORD}
    addons_path = /usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons
    admin_passwd = REMPLACEZ_PAR_UN_MOT_DE_PASSE_FORT
    without_demo = all
    workers = 4
    max_cron_threads = 2
    limit_memory_hard = 2684354560
    limit_memory_soft = 2147483648
  4. Configurer le reverse proxy avec Caddy

    Caddy est le choix le plus simple : il gère le TLS automatiquement via Let's Encrypt. Installez-le et créez /etc/caddy/Caddyfile :

    odoo.votredomaine.com {
        reverse_proxy 127.0.0.1:8069
    
        # Support WebSocket pour les notifications temps réel
        handle /websocket {
            reverse_proxy 127.0.0.1:8072
        }
    
        header {
            X-Frame-Options SAMEORIGIN
            X-Content-Type-Options nosniff
            Strict-Transport-Security "max-age=31536000; includeSubDomains"
        }
    
        encode gzip
    }

    Relancez Caddy : systemctl reload caddy.

  5. Démarrer les conteneurs

    Depuis /opt/odoo, lancez :

    docker compose up -d

    Suivez les logs au démarrage :

    docker compose logs -f odoo

    Odoo met 30 à 60 secondes à initialiser. Vous verrez HTTP service (werkzeug) running quand il est prêt.

  6. Accéder à l'interface et créer la base de données

    Ouvrez https://odoo.votredomaine.com/web/database/manager dans votre navigateur. Renseignez le mot de passe maître (admin_passwd) défini dans odoo.conf, choisissez un nom de base de données, une langue et un email administrateur, puis cliquez sur Créer. La première initialisation dure 2 à 5 minutes selon les modules sélectionnés.

Configurer la base de données et l'instance

Après la création de la base, Odoo vous redirige vers l'interface principale. La première chose à faire est de vérifier le mot de passe maître dans Paramètres > Technique > Mot de passe maître. Ce mot de passe protège l'accès au gestionnaire de bases de données — il doit être long et unique.

Dans Paramètres > Général, configurez le nom de l'entreprise, la devise de base, le fuseau horaire et l'adresse. Ces paramètres influencent les documents générés (factures, bons de commande).

Si vous migrez depuis un autre système, Odoo propose des importateurs CSV pour les clients, fournisseurs, produits et soldes comptables. Commencez toujours par un environnement de test avec des données réelles avant de basculer en production.

Configurer les sauvegardes automatiques

Une instance Odoo en production sans sauvegarde est une dette technique immédiate. La stratégie recommandée repose sur deux niveaux.

Dump PostgreSQL quotidien avec un script cron :

#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/opt/odoo/backups
DB_NAME=votre_base

docker compose -f /opt/odoo/docker-compose.yml exec -T db \
  pg_dump -U odoo ${DB_NAME} | gzip > ${BACKUP_DIR}/odoo_${DATE}.sql.gz

# Conserver 7 jours
find ${BACKUP_DIR} -name "odoo_*.sql.gz" -mtime +7 -delete

Planifiez ce script dans /etc/cron.d/odoo-backup avec une exécution à 02h00 chaque nuit.

Sauvegarde des volumes : le dossier /opt/odoo/data/odoo contient les pièces jointes, images et fichiers uploadés. Synchronisez-le quotidiennement vers un stockage objet (S3, Scaleway Object Storage) avec rclone ou restic. Pour aller plus loin sur la stratégie 3-2-1, consultez notre guide Restic.

Activer les modules clés après installation

  • Ventes (sale_management) : devis, commandes, portail client — module de base pour toute activité commerciale
  • Comptabilité (account_accountant) : plan comptable, TVA, rapprochement bancaire, clôtures
  • Inventaire (stock) : gestion multi-entrepôts, lots et numéros de série, règles de réapprovisionnement
  • Achats (purchase) : demandes d'achat, appels d'offres, réception et facturation fournisseur
  • Ressources humaines (hr) : fiche employé, structure organisationnelle, documents RH
  • Helpdesk (helpdesk) : ticketing, SLA, portail client self-service — Community inclut les fonctions de base
  • Site web (website) : constructeur de pages, blog, formulaires de contact
  • E-Commerce (website_sale) : boutique en ligne, panier, paiement — s'active en complément du module Site web

Optimiser les performances de votre instance

  1. Ajuster le nombre de workers

    Dans odoo.conf, le paramètre workers contrôle le nombre de processus Python qui traitent les requêtes HTTP. La règle pratique : workers = (vCPU × 2) + 1. Sur un VPS 4 vCPU, fixez workers = 4. En dessous de 2, Odoo tourne en mode mono-processus, ce qui bloque les requêtes longues (imports, rapports).

  2. Configurer les limites mémoire

    Odoo tue les workers qui dépassent les limites définies pour éviter les fuites mémoire.

    limit_memory_soft = 2147483648   # 2 Go : signal de fin gracieuse
    limit_memory_hard = 2684354560   # 2,5 Go : kill immédiat

    Sur 8 Go de RAM avec 4 workers + PostgreSQL, ces valeurs sont cohérentes. Augmentez-les si vos rapports sont lents ou si les workers redémarrent fréquemment (docker compose logs odoo | grep killed).

  3. Limiter les crons pour ne pas saturer le CPU

    Le paramètre max_cron_threads = 2 réserve 2 threads pour les tâches planifiées (emails, réapprovisionnement, rapports). Au-delà, les crons entrent en compétition avec les workers HTTP. Sur un serveur dédié à Odoo, vous pouvez monter à 4, mais commencez conservativement.

  4. Activer le stockage de session Redis (optionnel)

    Par défaut, Odoo stocke les sessions sur le disque. Sur des volumes partagés ou en cas de redémarrage fréquent, cela peut causer des déconnexions. Ajoutez un service Redis au docker-compose.yml et configurez :

    session_store = redis
    redis_url = redis://redis:6379

    Cette option est surtout utile si vous envisagez une architecture multi-instances à l'avenir.

Sécuriser l'instance Odoo en production

La sécurité d'une instance Odoo repose sur plusieurs couches complémentaires.

Désactiver le gestionnaire de bases de données en production est la mesure la plus importante. Cette interface, accessible par défaut sur /web/database/manager, permet à quiconque connaissant le mot de passe maître de créer, supprimer ou restaurer des bases. Ajoutez dans odoo.conf :

dbfilter = ^votre_base$
list_db = False

list_db = False masque l'interface de gestion et empêche l'énumération des bases.

Forcer le TLS : Caddy gère cela nativement. Avec Nginx, assurez-vous que le vhost HTTP redirige systématiquement vers HTTPS et que Strict-Transport-Security est positionné.

Fail2ban : configurez une jail pour les tentatives de connexion échouées sur /web/login. Odoo logue ces tentatives avec le niveau warning — un filtre regex sur Login failed suffit.

Mot de passe maître fort : ce mot de passe doit avoir au moins 32 caractères alphanumériques générés aléatoirement. Il ne se change qu'en modifiant odoo.conf et en redémarrant le conteneur — autant en faire un mot de passe de coffre-fort dès le départ.

Conseil avancé : intégrer des modules personnalisés

Le dossier /opt/odoo/addons est monté dans le conteneur sur /mnt/extra-addons. Pour installer un module communauté (OCA, ou développé en interne), déposez-le dans ce dossier et ajoutez le chemin à addons_path dans odoo.conf.

Après ajout d'un module, redémarrez Odoo (docker compose restart odoo), puis allez dans Paramètres > Applications > Mettre à jour la liste des applications. Le module apparaît dans la liste et s'installe comme n'importe quel module natif.

Pour les modules OCA, clonez directement depuis GitHub dans le dossier addons : l'organisation [OCA sur GitHub](https://github.com/OCA) regroupe des centaines de modules thématiques (comptabilité française, EDI, connecteurs e-commerce, etc.) maintenus activement.

Comparatif hébergement : VPS self-hosted vs Odoo SaaS

Faites défiler le tableau

CritèreVPS self-hosted (ServOrbit.com)Odoo.sh / SaaS partenaire
Coût mensuel (10 utilisateurs)À partir de 99 DH/mois150 € à 500 € selon modules
Contrôle des donnéesTotal — données sur votre serveurDonnées chez l'éditeur ou partenaire
Modules CommunityTous disponibles, sans restrictionDépend du plan et du partenaire
Modules EnterpriseNon inclus (licence séparée)Inclus dans l'abonnement
SauvegardesÀ votre charge, configurablesGérées par la plateforme
Mises à jourManuelles (migration majeure)Gérées (upgrade assisté)
PersonnalisationSans plafondRestreinte ou facturable
Compétences requisesAdministration Linux, DockerAucune compétence serveur
Support techniqueCommunauté + prestataire au choixSLA selon contrat éditeur

Déployez votre ERP en toute autonomie

ServOrbit.com propose des VPS optimisés pour les charges applicatives exigeantes comme Odoo. Ressources dédiées, SSD NVMe, support technique réactif — tout ce qu'il faut pour faire tourner votre ERP en production.

Besoin d'aide ?

Parcourez notre centre d'aide et notre FAQ, ou contactez notre équipe — rappel, WhatsApp ou e-mail. Support en français, anglais et arabe.

Écrire sur WhatsApps'ouvre dans un nouvel onglet