Installation d’Odoo 18 sur Debian avec Git et VestaCP (Tout en gardant Odoo 8)
Je décide finalement d’abandonner mon cher Odoo 8 pour enfin tester la version 18. J’espère découvrir une application à la hauteur de ce que fut Odoo 8 ! Après huit ans d’utilisation, je peux dire que l’outil m’a grandement aidé dans la gestion de mes entreprises et de celles des collaborateurs. Cependant, il manque certaine fonctionnalité essentielle à mon sens comme une bonne gestion de la comptabilité française et la gestion des stocks qui est très … Lourde ! En parlant de lourdeur il s’avère que mon instance d’Odoo 8 commençait à très lente (avec 40.000 références et 5000 clients dans la base de données).
Il est important de noter que cette installation n’utilise pas le paquet officiel Debian. En effet, nous cherchons ici à garder une instance Odoo 8 pour les archives (au moins deux ans pour les contrôle comptables). Ainsi il faudra garder notre Python 2.7 tout en installation un environnement Python 3 pour notre Odoo 18.
Mise à jour du système
1 2 |
sudo apt update && sudo apt dist-upgrade |
Installation de Python 3.12
1 2 |
sudo apt update sudo apt install -y build-essential libssl-dev zlib1g-dev libncurses5-dev libnss3-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev liblzma-dev |
1 2 |
cd /usr/src sudo wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz |
1 |
sudo tar xzf Python-3.12.0.tgz |
1 2 3 |
cd Python-3.12.0 sudo ./configure --enable-optimizations sudo make altinstall |
Librairies spécifiques au requirements.txt d’Odoo 18
Installer les dépendances système pour python-ldap
1 |
sudo apt install -y libldap2-dev libsasl2-dev |
Installer les dépendances système pour psycopg2
1 |
sudo apt install -y libpq-dev |
Création de l’utilisateur odoo18
Créer un nouveau utilisateur odoo18 dans le panel de VestaCP.
Création du domaine pour odoo18
Connecter vous à l’utilisateur odoo18 dans VestaCP et créer le nom de domaine qui sera utilisé pour l’instance d’Odoo 18.
N’oublier pas d’ajouter un certificat SSL Let’s Encrypt pour votre nom de domaine.
Sélectionner la version de php 8.2.
N’oublier pas d’ajouter votre nom de domaine dans votre gestionnaire de DNS.
Installation du serveur de base de donnée, Postgresql
1 |
sudo apt install postgresql -y |
Nous allons maintenant créer un nouvel utilisateur (odoo18) pour notre base de données
1 |
sudo su - postgres -c "createuser -s odoo18" 2> /dev/null || true |
Choisissez un mot de passe pour cet utilisateur, ce sera le mot de passe d’accès base de donnée d’Odoo.
Installation de wkhtmltopdf
Pour pouvoir exporter des PDF, il faut installer un logiciel spécifique : WKHTMLTOPDF
1 2 |
sudo wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb && sudo apt install ./wkhtmltox_0.12.6-1.bionic_amd64.deb -y |
Création du répertoire des logs
On crée le dossier des logs
1 |
sudo mkdir /var/log/odoo18 && sudo chown odoo18: /var/log/odoo18 |
Installation du serveur Odoo
Normalement, il répertoire /home/odoo18 a été créer automatiquement par VestaCP.
1 |
sudo su -l odoo18 -s /bin/bash |
On clone la branche d’Odoo 18.
1 2 |
cd /home/odoo18/web/nom_de_domaine_odoo18/public_html/ git clone https://www.github.com/odoo/odoo --depth 1 --branch 18.0 --single-branch . |
On crée un nouvel environnement virtuel python pour odoo
1 2 |
cd /home/odoo18 && python3.12 -m venv odoo18-venv |
Et on l’active
1 |
source odoo18-venv/bin/activate |
Puis on installe les librairies python
1 2 |
pip3 install wheel && pip3 install -r web/nom_de_domaine_odoo18/public_html/odoo/requirements.txt |
Puis on désactive l’environnement
1 |
deactivate |
Configuration d’Odoo
On copie le fichier de configuration par défaut dans la racine du répertoire
1 2 |
cd /home/odoo18/web/nom_de_domaine_odoo18/public_html/odoo cp debian/odoo.conf odoo-server.conf |
Éditez le fichier de configuration et changer les lignes comme ci-dessous
1 |
nano odoo-server.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[options] ; This is the password that allows database operations: admin_passwd = votre_mot_de_passe_admin db_host = False db_port = False db_user = odoo18 db_password = votre_mot_de_passe_postgresql logfile = /var/log/odoo18/odoo.log ;addons_path = /usr/lib/python3/dist-packages/odoo/addons default_productivity_apps = True ; Pour gérer l'autre instance d'Odoo 8 xmlrpc_port = 9080 xmlrpcs_port = 9081 longpolling_port = False gevent_port = 9082 ; Pour éviter des problèmes de surcharge de PostgreSQL workers=4 |
admin_passwd est le mot de passe principal (admin) d’Odoo (Pour gérer les bases de donnée)
Configuration du serveur Nginx / Apache2
Avec VestaCP il convient de modifier les fichiers ci-dessous.
A noter qu’ici, on utilise le port 9080 au lieu du port 8069.
On quitte l’utilisateur odoo18
1 |
exit |
1 |
sudo su |
1 |
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.nginx.conf |
1 2 3 4 5 6 7 8 |
server { listen ip_du_serveur_odoo18:80; server_name nom_de_domaine_odoo18 www.nom_de_domaine_odoo18; location / { rewrite ^(.*) https://nom_de_domaine_odoo18$1 permanent; } include /home/odoo18/conf/web/*nginx.nom_de_domaine_odoo18.conf_letsencrypt; } |
1 |
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.nginx.ssl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
server { listen ip_du_serveur_odoo18:443 ssl http2; server_name nom_de_domaine_odoo18 www.nom_de_domaine_odoo18; ssl_certificate /home/odoo18/conf/web/ssl.nom_de_domaine_odoo18.pem; ssl_certificate_key /home/odoo18/conf/web/ssl.nom_de_domaine_odoo18.key; error_log /var/log/apache2/domains/nom_de_domaine_odoo18.error.log error; location / { proxy_pass http://ip_du_serveur_odoo18:9080; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /error/ { alias /home/odoo18/web/nom_de_domaine_odoo18/document_errors/; } location @fallback { proxy_pass http://ip_du_serveur_odoo18:9080; } location ~ /\.ht {return 404;} location ~ /\.env {return 404;} location ~ /\.svn/ {return 404;} location ~ /\.git/ {return 404;} location ~ /\.hg/ {return 404;} location ~ /\.bzr/ {return 404;} disable_symlinks if_not_owner from=/home/odoo18/web/nom_de_domaine_odoo18/public_html; include /home/odoo18/conf/web/*nginx.nom_de_domaine_odoo18.conf_letsencrypt; include /home/odoo18/conf/web/snginx.nom_de_domaine_odoo18.conf*; } |
1 |
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.apache2.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<VirtualHost ip_du_serveur_odoo18:8080> ServerName nom_de_domaine_odoo18 ServerAlias www.nom_de_domaine_odoo18 ServerAdmin info@nom_de_domaine_odoo18 DocumentRoot /home/odoo18/web/nom_de_domaine_odoo18/public_html ScriptAlias /cgi-bin/ /home/odoo18/web/nom_de_domaine_odoo18/cgi-bin/ Alias /vstats/ /home/odoo18/web/nom_de_domaine_odoo18/stats/ Alias /error/ /home/odoo18/web/nom_de_domaine_odoo18/document_errors/ #SuexecUserGroup odoo18 odoo18 CustomLog /var/log/apache2/domains/nom_de_domaine_odoo18.bytes bytes CustomLog /var/log/apache2/domains/nom_de_domaine_odoo18.com.log combined ErrorLog /var/log/apache2/domains/nom_de_domaine_odoo18.error.log <Directory /home/odoo18/web/nom_de_domaine_odoo18/stats> AllowOverride All </Directory> <Directory /home/odoo18/web/nom_de_domaine_odoo18/public_html> AllowOverride All Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm-nom_de_domaine_odoo18.sock|fcgi://localhost/" </FilesMatch> SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 IncludeOptional /home/odoo18/conf/web/apache2.nom_de_domaine_odoo18* </VirtualHost> |
1 |
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.apache2.ssl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<VirtualHost ip_du_serveur_odoo18:8443> ServerName nom_de_domaine_odoo18 ServerAlias www.nom_de_domaine_odoo18 ServerAdmin info@nom_de_domaine_odoo18 DocumentRoot /home/odoo18/web/nom_de_domaine_odoo18/public_html ScriptAlias /cgi-bin/ /home/odoo18/web/nom_de_domaine_odoo18/cgi-bin/ Alias /vstats/ /home/odoo18/web/nom_de_domaine_odoo18/stats/ Alias /error/ /home/odoo18/web/nom_de_domaine_odoo18/document_errors/ #SuexecUserGroup odoo18 odoo18 CustomLog /var/log/apache2/domains/nom_de_domaine_odoo18.com.bytes bytes CustomLog /var/log/apache2/domains/nom_de_domaine_odoo18.log combined ErrorLog /var/log/apache2/domains/nom_de_domaine_odoo18.error.log <Directory /home/odoo18/web/nom_de_domaine_odoo18/stats> AllowOverride All </Directory> <Directory /home/odoo18/web/nom_de_domaine_odoo18/public_html> AllowOverride All SSLRequireSSL Options +Includes -Indexes -FollowSymLinks +SymLinksIfOwnerMatch </Directory> SSLEngine on SSLVerifyClient none SSLCertificateFile /home/odoo18/conf/web/ssl.nom_de_domaine_odoo18.crt SSLCertificateKeyFile /home/odoo18/conf/web/ssl.nom_de_domaine_odoo18.key SSLCertificateChainFile /home/odoo18/conf/web/ssl.nom_de_domaine_odoo18.ca <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.2-fpm-nom_de_domaine_odoo18.sock|fcgi://localhost/" </FilesMatch> SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 IncludeOptional /home/odoo18/conf/web/sapache2.nom_de_domaine_odoo18.conf* </VirtualHost> |
Et on redémarre Nginx et Apache2
1 2 |
sudo systemctl reload nginx sudo systemctl reload apache2 |
Installer le script de démarrage
Puis on édite le fichier de configuration systemctl
1 |
sudo nano /etc/systemd/system/odoo18.service |
Éditez le fichier de configuration et changer les lignes comme ci-dessous
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[Unit] Description=Odoo 18 startup script Requires=postgresql.service After=network.target postgresql.service [Service] Type=simple SyslogIdentifier=odoo18 PermissionsStartOnly=true User=odoo18 Group=odoo18 ExecStart=/home/odoo18/odoo18-venv/bin/python3 /home/odoo18/web/nom_de_domaine_odoo18/public_html/odoo/odoo-bin --config /home/odoo18/web/nom_de_domaine_odoo18/public_html/odoo/odoo-server.conf ExecStop=/bin/kill $MAINPID StandardOutput=journal+console [Install] WantedBy=multi-user.target |
Puis on démarre le service et on l’exécute au démarrage
1 2 3 |
sudo systemctl daemon-reload && sudo systemctl start odoo18.service && sudo systemctl enable odoo18 |
On vérifie l’état du système
1 |
sudo systemctl status odoo18 |
La sortie devrait ressembler à quelque chose comme ci-dessous, montrant que le service Odoo est actif et en cours d’exécution :
1 2 3 |
● odoo18.service - Odoo 18 startup script Loaded: loaded (/etc/systemd/system/odoo18.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2024-10-04 12:38:04 UTC; 2s ago |
Test du serveur Odoo
On regarde les logs
1 |
less /var/log/apache2/domains/nom_de_domaine_odoo18.error.log |
Et si on ne constate pas d’erreurs alors on accède à l’interface par l’url http://nom_de_domaine_odoo18
Erreurs
INFO ? odoo.sql_db: ConnectionPool(read/write;used=0/count=0/max=64): Closed 25 connections
Rajouter dans le fichier de configuration d’Odoo
1 |
workers=4 |
0 commentaire