services: nginx: image: nginx:1.26-alpine container_name: nginx-pmi ports: - "8080:80" - "8443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro - ./nginx/conf.d:/etc/nginx/conf.d:ro - ./nginx/htpasswd:/etc/nginx/htpasswd:ro - ./www:/usr/share/nginx/html:ro - ./ssl:/etc/nginx/ssl:ro - ./scripts:/scripts:ro - ./fim-watch:/fim-watch - ./reports:/reports - nginx-cache:/var/cache/nginx - nginx-logs:/var/log/nginx depends_on: - backend - slow-backend - auth-mock - syslog-ng networks: allowed-net: ipv4_address: 172.28.0.2 denied-net: ipv4_address: 172.29.0.2 internal: healthcheck: test: ["CMD", "wget", "-q", "-O", "/dev/null", "http://127.0.0.1/public/index.html"] interval: 5s timeout: 3s retries: 12 backend: image: nginx:1.26-alpine container_name: nginx-pmi-backend volumes: - ./mock/backend.conf:/etc/nginx/conf.d/default.conf:ro networks: - internal slow-backend: image: python:3.12-alpine container_name: nginx-pmi-slow command: ["python", "/app/slow-server.py"] volumes: - ./mock/slow-server.py:/app/slow-server.py:ro networks: - internal auth-mock: image: python:3.12-alpine container_name: nginx-pmi-auth command: ["python", "/app/auth-server.py"] volumes: - ./mock/auth-server.py:/app/auth-server.py:ro - auth-mode:/auth-mode networks: - internal syslog-ng: image: balabit/syslog-ng:4.7.1 container_name: nginx-pmi-syslog volumes: - ./mock/syslog-ng.conf:/etc/syslog-ng/syslog-ng.conf:ro - ./reports:/reports networks: - internal test-runner: build: context: . dockerfile: Dockerfile.test-runner container_name: nginx-pmi-test-runner volumes: - ./scripts:/scripts:ro - ./ssl:/ssl:ro - ./reports:/reports - auth-mode:/auth-mode depends_on: nginx: condition: service_healthy networks: allowed-net: ipv4_address: 172.28.0.20 denied-net: ipv4_address: 172.29.0.20 internal: networks: allowed-net: driver: bridge ipam: config: - subnet: 172.28.0.0/16 denied-net: driver: bridge ipam: config: - subnet: 172.29.0.0/16 internal: driver: bridge volumes: nginx-cache: nginx-logs: auth-mode: