[UPDATE 2026] Akeneo PIM 6 vers 7 en Docker — migration, upgrade et centralisation serveur avec MyVestaCP

Published by David on






Akeneo PIM 6 vers 7 en Docker — migration et upgrade vers Docker Compose avec reverse proxy MyVestaCP

Akeneo PIM 6 → 7 en Docker — migration et upgrade

Sixième étape : migrer Akeneo PIM 6 (Community Edition) d’un VPS standalone
vers PIM 7 en Docker Compose sur le serveur centralisé, avec reverse proxy MyVestaCP.

Introduction

Akeneo PIM 6 (Community Edition, v6.0.45) tourne actuellement sur un VPS séparé
(vps-3dce30a4, IP 51.91.252.98, SSH port 22, user ubuntu).
L’installation est en standalone : PHP 8.0, MySQL 8.0.30, Elasticsearch 7.x, le tout installé
directement sur le système dans /home/pim-community-standard/.

On migre vers le serveur centralisé (ns3210379, IP 141.95.154.67,
SSH port 38592) en Docker Compose, avec un upgrade de PIM 6.0 vers PIM 7.0
en même temps.

Architecture cible

  • 5 conteneurs Docker : MySQL 8.0.30, Elasticsearch 8.4.2, PHP 8.1 FPM, Nginx, Job Worker
  • Domaine : pim.mcdtoolbox.com (port interne 8480)
  • MyVestaCP gère le reverse proxy et les certificats SSL
  • Fichiers Docker : /home/docker/akeneo/

Ce qui change entre PIM 6 et PIM 7 :
PHP 8.0 → 8.1, Elasticsearch 7.x → 8.4.2,
le SKU n’est plus obligatoire (UUID devient l’identifiant technique),
les nouveaux endpoints API utilisent /products-uuid,
et la configuration du mailer passe en format DSN (MAILER_URLMAILER_DSN).

Ressources nécessaires : Elasticsearch 8 consomme ~2-4 Go de RAM,
MySQL ~1-2 Go, PHP-FPM ~1 Go. Avec 64 Go de RAM sur le serveur, c’est largement suffisant,
même en coexistence avec Odoo 8 et Odoo 17.

1) Créer le domaine dans MyVestaCP

Dans le panel MyVestaCP → WEBAdd Web Domain :

  • pim.mcdtoolbox.com

Paramètres :

  • DNS Support : cocher (obligatoire pour Let’s Encrypt)
  • Mail Support : décocher
  • 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.
Sans cette zone, la demande de certificat échoue avec une erreur 404.

Important : ne pas activer Let’s Encrypt pour l’instant — le DNS ne pointe pas encore vers le nouveau serveur.

2) Créer les templates Nginx pour reverse proxy PIM

Même principe que pour Odoo : on crée des templates Nginx personnalisés pour que VestaCP
fasse du reverse proxy vers le conteneur Docker (port 8480).

2.1 Template HTTP : akeneo-8480.tpl

Contenu :

Le client_max_body_size 128M est important pour PIM : l’import de fichiers CSV
et l’upload d’images produits peuvent être volumineux.

2.2 Template HTTPS : akeneo-8480.stpl

Contenu :

2.3 Appliquer le template au domaine

2.4 Vérifier et recharger Nginx

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

  • pim/ : code source Akeneo PIM 7 (installé via Composer)
  • config/nginx/ : configuration Nginx pour le conteneur interne
  • backup/ : exports temporaires (dump MySQL, tar filestore)

4) Créer les fichiers de configuration Docker

4.1 Créer le docker-compose.yml

Contenu :

Points clés :

  • mysql:8.0.30 avec mysql_native_password (Akeneo ne supporte pas le nouveau plugin d’authentification MySQL 8)
  • elastic/elasticsearch:8.4.2 en mode single-node, sécurité désactivée (réseau Docker interne)
  • akeneo/pim-php-dev:8.1 pour PHP-FPM avec toutes les extensions requises
  • nginx:1.25-alpine comme serveur web interne, exposé sur le port 8480
  • job-worker : démon qui traite les imports/exports et tâches asynchrones. Le --time-limit=300 le redémarre toutes les 5 minutes (libère la mémoire)
  • Réseau et volumes complètement séparés d’Odoo

Image akeneo/pim-php-dev:8.1 : c’est l’image officielle Akeneo pour le développement.
Elle inclut toutes les extensions PHP requises (apcu, bcmath, imagick, intl, etc.). Pour la production,
Akeneo ne fournit pas d’image officielle. On désactive Xdebug via XDEBUG_MODE=off.

4.2 Créer la configuration Nginx interne

Contenu :

Ce Nginx interne (dans Docker) proxie les requêtes PHP vers le conteneur php (FPM port 9000).
Le Nginx de MyVestaCP (sur l’hôte) proxie vers ce Nginx interne sur le port 8480.
C’est une architecture classique « double reverse proxy ».

5) Installer le code PIM 7 via Composer

On utilise l’image Docker PHP pour télécharger et installer PIM 7 sans rien installer sur l’hôte.

Point de montage : ne pas monter directement /home/docker/akeneo/pim
comme volume — Composer a besoin de créer le répertoire cible lui-même.
On monte donc le répertoire parent et on laisse create-project
créer le sous-répertoire pim. La commande tourne en root
(pas -u www-data) pour éviter les erreurs de permission.

5.0.1 Corriger les permissions après installation

Première exécution longue : Composer télécharge toutes les dépendances (~500 Mo).
Cette commande peut prendre 5-10 minutes selon la connexion.
Si elle échoue sur un timeout, relancer avec COMPOSER_PROCESS_TIMEOUT=600.

5.1 Créer le fichier .env.local

Ce fichier contient la configuration spécifique à notre environnement Docker.
Il surcharge les valeurs par défaut de .env.

Contenu :

Différences avec PIM 6 :
APP_DATABASE_HOST pointe vers mysql (nom du service Docker, pas localhost).
APP_INDEX_HOSTS pointe vers elasticsearch:9200.
AKENEO_PIM_URL utilise https:// (après activation Let’s Encrypt).

5.2 Permissions

6) Préparer la base PIM 6 avant l’export

Avant d’exporter la base, il faut s’assurer que toutes les migrations PIM 6
ont été appliquées. On fait cela sur le VPS PIM 6.

Permissions : le rm -rf var/cache/* doit être fait en root,
mais les commandes cache:clear et cache:warmup doivent être lancées
en tant que www-data (via sudo -u www-data), sinon le cache sera recréé
avec des permissions root et PIM 6 retournera une erreur 500 Internal Server Error au prochain redémarrage.
Si cela arrive, corriger avec : chown -R www-data:www-data /home/pim-community-standard/var/

Si doctrine:migrations:migrate affiche No migrations to execute,
c’est normal — cela signifie que la base PIM 6 est déjà à jour.

7) Exporter les données depuis le VPS PIM 6

Sur le VPS PIM (51.91.252.98), on exporte la base MySQL et le filestore.

7.1 Arrêter les workers PIM 6

7.2 Exporter la base MySQL

La base se nomme akeneo_pim, utilisateur akeneo_pim,
mot de passe akeneo_pim (tel que configuré dans le .env de PIM 6).

7.3 Exporter le filestore

7.4 Exporter le cache média (optionnel)

8) Transférer les exports via rsync

Depuis le nouveau serveur (141.95.154.67), récupérer les archives :

Le VPS PIM utilise le port SSH par défaut (22), donc pas besoin de -p.
Si une clé SSH n’est pas configurée, utiliser scp à la place.

9) Démarrer les services et restaurer la base

9.1 Démarrer MySQL et Elasticsearch

Attendre que MySQL soit prêt :

Quand tu vois mysqld is alive, c’est prêt.

Vérifier Elasticsearch :

Le status doit être green ou yellow.

9.2 Supprimer la base vide et restaurer le dump PIM 6

Attention : la restauration peut prendre plusieurs minutes selon la taille de la base.
Ne pas interrompre le processus.

9.3 Restaurer le filestore

10) Exécuter la migration PIM 6.0 → 7.0

Maintenant que la base PIM 6 est restaurée dans le conteneur MySQL et que le code PIM 7
est installé, on peut exécuter les migrations Doctrine pour upgrader le schéma.

10.1 Démarrer le conteneur PHP

10.2 Vider le cache

10.3 Exécuter les migrations Doctrine

Migration longue : cette commande applique toutes les migrations de schéma
entre PIM 6.0 et PIM 7.0. Elle peut prendre plusieurs minutes.
Des warnings sur des « previously executed migrations » peuvent apparaître — c’est normal.

10.4 Migrations de données complémentaires

11) Réindexer Elasticsearch et compiler les assets

11.1 Réindexer Elasticsearch

La réindexation peut prendre du temps si tu as beaucoup de produits.
C’est normal — Elasticsearch reconstruit tout l’index depuis MySQL.

11.2 Compiler les assets frontend

Compilation longue : le build frontend (webpack) peut prendre 5-15 minutes
et consomme beaucoup de RAM. C’est une opération unique (pas besoin de le refaire à chaque redémarrage).

11.3 Vider le cache Symfony

12) Démarrer tous les services

Vérifier l’état de tous les conteneurs :

Les 5 conteneurs doivent être en état Up :

  • akeneo-mysql
  • akeneo-es
  • akeneo-php
  • akeneo-nginx
  • akeneo-job

Consulter les logs en cas d’erreur :

13) Tester localement (avant le DNS)

La commande doit retourner HTTP/1.1 302 Found avec un header Location
pointant vers /user/login. Cela confirme que PIM 7 fonctionne.

Identifiants par défaut PIM : admin / admin.
Si tu as changé le mot de passe dans PIM 6, les anciens identifiants sont conservés après la migration.

14) Basculer les enregistrements DNS

Créer (ou modifier) l’enregistrement A chez le registrar :

Sous-domaine Type Cible
pim.mcdtoolbox.com A 141.95.154.67

Vérifier la propagation :

15) Activer Let’s Encrypt

Important : attendre que le DNS pointe vers 141.95.154.67 avant de lancer
cette commande. Let’s Encrypt valide via HTTP.

16) Configurer les crons PIM

PIM 7 nécessite des tâches cron pour la maintenance. Les ajouter à la crontab du serveur :

Ajouter :

Récapitulatif de l’architecture finale

Coexistence sur le serveur : Akeneo PIM, Odoo 8 et Odoo 17 tournent sur le même
serveur, complètement isolés dans leurs réseaux Docker respectifs :

  • akeneo-network : MySQL 8.0.30 + ES 8.4.2 + PHP + Nginx + Job Worker (port 8480)
  • odoo17-network : PostgreSQL 13 + Odoo 17 (ports 8069/8169/8269/8369)
  • odoo8-network : PostgreSQL 9.6 + Odoo 8 (ports 8469/8472)

En cas de problème

Erreur 502 Bad Gateway

Le conteneur PHP-FPM n’est pas prêt ou a crashé :

Erreur « Connection refused » sur Elasticsearch

Elasticsearch n’a pas démarré (souvent un problème de mémoire ou de vm.max_map_count) :

Erreur de permission sur le filestore


À suivre

Akeneo PIM 7 est maintenant opérationnel en Docker avec reverse proxy et SSL.
Dans les prochains articles :

  • ownCloud — migration des données et Docker Compose
  • Serveurs de jeux — CS 1.6, TeamSpeak 3, EmuLinker
  • Sauvegardes — stratégie et automatisation (Borg, rsync, snapshots)

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



Catégories : Non classé

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 *