Skip to content

About

Docker environement stack for Wordpress with PHP-apache, MariaDB and MailHog for developments.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

13 Commits

Folders and files

Repository files navigation

Docker WordPress

Ambiente Docker Compose per sviluppare siti WordPress con Apache/PHP, MariaDB e Mailpit. È pensato esclusivamente per lo sviluppo locale, non per la produzione.

English version

Requisiti

  • Docker Engine con il plugin Compose (docker compose)
  • porte locali 8080, 3306, 1025 e 8025 disponibili, oppure porte diverse in .env

Avvio rapido

cp .env.example .env
docker compose config
docker compose up -d
docker compose ps

Apri http://localhost:8080 per installare WordPress e http://localhost:8025 per leggere le email catturate da Mailpit.

Le porte sono associate a 127.0.0.1, quindi non vengono pubblicate sulla rete locale. Modifica BIND_ADDRESS solo se ti serve esplicitamente l'accesso da un altro dispositivo.

Servizi e versioni

Servizio Immagine predefinita Scopo
WordPress wordpress:7.0-php8.3-apache applicazione web
MariaDB mariadb:lts database LTS supportato
Mailpit axllent/mailpit:v1.30.0 SMTP di test e interfaccia web

Le versioni sono configurabili in .env. Prima di cambiare major version di WordPress, PHP o MariaDB verifica la compatibilità di temi e plugin ed esegui un backup. Il tag mobile mariadb:lts è comodo per nuovi ambienti di sviluppo; imposta una versione esatta se ti serve una build riproducibile nel tempo.

Variabili d'ambiente

Copia .env.example in .env e modifica i valori per il tuo ambiente. Le password sono obbligatorie: Compose interrompe l'avvio se non sono definite.

Variabile Predefinito Descrizione
COMPOSE_PROJECT_NAME docker-wordpress Nome del progetto Compose; viene usato anche come prefisso di container, rete e volumi.
BIND_ADDRESS 127.0.0.1 Indirizzo host su cui pubblicare le porte. Mantieni 127.0.0.1 per limitare l'accesso alla macchina locale.
WORDPRESS_VERSION 7.0 Versione/tag del core WordPress usato per comporre il nome dell'immagine.
PHP_VERSION 8.3 Versione PHP della variante Apache dell'immagine WordPress.
WEB_PORT 8080 Porta HTTP del sito esposta sull'host. Nel container resta la porta 80.
WORDPRESS_TABLE_PREFIX wp_ Prefisso delle tabelle create da WordPress. Deve essere un identificatore SQL valido.
WORDPRESS_DEBUG 1 Abilita (1) o disabilita (0) WP_DEBUG. È attivo per impostazione predefinita perché lo stack è destinato allo sviluppo.
MARIADB_VERSION lts Tag dell'immagine MariaDB. Usa una versione esatta se vuoi un ambiente riproducibile.
DB_PORT 3306 Porta MariaDB esposta sull'host per eventuali client esterni. Tra i container viene usata sempre db:3306.
DB_NAME wordpress Database creato alla prima inizializzazione e usato da WordPress.
DB_USER wordpress Utente applicativo creato per WordPress.
DB_PASSWORD obbligatoria Password dell'utente applicativo. Usa un valore locale non riutilizzato altrove.
DB_ROOT_PASSWORD obbligatoria Password dell'utente amministratore MariaDB root.
SMTP_PORT 1025 Porta SMTP di Mailpit pubblicata sull'host. WordPress usa comunque mailpit:1025.
MAIL_UI_PORT 8025 Porta host dell'interfaccia web di Mailpit.

WP_ENVIRONMENT_TYPE è impostato direttamente dal Compose su local e non richiede una variabile in .env.

Dati e file

Important

Questo repository supporta due modalità di utilizzo di wp-content:

  1. Progetto esistente o sviluppo di temi/plugin: la cartella locale wp-content/ è necessaria e deve contenere i file del progetto. Il mount ./wp-content:/var/www/html/wp-content presente in docker-compose.yml la rende disponibile nel container e permette di versionarne il codice.
  2. Installazione WordPress pulita: commenta o rimuovi quel solo mount dal file Compose. Poiché wordpress_data è già montato su /var/www/html, anche wp-content verrà creata e conservata automaticamente nello stesso volume.

Non usare contemporaneamente le due posizioni per gli stessi file: il mount locale nasconde la wp-content eventualmente presente in wordpress_data. docker compose down --volumes elimina la versione contenuta nel volume, ma non quella locale. Conserva sempre una copia del codice necessario.

  • per impostazione predefinita, wp-content/ è montata dal repository per temi, plugin e mu-plugin.
  • il core WordPress risiede nel volume wordpress_data.
  • MariaDB risiede nel volume db_data.
  • i messaggi Mailpit risiedono nel volume mailpit_data.
  • db/backup/ è disponibile come /backup nel container database.
  • gli script in db/init/ vengono eseguiti, in ordine alfabetico, solo alla prima inizializzazione di un volume database vuoto.

I nomi effettivi dei volumi includono il valore di COMPOSE_PROJECT_NAME. Per impostazione predefinita upload, cache, log e file generati dentro wp-content/ non vengono versionati; consulta .gitignore prima di aggiungere nuove directory o eccezioni.

Email

WordPress non invia automaticamente la posta a Mailpit: configura un plugin SMTP con questi parametri:

  • host: mailpit
  • porta: 1025
  • cifratura e autenticazione: disabilitate

La porta SMTP vista dall'host può essere cambiata con SMTP_PORT, ma tra i container resta sempre mailpit:1025.

Importazione e migrazione

Per inizializzare un nuovo ambiente da un dump, copialo in db/init/ prima del primo docker compose up. Sono accettati i formati supportati dall'immagine MariaDB, per esempio .sql, .sql.gz e script .sh eseguibili.

Per sostituire URL usa WP-CLI, che gestisce correttamente anche i dati PHP serializzati. Esempio senza installare strumenti nel container web:

docker run --rm --volumes-from "$(docker compose ps -q wordpress)" \
  --network "$(docker inspect "$(docker compose ps -q wordpress)" --format '{{range $name, $_ := .NetworkSettings.Networks}}{{$name}}{{end}}')" \
  -e WORDPRESS_DB_HOST=db:3306 \
  -e WORDPRESS_DB_USER="$(grep '^DB_USER=' .env | cut -d= -f2-)" \
  -e WORDPRESS_DB_PASSWORD="$(grep '^DB_PASSWORD=' .env | cut -d= -f2-)" \
  -e WORDPRESS_DB_NAME="$(grep '^DB_NAME=' .env | cut -d= -f2-)" \
  --user 33:33 wordpress:cli \
  wp search-replace 'https://produzione.example' 'http://localhost:8080' \
  --all-tables-with-prefix --skip-columns=guid

Fai prima un backup e prova inizialmente con --dry-run. Non modificare i GUID: non sono URL di navigazione e normalmente devono restare stabili.

Backup e ripristino

I comandi seguenti chiedono la password invece di inserirla nella cronologia della shell:

# backup
docker compose exec db sh -c \
  'mariadb-dump -uroot -p --single-transaction --routines --triggers "$MARIADB_DATABASE" > /backup/wordpress.sql'

# ripristino nel database esistente
docker compose exec db sh -c \
  'mariadb -uroot -p "$MARIADB_DATABASE" < /backup/wordpress.sql'

Per ricreare il database da un dump iniziale:

docker compose down
# Attenzione: elimina definitivamente i dati del database locale.
docker volume rm "$(docker volume ls -q --filter label=com.docker.compose.project=docker-wordpress --filter label=com.docker.compose.volume=db_data)"
cp /percorso/dump.sql db/init/
docker compose up -d

Se hai cambiato COMPOSE_PROJECT_NAME, sostituisci docker-wordpress nel filtro.

Comandi utili

docker compose logs -f wordpress db
docker compose exec wordpress bash
docker compose exec db mariadb -uwordpress -p wordpress
docker compose pull
docker compose up -d
docker compose down                 # mantiene i volumi
docker compose down --volumes       # elimina tutti i dati locali dello stack

docker compose pull seguito da up -d aggiorna i tag mobili. Per upgrade del database tra major version consulta prima le note di MariaDB e conserva un dump.

Note di sicurezza

Questa configurazione usa password di sviluppo nel file .env, abilita il debug WordPress e non configura TLS, hardening o backup automatici. .env è ignorato da Git, ma non inserire comunque credenziali reali. Non esporre lo stack su Internet e non usarlo per il deploy di produzione.

Riferimenti

Licenza

MIT

About

Docker environement stack for Wordpress with PHP-apache, MariaDB and MailHog for developments.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Contributors