Semplifica il deployment del tuo sito WordPress con la nostra guida facile da seguire. Utilizza Docker Compose, Nginx, Apache e SSL per un processo di installazione senza interruzioni.
Creeremo anche volumi in modo che le modifiche o gli aggiornamenti vengano preservati durante il riavvio del contenitore.
Questa configurazione è stata testata su Google Cloud con un’istanza che esegue il sistema operativo Ubuntu 22.04. Puoi anche realizzare questa configurazione in qualsiasi servizio cloud come AWS, Azure, DigitalOcean, o su server dedicati o VPS.
Prerequisiti
Assicurati di aver completato tutti i passaggi menzionati sopra.
- Dominio puntato all’indirizzo IP del tuo server.
- Docker installato e configurato.
- Docker Compose installato e configurato.
Una volta che hai completato tutti i prerequisiti, puoi procedere alla configurazione di WordPress.
Creare la Directory del Progetto
Accedi via SSH al tuo server e inizia creando una nuova directory del progetto chiamata wp-project
. Puoi anche chiamarla come preferisci.
mkdir wp-project
Creare il File Docker Compose YML
Ora, naviga all’interno della directory del progetto e crea un nuovo file docker-compose.yml con la seguente configurazione.
cd wp-project
Crea un nuovo file docker-compose.yml
.
nano docker-compose.yml
Copia l’intero contenuto qui sotto e incollalo nel file.
Configura Docker Compose
Assicurati di sostituire le variabili d’ambiente menzionate di seguito.
docker-compose.ymlversion: "3.9"
services:
wordpress:
container_name: wordpress
image: wordpress:php8.2-apache
restart: always
stdin_open: true
tty: true
environment:
WORDPRESS_DB_HOST: mariadb
WORDPRESS_DB_USER: db_user
WORDPRESS_DB_PASSWORD: db_user_pass
WORDPRESS_DB_NAME: db_name
volumes:
- wordpress_data:/var/www/html
mariadb:
container_name: mariadb
image: mariadb
restart: always
environment:
MYSQL_DATABASE: db_name
MYSQL_USER: db_user
MYSQL_PASSWORD: db_user_pass
MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
volumes:
- db_data:/var/lib/mysql
nginx:
container_name: nginx
image: nginx:latest
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./certbot/conf:/etc/nginx/ssl
- ./certbot/data:/var/www/html
certbot:
container_name: certbot
image: certbot/certbot:latest
command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
volumes:
- ./certbot/conf:/etc/letsencrypt
- ./certbot/logs:/var/log/letsencrypt
- ./certbot/data:/var/www/html
volumes:
db_data:
wordpress_data:
Premi CTRL-X
seguito da Y
e INVIO
per salvare ed uscire dal file.
Configurazione Docker Compose: Spiegazione
Ecco i dettagli della configurazione:
- Versione: Compila una versione del file Compose compatibile con il Docker Engine. Puoi controllare la compatibilità qui.
- Servizi: Qui, abbiamo quattro servizi denominati
WordPress
,MariaDB
,nginx
, ecertbot
. - Immagine: Utilizziamo la versione più recente di WordPress con PHP 8.2, Apache, Mariadb, Nginx, e Certbot immagini disponibili nell’hub Docker.
- Volumi:
wordpress_data
: Abbiamo configurato questa directory per essere sincronizzata con la directory che desideriamo utilizzare come root web all’interno del contenitore.conf
: Qui inseriremo il file di configurazione Nginx da sincronizzare con la cartella predefinita conf.d di Nginx all’interno del contenitore.cedtbot/conf
: Qui riceveremo il certificato SSL, e questo sarà sincronizzato con la cartella che desideriamo all’interno del contenitore.ports
: Configura il contenitore per ascoltare sui porti elencati.command
: Il comando utilizzato per ricevere il certificato SSL.
- Ambiente: Qui elenchiamo tutte le variabili d’ambiente disponibili per l’immagine WordPress.
WORDPRESS_DB_HOST
: Qui, utilizziamo il nome del servizio del contenitore MariaDB.WORDPRESS_DB_USER
: Identico a quello configurato nel servizio mariadb.WORDPRESS_DB_PASSWORD
: Identico a quello configurato nel servizio mariadb.WORDPRESS_DB_NAME
: Identico a quello configurato nel servizio mariadb.
Configura Nginx
Secondo la configurazione docker-compose.yml, è necessario creare il file default.conf
all’interno della directory nginx/conf
.
Crea la directory accanto al tuo file docker-compose.yml
per ospitare il file di configurazione.
mkdir -p nginx/conf
Crea un file denominato default.conf
.
nano nginx/conf/default.conf
Inserisci le seguenti configurazioni; qui, utilizziamo una configurazione di reverse proxy al contenitore WordPress che esegue Apache.
nginx/conf/default.conf server {
listen [::]:80;
listen 80;
server_name domain.com www.domain.com;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Premi CTRL-X
seguito da Y
e INVIO
per salvare ed uscire dal file.
Ora hai la configurazione di docker-compose e la configurazione di Nginx.
Distribuisci WordPress con Docker Compose
Avvia i contenitori utilizzando il seguente comando; riceverai i certificati SSL una volta avviati i contenitori.
docker-compose up -d
Una volta avviati tutti i contenitori, vedrai due directory aggiuntive, certbot
e WordPress,
create accanto al tuo file docker-compose.yml
.
La directory wordpress
contiene tutto il codice sorgente del tuo sito WordPress.
La directory certbot
contiene tutti i file relativi ai tuoi certificati SSL.
Per visualizzare i contenitori, puoi eseguire il seguente comando.
docker-compose ps
Configura SSL Let’s Encrypt con Nginx
Dato che hai ricevuto il certificato SSL Let’s Encrypt, puoi configurare HTTPS e impostare il reindirizzamento a HTTPS.
Modifica il default.conf
e apporta le seguenti modifiche.
nano nginx/conf/default.conf
nginx/conf/default.confserver {
listen [::]:80;
listen 80;
server_name domain.com www.domain;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
return 301 https://www.domain.com$request_uri;
}
server {
listen [::]:443 ssl http2;
listen 443 ssl http2;
server_name www.domain.com;
ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;
root /var/www/html;
index index.php;
location ~ /.well-known/acme-challenge {
allow all;
root /var/www/html;
}
location / {
try_files $uri @apache;
}
location ~ ^/.user.ini {
deny all;
}
location ~* .(svg|svgz)$ {
types {}
default_type image/svg+xml;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location @apache {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~[^?]*/$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
location ~ .php$ {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_pass http://wordpress:80;
}
}
Premi CTRL-X
seguito da Y
e INVIO
per salvare ed uscire dal file.
Ora, puoi riavviare il servizio Nginx per caricare le nuove configurazioni.
docker-compose restart nginx
Ora, puoi verificare il tuo nome di dominio dal browser. Riceverai un reindirizzamento a HTTPS e vedrai la pagina di installazione di WordPress per completare l’installazione.
Risoluzione dei problemi
Di seguito sono riportati alcuni suggerimenti per SSH ai contenitori; consulta i log degli errori.
SSH al contenitore Docker
Per SSH nel contenitore wordpress
, puoi utilizzare il seguente comando.
docker-compose exec wordpress /bin/bash
Per SSH nel contenitore nginx
, puoi utilizzare il comando seguente.
docker-compose exec nginx /bin/bash
Verifica Log dei Contenitori
Puoi utilizzare il seguente comando per controllare i log dei contenitori utilizzando docker-compose
docker-compose logs -f
Riavvia Contenitori
Puoi riavviare i contenitori utilizzando il comando restart
facilmente.
docker-compose restart container_name
Sostituisci container_name
con il nome del tuo contenitore (wordpress, nginx, certbot)
Ferma Tutti i Contenitori Docker
Puoi fermare tutti i contenitori Docker utilizzando il comando seguente.
docker-compose down
Rimuovi Tutti i Contenitori e i Volumi
Puoi utilizzare docker-compose per rimuovere tutti i contenitori e i loro volumi con il seguente comando.
docker compose rm -fv
Rimuovi Tutti i Contenitori Docker
Rimuovi tutti i contenitori utilizzando il seguente comando.
docker rm -f $(docker ps -a -q)
Elimina Tutti i Volumi
Puoi anche eliminare tutti i volumi utilizzando il comando seguente.
docker volume rm $(docker volume ls -q)
Avvia Tutti i Contenitori
Con un singolo comando Docker compose, puoi avviare tutti i contenitori.
docker-compose up -d
Conclusione
Ora hai imparato come installare e configurare WordPress con Nginx, Apache, PHP 8.2, MariaDB e Let’s Encrypt con Docker e Docker Compose su Ubuntu 22.04.
Grazie per il tuo tempo.
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl