Recherche de site Web

Comment installer le logiciel ERP Odoo 17 sur Rocky Linux 9


Sur cette page

  1. Conditions préalables
  2. Étape 1 : Configurer les règles du pare-feu
  3. Étape 2 - Attribuer des noms d'hôtes
  4. Étape 3 - Installer et configurer PostgreSQL

    1. Configurer l'authentification basée sur l'hôte
    2. Configurer l'adresse d'écoute PostgreSQL
    3. Activer et démarrer le service PostgreSQL
  5. Étape 4 - Installer Odoo

    1. Installer Python 3.10
    2. Installer les dépendances et préparer l'installation
    3. Télécharger des fichiers Odoo
    4. Configurer l'environnement Python Virtualenv
    5. Installer les dépendances Python
    6. Créer un répertoire pour les modules complémentaires tiers
  6. Étape 5 - Configurer Odoo

    1. Créer un service Odoo
    2. Créer un répertoire de journaux pour Odoo
    3. Définir les autorisations de fichiers
    4. Démarrez le serveur Odoo
  7. Étape 6 - Installer et configurer Nginx
  8. Étape 7 - Installer SSL
  9. Étape 8 - Configurer Nginx
  10. Étape 9 - Démarrez Odoo
  11. Étape 10 - Mettre à jour Odoo
  12. Étape 11 - Sécurisez Odoo à l'aide de Fail2Ban
  13. Conclusion

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://: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 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.

Articles connexes: