Wordpress Docker Installation
Hier ein kleines HowTo, wie man ein Wordpress via docker, bzw. docker-compose deployt. Das Ganze soll dann am Ende via NGINX SSL Reverse Proxy nach draußen freigegeben werden. Falls jemand seinen bestehenden Blog in das neu erstellte Docker Compose Projekt einfügen will, findet hier eine kleine Anleitung dazu:
Was passiert hier?
- es wird ein Projekt erstellt mit Wordpress und MySQL DB Server
- die Wordpress und DB Daten werden als Volume gemountet um es somit persistent zu machen
- Danach lauscht das Wordpress auf localhost:8090
- sollte dann via NGINX Reverse Proxy in die weite Welt rausgereicht werden
Docker Compose Projekt
Als erstes legen wir das docker-compose
Projekt an:
mkdir /opt/wordpressblog
cd /opt/wordpressblog
/opt/wordpressblog/.env
# Config File for Powderblog Application
# Docker Compose Project Name
# max length 11 characters
PROJECT_NAME=wordpress
# Config File for wordpressblog Application
DB_ROOT_PASS=EINSTARKESPASSWORT
DB_NAME=wordpress
DB_USER=wordpress
DB_PASS=EINANDERESSTARKESPASSWORT
# Wordpress Exposed Port Configuration
WP_HTTP_PORT=127.0.0.1:8090
# Timezone
TZ=Europe/Berlin
/opt/wordpressblog/docker-compose.yml
version: '3.8'
services:
database:
image: mysql:5.7
volumes:
- data_powderblog_db:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
TZ: ${TZ}
labels:
com.centurylinklabs.watchtower.enable: "true"
networks:
backend-nw:
aliases:
- db
wordpress:
image: wordpress:latest
depends_on:
- database
ports:
- ${WP_HTTP_PORT}:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: ${DB_NAME}
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASS}
TZ: ${TZ}
labels:
com.centurylinklabs.watchtower.enable: "true"
volumes:
- data_powderblog_wordpress:/var/www/html
networks:
app-nw:
backend-nw:
volumes:
data_powderblog_db:
data_powderblog_wordpress:
networks:
app-nw:
internal: false
driver: bridge
driver_opts:
com.docker.network.bridge.name: app-${PROJECT_NAME}
backend-nw:
internal: true
driver: bridge
driver_opts:
com.docker.network.bridge.name: be-${PROJECT_NAME}
Nun kann das Ganze einfach gestartet werden:
docker-compose up -d
nun sollte via
curl http://localhost:8090
eine Ausgabe kommen.
Nginx Reverse Proxy
Um das Ganze dann von außen verfügbar zu machen, richten wir auf unserem NGINX SSL Reverse Proxy für Docker Container einen neuen vhost ein:
/opt/nginxproxy/data/nginx/conf/www.example.tld.conf
server { listen 80; listen [::]:80; server_name www.example.tld example.tld; return 301 https://www.example.tld$request_uri; } server { listen 443 ssl; listen [::]:443 ssl; server_name www.example.tld example.tld; if ($host != $server_name) { rewrite ^/(.*) $scheme://$server_name/$1 permanent; } ssl_certificate /etc/letsencrypt/live/www.example.tld/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.tld/privkey.pem; include /etc/nginx/conf.d/includes/site-defaults.conf; include /etc/nginx/conf.d/includes/cert_bot.conf; expires $expires; location / { proxy_pass http://127.0.0.1:8090/; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; client_max_body_size 0; } add_header X-XSS-Protection "1; mode=block"; }
Nun nicht vergessen die SSL Zertifikate für die neue Domain zu erstellen:
dadurch wird auch der Nginx Proxy neu gestartet und die Seite sollte im Anschluss verfügbar sein. Wordpress kann dann einfach konfiguriert werden, oder aber eine bestehende Blogseite migriert werden.
Migration eines bestehenden Blogs
Apple Touch Icons
Backup des Projektes
- Webroot, bzw. wordpress Volume muss gesichert werden
- MySQL Datenbank muss via mysqldump gesichert werden
wie das geht, erfahrt ihr hier:
Update des Wordpress
Will man das Wordpress docker-compose
Projekt aktualisieren, dann muss zunächst das gesamte Projekt undeployt werden:
cd /opt/wordpressblog
docker-compose down
nun kann mit dem PULL das komplette Projekt / die Container aktualisiert werden:
docker-compose pull
Nun das Ganze wieder hochfahren:
docker-compose up -d
und nun alle Funktionen testen!
Wordpress selbst aktualisiert sich automatisch, ebenfalls wenn man dies einrichtet, die Plugins.