services: nginx: build: . container_name: nginx-proxy restart: always network_mode: host # Recomendado para performance e Fail2Ban # Se mudar para bridge futuramente, não esquecer: # ports: # - "80:80/tcp" # - "122:122/tcp" # SSH volumes: # Volumes para Configurações (Persistência Interna) # nginx.conf é copiado no Build para evitar erro de mount "not a directory" # - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro # Diretórios são montados para permitir hot-reload e Fail2Ban - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/snippets:/etc/nginx/snippets - ./nginx/modsec:/etc/nginx/modsec # Persistência de Dados e Certificados - ./ssl:/etc/nginx/ssl - ./certbot:/etc/letsencrypt - ./logs:/var/log/nginx # Customização do Shell - ./.bashrc:/root/.bashrc:ro environment: - TZ=America/Sao_Paulo fail2ban: image: linuxserver/fail2ban:latest container_name: fail2ban-sidecar network_mode: host cap_add: - NET_ADMIN - NET_RAW restart: always volumes: - ./logs:/var/log/nginx:ro # Monitora os logs do Nginx - ./fail2ban/data:/config # Configurações do F2B # A blacklist precisa ser persistente e compartilhada, então mantemos o mount apenas dela ou do snippets se precisarmos escrever - ./nginx/snippets:/etc/nginx/snippets # Fail2Ban escreve aqui (blacklist.conf) - /var/run/docker.sock:/var/run/docker.sock # Para reload do Nginx user: root # Necessário para interagir com o socket environment: - TZ=America/Sao_Paulo - PUID=1000 - PGID=1000 test-backend: image: traefik/whoami container_name: test-backend restart: always # Na network host, ele vai ouvir em uma porta alta para não conflitar command: --port 8080 network_mode: host