Passer au contenu principal

VPS : Installer Odoo (ERP et CRM Open Source) sur Linux

Ce guide a été créé avec les produits suivants :

(Les détails peuvent varier selon les produits de différents fournisseurs, mais les concepts principaux restent les mêmes)

Introduction

Odoo est une plateforme modulaire open source qui combine les fonctionnalités de planification des ressources d’entreprise (ERP) et de gestion de la relation client (CRM). Elle permet aux entreprises de gérer et d’automatiser des processus tels que la comptabilité, la gestion des stocks, la gestion de projets et les ventes depuis un système unique.

Grâce à ses extensions flexibles, Odoo peut être adapté à des besoins spécifiques et offre une solution intégrée pour gérer tous les domaines d’une entreprise.

img

Tu envisages d’héberger ce service toi-même ? On te guide étape par étape pour l’installer et le configurer, avec tout ce qu’il faut savoir.

Prérequis

Avant d’installer Odoo, assure-toi que ton environnement d’hébergement répond aux exigences suivantes pour garantir une installation fluide et des performances optimales.

MatérielMinimumRecommandé
CPU1 cœur vCPU4 cœurs vCPU
RAM1 Go4 Go
Espace disque15 Go25 Go

Le logiciel nécessite que toutes les dépendances requises soient installées et qu’il fonctionne sur un système d’exploitation supporté. Vérifie que ton serveur remplit les conditions suivantes avant de lancer l’installation :

Dépendances : Docker

Système d’exploitation : Dernière version d’Ubuntu/Debian compatible avec Docker 26+

Assure-toi que toutes les dépendances sont installées et que la version du système d’exploitation est correcte pour éviter les problèmes de compatibilité lors de l’installation d’Odoo.

Préparation

Avant de configurer Odoo, tu dois préparer ton système. Cela inclut la mise à jour de ton système d’exploitation à la dernière version et l’installation de toutes les dépendances nécessaires. Ces préparatifs garantissent un environnement stable et aident à prévenir les problèmes pendant ou après l’installation.

Mise à jour du système

Pour t’assurer que ton système tourne avec les dernières améliorations logicielles et de sécurité, commence toujours par une mise à jour système. Pour cela, lance la commande suivante :

sudo apt update && sudo apt upgrade -y

Cela garantit que ton système dispose des derniers correctifs de sécurité et des versions logicielles avant de continuer.

Installer les dépendances

Une fois la mise à jour terminée, tu peux passer à l’installation des dépendances. Bitwarden sera déployé et exécuté sur ta machine via plusieurs conteneurs Docker. Docker doit donc être installé en premier. Pour cela, lance la commande suivante :

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

Un guide complet sur l’installation et l’utilisation de Docker est disponible dans notre guide Docker.

Configurer ton domaine

Par défaut, Odoo tourne sur l’hôte via les ports 80 (HTTP) et 443 (HTTPS). Configure un domaine avec des enregistrements DNS pointant vers l’hôte. Si le domaine est géré par nous, tu peux facilement le faire via l’option EasyDNS.

Installation

Maintenant que toutes les exigences sont remplies et que les préparatifs sont faits, tu peux procéder à l’installation de l’application Odoo.

Quand tu travailles avec plusieurs configurations Docker, c’est une bonne pratique de créer une structure de dossiers claire pour isoler les projets. Une méthode courante est de créer un dossier docker dans le répertoire personnel de l’utilisateur, avec un sous-dossier dédié pour chaque domaine. Ainsi, plusieurs projets peuvent cohabiter sur le même serveur sans conflits de configuration.

Par exemple, pour préparer la structure pour le domaine example.com :

mkdir -p /docker/example.com
cd /docker/example.com

Dans ce dossier projet, il est recommandé de créer des sous-dossiers qui seront montés en volumes par les conteneurs. Ces volumes permettent de partager les données entre services ou de les garder persistantes. Un cas critique est le webroot partagé, auquel nginx et certbot doivent accéder pour générer et renouveler les certificats SSL. Une structure adaptée peut être créée ainsi :

mkdir -p nginx/{conf,ssl,inc} config addons

Cela fournit des dossiers dédiés pour la configuration nginx, les certificats SSL, les fichiers d’inclusion, et le contenu spécifique à Odoo comme les configs et addons.

Créer le Docker Compose

Dans ton projet docker, crée le fichier compose.yml avec nano compose.yml. Colle le code suivant :

services:
db:
image: postgres:16
ports:
- "5432:5432"
environment:
- POSTGRES_USER=odoo
- POSTGRES_PASSWORD=odoo
- PGDATA=/var/lib/postgresql/data/pgdata
volumes:
- odoo-db-data:/var/lib/postgresql/data

odoo:
image: odoo:18.0
depends_on:
- db
ports:
- "8069:8069"
volumes:
- odoo-web-data:/var/lib/odoo
- ./config:/etc/odoo
- ./addons:/mnt/extra-addons
command: odoo -d odoo_db -i base --db_user=odoo --db_password=odoo --db_host=db

nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/inc:/etc/nginx/inc
- ./nginx/ssl:/etc/nginx/ssl
- ./nginx/certbot/www:/var/www/certbot
- ./nginx/certbot/conf:/etc/letsencrypt
depends_on:
- odoo

certbot:
image: certbot/certbot
volumes:
- ./nginx/certbot/www:/var/www/certbot
- ./nginx/certbot/conf:/etc/letsencrypt

volumes:
odoo-db-data:
odoo-web-data:

Pare-feu

Pour que nginx et certbot fonctionnent correctement, il faut autoriser les ports TCP 80 (HTTP) et 443 (HTTPS) dans le pare-feu. Ces ports sont essentiels car certbot utilise le port 80 pour la validation HTTP, tandis que le port 443 sert à fournir le trafic chiffré HTTPS. Si UFW (Uncomplicated Firewall) est activé, ajoute les règles nécessaires avec :

sudo ufw allow http
sudo ufw allow https

Vérifie ensuite avec sudo ufw status que les ports sont bien ouverts. Assure-toi qu’aucune autre configuration de pare-feu ne bloque ces ports, sinon la génération des certificats ou le trafic HTTPS sécurisé pourraient échouer.

Configuration de Nginx

La configuration de nginx commence par la création d’un fichier de configuration pour ton domaine. Dans le dossier nginx/conf, crée un nouveau fichier nommé d’après ton domaine. Par exemple, lance nano nginx/conf/example.com.conf et ajoute les directives de base en remplaçant le placeholder par ton vrai domaine :

server {
listen 80;
server_name example.com;

location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

location / {
return 301 https://$host$request_uri;
}
}

Cette configuration permet à certbot de compléter le challenge ACME et d’émettre des certificats SSL valides. Elle assure aussi que toutes les requêtes HTTP sont redirigées vers HTTPS.

Une fois le fichier sauvegardé, démarre les conteneurs nécessaires : base de données, Odoo et nginx. Lance la commande :

sudo docker compose up -d db odoo nginx

Les conteneurs tourneront en arrière-plan, et nginx utilisera déjà la nouvelle configuration, permettant à certbot de générer les certificats à l’étape suivante.

Générer les certificats SSL

Lance la commande suivante pour créer les certificats SSL avec certbot. Pense à remplacer example.com par ton propre domaine et user@mail.com par ton adresse mail valide.

sudo docker compose run --rm certbot certonly --webroot --webroot-path=/var/www/certbot -d example.com --email user@mail.com --agree-tos --no-eff-email

Génère ensuite un fichier de paramètres DH dédié pour renforcer la sécurité de l’échange de clés cryptographiques.

openssl dhparam -out nginx/ssl/dhparam.pem 2048

Crée maintenant le fichier ssl.conf avec nano nginx/ssl/ssl.conf et ajoute ce contenu. Remplace example.com par ton domaine :

ssl_protocols TLSv1.2 TLSv1.3;
ssl_ecdh_curve X25519:prime256v1:secp384r1;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_dhparam "/etc/nginx/ssl/dhparam.pem";
ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
resolver 1.1.1.1 1.0.0.1 valid=300s;

Configuration

Configuration Nginx

Modifie le fichier de configuration nginx créé précédemment et remplace son contenu par la configuration ci-dessous pour garantir que ton site ne soit servi qu’en HTTPS.

N’oublie pas de remplacer example.com par ton vrai domaine dans la directive server_name et de spécifier les bons chemins vers tes fichiers de certificat dans ssl_certificate et ssl_certificate_key.

server {
listen 443 ssl;
http2 on;
server_name example.com;

# Inclure les réglages SSL de Mozilla
include /etc/nginx/ssl/ssl.conf;

# Chemins des certificats (vérifie qu’ils correspondent à ton volume monté)
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

# En-têtes de sécurité
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

access_log /var/log/nginx/odoo_access.log;
error_log /var/log/nginx/odoo_error.log;

# Gzip
include /etc/nginx/inc/gzip.conf;

# Paramètres proxy pour Odoo
location / {
proxy_pass http://odoo:8069;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect off;
proxy_request_buffering off;
# Timeouts recommandés pour requêtes standards
proxy_connect_timeout 30s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
send_timeout 60s;
}

# Mise en cache des fichiers statiques
location ~* /web/static/ {
proxy_cache_valid 200 60m;
proxy_buffering on;
expires 864000;
proxy_pass http://odoo:8069;
}

# Augmentation des timeouts pour le long polling
location /longpolling {
proxy_pass http://odoo:8069;
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
send_timeout 300s;
}

location /websocket {
proxy_pass http://odoo:8069;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

server {
listen 80;
server_name example.com;

# Permet à Certbot d’accéder à l’URL de challenge
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}

location / {
return 301 https://$host$request_uri;
}
}

Une fois les modifications sauvegardées, applique la nouvelle configuration en redémarrant le conteneur nginx :

sudo docker compose restart nginx

Le redémarrage garantit que nginx charge la nouvelle config et commence immédiatement à servir les requêtes avec les nouveaux paramètres. Surveille les messages d’erreur pendant le redémarrage. En cas de problème, consulte les logs du conteneur avec sudo docker compose logs nginx pour dépanner. Si tout tourne sans erreur, revisite ton site pour vérifier que HTTPS est actif et que le site fonctionne comme prévu.

Options de configuration Odoo

Pour appliquer des réglages personnalisés, tu peux créer un fichier de configuration dédié pour Odoo. Place un nouveau fichier à config/odoo.conf et ajoute les options souhaitées.

Dans ce fichier, tu peux définir plusieurs paramètres utiles : list_db = False masque la sélection de base de données sur la page de connexion, proxy_mode = True indique à Odoo qu’il tourne derrière un reverse proxy, et si tu veux utiliser des addons personnalisés, tu peux décommenter la ligne addons_path et la pointer vers le dossier addons créé plus tôt. Exemple de config :

[options]
list_db = False
proxy_mode = True
#addons_path = /mnt/extra-addons

Supprimer le flag -i base

Le flag -i base doit être retiré du fichier compose.yml, sinon la base de données sera recréée à chaque redémarrage du conteneur Odoo. Pour le retirer, ouvre le fichier compose avec nano compose.yml et modifie la commande comme suit :

command: odoo -d odoo_db --db_user=odoo --db_password=odoo --db_host=db

Accéder au site web

Une fois l’installation et la configuration terminées et tous les services en marche, tu peux accéder en toute sécurité à ton site en entrant ton domaine dans la barre d’adresse du navigateur.

img

Cela affichera la page de démarrage de ta nouvelle installation. Pour la première connexion, un compte par défaut est fourni avec le nom d’utilisateur admin et le mot de passe admin. On te recommande vivement de changer ces identifiants.

Conclusion et ressources supplémentaires

Félicitations ! Tu as maintenant installé et configuré Odoo avec succès sur ton VPS. On te conseille aussi de jeter un œil aux ressources suivantes, qui peuvent t’apporter un coup de main et des conseils supplémentaires pendant ta configuration serveur :

Tu as des questions spécifiques qui ne sont pas couvertes ici ? Pour toute demande ou assistance, n’hésite pas à contacter notre équipe support, disponible tous les jours pour t’aider ! 🙂