services: # Local services are available on their ports, but also available on: # http://api.localhost.tiangolo.com: backend # http://dashboard.localhost.tiangolo.com: frontend # etc. To enable it, update .env, set: # DOMAIN=localhost.tiangolo.com # proxy: # image: traefik:3.0 # volumes: # - /var/run/docker.sock:/var/run/docker.sock # ports: # - "80:80" # - "8090:8080" # # Duplicate the command from docker-compose.yml to add --api.insecure=true # command: # # Enable Docker in Traefik, so that it reads labels from Docker services # - --providers.docker # # Add a constraint to only use services with the label for this stack # - --providers.docker.constraints=Label(`traefik.constraint-label`, `traefik-public`) # # Do not expose all Docker services, only the ones explicitly exposed # - --providers.docker.exposedbydefault=false # # Create an entrypoint "http" listening on port 80 # - --entrypoints.http.address=:80 # # Create an entrypoint "https" listening on port 443 # - --entrypoints.https.address=:443 # # Enable the access log, with HTTP requests # - --accesslog # # Enable the Traefik log, for configurations and errors # - --log # # Enable debug logging for local development # - --log.level=DEBUG # # Enable the Dashboard and API # - --api # # Enable the Dashboard and API in insecure mode for local development # - --api.insecure=true # labels: # # Enable Traefik for this service, to make it available in the public network # - traefik.enable=true # - traefik.constraint-label=traefik-public # # Dummy https-redirect middleware that doesn't really redirect, only to # # allow running it locally # - traefik.http.middlewares.https-redirect.contenttype.autodetect=false # networks: # - traefik-public # - default db: restart: "no" ports: - "5432:5432" adminer: restart: "no" ports: - "8080:8080" backend: restart: "no" ports: - "8000:8000" build: context: ./backend # command: sleep infinity # Infinite loop to keep container alive doing nothing command: - fastapi - run - --reload - "app/main.py" develop: watch: - path: ./backend action: sync target: /app ignore: - ./backend/.venv - .venv - path: ./backend/pyproject.toml action: rebuild # TODO: remove once coverage is done locally volumes: - ./backend/htmlcov:/app/htmlcov environment: SMTP_HOST: "mailcatcher" SMTP_PORT: "1025" SMTP_TLS: "false" EMAILS_FROM_EMAIL: "noreply@example.com" mailcatcher: image: schickling/mailcatcher ports: - "1080:1080" - "1025:1025" # frontend: # restart: "no" # ports: # - "5173:80" # build: # context: ./frontend # args: # - VITE_API_URL=http://localhost:8000 # - NODE_ENV=development # playwright: # build: # context: ./frontend # dockerfile: Dockerfile.playwright # args: # - VITE_API_URL=http://backend:8000 # - NODE_ENV=production # ipc: host # depends_on: # - backend # - mailcatcher # env_file: # - .env # environment: # - VITE_API_URL=http://backend:8000 # - MAILCATCHER_HOST=http://mailcatcher:1080 # # For the reports when run locally # - PLAYWRIGHT_HTML_HOST=0.0.0.0 # - CI=${CI} # volumes: # - ./frontend/blob-report:/app/blob-report # - ./frontend/test-results:/app/test-results # ports: # - 9323:9323 networks: traefik-public: # For local dev, don't expect an external Traefik network external: true