WordPress Implementatie: Docker, Nginx, Apache en SSL

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

  1. Docker installeren op Ubuntu 22.04
  2. Docker Compose installeren op Ubuntu 22.04

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, en certbot.
  • 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