case history
Case #03 · DevOps

Sistema snapshot per WordPress e Laravel: time machine a $0.11/mese

Come creare ambienti demo identici alla produzione — database incluso — e deployarli su Cloud Run in modo automatico. Costo totale: undici centesimi al mese per snapshot.

StackDocker, Cloud Run, GCR
TargetWordPress + Laravel
Costo/snapshot~$0.11/mese
Cold start60-70 secondi

Il problema

Ogni volta che si fa una demo a un cliente, o si vuole testare un aggiornamento su un ambiente simile alla produzione, serve un clone del sito. Con database reale, dati reali, plugin attivi.

Le soluzioni tradizionali hanno costi o complessità elevate: un VPS dedicato per ogni demo, oppure strumenti a pagamento come WP Staging Pro. L'obiettivo era trovare un approccio automatizzabile, economico e replicabile su qualsiasi stack PHP.

L'approccio: embedded database in immagine Docker

L'idea di base: includere il dump del database direttamente nell'immagine Docker, così ogni container è completamente autonomo — niente dipendenze esterne, niente database server separato.

Struttura Dockerfile per WordPress:

FROM php:8.1-apache

# App
COPY app/ /var/www/html/
COPY database.sql.gz /docker-entrypoint-initdb.d/

# MySQL embedded in /tmp (Cloud Run ha filesystem temporaneo)
RUN apt-get install -y mariadb-server

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

L'entrypoint gestisce: avvio MySQL, import del dump, rimozione cache Redis (incompatibile con ambiente standalone), configurazione wp-config per socket locale.

Criticità WordPress

WordPress aggiunge alcune complicazioni rispetto a Laravel:

Risultati POC

MetricaWordPressLaravel
Dimensione database (compressa)2.1 MB23 MB
Dimensione app (senza uploads)272 MB
Cold start~70s~60s
HTTP response dopo boot200 OK200 OK

Costo

$0.11

al mese per snapshot, calcolato su:

Cloud Run scala a zero quando non usato. Costo effettivo ≈ zero se il link demo non viene visitato.

Utilizzi pratici

Il pattern è valido per qualsiasi app PHP con MySQL. Il cold start di 60-70 secondi è il limite principale — accettabile per demo, non per produzione. Per ridurlo si può pre-caricare il container tenendolo "warm" con una richiesta ogni 15 minuti (costo aggiuntivo trascurabile).

Docker Cloud Run WordPress Laravel GCR DevOps