← Journal

Outillage · 3 min de lecture

Docker pour le développement Prestashop

Un environnement local reproductible, identique à la production, monté en quelques minutes.

Nicolas HeryÀ paraître

« Chez moi ça marche. » Cette phrase est le symptôme d’un problème qui n’est pas technique mais organisationnel : l’environnement de développement et celui de production ont divergé, et personne ne sait exactement en quoi. Docker ne rend pas le développement plus rapide. Il rend l’environnement descriptible, ce qui est bien plus utile.

Ce qu’on cherche vraiment

L’objectif n’est pas d’utiliser Docker pour utiliser Docker. Il est d’obtenir trois propriétés :

  • Reproductible : la même commande donne le même environnement, sur ma machine comme sur celle d’un autre.
  • Fidèle : la version de PHP, les extensions et la base sont celles de la production. Pas « à peu près », exactement.
  • Jetable : je peux tout détruire et remonter en quelques minutes, donc je peux expérimenter sans crainte.

La troisième découle des deux premières, et c’est celle qui change le quotidien. Un environnement qu’on a peur de casser est un environnement dans lequel on n’ose pas essayer.

Une base de départ

Un compose.yaml minimal, avec les trois services qui comptent :

services:
  web:
    image: prestashop/prestashop:8-apache
    depends_on: [db]
    ports: ['8080:80']
    environment:
      DB_SERVER: db
      DB_NAME: prestashop
      DB_USER: prestashop
      DB_PASSWD: prestashop
      PS_DEV_MODE: 1
    volumes:
      - ./modules:/var/www/html/modules
      - ./themes:/var/www/html/themes

  db:
    image: mariadb:11
    environment:
      MARIADB_DATABASE: prestashop
      MARIADB_USER: prestashop
      MARIADB_PASSWORD: prestashop
      MARIADB_ROOT_PASSWORD: root
    volumes:
      - db:/var/lib/mysql

  mail:
    image: axllent/mailpit
    ports: ['8025:8025']

volumes:
  db:

Trois remarques sur ce fichier.

Les volumes sont ciblés. On ne monte pas le cœur de Prestashop, seulement ce qu’on développe : modules et thèmes. Le reste vient de l’image, ce qui garantit qu’on ne modifie pas le cœur par accident — la meilleure façon de rendre une mise à jour impossible.

PS_DEV_MODE est actif. Les erreurs s’affichent au lieu d’être avalées. En développement, une page blanche est une perte de temps pure.

Le service mail existe dès le départ. Un environnement de développement qui envoie de vrais e-mails est un accident qui attend son heure. Mailpit capture tout et donne une boîte de réception consultable dans le navigateur. C’est trois lignes, et ça évite d’écrire un jour à un vrai client depuis sa machine.

La base de données : anonymisée, jamais brute

Développer sur un jeu de données réaliste est indispensable — les bugs de volume et de cas particuliers ne se voient pas sur trois produits de démonstration. Mais copier la base de production sur son portable, c’est déplacer des données personnelles réelles vers une machine qui n’a pas été pensée pour ça.

Le compromis raisonnable : un export anonymisé, produit par un script versionné, dans lequel on remplace systématiquement noms, e-mails, adresses et téléphones. On garde les volumes et la forme des données, on jette leur contenu identifiant.

Ce script se lance après le premier démarrage, et il est le même pour toute l’équipe. C’est là que Docker paie vraiment : le jeu de données fait partie de l’environnement, il n’est plus une pièce jointe qui circule.

Aligner la version de PHP

C’est le détail le plus rentable de tout ce qui précède. Une différence de version mineure de PHP entre le poste de développement et le serveur produit exactement le type de bug qu’on ne trouve jamais : intermittent, non reproductible, et découvert en production.

L’image doit correspondre à la production. Si la production change, l’image change dans le même commit. Cette discipline coûte une ligne à chaque fois et supprime une catégorie entière de problèmes.

Ce que ça ne résout pas

Docker ne remplace ni une préproduction, ni des sauvegardes, ni une recette. Il donne un point de départ propre et identique pour tout le monde — c’est déjà beaucoup, ce n’est pas tout. La production reste un environnement particulier : trafic réel, données réelles, et des services externes qui ne tournent pas dans un conteneur.

Une question sur votre projet ?

Écrivez-moi