Hello !
I have a question about Traefik using Docker and docker-compose,
Indeed, I want to use traefik as a reverse proxy to redirect several services (in my case, several wordpress instances).
Traefik works and I can access to a wordress instance (Wordpress, Mysql, PhpMyadmin) without any problem (with automatic https redirection),
However, when I launch another Wordpress stack at the same time (WP, Mysql, PhpMyadmin), I can't access any service, I get a 404 error.
Here is my traefik.yaml :
entryPoints:
web:
address: ":80"
http:
redirections:
entryPoint:
to: websecure
scheme: https
websecure:
address: ":443"
http:
tls:
certResolver: myresolver
middlewares:
- SecHeaders@file
api:
dashboard: true
accessLog: {}
providers:
docker:
exposedByDefault: false
file:
directory: /etc/traefik/custom/
watch: true
certificatesResolvers:
myresolver:
acme:
email: "mail@domain"
storage: "/letsencrypt/acme.json"
tlsChallenge: {}
Here is my docker-compose.yaml for traefik :
version: "3.7"
services:
reverse_proxy:
image: traefik:2.2
restart: unless-stopped
command:
--api.insecure=true
--providers.docker
--entrypoints.web.address=:80
ports:
# The HTTP port
- "80:80"
# The HTTPS port
- "443:443"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
# traefik static configuration
- ./traefik.yaml:/etc/traefik/traefik.yaml:ro
# custom folder with dynamic configuration
- ./custom:/etc/traefik/custom:ro
# ssl volumes to store acme.json
- certs:/letsencrypt
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik-api.rule=Host(`traefik.DOMAIN`)"
- "traefik.http.routers.traefik-api.service=api@internal"
networks:
- default
volumes:
certs:
networks:
default:
external:
name: gateway
Here is my docker-compose.yaml for wordpress:
version: '3'
services:
database:
image: mysql:5.7
container_name: bdd
volumes:
- ./BDD/file.sql:/docker-entrypoint-initdb.d/init.sql
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: passwd
MYSQL_DATABASE: db
MYSQL_USER: user-db
MYSQL_PASSWORD: passwd-bdd
networks:
- network1
labels:
- traefik.enable=false
phpmyadmin:
depends_on:
- database
image: phpmyadmin
container_name: pma
restart: always
environment:
PMA_HOST: database
MYSQL_PASSWORD: passwd-bdd
MYSQL_ROOT_PASSWORD: passwd
networks:
- default
- network1
labels:
traefik.enable: true
traefik.http.routers.phpmyadmin.entrypoints: websecure
traefik.http.routers.phpmyadmin.rule: 'Host(`pma.MY_DOMAIN`)'
wordpress:
depends_on:
- database
image: wordpress:5.7.1-php7.3
container_name: wordpress
restart: always
volumes:
- ./WORDPRESS:/var/www/html
environment:
WORDPRESS_DB_HOST: database:3306
WORDPRESS_DB_USER: user-db
WORDPRESS_DB_PASSWORD: passwd-bdd
WORDPRESS_DB_NAME: db
WORDPRESS_TABLE_PREFIX: wp_
networks:
- default
- network1
labels:
traefik.enable: true
traefik.docker.network: default
traefik.http.routers.wordpress.entrypoints: websecure
traefik.http.routers.wordpress.rule: 'Host(`mas.MY_DOMAIN`)'
networks:
default:
external:
name: gateway
network1:
internal: true
volumes:
db_data:
Here is my docker-compose.yaml for the 2nd wordpress:
version: '3'
services:
database2:
image: mysql:5.7
container_name: bdd2
volumes:
- ./SQL/file2.sql:/docker-entrypoint-initdb.d/init.sql
- db_data2:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: passwd2
MYSQL_DATABASE: db2
MYSQL_USER: user-db2
MYSQL_PASSWORD: passwd-bdd2
networks:
- network2
phpmyadmin2:
depends_on:
- database2
image: phpmyadmin
container_name: pma2
restart: always
environment:
PMA_HOST: database2
MYSQL_PASSWORD: passwd-bdd2
MYSQL_ROOT_PASSWORD: passwd2
networks:
- default
- network2
labels:
traefik.enable: true
traefik.http.routers.phpmyadmin.entrypoints: websecure
traefik.http.routers.phpmyadmin.rule: 'Host(`pma.MY_DOMAIN2`)'
wordpress2:
depends_on:
- database2
image: wordpress:5.7.1-php7.3
container_name: wordpress2
restart: always
volumes:
- ./WP:/var/www/html
environment:
WORDPRESS_DB_HOST: database2:3306
WORDPRESS_DB_USER: user-db2
WORDPRESS_DB_PASSWORD: passwd-bdd2
WORDPRESS_DB_NAME: db2
WORDPRESS_TABLE_PREFIX: wp_
networks:
- default
- network2
labels:
traefik.enable: true
traefik.docker.network: default
traefik.http.routers.wordpress.entrypoints: websecure
traefik.http.routers.wordpress.rule: 'Host(`wordpress.MY_DOMAIN2`)'
networks:
default:
external:
name: gateway
network2:
internal: true
volumes:
db_data2:
Thanks for your help !