Perché WP-CLI per gli aggiornamenti
Gestire aggiornamenti di plugin e temi su decine o centinaia di siti WordPress client richiede un approccio sistematico e ripetibile. WP-CLI offre controllo granulare, automazione e la possibilità di creare procedure standardizzate che riducono i rischi di downtime.
I vantaggi rispetto all’interfaccia grafica:
- Velocità: aggiornamenti simultanei su più siti tramite script
- Precisione: controllo esatto su cosa aggiornare e quando
- Tracciabilità: log dettagliati di ogni operazione
- Rollback immediato: ripristino veloce in caso di problemi
- Integrazione CI/CD: automatizzazione completa del flusso
Nel 2026, con WordPress 6.7 e PHP 8.3 come standard, WP-CLI 2.11 offre performance ottimizzate e supporto nativo per operazioni batch su architetture cloud.
Prerequisiti e ambiente sicuro
Prima di implementare una procedura di aggiornamento via CLI, verifica questi requisiti fondamentali:
Requisiti tecnici
- WP-CLI 2.10 o superiore installato su server o workstation
- Accesso SSH ai server con permessi adeguati
- PHP 8.1+ (8.3 raccomandato per compatibilità)
- Backup automatizzati configurati e testati
- Ambiente di staging funzionante per ogni sito critico
Configurazione SSH
Configura l’accesso SSH con chiavi per evitare inserimento password manuale. Nel file ~/.ssh/config:
Host cliente-prod HostName 192.168.1.100 User deploy IdentityFile ~/.ssh/id_ed25519_deploy StrictHostKeyChecking yes
Usa chiavi ED25519 per sicurezza e performance. Mai eseguire aggiornamenti come root: crea utenti dedicati con permessi limitati alla directory WordPress.
Verifica prerequisiti
Prima di ogni aggiornamento, esegui questi controlli:
wp core version wp plugin list --status=active wp theme list --status=active wp core check-update wp plugin list --update=available wp theme list --update=available
Documenta lo stato attuale: ti servirà per confronti post-aggiornamento e troubleshooting.
Procedura di aggiornamento sicuro
La procedura standard prevede 7 fasi sequenziali. Saltare anche solo una fase aumenta esponenzialmente il rischio di problemi in produzione.
Fase 1: Backup completo
Mai aggiornare senza backup recente e verificato. Usa wp-cli-backup-command o integra con sistemi esterni:
wp db export backup-pre-update-$(date +%Y%m%d-%H%M%S).sql tar -czf files-backup-$(date +%Y%m%d-%H%M%S).tar.gz wp-content/
Per volumi grandi, considera:
- Snapshot LVM per backup filesystem istantaneo
- Backup incrementali con restic o borg
- Replica database su standby prima dell’aggiornamento
Testa il ripristino: un backup non verificato è inutile. Automatizza test di restore mensili su ambiente isolato.
Fase 2: Modalità manutenzione
Attiva la manutenzione per evitare che utenti o processi interferiscano durante l’aggiornamento:
wp maintenance-mode activate
Personalizza il messaggio se necessario modificando il file .maintenance generato. Per agenzie che gestiscono siti e-commerce, coordina gli aggiornamenti in finestre a basso traffico (tipicamente 2-6 AM).
Fase 3: Aggiornamento core WordPress
Aggiorna prima il core, poi plugin e temi. Questo ordine riduce incompatibilità:
wp core update wp core update-db
L’opzione --version permette aggiornamenti controllati a versioni specifiche:
wp core update --version=6.7.1 --force
Usa --force solo se necessario: forza il download anche se la versione sembra già installata. Utile dopo aggiornamenti falliti parzialmente.
Fase 4: Aggiornamento plugin selettivi
Non aggiornare tutto insieme. Prioritizza per criticità e testa in gruppi:
# Prima i plugin di sicurezza wp plugin update wordfence jetpack-protect # Poi plugin critici per funzionalità business wp plugin update woocommerce gravityforms # Infine plugin secondari wp plugin update --all --exclude=plugin-problematico
Monitora l’output per errori o warning. Il flag --dry-run simula l’aggiornamento senza applicarlo:
wp plugin update --all --dry-run
Utile per verificare cosa verrebbe modificato prima di procedere.
Fase 5: Aggiornamento temi
Aggiorna solo il tema attivo e l’eventuale tema padre se è un child theme:
wp theme update $(wp theme list --status=active --field=name)
Per i temi custom sviluppati internamente, implementa versionamento semantico e deploy controllato tramite Git. Non affidarti agli aggiornamenti automatici per codice proprietario.
Fase 6: Verifica funzionamento
Test automatizzati post-aggiornamento sono fondamentali:
# Verifica assenza errori fatali wp eval 'echo "OK";' # Testa database wp db check # Verifica plugin attivi wp plugin list --status=active --format=count # Controlla permalink wp rewrite flush # Cache clear wp cache flush
Per siti complessi, integra test funzionali con Playwright o Cypress che verificano flussi critici (login, checkout, form contatti).
Fase 7: Disattivazione manutenzione
Solo dopo verifica positiva, riporta il sito online:
wp maintenance-mode deactivate
Monitora errori nei log per almeno 30 minuti post-aggiornamento. Configura alert automatici su spike di errori 500 o 404.
Strategia di rollback
Quando qualcosa va storto, ogni minuto conta. Una procedura di rollback testata è obbligatoria.
Rollback plugin/tema specifico
WP-CLI non include downgrade nativo, ma puoi installare versioni precedenti:
# Disattiva versione problematica wp plugin deactivate nome-plugin # Installa versione specifica da repository wp plugin install nome-plugin --version=1.2.3 --force # Riattiva wp plugin activate nome-plugin
Per plugin premium o custom non su repository WordPress.org, mantieni un archivio locale versionate:
/var/www/plugin-archive/
nome-plugin/
1.2.3/nome-plugin.zip
1.2.4/nome-plugin.zip
Rollback completo sito
Se l’aggiornamento causa problemi sistemici, ripristina da backup:
# Ripristina database wp db import backup-pre-update-20260521-140000.sql # Ripristina file (eseguito da shell, non WP-CLI) tar -xzf files-backup-20260521-140000.tar.gz -C /var/www/html/
Tempo medio di rollback su setup ottimizzato: 3-8 minuti per siti fino a 5GB. Testa regolarmente la procedura per mantenere questo SLA.
Automazione per agenzie multi-sito
Gestire manualmente decine di siti non scala. L’automazione è l’unico approccio sostenibile.
Script bash per aggiornamenti batch
Esempio di script per aggiornare multipli siti con gestione errori:
#!/bin/bash
SITES=("sito1.com" "sito2.com" "sito3.com")
LOGDIR="/var/log/wp-updates"
for site in "${SITES[@]}"; do
echo "Aggiornamento $site..."
LOGFILE="$LOGDIR/$site-$(date +%Y%m%d-%H%M%S).log"
ssh deploy@$site 'bash -s' << 'ENDSSH' &> "$LOGFILE"
cd /var/www/html
wp maintenance-mode activate
wp db export backup-auto-$(date +%Y%m%d-%H%M%S).sql
wp core update
wp plugin update --all
wp cache flush
wp maintenance-mode deactivate
ENDSSH
if [ $? -eq 0 ]; then
echo "✓ $site completato"
else
echo "✗ $site ERRORE - vedi $LOGFILE"
# Invia alert (email, Slack, PagerDuty)
fi
done
Migliora questo script aggiungendo:
- Retry automatici con backoff esponenziale
- Notifiche Slack/Telegram per successi ed errori
- Integrazione con sistema di ticketing per failure
- Metriche tempo esecuzione per ogni fase
Integrazione con sistemi di gestione
Per agenzie che usano piattaforme come ManageWP, MainWP o AgencyPilot, WP-CLI può essere chiamato programmaticamente via SSH remoto o tramite webhook.
Esempio di workflow con AgencyPilot:
- Dashboard rileva aggiornamenti disponibili
- Sistema crea job di aggiornamento schedulato
- Esecuzione automatica via WP-CLI in finestra manutenzione
- Report risultati aggregati per cliente/sito
- Alert automatici solo per failure che richiedono intervento
Aggiornamenti staging-first
Per siti critici, implementa workflow staging obbligatorio:
# Script aggiorna prima staging ssh deploy@staging.cliente.com "cd /var/www && wp plugin update --all" # Test automatizzati playwright test --config=cliente.config.js # Se test OK, applica a produzione if [ $? -eq 0 ]; then ssh deploy@cliente.com "cd /var/www && wp plugin update --all" fi
Questo approccio aumenta il tempo di deployment ma riduce drasticamente il rischio. Per i 30+ siti più critici in gestione, è l’unico approccio accettabile.
Monitoraggio post-aggiornamento
L’aggiornamento non finisce quando il sito torna online. Il monitoraggio nelle ore successive è cruciale.
Metriche da monitorare
- Error rate: spike di errori PHP o JavaScript
- Response time: degradazione performance
- Uptime checks: disponibilità endpoint critici
- Database queries: query lente o nuove dopo aggiornamenti
- Log errori: warning o notice ripetuti
Tool consigliati
Stack di monitoraggio efficace per agenzie:
- New Relic / Datadog: APM completo per performance
- Sentry: error tracking e stack trace
- UptimeRobot / Pingdom: uptime monitoring esterno
- Query Monitor: plugin dev per analisi query database
- Logs centralizzati: ELK stack o Loki per aggregazione
Configura alert progressivi: warning a 5% error rate increase, critical a 15%, paging a 30%. Calibra soglie per ogni sito in base al baseline storico.
Checklist finale agenzia
Prima di considerare completa una procedura di aggiornamento, verifica questa checklist:
- Documentazione: procedura scritta e accessibile al team
- Backup testati: restore verificato negli ultimi 30 giorni
- Staging allineato: ambiente staging aggiornato e testato
- Comunicazione cliente: finestra manutenzione comunicata con 48h anticipo
- Rollback plan: procedura documentata e team addestrato
- Monitoring attivo: alert configurati e team reperibile
- Post-update check: test funzionali critici completati
- Log archiviati: output aggiornamento salvato per audit
Per agenzie certificate o con SLA enterprise, aggiungi:
- Change request formale approvata dal cliente
- Comunicazione post-aggiornamento con summary tecnico
- Update della documentazione tecnica del sito
- Revisione incident se ci sono stati problemi
FAQ
Quanto tempo richiede un aggiornamento completo via WP-CLI?
Per un sito WordPress standard (20-30 plugin, tema attivo), l’aggiornamento completo richiede 5-15 minuti includendo backup e verifiche. Siti complessi con molti plugin o database grandi possono richiedere 30-45 minuti. L’automazione riduce il tempo operatore a pochi minuti di supervisione.
È sicuro aggiornare tutti i plugin contemporaneamente?
No, è rischioso. Approccio consigliato: aggiorna in gruppi per criticità (sicurezza prima, poi funzionalità core, infine secondari). Questo permette di identificare rapidamente quale aggiornamento causa problemi. Per siti in produzione critica, testa sempre su staging prima di applicare a produzione.
Come gestire plugin che non supportano aggiornamenti via WP-CLI?
Plugin premium con licenze potrebbero richiedere configurazione aggiuntiva. Aggiungi le credenziali API nel file wp-config.php o usa package privati. Per plugin totalmente incompatibili, mantieni procedura manuale documentata separata e valuta alternative che supportano WP-CLI.
Posso automatizzare gli aggiornamenti senza supervisione umana?
Solo per siti non critici e dopo aver implementato: backup automatici verificati, monitoring robusto, rollback automatico su errori, test funzionali automatizzati post-aggiornamento. Per siti business-critical, mantieni sempre supervisione umana almeno in fase di verifica post-aggiornamento. Il rischio di downtime non giustifica l’automazione completa.
Quale frequenza di aggiornamento è ottimale?
Per aggiornamenti di sicurezza: entro 24-48 ore dalla release. Per aggiornamenti funzionali: ciclo settimanale o bisettimanale in finestre programmate. Core WordPress major version: attendere 2-4 settimane per stabilizzazione, testare su staging, poi produzione. L’importante è la regolarità: meglio aggiornamenti frequenti e piccoli che grandi aggiornamenti sporadici con mesi di arretrato.