logo docker

Come creare un ambiente di hosting per WordPress con Docker

Quest’oggi vorrei parlarvi di come mettere in piedi un ambiente di hosting ad alte prestazioni per WordPress utilizzando Docker.

La configurazione che andremo a creare supporterà http2, sfrutterà nginx come proxy e sarà certificata con Let’s Encrypt: come SEO Engineer ho bisogno spesso di ambienti di hosting adatti ad ospitare dei blog che richiedono più cura del normale.

(Breve nota… questa guida si riferisce a WordPress 4.8.0 sebbene da pochissimo sia uscita la versione 4.8.1)

Inizio descrivendo l’ambiente di lavoro; useremo una Ubuntu 16.04 sulla cloud di Amazon, per i nostri scopi ci basterà l’abbonamento gratuito per un anno fornito da Amazon Web Services.

L’abbonamento gratuito di Amazon vi permette di avere per un anno una macchina di tipo t2.micro; un altro requisito per portare a termine il processo descritto in questo tutorial è possedere un nome di dominio e potere modificare i record DNS (se volete seguire la parte sulla certificazione in https).

E quindi andiamo ad iniziare.

Come prima cosa vi linko una guida ufficiale di Amazon che spiega in pochissimi passi come creare una macchina t2.micro; darò per scontato che abbiate una t2.micro accesa generata a partire dall’immagine di Ubuntu 16.04 LTS.

Iniziamo ad aggiornare la macchina con i consueti due comandi:

sudo apt- update

sudo apt-upgrade

Fatto questo vi rimando all’ottima guida di Docker (in lingua inglese) che spiega l’installazione di Docker Community Edition (tutto si risolve fondamentalmente in: aggiungere la chiave,  aggiungere il repository ed installare i pacchetti necessari).

A questo punto, se abbiamo seguito correttamente le guide, iniziamo a lavorare sul DNS e facciamolo puntare all’ip della t2.micro di Amazon (vi ricordo che, a meno di spendere per un IP, l’istanza cambierà IP ad ogni riavvio: tenetene conto se riavviate e riaggiornate il record A del DNS di conseguenza).

Non dobbiamo dimenticare di aprire le necessarie porte sul Security Group della vostra istanza EC2: nel nostro caso dovrete aprire le porte 80/tcp e 443/tcp da Anywhere nelle policy.

A questo punto è un gioco da ragazzi avere un ambiente ottimizzato per WordPress… la configurazione che ho testato io utilizza 3 immagini Docker (una per mysql, una per nginx ed una per wordpress + apache + php)… (in realtà poi ho aggiunto anche l’immagine di piwik e quella di phpmyadmin).

Le immagini che ho scelto sono:

I tre comandi necessari a costruire l’ambiente di hosting sono i seguenti:

  1. sudo docker run -e MYSQL_ROOT_PASSWORD=password -d –restart=always –name mysql -v /home/mysql/:/var/lib/mysql/ mysql
  2. sudo docker run -d –restart=always –name nginx -p 80:80 -p 443:443 -e ENABLE_IPV6=true -e DEFAULT_HOST=www.esempio.com -e VIRTUAL_PROTO=uwsgi -v /home/nginx/htpasswd:/etc/nginx/htpasswd -v /home/nginx/vhost.d:/etc/nginx/vhost.d:ro -v /home/nginx/certs:/etc/nginx/certs -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy:alpine
  3. sudo docker run -d –restart=always -e VIRTUAL_HOST=www.esempio.com –name wordpress –link mysql:mysql -v /home/wp/:/var/www/html/ wordpress:4.8.0-php7.1-apache

Andiamo a vedere cosa fanno questi 3 comandi.

Il primo scarica e mette in produzione l’ultima versione di mysql con una password di root da indicare; il secondo scarica e mette in produzione nginx specificando che il default host è www.esempio.com mentre il terzo scarica e mette in produzione wordpress e gli assegna come virtualhost www.esempio.com.

A questo punto passiamo a Let’s Encrypt… io ho installato il pacchetto già presente in Ubuntu ma se volete potete seguire questa guida (cambia poco).

Una volta ottenuti i certificati vanno copiati in /home/nginx/certs ed in particolare il cert.pem va rinominato esempio.com.crt mentre la key va rinominata in esempio.com.key.

Se avete seguito correttamente la guida dovreste adesso avere un ambiente di hosting pronto ad accogliere un blog con https e sopratutto http2 (che Google sta fortemente spingendo in quanto più performante)… potete verificare la configurazione di http2 a questo indirizzo.


Pubblicato

in

,

da

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.