Comment installer le logiciel ERP Odoo 17 sur Rocky Linux 9
Sur cette page
- Conditions préalables
- Étape 1 : Configurer les règles du pare-feu
- Étape 2 - Attribuer des noms d'hôtes
Étape 3 - Installer et configurer PostgreSQL
- Configurer l'authentification basée sur l'hôte
- Configurer l'adresse d'écoute PostgreSQL
- Activer et démarrer le service PostgreSQL
Étape 4 - Installer Odoo
Étape 5 - Configurer Odoo
Odoo (anciennement OpenERP) est une suite auto-hébergée de plus de 10 000 applications open source pour divers besoins commerciaux, notamment le CRM, le commerce électronique, la comptabilité, l'inventaire, la gestion de projet et le 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.
Conditions préalables
Un serveur Rocky Linux 9 avec un minimum de 2 Go de RAM pour héberger Odoo Stack.
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 distinct. Vous pouvez également choisir l'une des options de base de données gérées disponibles auprès de n'importe quel fournisseur de votre choix.
Les besoins en RAM dépendront du nombre d'utilisateurs simultanés qui utiliseront la pile. Un guide détaillé sur la façon de calculer la configuration système requise peut être trouvé dans la documentation d'Odoo.
Gardez vos systèmes à jour.
$ sudo dnf update
Un utilisateur non root avec les privilèges sudo sur les deux serveurs.
Fail2Ban doit être installé. Cette étape est facultative. Vous pouvez suivre notre guide sur l'installation de Fail2Ban sur Rocky Linux pour la même chose.
SELinux devrait être désactivé.
Peu de packages dont vos systèmes ont besoin.
$ sudo dnf install wget curl nano unzip yum-utils policycoreutils-python-utils -y
Certains de ces packages sont peut-être déjà 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 le pare-feu Firewalld. Pour ce didacticiel, nous supposerons que le pare-feu Firewalld est 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 pour HTTP, 443 pour HTTPS, 6010 pour la communication Odoo, 5432 pour PostgreSQL et 8069 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 à l'aide des commandes suivantes.
$ sudo firewall-cmd --zone=public --add-port={6010,5432}/tcp
Rendez toutes les modifications permanentes et rechargez le pare-feu pour activer les modifications.
$ sudo firewall-cmd --runtime-to-permanent
$ sudo firewall-cmd --reload
Étape 2 - Attribuer des noms d'hôtes
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 à l'aide de la commande suivante.
$ sudo hostnamectl set-hostname odoo.yourdomain.com
Définissez le nom d'hôte sur le serveur PostgreSQL à l'aide de 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 que cela 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 installerons 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 référentiel 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 un résultat similaire.
? postgresql-16.service - PostgreSQL 16 database server
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
. Il vous sera demandé 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 sous lequel se connecter.
L'option -d
accorde à l'utilisateur l'autorisation 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 l'autorisation au service PostgreSQL pour pouvoir nous connecter au serveur Odoo.
Tout d'abord, arrêtez le service PostgreSQL.
$ sudo systemctl stop postgresql-16
Pour savoir 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 le résultat suivant.
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 le modifier.
$ 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 de 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 PostgreSQL
Ensuite, nous devons autoriser le serveur de base de données à é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 le résultat suivant.
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 le modifier.
$ 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 remplacer par l'adresse IP de votre instance odoo.
listen_addresses = 'localhost, <odoo_server_ip>'
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 alors 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 sur le site Web de Python. Au moment de la rédaction de ce didacticiel, la dernière version 3.10.x disponible est la 3.10.14, c'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
Basculez vers le répertoire extrait.
$ cd Python-3.10.14
Configurez le code source.
$ ./configure --enable-optimizations
Installez Python 3.10.14. La commande altininstall
est utilisée pour ne pas écraser la version Python du système.
$ sudo make altinstall
Confirmez l'installation.
$ python3.10 -V
OR
$ python3.10 --version
Vous devriez obtenir le résultat suivant.
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 afficher les versions Python disponibles, utilisez la commande suivante.
$ sudo update-alternatives --config python3
Vous devriez voir le résultat suivant.
There are 2 programs which provide 'python3'.
Selection Command
-----------------------------------------------
1 /usr/local/bin/python3.10
*+ 2 /usr/bin/python3.9
Enter to keep the current selection[+], or type selection number:
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 désormais utiliser Python 3.10.14 en utilisant directement python
.
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 /opt/odoo
. Il s'agit d'é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 pour cela le référentiel officiel Nodesource.
Ajoutez le référentiel Node 20.
$ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash -
Installez Nodejs.
$ sudo dnf -y install nodejs
Confirmez la version du nœud.
$ node --version
v20.12.1
Installez le package Less CSS à l’aide de Node. Si vous utilisez une langue avec une interface de droite à gauche, installez également le package rtlcss
.
$ sudo npm install -g less rtlcss
Installez wkhtmltopdf
. Nous utiliserons le package RPM du référentiel de packaging Wkhtmltopdf GitHub. La dernière version disponible au moment de la rédaction de ce tutoriel est la 0.12.6.1 r3.
Téléchargez le RPM 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 des fichiers Odoo
Basculez vers l’utilisateur du système Odoo.
$ sudo su - odoo
Clonez le référentiel 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 facultative mais est recommandée car un environnement Python virtuel pour Odoo permettra d'éviter les conflits avec les modules Python du système d'exploitation, notamment lors des mises à niveau du système d'exploitation.
Pour cela, nous utiliserons virtualenv
.
Créez un nouvel environnement virtualenv
pour Odoo.
$ python3 -m venv odoo-env
Activez l'environnement virtuel. Nous créons un environnement sous le répertoire personnel de l'utilisateur système. Vous êtes libre de choisir l'emplacement de votre choix.
$ source odoo-env/bin/activate
Mettez à jour PIP au cas où.
(odoo-env) $ pip3 install --upgrade pip
Installez la roue 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
L'installation des exigences prendra un certain temps, alors soyez patient.
Vérifiez si la configuration requise est correctement installée en consultant 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 modules complémentaires tiers
$ mkdir /opt/odoo/odoo/custom-addons
Ce répertoire doit être ajouté au paramètre addons_path
qui définit les répertoires dans lesquels Odoo recherche les modules. Quittez l'utilisateur du 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 le modifier.
$ sudo nano /etc/odoo.conf
Modifiez le fichier pour qu'il ressemble à ce qui suit.
[options]
; This is the password that allows database operations:
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 les opérations administratives dans l'interface graphique d'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 autre port, 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 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 modules complémentaires. Vous pouvez également ajouter un chemin personnalisé pour les modules complémentaires 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, Email Marketing, Projet et Enquêtes) restent activées. Ces quatre applications sont celles par défaut sur Odoo Community Edition. Dans l'édition Enterprise, des applications de productivité supplémentaires peuvent être activées par défaut : Rendez-vous, Connaissances, Planification et Signature.
Créer un service Odoo
Pour nous assurer qu'Odoo continue de fonctionner même après le redémarrage d'un système, nous devons créer un service pour celui-ci.
Créez un fichier /lib/systemd/system/odoo-server.service
et ouvrez-le pour le modifier.
$ sudo nano /lib/systemd/system/odoo-server.service
Collez-y le code suivant.
[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 journaux pour Odoo
$ sudo mkdir /var/log/odoo
Définir les autorisations de fichiers
Définissez les autorisations 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 Odoo et le répertoire des journaux.
$ sudo chown -R odoo: /opt/odoo/
$ sudo chown -R odoo: /opt/odoo/odoo-env
$ sudo chown -R odoo: /var/log/odoo
Restreindre le fichier de configuration Odoo.
$ sudo chown odoo: /etc/odoo.conf
$ sudo chmod 640 /etc/odoo.conf
Démarrez 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 ancienne version de Nginx. Vous devez utiliser le référentiel officiel Nginx pour installer la dernière version.
Créez et ouvrez le fichier /etc/yum.repos.d/nginx.repo
pour le modifier.
$ sudo nano /etc/yum.repos.d/nginx.repo
Collez-y le code suivant.
[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 saisissant Y lorsque vous y êtes invité. Nous utiliserons la version principale de Nginx et avons donc activé le dépôt mainline dans le fichier ci-dessus en utilisant enabled=1
sous la section mainline au lieu de la version 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 - high performance web server
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 les certificats SSL gratuits proposés par Let's Encrypt. Nous utiliserons le programme d'installation du package Snapd pour cela. Il nécessite le référentiel EPEL (Extra Packages for Enterprise Linux) pour fonctionner.
Installez le référentiel EPEL.
$ sudo dnf install -y epel-release
Rocky Linux 9 n'est pas fourni avec Snapd installé. Installez le package Snapd.
$ sudo dnf install -y snapd
Activez et démarrez le service Snap.
$ sudo systemctl enable snapd --now
Installez le package principal 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 au fonctionnement de Snapd.
$ 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 -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 Certbot.
$ sudo systemctl list-timers
Vous trouverez snap.certbot.renew.service
comme l'un des services dont l'exécution est planifiée.
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
Effectuez un essai à sec du processus pour vérifier si le renouvellement SSL fonctionne correctement.
$ sudo certbot renew --dry-run
Si vous ne voyez aucune erreur, 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-y 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.
#odoo server
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;
# Add Headers for odoo proxy mode
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;
# SSL parameters
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; # about 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;
# log
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# Redirect longpoll requests to odoo longpolling port
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; # requires nginx 1.19.8
}
# Redirect requests to odoo backend server
location / {
# Add Headers for odoo proxy mode
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; # requires nginx 1.19.8
}
# common gzip
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
gzip on;
# Serve static files right away
location ~ ^/[^/]+/static/.+$ {
# root and try_files both depend on your addons paths
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 le modifier.
$ 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 saisissant Y lorsque vous y êtes invité.
Testez la configuration de Nginx.
$ sudo nginx -t
Si vous ne voyez aucune erreur, cela signifie que vous êtes prêt à partir. Redémarrez le serveur Nginx.
$ sudo systemctl restart nginx
Étape 9 - Démarrez Odoo
Nous pouvons redémarrer le serveur Odoo une fois que tout est configuré.
$ sudo systemctl start odoo-server
Lancez Odoo dans votre navigateur via https://odoo.yourdomain.com
. Dans votre navigateur, ouvrez l'URL http://
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 email et votre mot de passe pour créer vos identifiants de connexion. Le mot de passe principal est le admin_passwd
que vous avez ajouté dans le fichier /etc/odoo.conf
. Remplissez tous les champs restants.
Vérifiez le champ Demo Data
pour remplir la base de données avec des exemples de données. N'installez pas de données de démonstration sur des serveurs accessibles sur Internet. Les bases de données contenant des données de démonstration contiennent des identifiants et des 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 les systèmes de test/de développement. Nous l'utilisons uniquement à des fins de didacticiel.
Cliquez sur le bouton Créer une base de données pour terminer l'installation. La première fois que vous créez une base de données, la page des modules complémentaires prendra du temps à se charger, alors n'actualisez pas la page. Vous serez automatiquement redirigé vers la page de connexion suivante une fois la base de données créée.
Entrez les informations d'identification utilisées à l'étape précédente pour vous connecter à l'ERP Odoo et vous serez redirigé 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
Basculez vers l’utilisateur du système Odoo.
$ sudo su - odoo
Extrayez le dernier code source de 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 réexécuter la commande pour résoudre les problèmes.
Si vous souhaitez ignorer 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écurisez Odoo à l'aide de Fail2Ban
Cette étape est facultative mais si Fail2Ban est installé, vous pouvez ajouter une configuration pour Odoo pour le protéger.
Créez et ouvrez le fichier odoo-login.conf
pour le modifier.
$ sudo nano /etc/fail2ban/jail.d/odoo-login.conf
Collez-y le code suivant.
[odoo-login]
enabled = true
port = http,https
bantime = 900 ; 15 min ban
maxretry = 10 ; if 10 attempts
findtime = 60 ; within 1 min /!\ Should be adjusted with the TZ offset
logpath = /var/log/odoo.log ; set the actual odoo log path here
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 le modifier.
$ sudo nano /etc/fail2ban/filter.d/odoo-login.conf
Collez-y le code suivant.
[Definition]
failregex = ^ \d+ INFO \S+ \S+ Login failed for db:\S+ login:\S+ from <HOST>
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
Ceci 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.