Wordpress Docker Installation

Aus Laub-Home Wiki

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.