Credit : Logo officiel
Installer et configurer PrestaShop sur un VPS IONOS
Installer et configurer PrestaShop sur un VPS IONOS
La cliente m'envoie un message un jeudi : sa boutique PrestaShop hébergée en mutualisé rame. Le panier prend 8 secondes à s'afficher, le tunnel de commande échoue une fois sur trois sous charge. Audit rapide : un Black Friday qui approche, des centaines de produits, du multi-langue, et un mutualisé qui s'effondre dès qu'on dépasse 10 visiteurs simultanés. Solution : migrer sur un VPS IONOS et la réinstaller proprement avec une stack performante. Voici exactement la procédure que j'ai suivie, applicable à toute installation neuve de PrestaShop 8.1 sur Debian 12.
Prérequis
Avant de commencer, vérifiez que vous avez :
- Un VPS IONOS sous Debian 12 (minimum 2 vCPU, 4 Go RAM, 80 Go SSD)
- Un nom de domaine pointé sur l'IP du serveur (enregistrement A)
- Un accès SSH root
- Le port 22 (ou votre port SSH custom) accessible
Si vous n'avez pas encore sécurisé l'accès SSH, faites-le avant de poser la moindre brique applicative. Voir Sécuriser SSH avec sshd_config.
1. Mettre à jour le système
apt update && apt upgrade -y
apt install curl wget unzip git ufw -y
timedatectl set-timezone Europe/Paris
Vérifiez la version :
lsb_release -a
Distributor ID: Debian
Description: Debian GNU/Linux 12 (bookworm)
Release: 12
2. Installer la stack LEMP
Nginx
apt install nginx -y
systemctl enable --now nginx
nginx -v
MariaDB
PrestaShop 8 fonctionne avec MariaDB 10.11 ou MySQL 8. Sur Debian 12, MariaDB 10.11 est le défaut.
apt install mariadb-server mariadb-client -y
systemctl enable --now mariadb
mysql_secure_installation
Répondez :
Switch to unix_socket authentication: n
Change the root password: y
Remove anonymous users: y
Disallow root login remotely: y
Remove test database: y
Reload privilege tables: y
PHP 8.3
Debian 12 fournit PHP 8.2, mais PrestaShop 8.1 supporte officiellement PHP 8.3 qui est plus rapide. J'utilise le dépôt Sury :
apt install lsb-release apt-transport-https ca-certificates -y
wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt update
apt install php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-intl \
php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-soap \
php8.3-imagick php8.3-redis php8.3-opcache -y
3. Configurer PHP pour PrestaShop
PrestaShop est gourmand. Éditez /etc/php/8.3/fpm/php.ini :
memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 10000
allow_url_fopen = On
date.timezone = Europe/Paris
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 60
realpath_cache_size = 4096K
realpath_cache_ttl = 600
Pour le pool FPM, éditez /etc/php/8.3/fpm/pool.d/www.conf :
pm = dynamic
pm.max_children = 30
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
pm.max_requests = 500
Redémarrez :
systemctl restart php8.3-fpm
systemctl status php8.3-fpm
4. Créer la base de données
mysql -u root -p
CREATE DATABASE prestashop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ps_user'@'localhost' IDENTIFIED BY 'M0t-DeP@sse-S3cure!';
GRANT ALL PRIVILEGES ON prestashop.* TO 'ps_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Vérifiez la connexion :
mysql -u ps_user -p prestashop -e "SHOW TABLES;"
5. Télécharger PrestaShop 8.1
cd /var/www
mkdir maboutique.fr
cd maboutique.fr
wget https://github.com/PrestaShop/PrestaShop/releases/download/8.1.7/prestashop_8.1.7.zip
unzip prestashop_8.1.7.zip
unzip prestashop.zip
rm prestashop_8.1.7.zip prestashop.zip Install_PrestaShop.html
chown -R www-data:www-data /var/www/maboutique.fr
La structure attendue :
/var/www/maboutique.fr/
├── admin/
├── classes/
├── controllers/
├── img/
├── install/
├── modules/
├── themes/
└── index.php
6. Configurer le vhost Nginx
Créez /etc/nginx/sites-available/maboutique.fr :
server {
listen 80;
server_name maboutique.fr www.maboutique.fr;
root /var/www/maboutique.fr;
index index.php;
client_max_body_size 64M;
access_log /var/log/nginx/maboutique-access.log;
error_log /var/log/nginx/maboutique-error.log;
# Compatibilite multi-stores et URL friendly
rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last;
rewrite ^/([a-z]{2})/?(.*)$ /index.php?isolang=$1&$args last;
rewrite ^/c/([0-9]+)(-[_a-zA-Z0-9-]*)?(/[_a-zA-Z0-9-]*)?$ /index.php?controller=category&id_category=$1 last;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Assets statiques avec cache long
location ~* \.(jpg|jpeg|gif|png|css|js|ico|svg|woff|woff2|webp|avif)$ {
expires 30d;
access_log off;
add_header Cache-Control "public, no-transform";
}
# PHP-FPM
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_read_timeout 300;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
}
# Bloquer fichiers sensibles
location ~ /\. {
deny all;
}
location ~* \.(tpl|log|conf|sql|md|yml|json|lock)$ {
deny all;
}
location ~ ^/(app|src|var|vendor|bin|tests)/ {
deny all;
}
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
Activez et rechargez :
ln -s /etc/nginx/sites-available/maboutique.fr /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
7. Installer le certificat SSL
apt install certbot python3-certbot-nginx -y
certbot --nginx -d maboutique.fr -d www.maboutique.fr \
--agree-tos --email admin@maboutique.fr --no-eff-email
Certbot modifie automatiquement votre vhost pour ajouter HTTPS et la redirection HTTP→HTTPS. Vérifiez le renouvellement automatique :
systemctl status certbot.timer
certbot renew --dry-run
Pour aller plus loin, voir Configurer HTTPS partout : guide SSL/TLS.
8. Installation en ligne de commande
PrestaShop supporte une installation 100% CLI, idéale en headless :
cd /var/www/maboutique.fr
php install/index_cli.php \
--domain=maboutique.fr \
--db_server=localhost \
--db_name=prestashop \
--db_user=ps_user \
--db_password='M0t-DeP@sse-S3cure!' \
--prefix=ps_ \
--email=admin@maboutique.fr \
--password='Adm1nS3cur3!' \
--name='Ma Boutique' \
--language=fr \
--country=fr \
--timezone=Europe/Paris \
--ssl=1
La sortie attendue :
[OK] Database created
[OK] Database tables installed
[OK] Default settings populated
[OK] Theme classic installed
[OK] Modules installed
Installation finished in 87 seconds
9. Sécurisation post-installation
Supprimer le dossier d'installation
rm -rf /var/www/maboutique.fr/install
Obligatoire : sans cela PrestaShop refuse de fonctionner.
Renommer le dossier admin
Le nom admin est trop prévisible pour les bots :
mv /var/www/maboutique.fr/admin /var/www/maboutique.fr/admin-7xK2
Notez le nouveau chemin : il sera votre URL d'admin (https://maboutique.fr/admin-7xK2).
Corriger les permissions
find /var/www/maboutique.fr -type d -exec chmod 755 {} \;
find /var/www/maboutique.fr -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/maboutique.fr
chmod 600 /var/www/maboutique.fr/app/config/parameters.php
Le fichier parameters.php contient les credentials base de données : il doit rester strictement privé.
Pare-feu
ufw allow OpenSSH
ufw allow 'Nginx Full'
ufw enable
ufw status
10. Optimisation : cache et performance
Dans le back-office sous Paramètres avancés > Performances, activez :
- Smarty cache : Yes, recompiler quand les fichiers sont mis à jour
- Cache statique : Smarty Cache + filesystem
- CCC (Combine, Compress, Cache) : tout activer (CSS, JS, HTML, Move JS to end, Apache optimization)
- Cache de classe : Activé
Pour la mise en cache backend, installez Redis :
apt install redis-server -y
systemctl enable --now redis-server
Dans app/config/parameters.php, configurez le cache Redis. PrestaShop supporte Memcached et Redis nativement.
Pour aller plus loin sur l'optimisation e-commerce, voir PrestaShop : optimiser les performances et le SEO.
11. Configurer le cron PrestaShop
PrestaShop utilise un système de tâches planifiées (relances panier, exports comptables, mise à jour de devises, etc.). Le module CronJobs natif s'appuie sur des hits HTTP, ce qui est peu fiable. Préférez un cron système :
crontab -e -u www-data
# PrestaShop cron jobs
*/30 * * * * cd /var/www/maboutique.fr && /usr/bin/php8.3 ./bin/console prestashop:cron:execute >> /var/log/prestashop-cron.log 2>&1
# Mise a jour des devises et taux de change
0 6 * * * cd /var/www/maboutique.fr && /usr/bin/php8.3 ./bin/console prestashop:exchange-rate:update >> /var/log/prestashop-cron.log 2>&1
12. Surveillance et logs
Pour suivre la santé de la boutique en temps réel :
# Erreurs PHP
tail -f /var/log/php8.3-fpm.log
# Erreurs Nginx
tail -f /var/log/nginx/maboutique-error.log
# Logs PrestaShop
tail -f /var/www/maboutique.fr/var/logs/prod.log
# Requetes lentes MariaDB
tail -f /var/log/mysql/slow.log
Activez les slow query logs dans /etc/mysql/mariadb.conf.d/50-server.cnf :
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
13. Sauvegardes automatiques
Un script bash basique :
#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/backups/prestashop
mkdir -p $BACKUP_DIR
# Base de donnees
mysqldump -u ps_user -p'M0t-DeP@sse-S3cure!' prestashop | gzip > $BACKUP_DIR/db-$DATE.sql.gz
# Fichiers
tar -czf $BACKUP_DIR/files-$DATE.tar.gz -C /var/www maboutique.fr
# Garder 14 jours
find $BACKUP_DIR -name "*.gz" -mtime +14 -delete
Cron quotidien :
0 3 * * * /usr/local/bin/backup-prestashop.sh
Pour une approche complète, voir Automatiser ses backups en bash + cron.
14. Premiers pas dans le back-office
Une fois la boutique installée, quelques actions à faire avant d'ouvrir au public :
- Paramètres > Trafic > Maintenance : activer le mode maintenance pendant la configuration.
- Paramètres > Coordonnées > Magasins : mettre les coordonnées légales (obligatoire pour la TVA).
- International > Localisation > Taxes : vérifier que les taux français sont activés (5,5%, 10%, 20%).
- International > Livraison > Transporteurs : configurer Mondial Relay, Colissimo, Chronopost selon vos besoins.
- Paiement > Modules de paiement : installer Stripe, PayPal ou les modules IONOS pour CB.
- Modules > Sélection : désactiver les modules inutiles (Facebook, statistiques natives lourdes).
Dans Paramètres avancés > Information, vérifiez le diagnostic système :
Version PHP: 8.3.7 - OK
Maximum size of post data: 64M - OK
Memory limit: 512M - OK
Maximum execution time: 300 - OK
Maximum upload file size: 64M - OK
GD library: enabled - OK
cURL: enabled - OK
Zip: enabled - OK
Tout doit être au vert.
Erreurs courantes et leur fix
500 Internal Server Error après installation
Cause : permissions cassées ou OPcache qui garde une ancienne version en mémoire.
Solution :
chown -R www-data:www-data /var/www/maboutique.fr
rm -rf /var/www/maboutique.fr/var/cache/*
systemctl reload php8.3-fpm
Page blanche en back-office
Cause : memory_limit PHP trop bas pour charger les modules.
Solution : passez à memory_limit = 1024M dans /etc/php/8.3/fpm/php.ini et redémarrez PHP-FPM.
Fatal error: max_input_vars exceeded
Cause : un formulaire admin (configuration, traductions) envoie plus de 10 000 champs.
Solution : passez max_input_vars = 20000 puis redémarrez PHP-FPM.
Erreur 404 sur les URL réécrites (catégories, produits)
Cause : la réécriture d'URL n'est pas active dans Nginx, ou non activée dans le BO PrestaShop.
Solution : vérifiez que les rewrite du vhost sont présents, et dans le BO Paramètres > Trafic > SEO et URL, activez "Friendly URL" et régénérez le .htaccess (même sur Nginx, pour la cohérence).
Database connection error
Cause : le mot de passe contient un caractère spécial mal échappé, ou MariaDB n'écoute pas en local.
Solution :
ss -tlnp | grep 3306
mysql -u ps_user -p prestashop -e "SELECT 1;"
Échappez les $, !, " dans parameters.php ou utilisez des mots de passe sans caractères pénibles.
Pour aller plus loin
- PrestaShop : optimiser les performances et le SEO — la suite naturelle après l'installation.
- Déployer PrestaShop avec Docker Compose — alternative conteneurisée si vous voulez plusieurs boutiques sur un même serveur.
- PrestaShop vs WooCommerce : quel CMS e-commerce choisir — pour comparer avec WooCommerce.
- Configurer Redis comme cache WordPress — la même logique de cache applicable à PrestaShop.
- Reverse proxy Nginx avec SSL — pour scaler avec plusieurs boutiques derrière un proxy unique.
Une boutique PrestaShop solide en 90 minutes
De l'OS vierge à la boutique en HTTPS, comptez 90 minutes la première fois, 30 minutes une fois la procédure rodée. Les points qui font la différence : PHP 8.3 avec OPcache bien dimensionné, MariaDB sur le même serveur (pas de latence réseau), Nginx avec gzip et cache statiques agressif. Avec cette stack, ma cliente a passé son Black Friday à 90 commandes/heure sans broncher, là où le mutualisé tombait à 10 visiteurs simultanés.