[UPDATE 2026] Odoo 8 en Docker : migration d’une installation standalone vers Docker Compose avec reverse proxy MyVestaCP

Published by David on






Odoo 8 en Docker — migration standalone vers Docker Compose avec reverse proxy MyVestaCP

Odoo 8 en Docker — migration standalone vers Docker Compose

Cinquième étape : migrer Odoo 8 d’une installation standalone (venv Python 2.7 + PostgreSQL)
vers Docker Compose avec une instance unique et reverse proxy MyVestaCP.

Document paramétrable

Ce guide utilise des variables {{...}} à remplacer par vos propres valeurs.
Vous pouvez aussi donner ce document à une IA avec vos paramètres pour générer une version personnalisée.

Variable Description Exemple
{{IP_ANCIEN}} IP de l’ancien serveur 203.0.113.10
{{IP_NOUVEAU}} IP du nouveau serveur 198.51.100.20
{{HOSTNAME_ANCIEN}} Hostname de l’ancien serveur vps-ancien
{{HOSTNAME_NOUVEAU}} Hostname du nouveau serveur vps-nouveau
{{PORT_SSH_ANCIEN}} Port SSH de l’ancien serveur 22
{{PORT_SSH_NOUVEAU}} Port SSH du nouveau serveur 22
{{DOMAINE_ODOO8}} Sous-domaine de l’instance Odoo 8 odoo8.exemple.com
{{DB_PASSWORD}} Mot de passe PostgreSQL MotDePassePostgres
{{ODOO_ADMIN_PASSWORD}} Mot de passe admin (master password) Odoo MotDePasseOdooAdmin
{{DB_1}}{{DB_4}} Noms de vos bases de données Odoo 8 entreprise-odoo
{{USER_VESTA}} Utilisateur VestaCP admin

Note : adaptez le nombre de bases de données ({{DB_1}} à {{DB_4}})
selon votre installation. Vous pouvez en avoir plus ou moins que 4.

Introduction

Sur l’ancien serveur ({{HOSTNAME_ANCIEN}}, IP {{IP_ANCIEN}}, SSH port {{PORT_SSH_ANCIEN}}),
Odoo 8 fonctionne en installation standalone : un environnement virtuel Python 2.7 et PostgreSQL
installés directement sur le système.

Sur le nouveau serveur ({{HOSTNAME_NOUVEAU}}, IP {{IP_NOUVEAU}}, SSH port {{PORT_SSH_NOUVEAU}}),
nous migrons vers une architecture Docker Compose avec une instance unique Odoo 8
et un conteneur PostgreSQL 9.6 dédié.

Architecture cible

  • 1 instance Odoo 8 : odoo8 (port 8469) — instance unique
  • 1 conteneur PostgreSQL 9.6 dédié à Odoo 8 (séparé de la PostgreSQL 13 d’Odoo 17)
  • MyVestaCP gère le reverse proxy Nginx et les certificats SSL (Let’s Encrypt)
  • Fichiers Docker : /home/docker/odoo8/

Avantages de cette architecture :
isolation totale d’Odoo 17 (réseaux Docker, volumes et PostgreSQL séparés),
version PostgreSQL adaptée (9.6 pour Odoo 8, 13 pour Odoo 17),
facilité de maintenance (backup, restart, rollback indépendants),
et SSL/proxy géré par VestaCP (même workflow que pour Odoo 17).

Composants en fin de vie : Odoo 8 utilise Python 2.7 (fin de vie depuis janvier 2020)
et PostgreSQL 9.6 (fin de vie depuis novembre 2021). L’image Docker odoo:8.0 est basée
sur Debian Jessie (également en fin de vie). Cette migration permet de faire tourner
l’installation existante « telle quelle » dans un conteneur isolé, mais il ne faut pas
l’utiliser pour du nouveau développement.

1) Créer le domaine dans MyVestaCP

Dans le panel MyVestaCP → WEBAdd Web Domain :

  • {{DOMAINE_ODOO8}}

Paramètres :

  • DNS Support : cocher (obligatoire pour que Let’s Encrypt fonctionne)
  • Mail Support : décocher (Odoo n’a pas besoin de serveur mail ici)
  • Advanced options : laisser les valeurs par défaut

DNS Support obligatoire : même si le DNS est géré ailleurs (OVH, Cloudflare, etc.),
il faut cocher DNS Support dans MyVestaCP. Le script v-add-letsencrypt-domain
a besoin de la zone DNS locale pour créer l’enregistrement _acme-challenge lors de la
validation Let’s Encrypt. Sans cette zone, le script ne crée pas le fichier de challenge HTTP
et la demande de certificat échoue systématiquement avec une erreur 404.
La zone DNS de MyVestaCP n’interfère pas avec le DNS autoritaire tant que les serveurs NS
du domaine pointent vers le registrar.

Important : ne pas activer Let’s Encrypt pour l’instant — le DNS ne pointe pas encore vers le nouveau serveur.
On activera SSL après avoir basculé les enregistrements DNS (section 12).

2) Créer les templates Nginx pour reverse proxy Odoo 8

Même principe que pour Odoo 17 : on crée des templates Nginx personnalisés pour que VestaCP
fasse du reverse proxy vers le conteneur Docker (port 8469) au lieu de servir des fichiers statiques.

La configuration existante d’Odoo 8 utilise le longpolling (port 8072 dans le conteneur,
mappé sur 8472 en host). Le template inclut donc un bloc location /longpolling
comme pour Odoo 17.

2.1 Template HTTP : odoo-8469.tpl

Créer le fichier /usr/local/vesta/data/templates/web/nginx/odoo-8469.tpl :

Contenu :

Le longpolling d’Odoo 8 (port 8472 en host) est utilisé pour les notifications
en temps réel et le chat interne. Contrairement à Odoo 17, il n’y a pas de websocket
(pas de headers Upgrade / Connection "upgrade").

2.2 Template HTTPS : odoo-8469.stpl

Créer le fichier /usr/local/vesta/data/templates/web/nginx/odoo-8469.stpl :

Contenu :

Important : utiliser listen %ip%:%proxy_ssl_port% ssl; suivi de http2 on; sur deux lignes distinctes.
La syntaxe listen ... ssl http2 (sur une seule ligne) est dépréciée dans Nginx 1.25+ et génère un warning.

On ne met pas les directives ssl_stapling dans le template initial — elles causent des warnings
avec les certificats auto-signés. VestaCP les ajoutera automatiquement lors de l’activation de Let’s Encrypt.

2.3 Appliquer le template au domaine

2.4 Vérifier et recharger Nginx

Si nginx -t affiche syntax is ok et test is successful, la configuration est correcte.

3) Créer la structure des répertoires Docker

  • config/ : fichier de configuration Odoo (odoo-server.conf)
  • ext_addons/ : modules personnalisés
  • backup/ : exports temporaires (dump SQL, tar filestore)

3.1 Docker Compose v2

Si Docker Compose v2 a déjà été installé lors de la migration Odoo 17, cette étape peut être sautée.
Vérifier :

Si la commande affiche Docker Compose version v2.x.x, c’est bon.
Sinon, se référer à l’article Odoo 17 (section 3.1) pour l’installation.

4) Créer les fichiers de configuration

On crée les fichiers directement sur le serveur via SSH (copier-coller le contenu).

4.1 Créer le docker-compose.yml

Contenu :

Points clés :

  • postgres:9.6 (Odoo 8 n’est pas compatible avec PostgreSQL 10+)
  • odoo:8.0 — image officielle Odoo 8 (Python 2.7, Debian Jessie)
  • Ports : 8469:8069 (XMLRPC) et 8472:8072 (longpolling)
  • Le fichier de configuration local odoo-server.conf est monté sur /etc/odoo/openerp-server.conf (chemin attendu par l’image Docker)
  • Réseau et volumes complètement séparés d’Odoo 17

PostgreSQL 9.6 est également en fin de vie. C’est acceptable pour faire tourner
une base Odoo 8 existante, mais il ne faut pas l’utiliser pour du nouveau développement.

4.2 Créer le odoo-server.conf

Contenu :

Adaptation de la config de l’ancien serveur : les chemins addons_path
ont été remplacés depuis les chemins de l’ancien serveur vers /mnt/extra-addons/
(chemin du volume Docker). Chaque sous-dossier de modules custom doit être listé individuellement.
Les identifiants de la BDD pointent vers le conteneur db
au lieu de localhost. Le log_level a été passé de debug
à warn pour la production.

Différences clés avec la configuration Odoo 17 :

  • addons_path utilise /usr/lib/python2.7/dist-packages/openerp/addons et liste chaque sous-répertoire de modules individuellement
  • xmlrpc_port au lieu de http_port (terminologie Odoo 8)
  • server_wide_modules = web,web_kanban (Odoo 17 utilise base,web)
  • [options-connector] — section spécifique au framework Connector d’Odoo 8
  • proxy_mode = True est important derrière un reverse proxy Nginx

4.3 Permissions

5) Exporter les données depuis l’ancien serveur

Sur l’ancien serveur, on exporte :

  • Les bases de données Odoo 8 (les bases appartenant à l’utilisateur odoo8)
  • Le filestore (fichiers uploadés : images, PDF, pièces jointes)
  • Les modules personnalisés

5.1 Identifier et exporter les bases de données

Lister les bases appartenant à l’utilisateur odoo8 :

Résultat (exemple avec 4 bases) :

  • {{DB_1}}
  • {{DB_2}}
  • {{DB_3}}
  • {{DB_4}}

Exporter chaque base avec pg_dump :

Utiliser pg_dump (pas pg_dumpall) pour les mêmes raisons que pour Odoo 17 :
on n’exporte que les bases nécessaires, pas tous les rôles du serveur.
Le rôle odoo8 sera créé automatiquement par Docker Compose (POSTGRES_USER).

5.2 Export du filestore

Le filestore Odoo 8 se trouve généralement dans ~/.local/share/OpenERP/filestore/
(et non ~/.local/share/Odoo/ comme pour Odoo 17).

Attention : Odoo 8 peut stocker le filestore à différents endroits selon la configuration :
~/.local/share/OpenERP/filestore/ (par défaut),
ou le chemin spécifié par data_dir dans l’ancien openerp-server.conf.
Vérifier la configuration de l’ancien serveur avant d’exporter.

5.3 Export des modules personnalisés

Les modules Odoo 8 utilisent __openerp__.py comme fichier descripteur
(et non __manifest__.py comme Odoo 9+). Ne pas renommer ces fichiers —
Odoo 8 ne reconnaîtra pas __manifest__.py.

6) Transférer les exports via rsync

Depuis le nouveau serveur, récupérer les archives créées sur l’ancien serveur :

Si la connexion SSH échoue, vérifier que la clé SSH a bien été configurée
(voir article « Migration des sites web », section 1.1).

7) Extraire les modules personnalisés

Les modules sont maintenant dans /home/docker/odoo8/ext_addons/.
Ils seront montés dans le conteneur via docker-compose.yml (volume ./ext_addons:/mnt/extra-addons).

Vérifier que les modules contiennent bien __openerp__.py (et non __manifest__.py).
Un module conçu pour Odoo 9+ ne sera pas compatible avec Odoo 8.

8) Démarrer PostgreSQL et restaurer la base de données

8.1 Démarrer le conteneur PostgreSQL

Attendre que PostgreSQL soit prêt :

Quand tu vois ... accepting connections, c’est prêt.

8.2 Restaurer les bases de données

Warnings de rôle : si le dump a été créé avec un utilisateur PostgreSQL différent
(ex : odoo ou openerp), la restauration produira des warnings
role "odoo" does not exist pour les commandes de propriété.
Ces warnings sont non bloquants — les données seront restaurées correctement
sous le rôle odoo8. Si les warnings sont gênants, créer un alias :

Warning \unrestrict : si le pg_dump de l’ancien serveur est d’une version
plus récente que PostgreSQL 9.6, la restauration affichera invalid command \unrestrict.
C’est une méta-commande psql (pas du SQL) que PostgreSQL 9.6 ne reconnaît pas.
Ce warning est totalement bénin — les données sont restaurées correctement.

8.3 Vérifier les bases de données

Tu devrais voir :

  • {{DB_1}}
  • {{DB_2}}
  • {{DB_3}}
  • {{DB_4}}
  • postgres (base système)

La configuration utilise dbfilter = .* et list_db = True,
donc toutes les bases seront visibles dans le sélecteur de base de données d’Odoo 8.

9) Restaurer le filestore

9.1 Créer le volume Docker

9.2 Extraire le filestore temporairement

9.3 Trouver le mountpoint du volume

Exemple de sortie : /var/lib/docker/volumes/odoo8-data/_data

9.4 Copier le filestore dans le volume

9.5 Corriger les permissions

Le conteneur Odoo 8 s’exécute avec un utilisateur différent d’Odoo 17.
Vérifier le UID avant d’appliquer les permissions :

Résultat attendu : uid=100(odoo) gid=101(odoo). Appliquer les permissions en conséquence :

Attention au UID : le conteneur odoo:8.0 utilise le UID 100
(pas 101 comme odoo:17). C’est parce que le paquet .deb crée un utilisateur système,
et le premier UID système disponible dans l’image Debian Jessie est 100.
Toujours vérifier avec docker run --rm odoo:8.0 id odoo avant de fixer les permissions.

10) Démarrer Odoo 8

Vérifier l’état des conteneurs :

Les deux conteneurs doivent être en état Up.

10.1 Corriger les permissions du volume de données

Au premier démarrage, Odoo 8 peut échouer avec une erreur 500 Internal Server Error
causée par Permission denied: '/var/lib/odoo/sessions'.
C’est parce que le volume Docker a été créé avec des permissions root, mais le conteneur Odoo
s’exécute en tant qu’utilisateur odoo (UID 100).

Cette étape est nécessaire après la restauration du filestore (section 9),
car la copie manuelle des fichiers dans le volume Docker ne préserve pas toujours le bon propriétaire.
Sans cette correction, Odoo ne peut pas créer le répertoire sessions/ et retourne une erreur 500.

Consulter les logs en cas d’erreur :

Le premier démarrage peut prendre un peu de temps pendant qu’Odoo 8 initialise les modules de la base.

11) Tester localement (avant le DNS)

Depuis le serveur (en SSH), tester que l’instance Odoo 8 répond :

La commande doit retourner HTTP/1.0 303 SEE OTHER (redirection vers /web).

À ce stade, Odoo 8 fonctionne en local sur le serveur.
Il n’est pas encore accessible depuis Internet tant que le DNS n’a pas été basculé.

12) Basculer les enregistrements DNS

Maintenant que tout fonctionne en local, on bascule l’enregistrement A du domaine
pour qu’il pointe vers le nouveau serveur.

Enregistrement DNS à mettre à jour

Chez ton registrar (OVH, Gandi, Cloudflare, etc.) ou dans la zone DNS du domaine :

Sous-domaine Type Cible
{{DOMAINE_ODOO8}} A {{IP_NOUVEAU}}

La propagation DNS prend généralement quelques minutes (si le TTL est faible),
mais peut aller jusqu’à 24 heures selon les FAI et les serveurs DNS récursifs.

Vérifier la propagation depuis ton PC :

Quand tu vois {{IP_NOUVEAU}}, le DNS a basculé.

13) Activer Let’s Encrypt (certificat SSL)

Une fois le DNS propagé, demander le certificat SSL :

Important : attendre que le DNS pointe bien vers le nouveau serveur avant de lancer cette commande.
Let’s Encrypt valide le domaine via HTTP (challenge /.well-known/acme-challenge/).
Si le DNS pointe encore vers l’ancien serveur, la validation échouera.

MyVestaCP renouvelle automatiquement les certificats via un cron quotidien.
Pas besoin de configurer Certbot manuellement.

Future : Ajouter un module Odoo 8

Pour installer un nouveau module Odoo 8 personnalisé :

Étape 1 : Uploader le module via FileZilla

Naviguer vers /home/docker/odoo8/ext_addons/ et glisser-déposer le dossier du module.

Compatibilité : le module doit contenir un fichier __openerp__.py (pas __manifest__.py).
Les modules Odoo 9+ ne sont pas compatibles avec Odoo 8 sans portage.

Étape 2 : Redémarrer l’instance Odoo

Étape 3 : Activer le mode développeur dans Odoo

Se connecter à l’instance Odoo → ParamètresTechnique
→ activer le mode développeur via À propos (différent d’Odoo 17).

Étape 4 : Mettre à jour la liste des modules

ParamètresModulesMettre à jour la liste des modules.

Étape 5 : Installer le module

Chercher le nom du module dans la liste → cliquer sur Installer.

Récapitulatif de l’architecture finale

Coexistence avec Odoo 17 : Odoo 8 et Odoo 17 tournent sur le même serveur,
complètement isolés :

  • Réseaux Docker séparés (odoo8-network vs odoo17-network)
  • Conteneurs PostgreSQL et volumes séparés
  • Ports différents (8469 vs 8069/8169/8269/8369)
  • Aucune interférence possible entre les deux versions

À suivre

Odoo 8 est maintenant opérationnel en Docker avec reverse proxy et SSL.
Dans les prochains articles :

  • Akeneo PIM — gestion centralisée des produits (Docker, MySQL, Elasticsearch)
  • ownCloud — migration des données et Docker Compose
  • Serveurs de jeux — CS 1.6, TeamSpeak 3, EmuLinker
  • Sauvegardes — stratégie et automatisation

Article précédent : Odoo 17 en Docker — migration standalone vers Docker Compose.




0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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