Scopri come rea­liz­za­re un’in­stal­la­zio­ne di WordPress nei container Docker, ma­nual­men­te o con Docker Compose. Gli svi­lup­pa­to­ri e le svi­lup­pa­tri­ci noteranno l’utilità di in­stal­la­re WordPress nei container Docker, che permette loro di testare più con­fi­gu­ra­zio­ni di WordPress e avviare una nuova in­stal­la­zio­ne del CMS con pochi semplici comandi.

Managed Hosting per WordPress
Genera il tuo sito web con l'IA: al resto pensiamo noi
  • 0 co­no­scen­ze pre­li­mi­na­ri richieste grazie a intuitive funzioni IA
  • Tanti temi e plugin per per­so­na­liz­za­re come vuoi
  • Ag­gior­na­men­ti semplici e gestione minima

Requisiti

Per far girare WordPress fa­cil­men­te nei container Docker è ne­ces­sa­ria una di­stri­bu­zio­ne Linux ag­gior­na­ta e sup­por­ta­ta. Le versioni pre­ce­den­ti come CentOS 7 o Ubuntu 14.04 sono obsolete e devono essere so­sti­tui­te da al­ter­na­ti­ve moderne. Ti con­si­glia­mo:

  • Ubuntu 22.04 LTS o una versione più recente
  • Debian 12 o una versione più recente
  • Una versione ag­gior­na­ta di Red Hat En­ter­pri­se Linux (RHEL) o AlmaLinux

Inoltre, devi aver in­stal­la­to Docker, che deve essere pronto all’uso. Il requisito minimo è Docker 20.10 o superiore, se desideri sfruttare i più recenti mi­glio­ra­men­ti in termini di sicurezza e pre­sta­zio­ni. Per uti­liz­za­re Docker Compose, as­si­cu­ra­ti di avere almeno la versione 2.x, poiché le versioni più vecchie non ricevono più supporto attivo.

Inoltre, ti sarà utile conoscere le nozioni di base per l’uso della riga di comando e sapere come usare Docker Compose e Docker. Se prevedi di uti­liz­za­re con­fi­gu­ra­zio­ni par­ti­co­lar­men­te estese o scalabili, ti con­si­glia­mo di con­si­de­ra­re anche Ku­ber­ne­tes per gestire l’or­che­stra­zio­ne dei container a livello pro­fes­sio­na­le.

Ese­cu­zio­ne di WordPress nei container Docker

Per fun­zio­na­re cor­ret­ta­men­te, un’in­stal­la­zio­ne di WordPress deve essere composta da tre elementi:

  • Il software WordPress
  • Un database MySQL o MariaDB
  • I passaggi finali di in­stal­la­zio­ne, da eseguire in un browser

Negli esempi seguenti, i com­po­nen­ti WordPress e MySQL/MariaDB sono eseguiti in container connessi fra loro, ma distinti. Il container in cui gira il software WordPress è assegnato a una porta dell’host, in modo da potervi accedere tramite browser.

Ese­cu­zio­ne di un container MySQL/MariaDB

Dopo aver avviato Docker, il primo passo è con­fi­gu­ra­re il database. A tal fine, crea prima un container di nome my-db. Puoi uti­liz­za­re MySQL o MariaDB, che è un sostituto “drop-in”, ossia diretto, di MySQL.

MySQL

Avvia un container con il comando:

sudo docker run --name my-db -e MYSQL_ROOT_PASSWORD=PASSWORD_SICURA -d mysql:latest

MariaDB

Avvia un container con il comando:

sudo docker run --name my-db -e MYSQL_ROOT_PASSWORD=PASSWORD_SICURA -d mariadb:latest
N.B.

As­si­cu­ra­ti sempre di uti­liz­za­re una password sicura per il tuo database. Anche l’uso di variabili di ambiente per me­mo­riz­za­re le password rap­pre­sen­ta una po­ten­zia­le vul­ne­ra­bi­li­tà della sicurezza. In al­ter­na­ti­va, è pre­fe­ri­bi­le uti­liz­za­re un Docker Secret o un file di con­fi­gu­ra­zio­ne protetto.

Creazione del database

Dopo aver creato il container, è ne­ces­sa­rio creare il database che desideri uti­liz­za­re per l’in­stal­la­zio­ne di WordPress.

MySQL

Utilizza il seguente comando per con­net­ter­ti al container del database appena creato:

docker exec -it my-db mysql -u root -p

Crea un database:

CREATE Database wordpress-db;

MariaDB

Utilizza il seguente comando per con­net­ter­ti al container del database appena creato:

docker exec -it my-db mariadb -u root -p

Crea un database:

CREATE Database wordpress-db;

Ese­cu­zio­ne di un container WordPress

Suc­ces­si­va­men­te, esegui un container dall’immagine ufficiale di WordPress, mappata sulla porta host 8080 e collegata al container del database.

Due os­ser­va­zio­ni:

  • Se utilizzi un firewall, potrebbe essere ne­ces­sa­rio ag­giun­ge­re l’accesso alla porta 8080.
  • Se sulla porta 8080 è già in ese­cu­zio­ne un altro servizio, è possibile se­le­zio­na­re una porta diversa sull’host.

Il comando cambia leg­ger­men­te a seconda che utilizzi MySQL o MariaDB:

MySQL

Avvia un container WordPress con il comando:

sudo docker run --name my-wordpress -p 8080:80 --link my-db:mysql -d wordpress:latest

MariaDB

Avvia un container WordPress con il comando:

sudo docker run --name my-wordpress -p 8080:80 --link my-db:mariadb -d wordpress:latest

Esistono molte altre variabili di ambiente che è possibile ag­giun­ge­re a questo comando se desideri so­vra­scri­ve­re le im­po­sta­zio­ni pre­de­fi­ni­te, tra cui:

  • -e WORDPRESS_DB_HOST=[hostname]: le im­po­sta­zio­ni pre­de­fi­ni­te sono l’indirizzo IP e la porta del container MySQL/MariaDB collegato. Questa variabile ti permette di accedere a un database MySQL/MariaDB su un altro server.
  • -e WORDPRESS_DB_USER=[username]: lo standard è root.
  • -e WORDPRESS_DB_PASSWORD=[password]: per im­po­sta­zio­ne pre­de­fi­ni­ta si utilizza la variabile di ambiente MYSQL_ROOT_PASSWORD del container MySQL/MariaDB collegato.
  • -e WORDPRESS_DB_NAME=[name]: l’im­po­sta­zio­ne pre­de­fi­ni­ta è “wordpress”.

Per una maggiore sicurezza può essere utile non eseguire i container sulla rete bridge standard, ma puoi invece uti­liz­za­re la tua rete personale:

docker network create my-wp-network
docker run --name my-db --network my-wp-network -e MYSQL_ROOT_PASSWORD=PASSWORD_SICURA -d mysql:latest
docker run --name my-wordpress --network my-wp-network -p 8080:80 -d wordpress:latest

In questo modo i container sono più isolati gli uni dagli altri, riducendo quindi il rischio di con­nes­sio­ni in­de­si­de­ra­te. Inoltre, è possibile con­fi­gu­ra­re le regole della rete in modo più det­ta­glia­to, ad esempio con regole firewall speciali o tramite l’uso di un reverse proxy.

Con­clu­sio­ne dell’in­stal­la­zio­ne in un browser

Per com­ple­ta­re l’in­stal­la­zio­ne è ne­ces­sa­rio accedere al container WordPress da un browser.

Nell’esempio pre­ce­den­te, la porta 8080 dell’host è mappata sulla porta 80 (servizi web) del con­te­ni­to­re. In questo modo è possibile accedere al container da un browser tramite l’indirizzo IP o l’URL del server:

  • http://<server-ip>:8080
  • http://example.com:8080

Apri questo URL in un browser, scegli la lingua che pre­fe­ri­sci per l’in­stal­la­zio­ne, quindi fai clic su Continue (Avanti).

Immagine: Screenshot della selezione della lingua di WordPress
Qui puoi se­le­zio­na­re la lingua dell’in­stal­la­zio­ne nel tuo browser.

Nella pagina suc­ces­si­va troverai una nota in­for­ma­ti­va per pre­pa­rar­ti alle fasi suc­ces­si­ve dell’in­stal­la­zio­ne. Fai clic sul pulsante “Let’s go!” per pro­se­gui­re.

Immagine: Screenshot della nota di installazione di WordPress
La nota in­for­ma­ti­va di in­stal­la­zio­ne di WordPress per la prossima fase di con­fi­gu­ra­zio­ne.

A questo punto devi indicare il tuo database, in modo da poter creare il file wp-config.php:

Immagine: Screenshot della connessione al database di WordPress
Inserisci le in­for­ma­zio­ni richieste per il tuo database.

Ricorda che l’utente pre­de­fi­ni­to è “root”, se non di­ver­sa­men­te spe­ci­fi­ca­to; inserisci qui il nome del database che hai creato e la password che hai scelto. Fai clic su “Submit” (Invia) per passare alle fasi suc­ces­si­ve del processo di in­stal­la­zio­ne.

Immagine: Screenshot dell’installazione di WordPress: informazioni sulla pagina di WordPress
Inserisci le in­for­ma­zio­ni richieste per la tua pagina WordPress.
  • Titolo del sito web: digita il titolo del tuo sito.
  • Nome utente: il nome utente prin­ci­pa­le per l’am­mi­ni­stra­zio­ne del tuo sito web. N.B.: per motivi di sicurezza ti con­si­glia­mo di NON uti­liz­za­re “Admin”, il nome o l’URL del tuo sito web per questo nome utente.
  • Password: prendi nota di questa password prima di pro­se­gui­re.
  • La tua e-mail: l’indirizzo e-mail per il prin­ci­pa­le nome utente di am­mi­ni­stra­zio­ne.

Quindi fai clic sul pulsante Installa WordPress per com­ple­ta­re l’in­stal­la­zio­ne.

Immagine: Screenshot del corretto completamento dell’installazione di WordPress
Il messaggio indica che l’in­stal­la­zio­ne è stata eseguita cor­ret­ta­men­te.

Una volta com­ple­ta­ta l’in­stal­la­zio­ne cor­ret­ta­men­te, riceverai un messaggio di conferma e potrai accedere a WordPress.

Ese­cu­zio­ne di WordPress con Docker Compose

In al­ter­na­ti­va puoi uti­liz­za­re Docker Compose per eseguire WordPress. Trovi maggiori in­for­ma­zio­ni sull’in­stal­la­zio­ne e sull’utilizzo di Docker Compose nel nostro articolo Or­che­stra­zio­ne di Docker con Swarm e Compose. In generale, questo strumento permette di definire tutti i servizi necessari in un unico file e di avviarli insieme.

Creazione di un file YAML

Per prima cosa, crea una cartella per il tuo progetto. Quindi accedi alla cartella appena creata:

sudo mkdir wordpress
cd wordpress

Crea un file YAML con il nome docker-compose.yml con il comando seguente:

sudo nano docker-compose.yml

Il contenuto del file cambia leg­ger­men­te a seconda che utilizzi MySQL o MariaDB:

MySQL

Inserisci le seguenti in­for­ma­zio­ni nel file:

wordpress:
    image: wordpress:latest
    links:
        - wordpress_db:mysql
    ports:
        - 8080:80
wordpress_db:
    image: mysql
    environment:
        MYSQL_ROOT_PASSWORD: PASSWORD_SICURA

Salva e chiudi il file.

MariaDB

Inserisci le seguenti in­for­ma­zio­ni nel file:

wordpress:
    image: wordpress:latest
    links:
        - wordpress_db:mariadb
    ports:
        - 8080:80
wordpress_db:
    image: mariadb
    environment:
        MYSQL_ROOT_PASSWORD: PASSWORD_SICURA

Salva e chiudi il file.

Avvio dei container

Utilizza quindi Docker Compose per avviare questi container con il seguente comando:

sudo docker-compose up -d

Il comando seguente ti permette di ve­ri­fi­ca­re che i container siano stati creati:

sudo docker-compose ps

Per com­ple­ta­re l’in­stal­la­zio­ne, apri il container di WordPress in un browser. A tal fine, utilizza l’indirizzo IP o l’URL del server:

  • http://192.168.0.1:8080
  • http://example.com:8080

Ku­ber­ne­tes per de­ploy­ment scalabili di WordPress

È possibile uti­liz­za­re Ku­ber­ne­tes (K8s) per con­fi­gu­ra­zio­ni più estese e pro­dut­ti­ve. Questa piat­ta­for­ma ti permette di or­che­stra­re e gestire au­to­ma­ti­ca­men­te i container di WordPress su più nodi. L’uso di cluster Ku­ber­ne­tes offre una serie di vantaggi, come la sca­la­bi­li­tà au­to­ma­ti­ca, i mec­ca­ni­smi di “self-healing” (auto-ri­ge­ne­ra­zio­ne) e una gestione cen­tra­liz­za­ta delle risorse. Ad esempio, è possibile eseguire un’im­ple­men­ta­zio­ne con Helm, un gestore di pacchetti per Ku­ber­ne­tes:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-wordpress bitnami/wordpress --set service.type=LoadBalancer

In questo modo si ottiene una di­stri­bu­zio­ne WordPress scalabile e a prova di errore con load balancing (bi­lan­cia­men­to del carico), ag­gior­na­men­ti au­to­ma­ti­ci e supporto per il failover.

Vai al menu prin­ci­pa­le