WordPress installation

A WordPress website powered by docker-engine

Technologies Involved

Steps

  • Replace uppercase text with the correct values
  • Run this configuration with docker-compose up -d
  • Connect to MySQL with any client (for example https://www.heidisql.com/)
  • Setup the DB user for WordPress (grant to the user all privileges for this DB)
  • Create folder ./certs/sitename and upload the .crt/.key files to enable https

Features

  • Full HTTPS support
  • Base on official docker images
  • Redirect HTTP to HTTPS
  • Redirect non-www to www
  • Possible multiple website hosting

version: '3'

services:
  nginx-proxy:
    image: nginx:latest
    restart: always
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./ssl/:/etc/nginx/certs

  mysql:
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: REPLACEWITHPASSWORD
    volumes:
      - db:/var/lib/mysql
  wp-site:
    image: wordpress
    restart: always
    ports:
      - 8001:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: WORDPRESSDBUSERNAME
      WORDPRESS_DB_PASSWORD: WORDPRESSDBPASSWORD
      WORDPRESS_DB_NAME: WORDPRESSDBNAME
      WORDPRESS_CONFIG_EXTRA:

         $$_SERVER['HTTPS']='on'; 
                      
             
    volumes:
      - wordpress:/var/www/html

volumes:
  wordpress:
  db:
events { } 
http {
    upstream wp-site{
      server wp-site:80;
    }
    server {
      listen 80;
      
      server_name SITENAME.EXT;
      return 301 https://www.$server_name$request_uri;
    }
    server {
      
      listen 443 ssl;
      server_name www.SITENAME.EXT;
      ssl_certificate /etc/nginx/certs/SITENAME/certificate.crt;
      ssl_certificate_key /etc/nginx/certs/SITENAME/private.key;
      location / {
        proxy_pass http://wp-site;
        proxy_redirect off;
        proxy_set_header Host $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-Host $server_name;
        proxy_set_header X-Forwarded-Proto http;
      }
    }
}