Installation Odoo · 23 min read · Nov 17, 2025

Comment installer le logiciel ERP Odoo 17 sur Rocky Linux 9

Odoo (anciennement connu sous le nom d’OpenERP) est une suite auto-hébergée de plus de 10 000 applications open-source pour divers besoins commerciaux, y compris CRM, eCommerce, comptabilité, inventaire, gestion de projet et point de vente. Ces applications sont entièrement intégrées et accessibles via une interface web familière.

Ce tutoriel nous apprendra à installer Odoo 16 Stack sur un serveur Rocky Linux 9.

Prérequis

  1. Un serveur Rocky Linux 9 avec un minimum de 2 Go de RAM pour héberger Odoo Stack.
  2. Un deuxième serveur Rocky Linux 9 avec un minimum de 2 Go de RAM pour héberger la base de données PostgreSQL. Vous pouvez cependant installer la base de données sur le même serveur qu’Odoo, mais pour les environnements de production, il est fortement recommandé de l’installer sur un serveur séparé. Vous pouvez également choisir l’une des options de base de données gérées disponibles auprès du fournisseur de votre choix.
  3. L’exigence en RAM dépendra du nombre d’utilisateurs simultanés qui utiliseront le stack. Un guide détaillé sur la façon de calculer les exigences système peut être trouvé dans la documentation d’Odoo.
  4. Gardez vos systèmes à jour. $ sudo dnf update
  5. Un utilisateur non-root avec des privilèges sudo sur les deux serveurs.
  6. Fail2Ban doit être installé. Cette étape est optionnelle. Vous pouvez suivre notre guide sur l’installation de Fail2Ban sur Rocky Linux pour cela.
  7. SELinux doit être désactivé.
  8. Quelques paquets dont vos systèmes ont besoin. $ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y Certains de ces paquets peuvent déjà être installés sur votre système.

Étape 1 - Configurer les règles du pare-feu

La première étape consiste à configurer le pare-feu. Rocky Linux utilise Firewalld Firewall. Pour ce tutoriel, nous supposerons que vous avez le pare-feu Firewalld installé sur les deux serveurs.

Vérifiez l’état du pare-feu.

$ sudo firewall-cmd --state
running

Le pare-feu fonctionne avec différentes zones, et la zone publique est celle par défaut que nous utiliserons. Listez tous les services et ports actifs sur le pare-feu.

$ sudo firewall-cmd --zone=public --list-all

Il devrait afficher la sortie suivante.

public
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Sur le serveur Odoo, nous aurons besoin que les ports 22, 80, 443, 6010, 5432 et 8069 soient ouverts. 22 est utilisé pour SSH, 80 est pour HTTP, 443 est pour HTTPS, 6010 est utilisé pour la communication Odoo, 5432 est utilisé par PostgreSQL et 8069 est utilisé pour l’application serveur Odoo.

Exécutez les commandes suivantes pour ouvrir les ports requis sur le serveur Odoo.

$ sudo firewall-cmd --zone=public --add-port={6010,5432,8069,8072}/tcp
$ sudo firewall-cmd --zone=public --add-service=http
$ sudo firewall-cmd --zone=public --add-service=https

Vérifiez l’état du pare-feu.

$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client http https ssh
  ports: 6010/tcp 5432/tcp 8069/tcp 8072/tcp
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

Sur le serveur PostgreSQL, nous devons ouvrir les ports 22, 6010 et 5432. Ouvrez-les en utilisant les commandes suivantes.

$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp

Rendez tous les changements permanents et rechargez le pare-feu pour activer les changements.

$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload

Étape 2 - Attribuer des noms d’hôte

Vous pouvez soit utiliser les adresses IP des serveurs, soit utiliser leurs noms de domaine complets (FQDN), si disponibles. Pour notre tutoriel, nous utiliserons des FQDN et pour cela, nous devons définir des noms d’hôte sur les deux serveurs.

Définissez le nom d’hôte sur le serveur Odoo en utilisant la commande suivante.

$ sudo hostnamectl set-hostname odoo.yourdomain.com

Définissez le nom d’hôte sur le serveur PostgreSQL en utilisant la commande suivante.

$ sudo hostnamectl set-hostname postgresql.yourdomain.com

Sur le serveur Odoo, ouvrez le fichier /etc/hosts.

$ sudo nano /etc/hosts

Assurez-vous qu’il ressemble à ce qui suit.

127.0.0.1  localhost
127.0.0.1  odoo.yourdomain.com      odoo
10.1.1.10  postgresql.yourdomain.com  postgresql

Sur le serveur PostgreSQL, ouvrez le fichier et assurez-vous qu’il ressemble à ce qui suit.

127.0.0.1  localhost
127.0.0.1  postgresql.yourdomain.com  postgresql
10.1.2.10  odoo.yourdomain.com      odoo

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Étape 3 - Installer et configurer PostgreSQL

Rocky Linux 9 est livré avec PostgreSQL 13 par défaut et PostgreSQL 15 en tant que flux de module postgresql:15. Cependant, nous allons installer la dernière version disponible au moment de la rédaction de ce tutoriel, PostgreSQL 16 depuis son dépôt officiel.

Installez le RPM du dépôt PostgreSQL.

$ sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Désactivez le module PostgreSQL intégré.

$ sudo dnf -qy module disable postgresql

Installez PostgreSQL 16.

$ sudo dnf install -y postgresql16-server postgresql16-contrib

Initialisez la base de données.

$ sudo /usr/pgsql-16/bin/postgresql-16-setup initdb

Activez et démarrez le service PostgreSQL.

$ sudo systemctl enable postgresql-16
$ sudo systemctl start postgresql-16

Vérifiez l’état du service.

$ sudo systemctl status postgresql-16

Vous devriez obtenir une sortie similaire.

? postgresql-16.service - Serveur de base de données PostgreSQL 16
     Loaded: loaded (/usr/lib/systemd/system/postgresql-16.service; enabled; preset: disabled)
     Active: active (running) since Sun 2024-04-07 02:22:42 UTC; 3s ago
       Docs: https://www.postgresql.org/docs/16/static/
    Process: 8673 ExecStartPre=/usr/pgsql-16/bin/postgresql-16-check-db-dir ${PGDATA} (code=exited, status=0/SUCCESS)
   Main PID: 8678 (postgres)
      Tasks: 7 (limit: 10819)
     Memory: 17.4M
        CPU: 60ms
     CGroup: /system.slice/postgresql-16.service
             ??8678 /usr/pgsql-16/bin/postgres -D /var/lib/pgsql/16/data/
             ??8679 "postgres: logger "
             ??8680 "postgres: checkpointer "
             ??8681 "postgres: background writer "
             ??8683 "postgres: walwriter "
             ??8684 "postgres: autovacuum launcher "
             ??8685 "postgres: logical replication launcher "

Apr 07 02:22:42 postgresql systemd[1]: Starting PostgreSQL 16 database server...
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] LOG:  redirecting log output to logging collector process
Apr 07 02:22:42 postgresql postgres[8678]: 2024-04-07 02:22:42.370 UTC [8678] HINT:  Future log output will appear in directory "log".
Apr 07 02:22:42 postgresql systemd[1]: Started PostgreSQL 16 database server.

Ensuite, nous devons créer un utilisateur de base de données odoo. Vous serez invité à entrer un mot de passe pour le rôle. Entrez un mot de passe fort de votre choix.

$ sudo -u postgres createuser odoo -U postgres -dP

L’option -u exécute la commande en tant qu’utilisateur postgres.

L’option -U indique le nom d’utilisateur à utiliser pour se connecter.

L’option -d accorde à l’utilisateur la permission de créer des bases de données.

L’option -p demande le mot de passe du nouvel utilisateur.

Configurer l’authentification basée sur l’hôte

Nous devons donner la permission au service PostgreSQL de pouvoir se connecter au serveur Odoo.

Tout d’abord, arrêtez le service PostgreSQL.

$ sudo systemctl stop postgresql-16

Pour trouver où PostgreSQL stocke le fichier d’authentification client, exécutez la commande suivante pour démarrer le shell PostgreSQL.

$ sudo -u postgres psql

Exécutez la requête suivante pour trouver l’emplacement du fichier.

postgres=# SHOW hba_file;

Vous recevrez la sortie suivante.

              hba_file              
------------------------------------
 /var/lib/pgsql/16/data/pg_hba.conf
(1 row)

Tapez exit pour quitter le shell.

Ouvrez le fichier /var/lib/pgsql/16/data/pg_hba.conf pour l’éditer.

$ sudo nano /var/lib/pgsql/16/data/pg_hba.conf

Collez la ligne suivante à la fin.

host        all         odoo        odoo.yourdomain.com        scram-sha-256

Cette ligne accorde la permission à l’utilisateur odoo de se connecter à toutes les bases de données sur ce serveur. Vous pouvez également spécifier le nom des bases de données au lieu d’utiliser le mot-clé all.

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Configurer l’adresse d’écoute de PostgreSQL

Ensuite, nous devons permettre au serveur de base de données d’écouter les connexions distantes.

Démarrez le shell PostgreSQL et exécutez la commande suivante pour localiser le fichier de configuration PostgreSQL.

$ sudo -u postgres psql
postgres=# SHOW config_file;

Vous recevrez la sortie suivante.

              config_file               
----------------------------------------
 /var/lib/pgsql/16/data/postgresql.conf
(1 row)

Tapez exit pour quitter le shell.

Ouvrez le fichier /var/lib/pgsql/16/data/postgresql.conf pour l’éditer.

$ sudo nano /var/lib/pgsql/16/data/postgresql.conf

Changez la ligne listen_addresses de

#listen_addresses = 'localhost' # what IP address(es) to listen on;

à.

listen_addresses = '*'

Le * signifie qu’il écoutera toutes les adresses IP. Vous pouvez le changer pour l’adresse IP de votre instance Odoo.

listen_addresses = 'localhost, '

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Activer et démarrer le service PostgreSQL

Puisque notre configuration est terminée, il est temps de démarrer le service PostgreSQL.

$ sudo systemctl start postgresql-16    

Étape 4 - Installer Odoo

Installer Python 3.10

Rocky Linux 9 est livré avec Python 3.9 tandis qu’Odoo 17 nécessite Python 3.10 et supérieur. Par conséquent, nous devons d’abord l’installer.

Vous pouvez d’abord vérifier la version actuellement disponible.

$ python --version
Python 3.9.18

Installez les dépendances requises pour Python.

$ sudo dnf groupinstall "Development Tools"
$ sudo dnf install readline-devel ncurses-devel openssl-devel sqlite-devel tk-devel gdbm-devel libc6-dev libbz2-dev libffi-dev zlib1g-dev
$ sudo dnf install -y openssl-devel bzip2-devel libffi-devel readline-devel ncurses-devel sqlite-devel tk-devel

Téléchargez le code source depuis le site de Python. Au moment de la rédaction de ce tutoriel, la dernière version 3.10.x disponible est 3.10.14, qui est celle que nous avons utilisée.

$ wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz

Extrayez l’archive.

$ tar xzf Python-3.10.14.tgz

Passez au répertoire extrait.

$ cd Python-3.10.14

Configurez le code source.

$ ./configure --enable-optimizations

Installez Python 3.10.14. La commande altinstall est utilisée pour qu’elle n’écrase pas la version Python du système.

$ sudo make altinstall

Confirmez l’installation.

$ python3.10 -V
OU
$ python3.10 --version

Vous devriez obtenir la sortie suivante.

Python 3.10.14

Ensuite, nous devons définir Python 3.10 comme version Python par défaut. Créez des liens symboliques pour chaque version de Python installée sur votre serveur. Lors de la création de la version symbolique, vous devez inclure la version exacte de Python dans vos commandes. Exécutez les commandes suivantes pour créer les liens symboliques.

$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.10 1
$ sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 2

Pour voir les versions Python disponibles, utilisez la commande suivante.

$ sudo update-alternatives --config python3

Vous devriez voir la sortie suivante.

Il y a 2 programmes qui fournissent 'python3'.

  Selection    Command
-----------------------------------------------
   1           /usr/local/bin/python3.10
*+ 2           /usr/bin/python3.9

Entrez pour garder la sélection actuelle[+], ou tapez le numéro de sélection :

Sélectionnez le numéro 1 pour passer à Python 3.10.

Déconnectez-vous et reconnectez-vous au terminal pour passer à la version Python. Vous pouvez maintenant utiliser Python 3.10.14 en utilisant python directement.

Installer les dépendances et préparer l’installation

Créez un nouvel utilisateur système pour gérer les processus Odoo sur le serveur Odoo avec le répertoire personnel comme /opt/odoo. Cela vise à éviter tout risque de sécurité en l’exécutant sous l’utilisateur root.

$ sudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo

Installez les dépendances système requises pour la configuration d’Odoo 17.

$ sudo dnf install -y git libxslt-devel bzip2-devel openldap-devel libjpeg-devel freetype-devel libpq-devel

Installez Nodejs. Rocky Linux 9 est livré avec Node 18.x qui est la version LTS actuelle de Nodejs. Cependant, nous utiliserons le dépôt officiel de Nodesource pour cela.

Ajoutez le dépôt Node 20.

$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -

Installez Nodejs.

$ sudo dnf -y install nodejs

Confirmez la version de Node.

$ node --version
v20.12.1

Installez le paquet Less CSS en utilisant Node. Si vous utilisez un langage avec une interface de droite à gauche, installez également le paquet rtlcss.

$ sudo npm install -g less rtlcss

Installez wkhtmltopdf. Nous utiliserons le paquet RPM du dépôt de packaging Wkhtmltopdf GitHub. La dernière version disponible au moment de la rédaction de ce tutoriel est 0.12.6.1 r3.

Téléchargez le RPM de Wkhtmltopdf.

$ cd ~
$ wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Installez les polices requises par Wkhtmltopdf.

$ sudo dnf install xorg-x11-fonts-75dpi.noarch xorg-x11-fonts-Type1.noarch

Installez Wkhtmltopdf.

$ sudo rpm -i wkhtmltox-0.12.6.1-3.almalinux9.x86_64.rpm

Vérifiez la version de wkhtmltopdf installée.

$ wkhtmltopdf --version
wkhtmltopdf 0.12.6.1 (with patched qt)

Télécharger les fichiers Odoo

Passez à l’utilisateur système Odoo.

$ sudo su - odoo

Clonez le dépôt GitHub d’Odoo sur votre système.

$ git clone https://github.com/odoo/odoo.git --depth 1 --branch 17.0 --single-branch

Pour notre objectif, nous copions Odoo dans le répertoire /opt/odoo à partir duquel il sera installé. Cela créera le répertoire /opt/odoo/odoo que nous utiliserons pour l’installation.

Configurer l’environnement Python Virtualenv

Cette étape est optionnelle mais recommandée car un environnement Python virtuel pour Odoo aidera à éviter les conflits avec les modules Python du système d’exploitation, surtout lors des mises à niveau du système d’exploitation.

Pour cela, nous utiliserons virtualenv.

  1. Créez un nouvel environnement virtualenv pour Odoo. $ python3 -m venv odoo-env
  2. Activez l’environnement virtuel. Nous créons un environnement sous le répertoire personnel de l’utilisateur système. Vous êtes libre de choisir n’importe quel emplacement que vous aimez. $ source odoo-env/bin/activate
  3. Mettez à jour PIP au cas où. (odoo-env) $ pip3 install --upgrade pip
  4. Installez le module wheel de Python dans l’environnement virtuel. $ pip3 install wheel

Installer les dépendances Python

Installez les dépendances Python requises par Odoo 17.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Les exigences prendront un certain temps à s’installer, donc soyez patient.

Vérifiez si les exigences sont installées correctement en vérifiant la liste des modules Python installés.

$ pip3 list
Package           Version
----------------- --------
attrs             23.2.0
Babel             2.9.1
beautifulsoup4    4.12.3
cached-property   1.5.2
certifi           2024.2.2
cffi              1.16.0
chardet           4.0.0
cryptography      3.4.8
decorator         4.4.2
docopt            0.6.2
docutils          0.17
ebaysdk           2.1.5
freezegun         1.1.0
geoip2            2.9.0
gevent            21.8.0
greenlet          1.1.2
idna              2.10
isodate           0.6.1
Jinja2            3.0.3
libsass           0.20.1
lxml              4.8.0
MarkupSafe        2.0.1
maxminddb         2.6.0
num2words         0.5.10
ofxparse          0.21
passlib           1.7.4
Pillow            9.0.1
pip               24.0
platformdirs      4.2.0
polib             1.1.1
psutil            5.9.0
psycopg2          2.9.2
pyasn1            0.6.0
pyasn1_modules    0.4.0
pycparser         2.22
pydot             1.4.2
pyOpenSSL         21.0.0
pyparsing         3.1.2
PyPDF2            1.26.0
pyserial          3.5
python-dateutil   2.8.1
python-ldap       3.4.0
python-stdnum     1.17
pytz              2024.1
pyusb             1.2.1
qrcode            7.3.1
reportlab         3.6.8
requests          2.25.1
requests-file     2.0.0
requests-toolbelt 1.0.0
rjsmin            1.1.0
setuptools        65.5.0
six               1.16.0
soupsieve         2.5
urllib3           1.26.5
vobject           0.9.6.1
Werkzeug          2.0.2
wheel             0.43.0
xlrd              1.2.0
XlsxWriter        3.0.2
xlwt              1.3.0
zeep              4.1.0
zope.event        5.0
zope.interface    6.2

Quittez l’environnement virtuel Python.

$ deactivate

Créer un répertoire pour les addons tiers

$ mkdir /opt/odoo/odoo/custom-addons

Ce répertoire doit être ajouté au paramètre addons_path qui définit les répertoires où Odoo recherche des modules. Quittez l’utilisateur système Odoo.

$ exit

Étape 5 - Configurer Odoo

Copiez le fichier de configuration Odoo par défaut pour en créer un nouveau.

$ sudo cp /opt/odoo/odoo/debian/odoo.conf /etc/odoo.conf

Ouvrez le fichier pour l’éditer.

$ sudo nano /etc/odoo.conf

Modifiez le fichier pour qu’il ressemble à ce qui suit.

[options]
; Ceci est le mot de passe qui permet les opérations sur la base de données :
admin_passwd = admin
db_host = postgresql.yourdomain.com
db_port = False
db_user = odoo
db_password = odoo_password
addons_path = /opt/odoo/odoo/addons, /opt/odoo/odoo/custom-addons
xmlrpc_port = 8069
default_productivity_apps = True

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

L’option admin_passwd est le mot de passe qui permet des opérations administratives dans l’interface Odoo. Assurez-vous de choisir un mot de passe sécurisé.

L’option db_host est le FQDN ou l’adresse IP du serveur PostgreSQL.

L’option db_port est définie sur false puisque le port PostgreSQL par défaut 5432 est utilisé. Si vous souhaitez utiliser un port différent, vous devrez mettre à jour cette valeur.

L’option db_user est le nom de l’utilisateur PostgreSQL.

L’option db_password est le mot de passe de l’utilisateur PostgreSQL ‘odoo’ que nous avons créé précédemment sur le serveur PostgreSQL.

L’option addons_path est le chemin par défaut des Addons. Vous pouvez également ajouter un chemin personnalisé pour les Addons en les séparant par des virgules.

L’option xmlrpc_port est le port sur lequel Odoo écoute.

L’option default_productivity_apps garantit que les applications de productivité par défaut (à savoir Employés, Marketing par e-mail, Projet et Enquêtes) restent activées. Ces quatre applications sont les par défaut dans l’édition communautaire d’Odoo. Dans l’édition Entreprise, il y a des applications de productivité supplémentaires qui peuvent être activées par défaut, à savoir Prises de rendez-vous, Connaissances, Planification et Signature.

Créer un service Odoo

Pour s’assurer qu’Odoo continue de fonctionner même après un redémarrage du système, nous devons créer un service pour cela.

Créez un fichier /lib/systemd/system/odoo-server.service et ouvrez-le pour l’éditer.

$ sudo nano /lib/systemd/system/odoo-server.service

Collez le code suivant dedans.

[Unit]
Description=Odoo Open Source ERP and CRM
Requires=postgresql-16.service
After=network.target postgresql-16.service

[Service]
Type=simple
SyslogIdentifier=odoo-server
User=odoo
Group=odoo
ExecStart=/opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log
WorkingDirectory=/opt/odoo/odoo/
StandardOutput=journal+console
KillMode=mixed

[Install]
WantedBy=multi-user.target

Remplacez /home/ par l’emplacement que vous avez choisi pour installer l’environnement virtuel Python.

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Créer un répertoire de journal pour Odoo

$ sudo mkdir /var/log/odoo

Définir les permissions des fichiers

Définissez les permissions sur le fichier odoo-server.service afin que seuls les utilisateurs Odoo puissent le lire ou l’exécuter.

$ sudo chmod 755 /lib/systemd/system/odoo-server.service
$ sudo chown odoo: /lib/systemd/system/odoo-server.service

Définissez la propriété sur l’environnement Python, l’installation d’Odoo et le répertoire de journal.

$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo

Restreignez le fichier de configuration Odoo.

$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf

Démarrer le serveur Odoo

Démarrez et activez le serveur Odoo.

$ sudo systemctl start odoo-server
$ sudo systemctl enable odoo-server

Vérifiez l’état du serveur.

$ sudo systemctl status odoo-server
? odoo-server.service - Odoo Open Source ERP and CRM
     Loaded: loaded (/usr/lib/systemd/system/odoo-server.service; enabled; preset: disabled)
     Active: active (running) since Tue 2024-04-09 23:59:38 UTC; 1s ago
   Main PID: 102598 (python3)
      Tasks: 4 (limit: 10736)
     Memory: 69.6M
        CPU: 895ms
     CGroup: /system.slice/odoo-server.service
             ??102598 /opt/odoo/odoo-env/bin/python3 /opt/odoo/odoo/odoo-bin --config=/etc/odoo.conf --addons-path=/opt/odoo/odoo/addons/ --logfile /var/log/odoo/odoo-server.log

Apr 09 23:59:38 odoo.yourdomain.com systemd[1]: Started Odoo Open Source ERP and CRM.

Étape 6 - Installer et configurer Nginx

Rocky Linux 9 est livré avec une version plus ancienne de Nginx. Vous devez utiliser le dépôt officiel de Nginx pour installer la dernière version.

Créez et ouvrez le fichier /etc/yum.repos.d/nginx.repo pour l’éditer.

$ sudo nano /etc/yum.repos.d/nginx.repo

Collez le code suivant dedans.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Une fois que vous avez terminé, enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité. Nous utiliserons la version principale de Nginx et avons donc activé le dépôt principal dans le fichier ci-dessus en utilisant enabled=1 sous la section principale au lieu de la stable. Vous pouvez choisir l’un ou l’autre.

Installez Nginx.

$ sudo dnf install -y nginx

Vérifiez l’installation.

$ nginx -v
nginx version: nginx/1.25.4

Activez et démarrez le service du serveur Nginx.

$ sudo systemctl enable nginx --now

Vérifiez l’état du service.

$ sudo systemctl status nginx
? nginx.service - nginx - serveur web haute performance
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-04-10 06:52:14 UTC; 3s ago
       Docs: http://nginx.org/en/docs/
    Process: 103452 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
   Main PID: 103453 (nginx)
      Tasks: 3 (limit: 10736)
     Memory: 3.1M
        CPU: 17ms
     CGroup: /system.slice/nginx.service
             ??103453 "nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf"
             ??103454 "nginx: worker process"
             ??103455 "nginx: worker process"

Étape 7 - Installer SSL

Nous devons installer Certbot pour générer des certificats SSL gratuits offerts par Let’s Encrypt. Nous utiliserons le gestionnaire de paquets Snapd pour cela. Il nécessite le dépôt EPEL (Extra Packages for Enterprise Linux) pour fonctionner.

Installez le dépôt EPEL.

$ sudo dnf install -y epel-release

Rocky Linux 9 n’est pas livré avec Snapd installé. Installez le paquet Snapd.

$ sudo dnf install -y snapd

Activez et démarrez le service Snap.

$ sudo systemctl enable snapd --now

Installez le paquet de base Snap, et assurez-vous que votre version de Snapd est à jour.

$ sudo snap install core
$ sudo snap refresh core

Créez les liens nécessaires pour que Snapd fonctionne.

$ sudo ln -s /var/lib/snapd/snap /snap
$ echo 'export PATH=$PATH:/var/lib/snapd/snap/bin' | sudo tee -a /etc/profile.d/snapd.sh

Installez Certbot.

$ sudo snap install --classic certbot

Utilisez la commande suivante pour vous assurer que la commande Certbot peut être exécutée en créant un lien symbolique vers le répertoire /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Vérifiez si Certbot fonctionne correctement.

$ certbot --version
certbot 2.10.0

Générez le certificat. Nous devons également créer un certificat DHParams.

$ sudo certbot certonly --nginx --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d odoo.yourdomain.com

Générez un certificat d’échange de clés Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Vérifiez le service de planification de renouvellement de Certbot.

$ sudo systemctl list-timers

Vous trouverez snap.certbot.renew.service comme l’un des services programmés pour s’exécuter.

NEXT                        LEFT          LAST                        PASSED   UNIT                         ACTIVATES
....                        ....          ....                        ......   ....                         ..........
Wed 2024-04-10 13:32:11 UTC 1h 42min left Wed 2024-04-10 11:43:41 UTC 5min ago dnf-makecache.timer          dnf-makecache.service
Wed 2024-04-10 19:08:00 UTC 7h left       -                           -        snap.certbot.renew.timer     snap.certbot.renew.service
Thu 2024-04-11 00:00:00 UTC 12h left      Wed 2024-04-10 00:00:36 UTC 11h ago  logrotate.timer              logrotate.service

Faites un essai du processus pour vérifier si le renouvellement SSL fonctionne correctement.

$ sudo certbot renew --dry-run

Si vous ne voyez pas d’erreurs, vous êtes prêt. Votre certificat se renouvellera automatiquement.

Étape 8 - Configurer Nginx

Pour l’exécuter via Nginx, nous devons exécuter Odoo sur localhost. Pour changer cela, arrêtez le service Odoo.

$ sudo systemctl stop odoo-server

Ouvrez le fichier de configuration du serveur Odoo.

$ sudo nano /etc/odoo.conf

Ajoutez les lignes suivantes.

xmlrpc_interface = 127.0.0.1
proxy_mode = True

Créez un fichier de configuration Nginx pour Odoo.

$ sudo nano /etc/nginx/conf.d/odoo.conf

Collez le code ci-dessous.

# serveur odoo
upstream odoo {
 server 127.0.0.1:8069;
}
upstream odoochat {
 server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
  default upgrade;
  ''      close;
}
map $sent_http_content_type $content_type_csp {
    default "";
    ~image/ "default-src 'none'";
}

# http -> https
server {
   listen 80;
   listen [::]:80;
   server_name odoo.yourdomain.com;
   return 301 https://$host$request_uri;
}

server {
 listen 443 ssl;
 listen [::]:443 ssl;
 http2 on;
 http3 on;
 quic_retry on;

 server_name odoo.yourdomain.com;

 proxy_read_timeout 720s;
 proxy_connect_timeout 720s;
 proxy_send_timeout 720s;

 # Ajouter des en-têtes pour le mode proxy 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;

 # paramètres SSL
 ssl_certificate /etc/letsencrypt/live/odoo.yourdomain.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/odoo.yourdomain.com/privkey.pem;
 ssl_trusted_certificate /etc/letsencrypt/live/odoo.yourdomain.com/chain.pem;

 ssl_session_timeout 30m;
 ssl_session_cache shared:MozSSL:10m;  # environ 40000 sessions
 ssl_session_tickets off;

 ssl_protocols TLSv1.2 TLSv1.3;
 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;
 ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
 ssl_prefer_server_ciphers off;
 ssl_stapling on;
 ssl_stapling_verify on;
 ssl_dhparam /etc/ssl/certs/dhparam.pem;

 # journal
 access_log /var/log/nginx/odoo.access.log;
 error_log /var/log/nginx/odoo.error.log;

 # Rediriger les requêtes longpoll vers le port longpolling d'odoo
 location /longpolling {
   proxy_pass http://odoochat;
 }

 location /websocket {
   proxy_pass http://odoochat;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection $connection_upgrade;
   proxy_set_header X-Forwarded-Host $http_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;
   proxy_cookie_flags session_id samesite=lax secure;  # nécessite nginx 1.19.8
 }

 # Rediriger les requêtes vers le serveur backend d'odoo
 location / {
  # Ajouter des en-têtes pour le mode proxy odoo
   proxy_set_header X-Forwarded-Host $http_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;
   proxy_redirect off;
   proxy_pass http://odoo;
   proxy_cookie_flags session_id samesite=lax secure;  # nécessite nginx 1.19.8
 }

 # gzip commun
 gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
 gzip on;

 # Servir les fichiers statiques immédiatement
 location ~ ^/[^/]+/static/.+$ {
   # root et try_files dépendent tous deux de vos chemins d'addons
   root /opt/odoo/odoo;
   try_files /opt/odoo/odoo/addons$uri @odoo;
   expires 24h;
   add_header Content-Security-Policy $content_type_csp;
 }
}

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Ouvrez le fichier /etc/nginx/nginx.conf pour l’éditer.

$ sudo nano /etc/nginx/nginx.conf

Ajoutez la ligne suivante avant la ligne include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size 64;

Enregistrez le fichier en appuyant sur Ctrl + X et en entrant Y lorsque vous y êtes invité.

Testez la configuration de Nginx.

$ sudo nginx -t

Si vous ne voyez pas d’erreurs, cela signifie que vous êtes prêt. Redémarrez le serveur Nginx.

$ sudo systemctl restart nginx

Étape 9 - Démarrer Odoo

Nous pouvons redémarrer le serveur Odoo après que tout soit configuré.

$ sudo systemctl start odoo-server

Lancez Odoo dans votre navigateur via https://odoo.yourdomain.com. Dans votre navigateur, ouvrez l’URL http://:8069 ou http://odoo.yourdomain.com:8069. Vous devriez voir l’écran de création de base de données d’Odoo si tout fonctionne correctement.

Choisissez votre e-mail et votre mot de passe pour créer vos identifiants de connexion. Le mot de passe maître est le admin_passwd que vous avez ajouté dans le fichier /etc/odoo.conf. Remplissez tous les champs restants.

Cochez le champ Données de démonstration pour peupler la base de données avec des données d’exemple. Ne pas installer de données de démonstration sur des serveurs exposés à Internet. Les bases de données avec des données de démonstration contiennent des identifiants et mots de passe par défaut qui peuvent être utilisés pour accéder à vos systèmes et causer des problèmes importants, même sur des systèmes de staging/dev. Nous l’utilisons uniquement à des fins de tutoriel.

Cliquez sur le bouton Créer une base de données pour procéder à la finalisation de l’installation. La première fois que vous créez une base de données, la page des addons mettra du temps à se charger, donc ne rafraîchissez pas la page. Vous serez redirigé automatiquement vers la page de connexion suivante une fois la base de données créée.

Entrez les identifiants utilisés dans l’étape précédente pour vous connecter à l’ERP Odoo et vous serez dirigé vers la page du tableau de bord comme indiqué ci-dessous. Il sera pré-rempli avec des données de démonstration. Si vous n’avez pas coché l’option de données de démonstration sur la page de création de base de données, vous obtiendrez un tableau de bord différent et beaucoup plus propre.

Vous pouvez commencer à utiliser Odoo pour gérer votre entreprise à partir de maintenant.

Étape 10 - Mettre à jour Odoo

Arrêtez le serveur Odoo.

$ sudo systemctl stop odoo-server

Passez à l’utilisateur système Odoo.

$ sudo su - odoo

Tirez le dernier code source depuis GitHub.

$ git fetch
$ git rebase --autostash

La deuxième commande peut rencontrer des conflits de code source si vous modifiez manuellement la source. Vous recevrez la liste des fichiers en conflit. Vous devrez modifier manuellement tous les fichiers et relancer la commande pour corriger les problèmes.

Si vous souhaitez annuler les modifications conflictuelles, vous pouvez exécuter la commande suivante pour réinitialiser la source.

$ git reset --hard

Activez l’environnement virtuel Python.

$ source odoo-env/bin/activate

Installez les dépendances Python.

$ pip3 install -r /opt/odoo/odoo/requirements.txt

Quittez l’environnement virtuel Python.

$ deactivate

Démarrez le serveur Odoo.

$ sudo systemctl start odoo-server

Étape 11 - Sécuriser Odoo avec Fail2Ban

Cette étape est optionnelle mais si vous avez Fail2Ban installé, vous pouvez ajouter une configuration pour Odoo pour le protéger.

Créez et ouvrez le fichier odoo-login.conf pour l’éditer.

$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf

Collez le code suivant dedans.

[odoo-login]
enabled = true
port = http,https
bantime = 900  ; 15 min ban
maxretry = 10  ; si 10 tentatives
findtime = 60  ; dans 1 min  /!\ Doit être ajusté avec le décalage TZ
logpath = /var/log/odoo.log  ;  définissez le chemin de journal odoo réel ici

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Créez et ouvrez le fichier de filtre odoo-login.conf pour l’éditer.

$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf

Collez le code suivant dedans.

[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from 
ignoreregex =

Appuyez sur Ctrl + X pour fermer l’éditeur et appuyez sur Y lorsque vous êtes invité à enregistrer le fichier.

Redémarrez Fail2Ban.

$ sudo systemctl restart fail2ban

Conclusion

Cela conclut notre tutoriel sur l’installation et la configuration d’Odoo sur le serveur Rocky Linux 9. Si vous avez des questions, postez-les dans les commentaires ci-dessous.

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.