WordPress-Bereitstellung: Docker, Nginx, Apache und SSL

Vereinfachen Sie die Bereitstellung Ihrer WordPress-Website mit unserer leicht verständlichen Anleitung. Nutzen Sie Docker Compose, Nginx, Apache und SSL für einen reibungslosen Installationsprozess.

Wir werden auch Volumes erstellen, damit Änderungen oder Updates beibehalten werden, wenn der Container neu startet.

Diese Konfiguration wurde auf Google Cloud mit einer Instanz getestet, die Ubuntu 22.04 OS ausführt. Sie können diese Einrichtung auch in beliebigen Cloud-Diensten wie AWS, Azure, DigitalOcean oder auf dedizierten oder VPS-Servern vornehmen.

Voraussetzungen

  1. Docker auf Ubuntu 22.04 installieren
  2. Docker Compose auf Ubuntu 22.04 installieren.

Bitte stellen Sie sicher, dass Sie alle oben genannten Schritte abgeschlossen haben.

  • Domain auf Ihre Server-IP-Adresse zeigen.
  • Docker installiert und konfiguriert.
  • Docker Compose installiert und konfiguriert.

Nachdem Sie alle Voraussetzungen erfüllt haben, können Sie fortfahren, die Einrichtung zu erstellen und WordPress zu konfigurieren.

Projektverzeichnis erstellen

SSH in Ihren Server und beginnen Sie mit der Erstellung eines neuen Projektverzeichnisses namens wp-project. Sie können es auch nach Ihren Wünschen benennen.

 
mkdir wp-project

Docker Compose YML Datei erstellen

Navigieren Sie nun ins Projektverzeichnis und erstellen Sie eine neue docker-compose.yml Datei mit der folgenden Konfiguration.

 
cd wp-project

Erstellen Sie eine neue docker-compose.yml Datei.

 
nano docker-compose.yml

Kopiert den gesamten Inhalt unten und fügt ihn in die Datei ein.

Docker Compose Konfiguration

Stellt sicher, dass die unten genannten Umgebungsvariablen ersetzt werden.

 

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:

Drückt STRG-X gefolgt von Y und EINGABETASTE zum Speichern und Beenden der Datei.

Docker Compose Konfiguration: Erklärung

Hier sind die Konfigurationsdetails:

  • Version: Erstellt eine mit dem Docker Engine kompatible Compose-Dateiversion. Die Kompatibilität können Sie hier überprüfen.
  • Dienste: Hier haben wir vier Dienste mit den Namen WordPress, MariaDB, nginx und certbot.
  • Image: Wir verwenden das neueste WordPress mit PHP 8.2, Apache, Mariadb, Nginx und Certbot Images, die im Docker Hub verfügbar sind.
  • Volumes:
    • wordpress_data: Wir haben diesen Ordner so konfiguriert, dass er mit dem Ordner synchronisiert wird, den wir als Web-Stamm innerhalb des Containers verwenden möchten.
    • conf: Hier wird die Nginx-Konfigurationsdatei platziert, die mit dem Standard-Nginx-Ordner conf.d im Container synchronisiert werden soll.
    • cedtbot/conf: Hier erhalten wir das SSL-Zertifikat, und dies wird mit dem Ordner synchronisiert, den wir innerhalb des Containers wünschen.
    • ports: Konfigurieren Sie den Container so, dass er auf den aufgeführten Ports lauscht.
    • command: Der Befehl, der zum Erhalt des SSL-Zertifikats verwendet wird.
  • Umgebung: Hier listen wir alle Umgebungsvariablen auf, die für das WordPress-Image verfügbar sind.
    • WORDPRESS_DB_HOST: Hier verwenden wir den Dienstnamen des MariaDB-Containers.
    • WORDPRESS_DB_USER: Gleich dem, das wir in der mariadb-Dienst konfiguriert haben.
    • WORDPRESS_DB_PASSWORD: Gleich dem, das wir in der mariadb-Dienst konfiguriert haben.
    • WORDPRESS_DB_NAME: Gleich dem, das wir in der mariadb-Dienst konfiguriert haben.

Konfigurieren von Nginx

Gemäß der docker-compose.yml-Konfiguration müssen wir die Datei default.conf im Verzeichnis nginx/conf erstellen.

Erstelle das Verzeichnis neben deiner docker-compose.yml-Datei, um die Konfigurationsdatei aufzunehmen.

 
mkdir -p nginx/conf

Erstelle eine Datei namens default.conf.

 
nano nginx/conf/default.conf

Setze die folgenden Konfigurationen; hier verwenden wir eine Reverse-Proxy-Konfiguration zum laufenden WordPress-Container mit 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;
    }
} 

Drücke STRG-X gefolgt von Y und EINGABETASTE um die Datei zu speichern und zu beenden.

Jetzt haben Sie Ihre docker-compose-Konfiguration und Ihre Nginx-Konfiguration.

WordPress mit Docker Compose bereitstellen

Starten Sie die Container mit folgendem Befehl; Sie erhalten die SSL-Zertifikate, sobald die Container gestartet sind.

 
docker-compose up -d

Sobald alle Container gestartet sind, werden Sie zwei zusätzliche Verzeichnisse sehen, certbot und WordPress, neben Ihrem docker-compose.yml-Datei erstellt.

Das Verzeichnis wordpress enthält alle Quelldateien Ihrer WordPress-Website.

Das Verzeichnis certbot enthält alle Dateien im Zusammenhang mit Ihren SSL-Zertifikaten.

Um die Container anzuzeigen, können Sie folgenden Befehl ausführen.

 
docker-compose ps

Let’s Encrypt SSL mit Nginx konfigurieren

Da Sie das Let’s Encrypt SSL-Zertifikat erhalten haben, können Sie HTTPS konfigurieren und eine Umleitung zu HTTPS einrichten.

Bearbeiten Sie die default.conf und ändern Sie sie wie folgt.

 
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;
    }
} 

Drücken Sie STRG-X gefolgt von Y und EINGABETASTE um die Datei zu speichern und zu schließen. 

Jetzt können Sie den Nginx-Dienst neu starten, um die neuen Konfigurationen zu laden.

 
docker-compose restart nginx

Jetzt können Sie Ihre Domain-Adresse in Ihrem Browser überprüfen. Sie werden eine Umleitung zu HTTPS erhalten und die WordPress-Installationsseite zum Abschließen der Installation sehen.

Fehlerbehebung

Hier sind einige Tipps für SSH in Container; siehe die Fehlerprotokolle.

SSH in Docker-Container

Um SSH in den wordpress-Container zu führen, können Sie folgenden Befehl verwenden.

 
docker-compose exec wordpress /bin/bash

Um per SSH in den nginx Container einzusteigen, können Sie den unten stehenden Befehl verwenden.

 
docker-compose exec nginx /bin/bash

Containerprotokolle überprüfen

Sie können den unten stehenden Befehl verwenden, um die Protokolle von Containern mit docker-compose zu überprüfen.

 
docker-compose logs -f

Container neu starten

Sie können die Container mithilfe des restart Befehls einfach neu starten.

 
docker-compose restart container_name

Ersetzen Sie container_name durch den Namen Ihres Containers (wordpress, nginx, certbot)

Alle Docker-Container stoppen

Sie können alle Docker-Container mit dem unten stehenden Befehl stoppen.

docker-compose down

Alle Container und Volumes entfernen

Sie können docker-compose verwenden, um alle Container und ihre Volumes mit dem unten stehenden Befehl zu entfernen.

 
docker compose rm -fv

Alle Docker-Container entfernen

Entfernen Sie alle Container mithilfe des folgenden Befehls.

 
docker rm -f $(docker ps -a -q)

Alle Volumes löschen

Sie können auch alle Volumes mit dem unten stehenden Befehl löschen.

 
docker volume rm $(docker volume ls -q)

Alle Container starten

Mit einem einzigen Docker-compose-Befehl können Sie alle Container starten.

 
docker-compose up -d

Schlussfolgerung

Jetzt haben Sie gelernt, wie Sie WordPress mit Nginx, Apache, PHP 8.2, MariaDB und Let’s Encrypt mit Docker und Docker Compose auf Ubuntu 22.04 installieren und einrichten.

Danke für Ihre Zeit.

Source:
https://dzone.com/articles/wordpress-deployment-docker-nginx-apache-ssl