name: event-demo services: traefik: image: traefik:3.3.4 container_name: "traefik" command: - "--api.insecure=true" - "--api.dashboard=true" - "--providers.docker=true" - "--log.level=DEBUG" ports: - "80:80" volumes: - "/var/run/docker.sock:/var/run/docker.sock:ro" labels: - "traefik.enable=true" - "traefik.http.routers.api.rule=Host(`dashboard.traefik.me`)" - "traefik.http.services.api.loadbalancer.server.port=8080" - "traefik.http.routers.api.service=api@internal" - "traefik.http.routers.api.middlewares=api-auth" - "traefik.http.middlewares.api-auth.basicauth.users=test:$$apr1$$H6uskkkW$$IgXLP6ewTrSuBkTrqE8wj/" # test:test redis: image: redis/redis-stack:7.4.0-v3 ports: - "6379:6379" healthcheck: test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] volumes: - redis_data:/data - redisinsight_data:/redisinsight labels: - "traefik.http.routers.redis.rule=Host(`redis.traefik.me`)" - "traefik.http.services.redis.loadbalancer.server.port=8001" flyway: image: flyway/flyway container_name: "flyway" command: migrate depends_on: postgresql: condition: service_healthy volumes: - ../migrations/events:/flyway/sql - ./flyway.conf:/flyway/conf/flyway.conf restart: no postgresql: image: postgres:17.4 container_name: "postgresql" ports: - "5432:5432" environment: POSTGRES_PASSWORD_FILE: /run/secrets/postgresql_password POSTGRES_USER: event-demo secrets: - postgresql_password healthcheck: test: ["CMD-SHELL", "sh -c 'pg_isready -U event-demo'"] interval: 1s timeout: 5s retries: 10 volumes: - postgresql_data:/var/lib/postgresql/data pgadmin: image: dpage/pgadmin4 container_name: "pgadmin" environment: PGADMIN_DEFAULT_EMAIL: $PGADMIN_DEFAULT_EMAIL PGADMIN_DEFAULT_PASSWORD_FILE: /run/secrets/pgadmin_password secrets: - pgadmin_password volumes: - pgadmin_data:/var/lib/pgadmin labels: - "traefik.http.routers.pgadmin.rule=Host(`pgadmin.traefik.me`)" - "traefik.http.services.pgadmin.loadbalancer.server.port=80" app: build: context: ../ dockerfile: docker/Dockerfile ports: - "8080:8080" depends_on: flyway: condition: service_completed_successfully postgresql: condition: service_healthy labels: - "traefik.http.routers.app.rule=Host(`api.traefik.me`)" - "traefik.http.services.app.loadbalancer.server.port=8080" secrets: pgadmin_password: file: pgadmin.secret postgresql_password: file: postgresql.secret volumes: redis_data: redisinsight_data: postgresql_data: pgadmin_data: