WordPress Docker Stack
- Traefik for accepting incoming http/https requests and automating ssl certificates and then send http to nginx.
- Nginx with caching for reverse proxying to the WordPress php-fpm service
- WordPress php-fpm image for the WordPress installation. Themes and plugins can be stored in code under the ./wordpress directory.
- MariaDB service for the database.
- Prometheus(to be continue...)
- Grafana(to be continue...)
Directory Tree Structure
Create such Project for wordpress subproject containing db, wordpress, and nginx.
.env
docker-compose.yml
├── db
│ └── data
├── wordpress
│ └── wp-content
│ └── wp-XXX
│ └── wp-XXX
│ └── ...
Create such Project for traefik subproject
docker-compose.yml
├── config
├── logs
Configuration
- Edit the content below to fetch your case.
# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0
version: '2'
services:
mariadb:
image: docker.io/bitnami/mariadb:11.1
env_file: .env
volumes:
- './db:/bitnami/mariadb'
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- MARIADB_USER=MARIADB_USER
- MARIADB_DATABASE=wordpress
- MARIADB_ROOT_PASSWORD=MARIADB_ROOT_PASSWORD
networks:
- wordpress_network
wordpress:
container_name: wordpress
image: docker.io/bitnami/wordpress-nginx:6
env_file: .env
expose:
- 8443
- 8080
volumes:
- './wp:/bitnami/wordpress'
depends_on:
- mariadb
environment:
# ALLOW_EMPTY_PASSWORD is recommended only for development.
- WORDPRESS_DATABASE_HOST=mariadb
- WORDPRESS_DATABASE_PORT_NUMBER=3306
- WORDPRESS_DATABASE_USER=MARIADB_USER
- WORDPRESS_DATABASE_PASSWORD=MARIADB_PASSWORD
- WORDPRESS_DATABASE_NAME=<your database name for wordpress>
- WORDPRESS_USERNAME=<your wp username>
- WORDPRESS_PASSWORD=<your wp password>
- WORDPRESS_EMAIL=<your email>
- WORDPRESS_BLOG_NAME=<your blog name>
labels:
- traefik.enable=true
- traefik.http.routers.wordpress.rule=Host(`www.your_domain_name`) || Host(`your_domain_name`)
- traefik.http.services.wordpress.loadbalancer.server.port=8443
- traefik.http.services.wordpress.loadbalancer.server.scheme=https
- traefik.http.services.wordpress.loadbalancer.passhostheader=true
- traefik.http.routers.wordpress.middlewares=redirect
- traefik.http.middlewares.redirect.redirectscheme.scheme=https
- traefik.http.middlewares.redirect.redirectscheme.permanent=true
networks:
- wordpress_network
networks:
wordpress_network:
driver: bridge
- Edit the macro in
.env
file. - Edit the following content of docker-compose.yml in traefik.
version: "3.3"
services:
traefik:
image: traefik:v2.10.5
restart: unless-stopped
ports:
- 80:80
- 443:443
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./config/traefik.yaml:/etc/traefik/traefik.yaml:ro
- ./config/dynamic.yaml:/etc/traefik/dynamic.yaml:ro
- ./config/acme.json:/letsencrypt/acme.json
- ./logs/:/logs/
env_file:
- ./config/cloudflare.env
networks:
- blog_wordpress_network
networks:
blog_wordpress_network:
external: true
- Run
docker-compose up -d
Comments 1 comment
Blogger maniac
good!!!