Installer PrestaShop avec Docker Compose : prod, perf et sauvegardes (guide 2026)

Installer PrestaShop avec Docker Compose : prod, perf et sauvegardes (guide 2026)

Déployez PrestaShop proprement en production avec Docker Compose : HTTPS via reverse proxy, volumes persistants, optimisation perf, sauvegardes et bonnes pratiques.

Installer PrestaShop avec Docker Compose : prod + perf + sauvegardes (guide 2026)

PrestaShop tourne très bien en conteneurs… à condition de le faire proprement : HTTPS, données persistantes, configuration stable, et une stratégie de sauvegarde fiable.

Schéma de stack PrestaShop en production : web/PHP, base de données, volumes et supervision

Dans ce guide, vous allez déployer PrestaShop avec Docker Compose pour un usage production (pas juste du local), avec une base prêvous à évoluer.

Si vous voulez éviter de gérer l’infra, vous pouvez aussi déployer PrestaShop en 1 clic sur adgents.cloud (backups automatiques, scaling CPU/RAM, start/stop).

Vidéo (YouTube, FR)

Cloud background


Prérequis

  • Un VPS Linux (Debian/Ubuntu)
    • recommandé : 2 vCPU / 4 Go RAM minimum (plus si beaucoup de modules)
  • Un nom de domaine (ex : shop.example.com)
  • Docker + Docker Compose installés
  • Un accès SSH au serveur

Astuce : si vous avez déjà déployé des services web avec Docker Compose, vous retrouveras les mêmes principes que dans notre guide Héberger WordPress avec Docker Compose (prod) (reverse proxy, certificats, volumes).


Architecture cible (simple et robuste)

On sépare clairement :

  • Reverse proxy HTTPS (Traefik) : gère les certificats, le routage, les en-têvos de sécurité
  • PrestaShop : le code + les assets
  • Base de données (MariaDB) : persistance + perf
  • (option) Redis : améliore les temps de réponse sur certains scénarios

Pourquoi ?

  • vous pouvez redémarrer PrestaShop sans toucher à la base
  • vous gardes des volumes persistants (pas de surprise)
  • vous standardises le déploiement (reproductible)

1) DNS : pointer le sous-domaine vers le serveur

Crée un enregistrement DNS A :

  • Nom : shop
  • Valeur : IP publique du VPS

Attends la propagation (souvent 1–30 min).


2) Créer le dossier projet

Sur le serveur :

mkdir -p ~/prestashop-compose && cd ~/prestashop-compose
mkdir -p traefik

3) Créer le fichier .env

Crée ~/prestashop-compose/.env :

# Domaine
PS_HOST=shop.example.com

# Email Let's Encrypt
[email protected]

# Base
DB_NAME=prestashop
DB_USER=prestashop
DB_PASSWORD=change_me_strong_password
DB_ROOT_PASSWORD=change_me_root_password

# PrestaShop (installation auto)
PS_INSTALL_AUTO=1
PS_DEV_MODE=0
PS_ENABLE_SSL=1

# Admin
[email protected]
ADMIN_PASSWD=change_me_admin_password

# Timezone
TZ=Europe/Paris

Conseils rapides :

  • mets des mots de passe longs (minimum 20–30 caractères)
  • n’expose pas la base au public
  • garde .env hors Git

4) Créer le fichier Compose (reverse proxy + PrestaShop + MariaDB)

Crée ~/prestashop-compose/compose.yaml :

services:
  traefik:
    image: traefik:v3.1
    restart: always
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entryPoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.tlschallenge=true
      - --certificatesresolvers.le.acme.email=${LETSENCRYPT_EMAIL}
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
    ports:
      - 80:80
      - 443:443
    volumes:
      - traefik_letsencrypt:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  db:
    image: mariadb:10.11
    restart: always
    environment:
      - MARIADB_DATABASE=${DB_NAME}
      - MARIADB_USER=${DB_USER}
      - MARIADB_PASSWORD=${DB_PASSWORD}
      - MARIADB_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql

  prestashop:
    image: prestashop/prestashop:8
    restart: always
    depends_on:
      - db
    environment:
      - DB_SERVER=db
      - DB_NAME=${DB_NAME}
      - DB_USER=${DB_USER}
      - DB_PASSWD=${DB_PASSWORD}
      - PS_DOMAIN=${PS_HOST}
      - PS_INSTALL_AUTO=${PS_INSTALL_AUTO}
      - PS_DEV_MODE=${PS_DEV_MODE}
      - PS_ENABLE_SSL=${PS_ENABLE_SSL}
      - ADMIN_MAIL=${ADMIN_MAIL}
      - ADMIN_PASSWD=${ADMIN_PASSWD}
      - TZ=${TZ}
    labels:
      - traefik.enable=true
      - traefik.http.routers.prestashop.rule=Host(`${PS_HOST}`)
      - traefik.http.routers.prestashop.entrypoints=websecure
      - traefik.http.routers.prestashop.tls=true
      - traefik.http.routers.prestashop.tls.certresolver=le
      - traefik.http.services.prestashop.loadbalancer.server.port=80
      # En-tetes de sécurité (base)
      - traefik.http.middlewares.presta-headers.headers.framedeny=true
      - traefik.http.middlewares.presta-headers.headers.contenttypenosniff=true
      - traefik.http.middlewares.presta-headers.headers.browserxssfilter=true
      - traefik.http.routers.prestashop.middlewares=presta-headers
    volumes:
      - ps_data:/var/www/html

volumes:
  ps_data:
  db_data:
  traefik_letsencrypt:

Deux points importants :

  • PS_DOMAIN évite des redirections bizarres après installation, surtout si vous accèdes via un nom de domaine derrière un reverse proxy
  • les volumes ps_data et db_data garantissent la persistance

5) Démarrer et vérifier

docker compose up -d
docker compose ps
docker compose logs -f --tail=200

Puis ouvre :

  • https://shop.example.com

vous devez arriver sur la boutique (ou la page de finalisation d’installation selon les versions).


6) Perf : les réglages qui changent vraiment la donne

A) Utilise une base performante

  • MariaDB 10.11 est un bon choix général
  • garde le volume DB sur du disque rapide

B) Vérifie la configuration PHP

Selon votre charge, vous gagneras souvent en stabilité avec :

  • mémoire suffisante (RAM)
  • éviter de surcharger en modules “tout-en-un”

C) Cache et images

  • active la compression et la mise en cache côté reverse proxy
  • optimise les images produits (c’est souvent le vrai goulot)

Pour aller plus loin sur les causes classiques côté CMS, notre article WordPress lent : 15 causes + correctifs donne une bonne grille de lecture (mêmes symptômes : images, DB, cache, PHP).


7) Sauvegardes : la stratégie minimale (mais solide)

L’objectif : pouvoir restaurer vite, même après une erreur humaine, un incident serveur, ou une mise à jour ratée.

A) Sauvegarder la base (dump)

Exemple (à lancer en cron côté serveur) :

mkdir -p ~/backups/prestashop
docker exec -i $(docker compose ps -q db) mariadb-dump -u${DB_USER} -p${DB_PASSWORD} ${DB_NAME} \n  | gzip > ~/backups/prestashop/db-$(date +%F).sql.gz

B) Sauvegarder les fichiers (volume PrestaShop)

Le volume ps_data contient le site (incluant config et fichiers).

Deux approches simples :

  • snapshots de volume (si votre fournisseur le permet)
  • export tar du volume sur stockage externe

C) Tester une restauration

Une sauvegarde non testée n’est pas une sauvegarde.

Fais au moins une fois :

  • restauration DB sur un environnement de test
  • vérification du front + back office

Lancez-vous avec PrestaShop.

Envie de vous lancer avec PrestaShop ? Créez votre site web en quelques clics.

PrestaShop

PrestaShop

E-commerce à la française

Déployer PrestaShop

8) Sécurité : 5 habitudes à adopter

  • garde Docker et l’OS à jour
  • limite l’accès SSH (clé, pare-feu)
  • n’expose pas MariaDB sur Internet
  • protège l’accès admin (URL, MFA si possible)
  • journalise (logs reverse proxy + application)

Si vous devez déjà gérer des webhooks et des accès publics, jette aussi un œil à Sécuriser n8n : secrets, webhooks, authentification, logs et RGPD : plusieurs principes se recoupent (auth, surface d’exposition, traçabilité).


Déployer plus vite (et éviter l’infra)

Si vous voulez vous concentrer sur la boutique plutôt que sur le serveur :

  • déploiement en 1 clic
  • backups automatiques
  • scaling CPU/RAM
  • start/stop (compute non facturé à l’arrêt)

→ Découvre PrestaShop sur adgents.cloud.

Tableau de bord et gestion

Cloud pattern

Cet article vous a été utile ?

N'hésitez pas à découvrir d'autres articles

Voir plus d'articles