[UPDATE 2026] Odoo 8 en Docker : migration d’une installation 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(port8469) — 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 → WEB → Add 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 :
|
1 |
nano /usr/local/vesta/data/templates/web/nginx/odoo-8469.tpl |
Contenu :
|
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 37 38 39 40 41 |
server { listen %ip%:%proxy_port%; server_name %domain_idn% %alias_idn%; error_log /var/log/%web_system%/domains/%domain%.error.log error; location /.well-known/acme-challenge { default_type text/plain; root /home/%user%/web/%domain%/public_html; } location /longpolling { proxy_pass http://127.0.0.1:8472; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location / { proxy_pass http://127.0.0.1:8469; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; } location ~* /web/static/ { proxy_pass http://127.0.0.1:8469; proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; } include %home%/%user%/conf/web/%domain%/nginx.conf_*; } |
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 :
|
1 |
nano /usr/local/vesta/data/templates/web/nginx/odoo-8469.stpl |
Contenu :
|
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 37 38 39 40 |
server { listen %ip%:%proxy_ssl_port% ssl; http2 on; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; error_log /var/log/%web_system%/domains/%domain%.error.log error; location /longpolling { proxy_pass http://127.0.0.1:8472; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location / { proxy_pass http://127.0.0.1:8469; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; } location ~* /web/static/ { proxy_pass http://127.0.0.1:8469; proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; } include %home%/%user%/conf/web/%domain%/nginx.conf_*; } |
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
|
1 |
/usr/local/vesta/bin/v-change-web-domain-proxy-tpl {{USER_VESTA}} {{DOMAINE_ODOO8}} odoo-8469 |
2.4 Vérifier et recharger Nginx
|
1 2 |
nginx -t systemctl reload 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
|
1 2 3 |
mkdir -p /home/docker/odoo8/config mkdir -p /home/docker/odoo8/ext_addons mkdir -p /home/docker/odoo8/backup |
config/: fichier de configuration Odoo (odoo-server.conf)ext_addons/: modules personnalisésbackup/: 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 :
|
1 |
docker compose version |
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
|
1 |
nano /home/docker/odoo8/docker-compose.yml |
Contenu :
|
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 37 38 39 40 41 42 43 |
services: db: image: postgres:9.6 container_name: odoo8-db restart: always environment: POSTGRES_USER: odoo8 POSTGRES_PASSWORD: {{DB_PASSWORD}} POSTGRES_DB: postgres volumes: - odoo8-db-data:/var/lib/postgresql/data networks: - odoo8-network odoo: image: odoo:8.0 container_name: odoo8-web restart: always depends_on: - db ports: - "127.0.0.1:8469:8069" - "127.0.0.1:8472:8072" volumes: - odoo8-data:/var/lib/odoo - ./config/odoo-server.conf:/etc/odoo/openerp-server.conf:ro - ./ext_addons:/mnt/extra-addons environment: - HOST=db - USER=odoo8 - PASSWORD={{DB_PASSWORD}} networks: - odoo8-network volumes: odoo8-db-data: name: odoo8-db-data odoo8-data: name: odoo8-data networks: odoo8-network: name: odoo8-network |
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) et8472:8072(longpolling) - Le fichier de configuration local
odoo-server.confest 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
|
1 |
nano /home/docker/odoo8/config/odoo-server.conf |
Contenu :
|
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 37 38 39 40 41 |
[options] admin_passwd = {{ODOO_ADMIN_PASSWORD}} db_host = db db_port = 5432 db_user = odoo8 db_password = {{DB_PASSWORD}} data_dir = /var/lib/odoo addons_path = /usr/lib/python2.7/dist-packages/openerp/addons,/mnt/extra-addons,/mnt/extra-addons/module1,/mnt/extra-addons/module2,... # Adapter la liste ci-dessus : ajouter un chemin par dossier de modules custom dans ext_addons/ csv_internal_sep = , db_maxconn = 64 db_name = False db_template = template1 dbfilter = .* list_db = True logfile = /var/log/odoo/odoo-server.log log_db = True log_level = warn logrotate = True xmlrpc = True xmlrpc_port = 8069 xmlrpcs = True xmlrpcs_port = 8071 longpolling_port = 8072 workers = 4 max_cron_threads = 1 limit_time_cpu = 600 limit_time_real = 1200 limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_request = 8192 proxy_mode = True server_wide_modules = web,web_kanban [options-connector] channels = root:8,root.sub:2 |
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_pathutilise/usr/lib/python2.7/dist-packages/openerp/addonset liste chaque sous-répertoire de modules individuellementxmlrpc_portau lieu dehttp_port(terminologie Odoo 8)server_wide_modules = web,web_kanban(Odoo 17 utilisebase,web)[options-connector]— section spécifique au framework Connector d’Odoo 8proxy_mode = Trueest important derrière un reverse proxy Nginx
4.3 Permissions
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# Propriétaire : root pour tout sudo chown -R root:root /home/docker/odoo8/ # docker-compose.yml : lecture root uniquement (contient des mots de passe) sudo chmod 600 /home/docker/odoo8/docker-compose.yml # Fichier .conf : lisible par tous (UID 100 dans le conteneur doit pouvoir le lire) sudo chmod 644 /home/docker/odoo8/config/*.conf # Répertoires : traversables sudo chmod 755 /home/docker/odoo8/ sudo chmod 755 /home/docker/odoo8/config/ sudo chmod -R 755 /home/docker/odoo8/ext_addons/ |
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 :
|
1 |
sudo -u postgres psql -c "SELECT datname FROM pg_database WHERE datdba = (SELECT oid FROM pg_roles WHERE rolname = 'odoo8');" |
Résultat (exemple avec 4 bases) :
{{DB_1}}{{DB_2}}{{DB_3}}{{DB_4}}
Exporter chaque base avec pg_dump :
|
1 2 3 4 5 |
# Sur l'ANCIEN serveur (en root ou avec sudo) sudo -u postgres pg_dump "{{DB_1}}" | gzip > /root/odoo8-db-1.sql.gz sudo -u postgres pg_dump "{{DB_2}}" | gzip > /root/odoo8-db-2.sql.gz sudo -u postgres pg_dump "{{DB_3}}" | gzip > /root/odoo8-db-3.sql.gz sudo -u postgres pg_dump "{{DB_4}}" | gzip > /root/odoo8-db-4.sql.gz |
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).
|
1 2 |
# Trouver le répertoire filestore sudo find /home -type d -name filestore 2>/dev/null |
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.
|
1 2 3 |
# Archiver le filestore (adapter le chemin trouvé ci-dessus) sudo tar -czf /root/odoo8-filestore.tar.gz \ -C /chemin/vers/.local/share/OpenERP/ filestore/ |
5.3 Export des modules personnalisés
|
1 2 3 |
# Adapter le chemin vers votre répertoire d'addons custom cd /chemin/vers/ext_addons/ tar -czf /root/odoo8-custom-addons.tar.gz */ |
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 :
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# Depuis le NOUVEAU serveur rsync -avz -e "ssh -p {{PORT_SSH_ANCIEN}}" \ root@{{IP_ANCIEN}}:/root/odoo8-db-*.sql.gz \ /home/docker/odoo8/backup/ rsync -avz -e "ssh -p {{PORT_SSH_ANCIEN}}" \ root@{{IP_ANCIEN}}:/root/odoo8-filestore.tar.gz \ /home/docker/odoo8/backup/ rsync -avz -e "ssh -p {{PORT_SSH_ANCIEN}}" \ root@{{IP_ANCIEN}}:/root/odoo8-custom-addons.tar.gz \ /home/docker/odoo8/backup/ |
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
|
1 2 |
cd /home/docker/odoo8/ tar -xzf backup/odoo8-custom-addons.tar.gz -C ext_addons/ |
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
|
1 2 |
cd /home/docker/odoo8/ docker compose up -d db |
Attendre que PostgreSQL soit prêt :
|
1 |
docker compose exec db pg_isready -U odoo8 |
Quand tu vois ... accepting connections, c’est prêt.
8.2 Restaurer les bases de données
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Créer les bases vides (adapter selon vos noms de bases) docker compose exec db psql -U odoo8 -d postgres -c 'CREATE DATABASE "{{DB_1}}";' docker compose exec db psql -U odoo8 -d postgres -c 'CREATE DATABASE "{{DB_2}}";' docker compose exec db psql -U odoo8 -d postgres -c 'CREATE DATABASE "{{DB_3}}";' docker compose exec db psql -U odoo8 -d postgres -c 'CREATE DATABASE "{{DB_4}}";' # Restaurer chaque dump gunzip -c /home/docker/odoo8/backup/odoo8-db-1.sql.gz | \ docker compose exec -T db psql -U odoo8 -d "{{DB_1}}" gunzip -c /home/docker/odoo8/backup/odoo8-db-2.sql.gz | \ docker compose exec -T db psql -U odoo8 -d "{{DB_2}}" gunzip -c /home/docker/odoo8/backup/odoo8-db-3.sql.gz | \ docker compose exec -T db psql -U odoo8 -d "{{DB_3}}" gunzip -c /home/docker/odoo8/backup/odoo8-db-4.sql.gz | \ docker compose exec -T db psql -U odoo8 -d "{{DB_4}}" |
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.
|
1 2 |
# Optionnel : créer l'ancien rôle comme alias (adapter le nom) docker compose exec db psql -U odoo8 -d postgres -c "CREATE ROLE odoo LOGIN;" |
8.3 Vérifier les bases de données
|
1 |
docker compose exec db psql -U odoo8 -d postgres -c "\l" |
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
|
1 |
docker volume create odoo8-data |
9.2 Extraire le filestore temporairement
|
1 |
tar -xzf /home/docker/odoo8/backup/odoo8-filestore.tar.gz -C /tmp/ |
9.3 Trouver le mountpoint du volume
|
1 |
docker volume inspect odoo8-data --format '{{ .Mountpoint }}' |
Exemple de sortie : /var/lib/docker/volumes/odoo8-data/_data
9.4 Copier le filestore dans le volume
|
1 2 |
mkdir -p /var/lib/docker/volumes/odoo8-data/_data/filestore/ cp -r /tmp/filestore/* /var/lib/docker/volumes/odoo8-data/_data/filestore/ |
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 :
|
1 2 |
# Vérifier le UID de l'utilisateur odoo dans le conteneur docker run --rm odoo:8.0 id odoo |
Résultat attendu : uid=100(odoo) gid=101(odoo). Appliquer les permissions en conséquence :
|
1 2 |
# UID 100 pour Odoo 8 (pas 101 comme Odoo 17) chown -R 100:101 /var/lib/docker/volumes/odoo8-data/_data/filestore/ |
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
|
1 2 |
cd /home/docker/odoo8/ docker compose up -d |
Vérifier l’état des conteneurs :
|
1 |
docker compose ps |
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).
|
1 2 3 4 5 |
# Corriger le propriétaire du volume de données docker compose exec -u root odoo chown -R odoo:odoo /var/lib/odoo # Redémarrer Odoo pour prendre en compte docker compose restart odoo |
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 :
|
1 |
docker compose logs odoo |
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 :
|
1 |
curl -I http://127.0.0.1:8469 |
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 :
|
1 2 |
nslookup {{DOMAINE_ODOO8}} dig +short {{DOMAINE_ODOO8}} |
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 :
|
1 |
/usr/local/vesta/bin/v-add-letsencrypt-domain {{USER_VESTA}} {{DOMAINE_ODOO8}} |
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
|
1 2 |
cd /home/docker/odoo8/ docker compose restart odoo |
Étape 3 : Activer le mode développeur dans Odoo
Se connecter à l’instance Odoo → Paramètres → Technique
→ activer le mode développeur via À propos (différent d’Odoo 17).
Étape 4 : Mettre à jour la liste des modules
Paramètres → Modules → Mettre à 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
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MyVestaCP (proxy + SSL) Docker (application) ——————————————— —————————— /home/{{USER_VESTA}}/web/ /home/docker/odoo8/ └── {{DOMAINE_ODOO8}}/ ├── docker-compose.yml └── Nginx → 127.0.0.1:8469 ├── config/ │ └── odoo-server.conf ├── ext_addons/ │ └── ... (modules custom) └── backup/ Docker Compose services: - odoo8-db (PostgreSQL 9.6) - odoo8-web (Odoo 8.0, port 8469/8472) |
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-networkvsodoo17-network) - Conteneurs PostgreSQL et volumes séparés
- Ports différents (
8469vs8069/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
0 commentaire