services: api-dev: hostname: "prowler-api" build: context: ./api dockerfile: Dockerfile target: dev environment: - DJANGO_SETTINGS_MODULE=config.django.devel - DJANGO_LOGGING_FORMATTER=${LOGGING_FORMATTER:-human_readable} env_file: - path: .env required: false ports: - "${DJANGO_PORT:-8080}:${DJANGO_PORT:-8080}" volumes: - ./api/src/backend:/home/prowler/backend - ./api/pyproject.toml:/home/prowler/pyproject.toml - ./api/docker-entrypoint.sh:/home/prowler/docker-entrypoint.sh - ./_data/api:/home/prowler/.config/prowler-api - outputs:/tmp/prowler_api_output depends_on: postgres: condition: service_healthy valkey: condition: service_healthy entrypoint: - "/home/prowler/docker-entrypoint.sh" - "dev" ui-dev: build: context: ./ui dockerfile: Dockerfile target: dev env_file: - path: .env required: false ports: - 3000:3000 volumes: - "./ui:/app" - "/app/node_modules" postgres: image: postgres:16.3-alpine3.20 hostname: "postgres-db" volumes: - ./_data/postgres:/var/lib/postgresql/data environment: - POSTGRES_USER=${POSTGRES_ADMIN_USER} - POSTGRES_PASSWORD=${POSTGRES_ADMIN_PASSWORD} - POSTGRES_DB=${POSTGRES_DB} env_file: - path: .env required: false ports: - "${POSTGRES_PORT:-5432}:${POSTGRES_PORT:-5432}" healthcheck: test: ["CMD-SHELL", "sh -c 'pg_isready -U ${POSTGRES_ADMIN_USER} -d ${POSTGRES_DB}'"] interval: 5s timeout: 5s retries: 5 valkey: image: valkey/valkey:7-alpine3.19 hostname: "valkey" volumes: - ./_data/valkey:/data env_file: - path: .env required: false ports: - "${VALKEY_PORT:-6379}:6379" healthcheck: test: ["CMD-SHELL", "sh -c 'valkey-cli ping'"] interval: 10s timeout: 5s retries: 3 # TODO: Configure Neo4j properly, and also add it to the _production_ compose file neo4j: image: neo4j:2025.09.0-community-bullseye hostname: "neo4j" volumes: - ./_data/neo4j:/data environment: # Raise memory limits: - NEO4J_server_memory_pagecache_size=1G - NEO4J_server_memory_heap_initial__size=1G - NEO4J_server_memory_heap_max__size=1G # Auth: - NEO4J_AUTH=neo4j/neo4j # Add APOC and GDS: - apoc.export.file.enabled=true - apoc.import.file.enabled=true - apoc.import.file.use_neo4j_config=true - NEO4J_PLUGINS=["graph-data-science", "apoc"] - NEO4J_dbms_security_procedures_allowlist=gds.*, apoc.* - NEO4J_dbms_security_procedures_unrestricted=gds.*, apoc.* # Networking: - dbms.connector.bolt.listen_address=0.0.0.0:7687 ports: - 7474:7474 - 7687:7687 healthcheck: test: ["CMD", "wget", "--no-verbose", "http://localhost:7474"] interval: 10s timeout: 10s retries: 10 worker-dev: build: context: ./api dockerfile: Dockerfile target: dev environment: - DJANGO_SETTINGS_MODULE=config.django.devel env_file: - path: .env required: false volumes: - "outputs:/tmp/prowler_api_output" depends_on: valkey: condition: service_healthy postgres: condition: service_healthy entrypoint: - "/home/prowler/docker-entrypoint.sh" - "worker" worker-beat: build: context: ./api dockerfile: Dockerfile target: dev environment: - DJANGO_SETTINGS_MODULE=config.django.devel env_file: - path: ./.env required: false depends_on: valkey: condition: service_healthy postgres: condition: service_healthy entrypoint: - "../docker-entrypoint.sh" - "beat" volumes: outputs: driver: local