Vereenvoudig de implementatie van uw WordPress-website met onze eenvoudige gids. Gebruik Docker Compose, Nginx, Apache en SSL voor een soepele installatie.
We maken ook volumes aan zodat wijzigingen of updates behouden blijven bij het opnieuw starten van de container.
Deze setup is getest op Google Cloud met een instantie die Ubuntu 22.04 OS draait. U kunt deze setup ook maken in elke cloud-diensten zoals AWS, Azure, DigitalOcean of in elke dedicated of VPS servers.
Vereisten
Zorg ervoor dat u alle hierboven genoemde stappen heeft voltooid.
- Domein gericht op uw server IP-adres.
- Docker geïnstalleerd en geconfigureerd.
- Docker Compose geïnstalleerd en geconfigureerd.
Zodra u alle vereisten heeft voltooid, kunt u doorgaan met het maken van de setup en configureren van WordPress.
Project Directory aanmaken
SSH naar uw server en begin met het aanmaken van een nieuwe project directory met de naam wp-project
. U kunt deze ook naar wens noemen.
mkdir wp-project
Docker Compose YML File aanmaken
Navigeer nu naar binnen de project directory en maak een nieuw docker-compose.yml bestand aan met de volgende configuratie.
cd wp-project
Maak een nieuw docker-compose.yml
bestand aan.
nano docker-compose.yml
Kopieer de volledige inhoud hieronder en plak deze in het bestand.
Configureer Docker Compose
Zorg ervoor dat je de onderstaande genoemde omgevingsvariabelen vervangt.
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:
Druk op CTRL-X
gevolgd door Y
en ENTER
om het bestand op te slaan en te sluiten.
Docker Compose Configuratie: Uitleg
Hier zijn de configuratiedetails:
- Versie: Maak een Compose-bestand dat compatibel is met de Docker Engine. Je kunt compatibiliteit controleren hier.
- Diensten: Hier hebben we vier diensten genoemd
WordPress
,MariaDB
,nginx
, encertbot
. - Afbeelding: We gebruiken de nieuwste WordPress met PHP 8.2, Apache, Mariadb, Nginx, en Certbotafbeeldingen die beschikbaar zijn op Docker Hub.
- Volumes:
wordpress_data
: We hebben deze map geconfigureerd om gesynchroniseerd te worden met de map die we willen gebruiken als webroot binnen de container.conf
: Hier plaatsen we het Nginx configuratiebestand om te worden gesynchroniseerd met de standaard Nginx conf.d map binnen de container.cedtbot/conf
: Dit is waar we het SSL-certificaat ontvangen, en dit wordt gesynchroniseerd met de map die we willen binnen de container.ports
: Configureer de container om te luisteren naar de opgegeven poorten.command
: De opdracht die wordt gebruikt om het SSL-certificaat te ontvangen.
- Omgeving: Hieronder vindt u een lijst van alle omgevingsvariabelen die beschikbaar zijn voor de WordPress afbeelding.
WORDPRESS_DB_HOST
: Hier gebruiken we de service naam van de MariaDB container.WORDPRESS_DB_USER
: Gelijk aan degene die we hebben geconfigureerd in de mariadb service.WORDPRESS_DB_PASSWORD
: Gelijk aan degene die we hebben geconfigureerd in de mariadb service.WORDPRESS_DB_NAME
: Gelijk aan degene die we hebben geconfigureerd in de mariadb service.
Configureer Nginx
Volgens de configuratie van docker-compose.yml moeten we het bestand default.conf
aanmaken in de nginx/conf
directory.
Maak de map naast uw docker-compose.yml
bestand om het configuratiebestand op te slaan.
mkdir -p nginx/conf
Maak een bestand met de naam default.conf
.
nano nginx/conf/default.conf
Plaats de volgende configuraties; hier gebruiken we een reverse proxy configuratie naar de WordPress container die Apache draait.
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;
}
}
Druk op CTRL-X
gevolgd door Y
en ENTER
om het bestand op te slaan en te sluiten.
Nu heb je je docker-compose configuratie en je Nginx configuratie.
WordPress Implementeren met Docker Compose
Start de containers met het volgende commando; je ontvangt de SSL-certificaten zodra de containers zijn gestart.
docker-compose up -d
Zodra alle containers zijn gestart, zie je twee extra mappen, certbot
en WordPress,
gecreëerd naast je docker-compose.yml
bestand.
De map wordpress
bevat al je WordPress website broncode.
De map certbot
bevat alle bestanden met betrekking tot je SSL-certificaten.
Om de containers te bekijken, kun je het volgende commando uitvoeren.
docker-compose ps
Let’s Encrypt SSL Configureren met Nginx
Nu je het Let’s Encrypt SSL-certificaat hebt ontvangen, kun je HTTPS configureren en een omleiding instellen naar HTTPS.
Bewerk de default.conf
en maak de volgende wijzigingen.
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;
}
}
Druk op CTRL-X
gevolgd door Y
en ENTER
om het bestand op te slaan en te sluiten.
Nu kun je de Nginx-service opnieuw starten om de nieuwe configuraties te laden.
docker-compose restart nginx
Nu kun je je domeinnaam vanuit je browser controleren. Je wordt omgeleid naar HTTPS en je ziet de WordPress installatiepagina om de installatie te voltooien.
Probleemoplossing
Hieronder vind je enkele tips voor SSH naar containers; bekijk de foutlogs.
SSH naar Docker Container
Om SSH te gebruiken in de wordpress
container, kun je het onderstaande commando gebruiken.
docker-compose exec wordpress /bin/bash
SSH in de nginx
container, kun je de onderstaande opdracht gebruiken.
docker-compose exec nginx /bin/bash
Controleer Container Logs
Je kunt de onderstaande opdracht gebruiken om de logs van containers te controleren met docker-compose
docker-compose logs -f
Herstart Containers
Je kunt de containers gemakkelijk herstarten met de restart
opdracht.
docker-compose restart container_name
Vervang container_name
door de naam van je container (wordpress, nginx, certbot)
Stop Alle Docker Containers
Je kunt alle docker containers stoppen met de onderstaande opdracht.
docker-compose down
Verwijder Alle Containers en Volumes
Je kunt docker-compose gebruiken om alle containers en hun volumes te verwijderen met de onderstaande opdracht.
docker compose rm -fv
Verwijder Alle Docker Containers
Verwijder alle containers met de volgende opdracht.
docker rm -f $(docker ps -a -q)
Verwijder Alle Volumes
Je kunt ook alle volumes verwijderen met de onderstaande opdracht.
docker volume rm $(docker volume ls -q)
Start Alle Containers
Met één Docker compose opdracht kun je alle containers starten.
docker-compose up -d
Conclusie
Nu heb je geleerd hoe je WordPress kunt installeren en instellen met Nginx, Apache, PHP 8.2, MariaDB en Let’s Encrypt met Docker en Docker Compose op Ubuntu 22.04.
Bedankt voor je tijd.
Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl