Well, It's up to you to prefer including a webserver on your stack or outside (in it's own stack). Both will work.
Personaly, i prefer include all the stuff in one docker-compose file (although the database in it's own stack is a better practice).
There is my functionnal docker-compose file for a wordpress site (PHP-FPM) :
version: '3.7'
services:
database:
image: mariadb:${MARIADB_VERSION}
container_name: ${PROJECT_NAME}_database
restart: unless-stopped
volumes:
- ./conf/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf:ro
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_USER_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
networks:
- net
phpmyadmin:
image: phpmyadmin:latest
container_name: ${PROJECT_NAME}_phpmyadmin
restart: unless-stopped
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
depends_on:
- database
environment:
PMA_HOST: database
UPLOAD_LIMIT: 1G
PMA_PORT: 3306
PMA_ABSOLUTE_URI: "https://${HOST_NAME}/_phpmyadmin/"
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.routers.${PROJECT_NAME}-phpmyadmin.rule=Host(`${HOST_NAME}`) && PathPrefix(`/_phpmyadmin/`)
- traefik.http.routers.${PROJECT_NAME}-phpmyadmin.tls=true
- traefik.http.routers.${PROJECT_NAME}-phpmyadmin.entrypoints=http,https
- traefik.http.routers.${PROJECT_NAME}-phpmyadmin.middlewares=stripprefix-phpmyadmin
- traefik.http.routers.${PROJECT_NAME}-phpmyadmin.service=${PROJECT_NAME}-phpmyadmin
- traefik.http.middlewares.stripprefix-phpmyadmin.stripprefix.prefixes=/_phpmyadmin
- traefik.http.services.${PROJECT_NAME}-phpmyadmin.loadbalancer.server.port=80
networks:
- net
- proxy
nginx:
image: nginx:${NGINX_VERSION}
container_name: ${PROJECT_NAME}_nginx
restart: unless-stopped
volumes:
- ./conf/nginx:/etc/nginx:ro
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./logs/nginx:/var/log/nginx
- ./www:/var/www/html
depends_on:
- wordpress
labels:
- traefik.enable=true
- traefik.docker.network=proxy
- traefik.http.routers.${PROJECT_NAME}.rule=Host(`${HOST_NAME}`, `www.${HOST_NAME}`)
- traefik.http.routers.${PROJECT_NAME}.entrypoints=http,https
- traefik.http.routers.${PROJECT_NAME}.middlewares=compression@file,security@file
- traefik.http.routers.${PROJECT_NAME}.service=${PROJECT_NAME}
- traefik.http.services.${PROJECT_NAME}.loadbalancer.server.port=80
- traefik.http.routers.${PROJECT_NAME}-admin.rule=Host(`${HOST_NAME}`) && (Path(`/wp-admin`) || Path(`/wp-login.php`))
- traefik.http.routers.${PROJECT_NAME}-admin.entrypoints=http,https
- traefik.http.routers.${PROJECT_NAME}-admin.middlewares=whitelist@file
- traefik.http.routers.${PROJECT_NAME}-admin.service=${PROJECT_NAME}-admin
- traefik.http.services.${PROJECT_NAME}-admin.loadbalancer.server.port=80
networks:
- proxy
- net
wordpress:
image: wordpress:${PHP_VERSION}
container_name: ${PROJECT_NAME}_wordpress
restart: unless-stopped
volumes:
- ./conf/php/php-fpm.conf:/usr/local/etc/php-fpm.d/zzz-custom.conf:ro
- ./conf/php/php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./www:/var/www/html
depends_on:
- database
environment:
WORDPRESS_DB_HOST: database
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_USER_PASSWORD}
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_TABLE_PREFIX: ${MYSQL_TABLE_PREFIX}
mem_limit: 1G
extra_hosts:
- ${HOST_NAME}:${DOCKER_GATEWAY_TRAEFIK_PROXY}
networks:
- net
volumes:
db:
networks:
net:
driver: bridge
proxy:
external: true
There is a lots of tweak in my docker-compose file (php .ini, database config, middleware, etc), you don't have to use all of them (you can ignore them) ![]()
Maybe your problem come from your traefik's config...
Hope this help !
Bye