Sviluppo locale PrestaShop: XAMPP, WAMP, Docker e Linux
Guida completa per configurare un ambiente di sviluppo PrestaShop locale — XAMPP, WAMP, MAMP, Docker, Linux nativo e confronto Windows vs Linux.
Perché sviluppare in locale?
Ogni sviluppatore PrestaShop esperto ha una storia su “testare velocemente qualcosa” su un negozio in produzione, finendo per bloccare il checkout o restare chiusi fuori dal back office. Lo sviluppo locale elimina completamente questa categoria di disastri.
- Sicurezza: Testate modifiche al tema, installazioni di moduli e aggiornamenti PHP senza alcun rischio per il vostro negozio in produzione.
- Velocità: Niente upload FTP, niente attese nel pannello hosting. Modificate un file, aggiornate il browser, vedete il risultato all’istante.
- Lavoro offline: Sviluppate in treno, in un bar senza WiFi o durante un’interruzione del servizio hosting.
- Test multi-versione: Eseguite PrestaShop 1.7, 8.x e 9.x contemporaneamente. Testate un modulo su tutte le versioni in un solo pomeriggio.
- Strumenti di debug: Usate Xdebug per il debug passo-passo, attivate la segnalazione completa degli errori, profilate le query lente — impossibile su hosting condiviso.
Se state modificando qualsiasi file PHP direttamente sul vostro server in produzione, vi state assumendo rischi inutili. Un ambiente locale richiede 30 minuti di configurazione e vi salva dall’emergenza alle 3 di notte che altrimenti arriverà prima o poi.
Windows vs Linux vs macOS — Un confronto onesto
Siamo sviluppatori Linux e non intendiamo nasconderlo. Ma rispettiamo ogni piattaforma e vi daremo una valutazione onesta.
Windows
XAMPP e WAMP rendono facile iniziare. Per test occasionali, Windows funziona bene. Tuttavia, PrestaShop è stato progettato per server Linux, il che introduce piccoli attriti:
- Permessi dei file: PrestaShop utilizza permessi in stile Unix (chmod 755/644). Windows ha un modello diverso — XAMPP concede permessi completi a tutto, mascherando bug che si manifestano sul vostro server Linux.
- Sensibilità alle maiuscole:
MyModule.phpemymodule.phpsono lo stesso file su Windows ma file diversi su Linux. I moduli possono funzionare in locale e fallire in fase di deploy. - Fine riga: Windows CRLF vs Linux LF può causare errori “headers already sent” o rompere gli script shell.
- Prestazioni: Windows Defender scansiona attivamente i file PHP durante l’esecuzione, aggiungendo un overhead misurabile.
Linux
La corrispondenza più vicina al vostro ambiente di produzione. Stesso file system, stessi permessi, stessi strumenti.
- Docker nativo: Nessun livello di virtualizzazione. Avvio istantaneo, prestazioni native del file system.
- Gratuito e open source: PHP, MySQL, Apache, Nginx, Composer, Node.js, Git, VS Code — tutto gratuito.
- Parità con la produzione: I bug che trovate in locale esistono sul server. I bug che vi sfuggono in locale (di solito) non vi sorprenderanno in produzione.
macOS
Un buon compromesso — basato su Unix, quindi permessi e percorsi funzionano come su Linux. Docker gira attraverso una VM leggera (con un certo overhead di I/O). Homebrew offre accesso facile a tutti gli strumenti: brew install php@8.2 mysql composer.
La nostra raccomandazione
Per lo sviluppo PrestaShop a tempo pieno, usate Linux — in particolare Ubuntu (il più facile) o Arch Linux (il massimo controllo). Personalmente utilizziamo Arch Linux con KDE Plasma — tutto ciò che usiamo è open source e legalmente gratuito.
Per test occasionali come proprietari di un negozio, XAMPP su Windows va benissimo. Non lasciatevi dire da nessuno di cambiare sistema operativo solo per testare un modulo.
Il “miglior” ambiente di sviluppo è quello che usate davvero. Un setup XAMPP su Windows che usate ogni giorno batte un setup Docker su Linux perfetto che non avete mai trovato il tempo di configurare.
Opzione 1: XAMPP (Windows, macOS, Linux)
XAMPP include Apache, MariaDB, PHP e phpMyAdmin in un unico installer. Per chi desidera PrestaShop in locale con il minimo sforzo, questa è la strada più veloce.
Installazione
1. Scaricate da apachefriends.org. Scegliete la versione PHP corrispondente al vostro PrestaShop: 7.2-7.4 per PS 1.7, 8.0-8.2 per PS 8.x, 8.1-8.3 per PS 9.x.
2. Installate (Windows: C:\xampp, macOS: /Applications/XAMPP). Avviate Apache e MySQL dal pannello di controllo.
3. Create un database su http://localhost/phpmyadmin — cliccate su “New”, assegnategli il nome prestashop, selezionate utf8mb4_general_ci.
4. Scaricate PrestaShop da GitHub releases. Estraete in C:\xampp\htdocs\prestashop\.
5. Visitate http://localhost/prestashop e seguite l’installer (database server: localhost, user: root, password: vuota). Eliminate la directory install/ al termine.
Modifiche necessarie a php.ini
Trovate php.ini tramite il pannello di controllo XAMPP > Apache > Config:
memory_limit = 512M ; default 128M is not enough
max_execution_time = 300 ; default 30s too short for imports
upload_max_filesize = 64M ; default 2M too small for module ZIPs
post_max_size = 64M
max_input_vars = 20000 ; default 1000 — critical for PS admin forms
Decommentate le estensioni richieste rimuovendo il ;: intl, gd, zip, curl, mbstring. Riavviate Apache.
Problemi comuni con XAMPP
Conflitto sulla porta 80: Skype o IIS sta usando la porta 80. Cambiate Listen 80 in Listen 8080 nel file httpd.conf, poi accedete a http://localhost:8080.
Errori “max_input_vars”: Il problema n°1 di XAMPP con PrestaShop. Le impostazioni non si salvano, le combinazioni vanno perse. Impostate il valore a 20000 nel php.ini.
Pagina bianca: Controllate C:\xampp\apache\logs\error.log — di solito si tratta di un’estensione mancante o di memoria insufficiente.
Opzione 2: WAMP (solo Windows)
La funzionalità principale di WAMP è il cambio di versione PHP integrato — clic sinistro sull’icona nel vassoio di sistema > PHP > Version, e cambiate istantaneamente.
Configurazione
1. Scaricate da wampserver.aviatechno.net (64-bit). Installate prima i Visual C++ Redistributables — WAMP li richiede.
2. Installate in C:\wamp64. L’icona nel vassoio diventa verde quando tutti i servizi sono in esecuzione.
3. Aggiungete versioni PHP dalla pagina degli addon di WAMP. Si integrano automaticamente.
Virtual Host
WAMP include un gestore di virtual host: icona nel vassoio > Your VirtualHosts > VirtualHost Management. Configurate ps17.local e ps8.local puntando a directory diverse. WAMP aggiorna automaticamente il file hosts e la configurazione di Apache.
Il selettore di versione PHP di WAMP cambia la versione a livello di tutto il server. Non potete eseguire PHP 7.4 e 8.2 contemporaneamente per virtual host diversi — per questo avete bisogno di Docker.
Opzione 3: MAMP (macOS)
MAMP è l’equivalente Mac di XAMPP. La versione gratuita offre una document root con Apache, PHP e MySQL. MAMP Pro ($59) aggiunge host multipli, SSL, cambio versione PHP e Nginx.
Configurazione rapida: Scaricate da mamp.info, avviate i servizi, create un database tramite phpMyAdmin, posizionate PrestaShop in /Applications/MAMP/htdocs/prestashop/, accedete a http://localhost:8888/prestashop.
Se le prestazioni di Docker sul vostro Mac sono inaccettabili (frequente con i volumi montati), usate invece Homebrew: brew install php@8.2 mysql composer vi offre velocità nativa.
Opzione 4: Configurazione nativa Linux
Installate e configurate ogni componente direttamente. Massimo controllo, migliori prestazioni, massima vicinanza alla produzione.
Ubuntu / Debian
sudo apt update
sudo apt install apache2
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-gd php8.2-intl \
php8.2-curl php8.2-zip php8.2-xml php8.2-mbstring php8.2-bcmath
sudo apt install mysql-server
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Arch Linux: sudo pacman -S apache php php-fpm php-gd php-intl php-sodium mariadb composer, poi inizializzate MariaDB e abilitate i servizi con systemctl.
Apache Virtual Host
Create /etc/apache2/sites-available/ps8.local.conf con un VirtualHost che punta ServerName ps8.local e DocumentRoot alla vostra directory PrestaShop. Impostate AllowOverride All e il proxy PHP verso FPM. Abilitate con sudo a2ensite ps8.local.conf && sudo a2enmod rewrite proxy_fcgi && sudo systemctl reload apache2. Aggiungete 127.0.0.1 ps8.local a /etc/hosts.
Permessi dei file
Impostate la proprietà a www-data, le directory a 755, i file a 644 e le directory scrivibili (var/, cache/, img/, upload/, config/) a 775. I permessi dei file sono il problema n°1 su Linux — se PrestaShop mostra una pagina bianca, controllate il log degli errori di Apache per “Permission denied”.
Opzione 5: Docker — Consigliato per lo sviluppo serio
Ogni versione di PrestaShop gira nel proprio container con il proprio PHP e MySQL. Niente conflitti, niente interferenze. Consultate la nostra guida Docker completa per istruzioni dettagliate.
docker-compose.yml rapido
services:
prestashop:
image: prestashop/prestashop:8.2
ports: ["8085:80"]
environment:
DB_SERVER: db
DB_USER: prestashop
DB_PASSWD: prestashop
DB_NAME: prestashop
PS_DOMAIN: localhost:8085
ADMIN_MAIL: admin@yourshop.com
ADMIN_PASSWD: your_secure_password
volumes: [ps-files:/var/www/html]
depends_on: [db]
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root_pass
MYSQL_DATABASE: prestashop
MYSQL_USER: prestashop
MYSQL_PASSWORD: prestashop
volumes: [db-data:/var/lib/mysql]
volumes:
ps-files:
db-data:
Avviate: docker compose up -d. Accedete a http://localhost:8085.
Gestiamo oltre 25 container PrestaShop su un singolo server — da PS 1.6 a 9.1 — per lo sviluppo e il test dei moduli. Docker è l’unico modo pratico per gestirli. Anche con due o tre versioni, vi risparmia i conflitti di dipendenze.
Post-configurazione: impostazioni per tutti i metodi
Estensioni PHP richieste
PrestaShop rifiuterà di installarsi o funzionerà male senza queste:
- intl — formattazione valute, gestione delle impostazioni locali (la più comunemente mancante)
- gd — elaborazione immagini, miniature, watermark
- curl — gateway di pagamento, webservice API
- mbstring — gestione stringhe UTF-8
- zip — installazione moduli da file ZIP
- xml — import/export, webservice
- pdo_mysql — connettività al database
- opcache — caching del bytecode (tecnicamente opzionale, praticamente obbligatoria)
Verificate: php -m | grep intl oppure create una pagina phpinfo() (eliminatela dopo la verifica).
Abilitare i Friendly URL
Apache: sudo a2enmod rewrite e impostate AllowOverride All nel vostro vhost. Nginx: Usate try_files $uri $uri/ /index.php?$args;. Poi abilitate nel Back Office > Shop Parameters > Traffic & SEO.
Test delle email con Mailpit
Catturate tutte le email in uscita in locale invece di inviare email reali:
docker run -d --name mailpit -p 8025:8025 -p 1025:1025 axllent/mailpit
Configurate SMTP in PrestaShop: server localhost, porta 1025, nessuna crittografia, nessuna autenticazione. Visualizzate le email su http://localhost:8025.
Configurazione IDE
VS Code (gratuito): Installate le estensioni PHP Intelephense e PHP Debug. Configurate Xdebug con port: 9003 e pathMappings che puntano il percorso del container alla cartella del vostro workspace. PHPStorm (a pagamento): Strumenti integrati per PHP, Xdebug, database e Docker. Vale l’investimento se PHP è la vostra professione.
Importare un negozio in produzione in locale
Testare con i vostri prodotti reali, il tema e i moduli permette di individuare bug concreti che un’installazione pulita non può rivelare.
Esportazione e importazione del database
# Export from production (via SSH — phpMyAdmin times out on large DBs)
mysqldump -u db_user -p database_name > prestashop_backup.sql
# Create local database
mysql -u root -p -e "CREATE DATABASE prestashop_local CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
# Import
mysql -u root -p prestashop_local < prestashop_backup.sql
Copiare i file e aggiornare la configurazione
Scaricate le directory principali (img/, modules/, themes/, config/, override/, upload/) tramite rsync: rsync -avz user@server:/path/to/prestashop/ /local/prestashop/
-- Change domain to local
UPDATE ps_shop_url SET domain = 'localhost:8080', domain_ssl = 'localhost:8080' WHERE id_shop_url = 1;
-- Disable SSL
UPDATE ps_configuration SET value = '0' WHERE name = 'PS_SSL_ENABLED';
UPDATE ps_configuration SET value = '0' WHERE name = 'PS_SSL_ENABLED_EVERYWHERE';
Modificate app/config/parameters.php (PS 1.7/8.x) o config/settings.inc.php (PS 1.6) con le credenziali del database locale. Svuotate la cache: rm -rf var/cache/*.
Dopo l’importazione, create un nuovo account admin per l’uso locale invece di usare le credenziali di produzione. Questo previene modifiche accidentali che potrebbero influenzare la produzione se il vostro flusso di lavoro dovesse disallinearsi.
Problemi comuni nello sviluppo locale
Schermo bianco dopo l’installazione
Controllate sempre prima il log degli errori — la risposta si trova quasi sempre lì:
# Apache: tail -50 /var/log/apache2/error.log
# XAMPP: C:\xampp\apache\logs\error.log
# PrestaShop: tail -50 var/logs/dev.log
Estensione mancante: Il log mostra Call to undefined function — installate l’estensione indicata. Memoria: Il log mostra Allowed memory size exhausted — aumentate memory_limit. Versione PHP errata: PS 8.x su PHP 7.4 genera errori di tipo — verificate con php -v.
Impossibile accedere al pannello admin
mod_rewrite non abilitato oppure .htaccess non viene letto. Abilitate rewrite: sudo a2enmod rewrite. Impostate AllowOverride All nel vostro vhost. Per XAMPP: cambiate AllowOverride None in AllowOverride All nel file httpd.conf.
Estremamente lento su Windows
Antivirus: Aggiungete le directory di XAMPP e PrestaShop alle esclusioni di Windows Defender (Impostazioni > Protezione da virus e minacce > Esclusioni).
Docker su WSL2: Salvate i file all’interno del file system nativo di WSL2 (/home/you/prestashop/), non su un drive Windows montato (/mnt/c/...) — la differenza di prestazioni è notevole.
Immagini che non si caricano
GD mancante: Installate php-gd. Permessi: chown -R www-data:www-data img/. Negozio importato: Rigenerate le miniature da Back Office > Design > Image Settings.
Installazione modulo fallita
“Cannot upload”: Aumentate upload_max_filesize e post_max_size a 64M. “Cannot unzip”: Installate php-zip. “Permission denied”: chmod 775 modules/. “Class not found”: Eliminate var/cache/*/class_index.php.
Connessione al database rifiutata
MySQL non è in esecuzione — verificate con sudo systemctl status mysql e avviatelo se necessario. Per “Access denied”, verificate che le credenziali corrispondano tra il vostro file di configurazione e i permessi dell’utente MySQL.
Consigli per il flusso di lavoro di sviluppo
Attivate la modalità debug: In config/defines.inc.php, impostate define('_PS_MODE_DEV_', true); per ottenere stack trace e dettagli SQL. Non attivatela mai in produzione.
Disabilitate la cache: Back Office > Advanced Parameters > Performance — impostate la cache Smarty su “No” e disattivate CCC. La cache nasconde le vostre modifiche.
Usate Git: git init && git add . && git commit -m "Initial structure" nella directory del vostro modulo. Ogni modifica viene tracciata. git diff mostra cosa è cambiato, git checkout -- file.php ripristina un file.
Riferimento rapido: requisiti per versione
- PS 1.6.1.x: PHP 5.6-7.1, MySQL 5.0-5.7
- PS 1.7.0-1.7.6: PHP 7.1-7.3, MySQL 5.5-5.7
- PS 1.7.7-1.7.8: PHP 7.2-7.4, MySQL 5.6-8.0
- PS 8.0-8.1: PHP 8.0-8.1, MySQL 5.7-8.0
- PS 8.2: PHP 8.1-8.2, MySQL 5.7-8.0 / MariaDB 10.x
- PS 9.x: PHP 8.1-8.3, MySQL 8.0 / MariaDB 10.11+
Controllate sempre i requisiti di sistema ufficiali per la vostra versione specifica — cambiano con le release minori.
Cosa fare dopo?
- Sviluppo moduli: La documentazione ufficiale per sviluppatori copre la struttura dei moduli e il sistema degli hook.
- Configurate Xdebug: Il debug passo-passo è il singolo maggiore guadagno di produttività per lo sviluppo PHP.
- Esplorate Docker: Se XAMPP/WAMP non vi basta più, la nostra guida Docker copre le configurazioni multi-versione.
- Deploy sicuro: Consultate la nostra guida al sito di staging e la guida al backup per il percorso dal locale alla produzione.
L’investimento in un ambiente locale adeguato ripaga ogni singolo giorno. Trenta minuti di configurazione fanno risparmiare ore di debug e prevengono incidenti in produzione.
More guides available
Browse our knowledge base for more practical PrestaShop tutorials, or reach out if you need help.