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