Skip to content

Instantly share code, notes, and snippets.

@jgcmarins
Last active January 13, 2025 16:51
Show Gist options
  • Save jgcmarins/4dcb1419ca9e671f8254f47f4a50a16e to your computer and use it in GitHub Desktop.
Save jgcmarins/4dcb1419ca9e671f8254f47f4a50a16e to your computer and use it in GitHub Desktop.
WordPress setup with docker-compose and traefik
MYSQL_ROOT_PASSWORD=
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=
version: '3.8'
services:
wordpress:
image: wordpress:6.2-php8.1-apache
container_name: wordpress
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.wordpress.rule=Host(`wordpress.mywebsite.com`)'
- 'traefik.http.routers.wordpress.entrypoints=websecure'
- 'traefik.http.routers.wordpress.tls.certresolver=myresolver'
- 'traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https'
- 'traefik.http.middlewares.wordpress-cors.headers.accesscontrolalloworiginlist=https://mywebsite.com'
- 'traefik.http.middlewares.wordpress-cors.headers.accesscontrolallowmethods=GET,OPTIONS,HEAD'
- 'traefik.http.middlewares.wordpress-cors.headers.accesscontrolallowheaders=Content-Type,Authorization'
- 'traefik.http.middlewares.wordpress-cors.headers.accesscontrolallowcredentials=true'
- 'traefik.http.routers.wordpress.middlewares=redirect-to-https,wordpress-cors'
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
volumes:
- ./wordpress_data:/var/www/html
db:
image: mysql:8.0
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
volumes:
- ./mysql_data:/var/lib/mysql
traefik:
image: traefik:v2.10
container_name: traefik
command:
# traefik dashboard
# - '--api.dashboard=true'
# - '--api.insecure=false'
- '--providers.docker=true'
- '--entrypoints.web.address=:80'
- '--entrypoints.websecure.address=:443'
- '--certificatesresolvers.myresolver.acme.tlschallenge=true'
- '--certificatesresolvers.myresolver.acme.email=admin@mywebsite.com'
- '--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json'
# - '--log.level=INFO'
# - '--log.format=json'
# - '--accesslog=true'
# - '--accesslog.format=json'
ports:
- '80:80'
- '443:443'
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
volumes:
wordpress_data:
mysql_data:
letsencrypt:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment