Mi è capitato di dover effettuare importanti modifiche ad un sito realizzato con WordPress e avere le necessità di condividere il lavoro con altre persone.
Invece di “pasticciare” sul server di produzione, ho pensato di utilizzare il Raspberry Pi 4 che ho in casa come server di sviluppo.
Siccome il Raspberry in questione svolge già una miriade di compiti, per non smanettare troppo ho deciso di usare Docker, così da avere un’istanza preconfigurata di WordPress facilmente installabile e rimovibile quando non mi servisse più.
Su Docker Hub esiste l’immagine ufficiale di WordPress, ma si appoggia ad un database MySQL che non sembra funzionare sull’architettura ARM del Raspberry Pi.
Ho quindi scelto un’immagine specifica per ARM e l’installazione è andata liscia.
Questo è il mio file docker-compose.yml:
version: '3.1'
services:
wordpress:
image: wordpress:latest
container_name: wordpress
restart: always
ports:
- 8080:80 # il sito comunicherà con l'esterno attraverso la porta 8080, modificabile a piacere
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: test
WORDPRESS_DB_PASSWORD: password
WORDPRESS_DB_NAME: test
volumes:
- /opt/docker/wordpress/data:/var/www/html #per comodità ho creato una cartella dove archiviare i file di WordPress
db:
image: biarms/mysql # ho modificato questa riga per utilizzare l'immagine MySQL di biarms per ARM
restart: always
environment:
MYSQL_DATABASE: test
MYSQL_USER: test
MYSQL_PASSWORD: password
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:
Non sono un esperto di Docker, quindi probabilmente tutto si potrebbe fare meglio di così, ma in questo modo nel giro di pochi minuti ho avuto un’istanza funzionante di WordPress raggiungibile all’indirizzo http://<IP_RASPBERRYPI>:8080
.
Perchè il sito fosse raggiungibile anche dall’esterno mi è bastato utilizzare il reverse proxy Nginx già presente nella mia configurazione (a voi il divertimento eventuale di configurarlo e aprire le porte del vostro router casalingo, sul web trovare migliaia di tutorial e how-to) aggiungendo queste righe al file .conf
già presente in /etc/nginx/sites-enabled
:
location /test/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
Dopo aver riavviato Nginx
$ systemctl reload nginx.service
la mia installazione WordPress è raggiungibile digitando http://MIO_INDIRIZZO_IP/test
.
Però si era detto che questo sarebbe stato un sito di prova e non è bello che sia accessibile da chiunque.
Per questo ci viene in soccorso la basic authentication di Nginx : basta creare gli utenti desiderati con il comando :
$ sudo htpasswd /etc/apache2/.htpasswd utente1
e poi editare ancora il precedente file .conf
di Nginx :
...
location /test/ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://0.0.0.0:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
# authentication
auth_basic "Area di test - Accesso riservato";
auth_basic_user_file /etc/apache2/.htpasswd;
Un altro $ systemctl reload nginx.service
per caricare la nuova configurazione e voilà !
A questo punto è bastato fare una copia del sito originale con il plugin Duplicator per WordPress, cancellare il contenuto della cartella data
e sostituirlo con i due file creati da Duplicator, un archivio e un installer.
Andando all’indirizzo http://MIO_INDIRIZZO_IP/test/installer.php
ho avviato la procedura di migrazione e in pochi minuti ho avuto una perfetta replica del mio sito, pronta per essere modificata a piacimento.
Una volta soddisfatto delle modifiche, sempre utilizzando Duplicator, potrò compiere la migrazione in senso inverso, dal server di test a quello pubblico.