Files
server-config/docker-compose.yml
2026-02-11 20:18:19 +01:00

85 lines
2.7 KiB
YAML

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