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 qui contient nos archives (et qu’il faut garder au moins deux ans pour les contrôles 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
sudo apt update && sudo apt dist-upgrade
Installation de Python 3.12
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
cd /usr/src sudo wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
sudo tar xzf Python-3.12.0.tgz
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
sudo apt install -y libldap2-dev libsasl2-dev
Installer les dépendances système pour psycopg2
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.
Sélectionner la version de PHP-FPM-8.2.
N’oublier pas d’ajouter votre nom de domaine dans votre gestionnaire de DNS.
Tout est fait automatiquement par le panel myVestaCP.
Il faut juste forcer le SSL en choisissant le template force-https-legacy pour le nom de domaine d’Odoo 8.
N’oublier pas d’ajouter un certificat SSL Let’s Encrypt (ou le vôtre) pour votre nom de domaine.
Si vous avez une erreur 400 lors de la création de votre certicat Let’s Encrypt, voici une commande qui fonctionne bien sous myVesta :
/usr/local/vesta/bin/v-add-letsencrypt-domain odoo18 nom_de_domaine_odoo18.com
Installation du serveur de base de donnée, Postgresql
sudo apt install postgresql -y
Nous allons maintenant créer un nouvel utilisateur (odoo18) pour notre base de données
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
sudo apt install -y fontconfig libxrender1 libx11-dev libjpeg62-turbo-dev xfonts-75dpi xfonts-base
wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb sudo dpkg -i wkhtmltox_0.12.6-1.buster_amd64.deb
Si vous rencontrez des problèmes de dépendances, corrigez-les avec la commande suivante :
sudo apt --fix-broken install
Puis vérifier l’installation :
wkhtmltopdf --version
Vous devriez voir un résultat comme :
wkhtmltopdf 0.12.6 (with patched qt)
Création du répertoire des logs
On crée le dossier des logs
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.
sudo su -l odoo18 -s /bin/bash
On clone la branche d’Odoo 18.
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
cd /home/odoo18 && python3.12 -m venv odoo18-venv
Et on l’active
source odoo18-venv/bin/activate
Puis on installe les librairies python
pip3 install wheel && pip3 install -r web/nom_de_domaine_odoo18/public_html/odoo/requirements.txt
Puis on désactive l’environnement
deactivate
Configuration d’Odoo
On copie le fichier de configuration par défaut dans la racine du répertoire
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
nano odoo-server.conf
[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
exit
sudo su
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.nginx.conf
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; }
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.nginx.ssl.conf
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*; }
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.apache2.conf
<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>
nano /home/odoo18/conf/web/nom_de_domaine_odoo18.apache2.ssl.conf
<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
sudo systemctl reload nginx sudo systemctl reload apache2
Installer le script de démarrage
Puis on édite le fichier de configuration systemctl
sudo nano /etc/systemd/system/odoo18.service
Éditez le fichier de configuration et changer les lignes comme ci-dessous
[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
sudo systemctl daemon-reload && sudo systemctl start odoo18.service && sudo systemctl enable odoo18
On vérifie l’état du système
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 :
● 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
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
Mettre à jour Odoo 18
sudo su - odoo18 -s /bin/bash cd /home/odoo18/web/nom_de_domaine_odoo18/public_html/odoo/ git pull origin 18.0
Erreurs possible
- INFO ? odoo.sql_db: ConnectionPool(read/write;used=0/count=0/max=64): Closed 25 connections
Rajouter dans le fichier de configuration d’Odoo
workers=4
- Erreur 500 avec erreur dans les logs de Odoo : ERROR ? werkzeug: 54.36.51.208 – – [17/Jan/2025 10:46:15] code 400, message Bad HTTP/0.9 request type
Dans /home/odoo18/conf/web/nom_de_domaine_odoo18.nginx.ssl.conf changez les deux https en htttp
- Erreur lors d’un import : CPU time limit exceed ou WorkerHTTP (1127714) timeout after 120s
Ajoutez dans le fichier /home/odoo18/web/nom_de_domaine_odoo18/public_html/odoo/odoo-server.conf :
limit_time_cpu = 600 limit_time_real = 600
- Les PDF générés ne sont pas mis en page
On active le mode développeur dans Paramètres > Paramètres généraux > Activer le mode développeur
Puis dans Paramètres > Technique > Paramètres système, on ajoute une valeur et on l’a rempli ainsi :
Clé : report.url
Valeur : http://127.0.0.1:9080
1 commentaire
Importer les Contacts d’Odoo 8 vers Odoo 18 - Metrodyn · 4 novembre 2024 à 11 h 19 min
[…] voilà enfin, prêts à franchir une nouvelle étape ! Après avoir achevé l’installation d’Odoo 18 sur Debian avec Git et VestaCP, nous entamons le processus de migration des données de notre ancienne instance Odoo vers la […]