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é | Community | Enterprise | Alternative open-source |
|---|---|---|---|
| Comptabilité avancée (rapports analytiques) | Basique | Complète | Module OCA `account-financial-reporting` |
| Signature électronique | Absente | Incluse | Module `sign` communauté ou Docusign |
| Feuilles de présence avancées | Absente | Incluse | Module OCA `hr-attendance` |
| Support éditeur officiel | Forum communauté | SLA garanti | Prestataire Odoo partenaire |
| Mise à jour automatique (Odoo.sh) | Non applicable | Incluse | Script de migration manuel |
| Nombre d'utilisateurs | Sans plafond | Selon licences | Sans restriction |
| Prix (self-hosted) | Gratuit | Gratuit 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
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/odooCes dossiers accueilleront respectivement les données persistantes, les modules personnalisés, la configuration Odoo et les sauvegardes.
Rédiger le fichier docker-compose.yml
Créez
/opt/odoo/docker-compose.ymlavec 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.
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/.envPuis 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 = 2147483648Configurer 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.Démarrer les conteneurs
Depuis
/opt/odoo, lancez :docker compose up -dSuivez les logs au démarrage :
docker compose logs -f odooOdoo met 30 à 60 secondes à initialiser. Vous verrez
HTTP service (werkzeug) runningquand il est prêt.Accéder à l'interface et créer la base de données
Ouvrez
https://odoo.votredomaine.com/web/database/managerdans votre navigateur. Renseignez le mot de passe maître (admin_passwd) défini dansodoo.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 -deletePlanifiez 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
Ajuster le nombre de workers
Dans
odoo.conf, le paramètreworkerscontrô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, fixezworkers = 4. En dessous de 2, Odoo tourne en mode mono-processus, ce qui bloque les requêtes longues (imports, rapports).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édiatSur 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).Limiter les crons pour ne pas saturer le CPU
Le paramètre
max_cron_threads = 2ré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.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.ymlet configurez :session_store = redis redis_url = redis://redis:6379Cette 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 = Falselist_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ère | VPS self-hosted (ServOrbit.com) | Odoo.sh / SaaS partenaire |
|---|---|---|
| Coût mensuel (10 utilisateurs) | À partir de 99 DH/mois | 150 € à 500 € selon modules |
| Contrôle des données | Total — données sur votre serveur | Données chez l'éditeur ou partenaire |
| Modules Community | Tous disponibles, sans restriction | Dépend du plan et du partenaire |
| Modules Enterprise | Non inclus (licence séparée) | Inclus dans l'abonnement |
| Sauvegardes | À votre charge, configurables | Gérées par la plateforme |
| Mises à jour | Manuelles (migration majeure) | Gérées (upgrade assisté) |
| Personnalisation | Sans plafond | Restreinte ou facturable |
| Compétences requises | Administration Linux, Docker | Aucune compétence serveur |
| Support technique | Communauté + prestataire au choix | SLA selon contrat éditeur |