GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Installieren Sie WordPress mit Docker Compose, Nginx, Apache mit SSL

Installieren Sie WordPress mit Docker, Nginx, Apache mit SSL. In diesem Leitfaden erfahren Sie, wie Sie mit Docker, Docker Compose, Nginx, Apache, PHP 8.1, MariaDB und Let’s Encrypt die beste Leistung einrichten, um WordPress unter Ubuntu 22.04 auszuführen.

Wir werden auch Volumes erstellen, damit die Änderungen oder Aktualisierungen beim Neustart des Containers erhalten bleiben.

Dieses Setup wird in Google Cloud mit einer Instanz getestet, auf der Ubuntu 22.04 OS ausgeführt wird. Sie können diese Einrichtung auch in beliebigen Cloud-Diensten wie AWS oder Azure oder DigitalOcean oder dedizierten oder VPS-Servern vornehmen.

Voraussetzungen

  1. Installieren Sie Docker unter Ubuntu 22.04
  2. Installieren Sie Docker Compose auf Ubuntu 22.04.

Bitte stellen Sie sicher, dass Sie alle oben genannten Schritte ausgeführt haben

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

Sobald Sie alle Voraussetzungen erfüllt haben, können Sie mit der Einrichtung und Konfiguration von WordPress fortfahren.

Schritt 1:Erstellen Sie ein Projektverzeichnis

Stellen Sie eine SSH-Verbindung zu Ihrem Server her und erstellen Sie zunächst ein neues Projektverzeichnis mit dem Namen wp-project . Sie können es auch beliebig benennen.

mkdir wp-project

Schritt 2:Docker-Compose-YML-Datei erstellen

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

cd wp-project

Erstellen Sie einen neuen docker-compose.yml Datei.

nano docker-compose.yml

Kopieren Sie den gesamten Inhalt unten und fügen Sie ihn in die Datei ein.

Stellen Sie sicher, dass Sie die unten aufgeführten Umgebungsvariablen ersetzen.

version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-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
            - ./wordpress:/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ücken Sie CTRL-X gefolgt von Y und ENTER um die Datei zu speichern und zu beenden.

Hier sind die Konfigurationsdetails.

  • Version :Dateiversion erstellen, die mit der Docker Engine kompatibel ist. Hier können Sie die Kompatibilität überprüfen.
  • Dienste :Hier haben wir 4 Dienste mit dem Namen wordpress , mariadb , nginx und certbot .
  • Bild :Wir verwenden das neueste WordPress mit PHP 8.1, Apache-, Mariadb-, Nginx- und Certbot-Images, die im Docker-Hub verfügbar sind.
  • Volumen :
    • wordpress :Wir haben dieses Verzeichnis so konfiguriert, dass es mit dem Verzeichnis synchronisiert wird, das wir als Web-Root innerhalb des Containers verwenden möchten.
    • conf :Hier platzieren wir die Nginx-Konfigurationsdatei, die mit dem standardmäßigen Nginx-Ordner conf.d im Container synchronisiert werden soll.
    • cedtbot/conf :Hier erhalten wir das SSL-Zertifikat und dieses wird mit dem gewünschten Ordner im Container synchronisiert.
    • ports :Konfigurieren Sie den Container so, dass er die aufgelisteten Ports überwacht.
    • command :Der Befehl, der verwendet wird, um das SSL-Zertifikat zu erhalten.
  • 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 :Dasselbe wie das, das wir im mariadb-Dienst konfiguriert haben.
    • WORDPRESS_DB_PASSWORD :Dasselbe wie das, das wir im mariadb-Dienst konfiguriert haben.
    • WORDPRESS_DB_NAME :Dasselbe wie das, das wir im mariadb-Dienst konfiguriert haben.

Schritt 3:Nginx konfigurieren

Gemäß docker-compose.yml Konfiguration müssen wir den default.conf erstellen Datei innerhalb des nginx/conf Verzeichnis.

Erstellen Sie das Verzeichnis neben Ihrem docker-compose.yml Datei zum Speichern der Konfigurationsdatei.

mkdir -p nginx/conf

Erstellen Sie eine Datei namens default.conf .

nano nginx/conf/default.conf

Platzieren Sie die folgenden Konfigurationen, hier verwenden wir die Reverse-Proxy-Konfiguration für den WordPress-Container, auf dem Apache ausgeführt wird.

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

    location ~/. {
        deny all;
        access_log off;
        log_not_found off;
    }
} 

Drücken Sie CTRL-X gefolgt von Y und ENTER um die Datei zu speichern und zu beenden.

Jetzt haben Sie Ihre Docker Compose-Konfiguration und Ihre Nginx-Konfiguration.

Schritt 4:WordPress mit Docker Compose bereitstellen

Starten Sie die Container mit dem folgenden Befehl, Sie erhalten die SSL-Zertifikate, sobald die Container gestartet sind.

docker-compose up -d

Sobald alle Container gestartet sind, sehen Sie zwei zusätzliche Verzeichnisse certbot und wordpress zusammen mit Ihrem docker-compose.yml erstellt Datei.

Das Verzeichnis wordpress enthält den gesamten Quellcode Ihrer WordPress-Website.

Das Verzeichnis certbot enthält alle Dateien, die sich auf Ihre SSL-Zertifikate beziehen.

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

docker-compose ps

Schritt 5:Let’s Encrypt SSL mit Nginx konfigurieren

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

Bearbeiten Sie den default.conf und nehmen Sie die folgenden Änderungen vor.

nano nginx/conf/default.conf
server {
    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;
    }

    location ~/. {
        deny all;
        access_log off;
        log_not_found off;
    }
} 

Drücken Sie CTRL-X gefolgt von Y und ENTER um die Datei zu speichern und zu beenden.

Starten Sie nun den Nginx-Dienst neu, um die neuen Konfigurationen zu laden.

docker-compose restart nginx

Jetzt können Sie Ihren Domainnamen in Ihrem Browser überprüfen. Sie erhalten eine Umleitung zu HTTPS und sehen die WordPress-Installationsseite, um die Installation abzuschließen.

Erlernen Sie die erweiterten Techniken von WordPress jetzt mit diesem einfach zu lernenden Kurs.

Schlussfolgerung

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

Vielen Dank für Ihre Zeit. Wenn Sie auf ein Problem oder Feedback stoßen, hinterlassen Sie bitte unten einen Kommentar.


Linux
  1. So installieren Sie WordPress mit Nginx unter Ubuntu 18.04

  2. So installieren Sie WordPress mit Docker auf Ubuntu

  3. Installieren Sie ModSecurity mit Apache in einem Docker-Container

  4. Installieren Sie WordPress unter Linux mit Apache

  5. So installieren Sie Apache 2.4.2 von der Quelle auf CentOS 6.2 mit SSL

Installieren Sie WordPress mit Nginx auf Ubuntu 18.04

So installieren Sie WordPress auf CentOS 7.1 mit Apache

Installieren Sie WordPress mit Docker auf Ubuntu 20.04

So installieren Sie Apache Tomcat 10 auf Ubuntu 20.04 mit Nginx

Installieren und verwenden Sie Docker Compose mit Docker unter Ubuntu 22.04

So installieren Sie Apache Tomcat 10 auf Ubuntu 22.04 mit Nginx