Credit : Illustration backtotheweb.fr
Deployer PrestaShop avec Docker Compose
Deployer PrestaShop avec Docker Compose
Cet article, c'est le genre de truc que j'aurais aimé trouver quand j'ai débuté.
Docker Compose permet de deployer PrestaShop rapidement avec tous ses services (PHP, MariaDB, Nginx) dans des conteneurs isoles. Ideal pour le developpement et la production.
Prerequis
# Installer Docker et Docker Compose
sudo apt update
sudo apt install docker.io docker-compose-v2
sudo usermod -aG docker $USER
# Verifier
docker --version
docker compose version
Structure du projet
prestashop-docker/
├── docker-compose.yml
├── nginx/
│ └── default.conf
├── .env
└── data/
├── prestashop/
└── mysql/
Le fichier .env
# .env
MYSQL_ROOT_PASSWORD=RootP@ssword2026!
MYSQL_DATABASE=prestashop
MYSQL_USER=ps_user
MYSQL_PASSWORD=PsP@ssword2026!
PS_DOMAIN=shop.monsite.fr
PS_ADMIN_EMAIL=admin@monsite.fr
PS_ADMIN_PASSWORD=AdminP@ss2026!
docker-compose.yml
version: '3.8'
services:
prestashop:
image: prestashop/prestashop:8-fpm
container_name: prestashop-app
restart: unless-stopped
volumes:
- prestashop_data:/var/www/html
- ./custom-php.ini:/usr/local/etc/php/conf.d/custom.ini
environment:
- DB_SERVER=database
- DB_PORT=3306
- DB_NAME=${MYSQL_DATABASE}
- DB_USER=${MYSQL_USER}
- DB_PASSWD=${MYSQL_PASSWORD}
- DB_PREFIX=ps_
- PS_DOMAIN=${PS_DOMAIN}
- PS_LANGUAGE=fr
- PS_COUNTRY=FR
- PS_INSTALL_AUTO=1
- PS_ERASE_DB=0
- PS_FOLDER_ADMIN=admin-securise
- ADMIN_MAIL=${PS_ADMIN_EMAIL}
- ADMIN_PASSWD=${PS_ADMIN_PASSWORD}
depends_on:
database:
condition: service_healthy
networks:
- prestashop-net
database:
image: mariadb:10.11
container_name: prestashop-db
restart: unless-stopped
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
healthcheck:
test: ["CMD", "healthcheck.sh", "--su-mysql", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
networks:
- prestashop-net
nginx:
image: nginx:alpine
container_name: prestashop-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- prestashop_data:/var/www/html:ro
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./ssl:/etc/nginx/ssl
depends_on:
- prestashop
networks:
- prestashop-net
volumes:
prestashop_data:
db_data:
networks:
prestashop-net:
driver: bridge
Configuration Nginx
Creez nginx/default.conf :
upstream php-fpm {
server prestashop-app:9000;
}
server {
listen 80;
server_name shop.monsite.fr;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name shop.monsite.fr;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/html;
index index.php;
# Gzip
gzip on;
gzip_types text/css application/javascript application/json image/svg+xml;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
location ~ /\. {
deny all;
}
}
Configuration PHP personnalisee
Creez custom-php.ini :
memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M
max_execution_time = 300
max_input_vars = 10000
Lancer le deploiement
# Demarrer en arriere-plan
docker compose up -d
# Suivre les logs
docker compose logs -f prestashop
# Verifier le statut
docker compose ps
L'installation automatique prend 2-3 minutes. Votre boutique sera accessible sur https://shop.monsite.fr et l'admin sur https://shop.monsite.fr/admin-securise.
Commandes utiles
# Acceder au conteneur PrestaShop
docker compose exec prestashop bash
# Sauvegarder la base
docker compose exec database mysqldump -u ps_user -p prestashop > backup.sql
# Mettre a jour PrestaShop
docker compose pull prestashop
docker compose up -d
# Arreter tout
docker compose down
# Arreter et supprimer les volumes (attention !)
docker compose down -v
Production sur IONOS
Pour deployer en production sur un VPS IONOS, clonez votre projet, configurez le .env avec le domaine reel et lancez docker compose up -d. Les VPS IONOS avec SSD NVMe offrent d'excellentes performances pour Docker.
Docker Compose simplifie enormement le deploiement PrestaShop. Versionnez votre configuration et reproduisez votre environnement en une seule commande.