# Dockge Stack
# RESTART POLICY GUIDE:
# - unless-stopped: Core infrastructure services that should always run
# - no: Services with Sablier lazy loading (start on-demand)
# - See individual service comments for specific reasoning

services:
  # Dockge - Docker Compose Stack Manager
  # Stack management interface should always run for container management
  dockge:
    image: louislam/dockge:1
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 256M
          pids: 512
        reservations:
          cpus: '0.25'
          memory: 128M
    container_name: dockge
    restart: unless-stopped
    networks:
      - homelab-network
      - traefik-network
    ports:
      - '5001:5001'  # Optional: direct access
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${STACKS_DIR}:${STACKS_DIR}  # Dockge manages stacks in this directory
      - ./data:/app/data
      - /usr/bin/docker:/usr/bin/docker:ro  # Mount docker binary for CLI access
    environment:
      - DOCKGE_STACKS_DIR=${STACKS_DIR}
      - DOCKGE_ENABLE_CONSOLE=true
    labels:
      - 'homelab.category=infrastructure'
      - 'homelab.description=Docker Compose stack manager'
      - 'traefik.enable=true'
      - 'traefik.docker.network=traefik-network'
      - 'traefik.http.routers.dockge.rule=Host(`dockge.${SERVER_HOSTNAME}.${DOMAIN}`)'
      - 'traefik.http.routers.dockge.entrypoints=websecure'
      - 'traefik.http.routers.dockge.tls.certresolver=letsencrypt'
      - 'traefik.http.routers.dockge.middlewares=authelia@docker'
      - 'traefik.http.services.dockge.loadbalancer.server.port=5001'

networks:
  homelab-network:
    external: true
  traefik-network:
    external: true