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.
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)

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
.envhors 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_dataetdb_datagarantissent 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
E-commerce à la française
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.

