services: traefik: image: traefik:v3 container_name: traefik restart: unless-stopped command: - --api.dashboard=true - --providers.docker=true - --providers.docker.exposedbydefault=false - --entrypoints.web.address=:80 - --entrypoints.websecure.address=:443 - --entrypoints.web.http.redirections.entrypoint.to=websecure - --entrypoints.web.http.redirections.entrypoint.scheme=https - --certificatesresolvers.letsencrypt.acme.email=${ACME_EMAIL} - --certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json - --certificatesresolvers.letsencrypt.acme.httpchallenge=true - --certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - traefik_letsencrypt:/letsencrypt labels: - traefik.enable=true - traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DASHBOARD_DOMAIN}`) - traefik.http.routers.traefik.entrypoints=websecure - traefik.http.routers.traefik.tls=true - traefik.http.routers.traefik.tls.certresolver=letsencrypt - traefik.http.routers.traefik.service=api@internal - traefik.http.routers.traefik.middlewares=dashboard-auth - traefik.http.middlewares.dashboard-auth.basicauth.users=${TRAEFIK_DASHBOARD_AUTH} networks: - web postgres: image: postgres:latest container_name: postgres restart: unless-stopped environment: - POSTGRES_DB=${POSTGRES_DB} - POSTGRES_USER=${POSTGRES_USER} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 networks: - web adminer: image: adminer:latest container_name: adminer restart: unless-stopped environment: - ADMINER_DEFAULT_SERVER=postgres - ADMINER_DESIGN=pepa-linha depends_on: postgres: condition: service_healthy labels: - traefik.enable=true - traefik.http.routers.adminer.rule=Host(`${ADMINER_DOMAIN}`) - traefik.http.routers.adminer.entrypoints=websecure - traefik.http.routers.adminer.tls=true - traefik.http.routers.adminer.tls.certresolver=letsencrypt - traefik.http.routers.adminer.middlewares=adminer-auth - traefik.http.middlewares.adminer-auth.basicauth.users=${ADMINER_AUTH} - traefik.http.services.adminer.loadbalancer.server.port=8080 networks: - web volumes: traefik_letsencrypt: postgres_data: networks: web: name: ${SHARED_NETWORK_NAME} driver: bridge attachable: true