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
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
undcertbot
. - 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