services: postgres: image: postgres:16 environment: POSTGRES_PASSWORD: example POSTGRES_DB: snoop POSTGRES_USER: snoop ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 10s timeout: 5s retries: 10 networks: - snoopBack minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/ready"] interval: 5s timeout: 3s retries: 5 volumes: - miniodata:/data ports: # console :9001 is handy during dev - "9000:9000" - "9001:9001" networks: - snoopBack vault: image: hashicorp/vault:1.16 environment: VAULT_API_ADDR: http://0.0.0.0:8200 VAULT_TOKEN: root ports: - 8200:8200 cap_add: - IPC_LOCK volumes: - vault-data:/vault/data networks: - snoopBack snoop-api: build: context: ./server dockerfile: Dockerfile args: APP_DIR: ${API_APP_DIR:-./cmd/api} environment: VAULT_ADDR: "http://vault:8200" VAULT_TOKEN: "root" VAULT_KV_PATH: "kv/data/snoop" MINIO_ENDPOINT: "http://minio:9000" env_file: - .env depends_on: postgres: condition: service_healthy minio: condition: service_healthy networks: - snoopBack - proxy web: build: context: ./management-ui dockerfile: Dockerfile environment: VITE_API_URL: /api networks: - proxy nginx: image: nginx:1.27-alpine depends_on: - web - snoop-api ports: - "80:80" volumes: - ./nginx/dev.conf:/etc/nginx/conf.d/default.conf:ro,Z networks: - proxy volumes: pgdata: miniodata: vault-data: networks: proxy: external: true snoopBack: