Installation d’Odoo 18 sur Debian avec Git et VestaCP (Tout en gardant Odoo 8)

Publié par David le

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)

Source : https://www.odoo.com/fi_FI/forum/apua-1/deprecationwarning-the-longpolling-port-is-a-deprecated-alias-to-the-gevent-port-option-please-use-the-latter-214918

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 […]

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *