# # docker-compose file used ONLY for local development. # For more info, see: # https://posthog.com/handbook/engineering/developing-locally # # PostHog has sunset support for self-hosted K8s deployments. # See: https://posthog.com/blog/sunsetting-helm-support-posthog # services: proxy: extends: file: docker-compose.base.yml service: proxy ports: - 127.0.0.1:8010:8000 extra_hosts: - 'web:host-gateway' - 'plugins:host-gateway' - 'capture:host-gateway' - 'replay-capture:host-gateway' - 'feature-flags:host-gateway' environment: CADDYFILE: | http://localhost:8000 { @replay-capture { path /s path /s/* } @capture { path /e path /e/* path /i/v0/* path /batch path /batch* path /capture path /capture* path /ai path /ai/* } @flags { path /flags path /flags* } @webhooks { path /public/webhooks path /public/webhooks/* path /public/m path /public/m/* } handle @capture { reverse_proxy capture:3307 } handle @replay-capture { reverse_proxy replay-capture:3306 } handle @flags { reverse_proxy feature-flags:3001 } handle @webhooks { reverse_proxy plugins:6738 } handle { reverse_proxy web:8000 } } db: extends: file: docker-compose.base.yml service: db ports: - '5432:5432' # something in the django app when running in dev mode # (maybe only in Pycharm) keeps many idle transactions open # and eventually kills postgres, these settings aim to stop that happening. # They are only for DEV and should not be used in production. command: postgres -c max_connections=1000 -c idle_in_transaction_session_timeout=300000 -c max_prepared_transactions=10 redis: extends: file: docker-compose.base.yml service: redis ports: - '6379:6379' redis7: extends: file: docker-compose.base.yml service: redis7 ports: - '6479:6379' flower: extends: file: docker-compose.base.yml service: flower ports: - '5555:5555' clickhouse: extends: file: docker-compose.base.yml service: clickhouse hostname: clickhouse # Development performance optimizations mem_limit: 6g cpus: 2 environment: - AWS_ACCESS_KEY_ID=object_storage_root_user - AWS_SECRET_ACCESS_KEY=object_storage_root_password - CLICKHOUSE_SKIP_USER_SETUP=1 ports: - '8123:8123' - '8443:8443' - '9000:9000' - '9440:9440' - '9009:9009' volumes: - ./posthog/idl:/idl - ./docker/clickhouse/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d - ./docker/clickhouse/config.xml:/etc/clickhouse-server/config.xml - ./docker/clickhouse/config.d/default.xml:/etc/clickhouse-server/config.d/default.xml - ./docker/clickhouse/config.d/dev-memory.xml:/etc/clickhouse-server/config.d/dev-memory.xml - ./docker/clickhouse/users-dev.xml:/etc/clickhouse-server/users.xml - ./docker/clickhouse/user_defined_function.xml:/etc/clickhouse-server/user_defined_function.xml - ./posthog/user_scripts:/var/lib/clickhouse/user_scripts extra_hosts: - 'host.docker.internal:host-gateway' depends_on: - kafka - zookeeper zookeeper: extends: file: docker-compose.base.yml service: zookeeper ports: - '2181:2181' kafka: extends: file: docker-compose.base.yml service: kafka ports: - '9092:9092' depends_on: - zookeeper kafka_ui: extends: file: docker-compose.base.yml service: kafka_ui ports: - '9093:8080' depends_on: - kafka objectstorage: extends: file: docker-compose.base.yml service: objectstorage ports: - '19000:19000' - '19001:19001' maildev: extends: file: docker-compose.base.yml service: maildev ports: - '1080:1080' - '1025:1025' webhook-tester: image: tarampampam/webhook-tester:1.1.0 restart: on-failure ports: - '2080:2080' environment: - LISTEN_PORT=2080 echo_server: extends: file: docker-compose.base.yml service: echo_server expose: - '18081:18081' feature-flags: extends: file: docker-compose.base.yml service: feature-flags depends_on: - redis - db environment: # Mode 2: Dual-write warming phase for developers FLAGS_REDIS_URL: 'redis://redis:6379/1' FLAGS_REDIS_ENABLED: 'false' # Warming but not reading yet REDIS_COMPRESSION_ENABLED: 'true' livestream: extends: file: docker-compose.base.yml service: livestream environment: - LIVESTREAM_JWT_SECRET=${SECRET_KEY} ports: - '8666:8080' volumes: - ./docker/livestream/configs-dev.yml:/configs/configs.yml # Temporal containers elasticsearch: extends: file: docker-compose.base.yml service: elasticsearch expose: - 9200 temporal: extends: file: docker-compose.base.yml service: temporal temporal-admin-tools: extends: file: docker-compose.base.yml service: temporal-admin-tools depends_on: - temporal temporal-ui: extends: file: docker-compose.base.yml service: temporal-ui depends_on: temporal: condition: service_started db: condition: service_healthy otel-collector: extends: file: docker-compose.base.yml service: otel-collector depends_on: - jaeger - capture-logs capture-logs: extends: file: docker-compose.base.yml service: capture-logs depends_on: - kafka jaeger: extends: file: docker-compose.base.yml service: jaeger localstack: extends: file: docker-compose.base.yml service: localstack seaweedfs: extends: file: docker-compose.base.yml service: seaweedfs command: server -s3 -s3.port=8333 -filer -dir=/data ports: - '127.0.0.1:8888:8888' # SeaweedFS Filer UI volumes: - 'seaweedfs-data:/data' networks: otel_network: driver: bridge volumes: redpanda-data: seaweedfs-data: