123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- x-restart-policy: &restart_policy
- restart: unless-stopped
- x-depends_on-healthy: &depends_on-healthy
- condition: service_healthy
- x-depends_on-default: &depends_on-default
- condition: service_started
- x-healthcheck-defaults: &healthcheck_defaults
- interval: 30s
- timeout: 1m30s
- retries: 10
- start_period: 10s
- services:
- redis:
- <<: *restart_policy
- container_name: sentry_redis
- image: ghcr.io/getsentry/image-mirror-library-redis:5.0-alpine
- healthcheck:
- <<: *healthcheck_defaults
- test: redis-cli ping
- command:
- [
- 'redis-server',
- '--appendonly',
- 'yes',
- '--save',
- '60',
- '20',
- '--auto-aof-rewrite-percentage',
- '100',
- '--auto-aof-rewrite-min-size',
- '64mb',
- ]
- volumes:
- - 'sentry-redis:/data'
- ports:
- - '6379:6379'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- postgres:
- <<: *restart_policy
- container_name: sentry_postgres
- # Using the same postgres version as Sentry dev for consistency purposes
- image: 'ghcr.io/getsentry/image-mirror-library-postgres:14-alpine'
- healthcheck:
- <<: *healthcheck_defaults
- # Using default user "postgres" from sentry/sentry.conf.example.py or value of POSTGRES_USER if provided
- test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres}']
- 'command':
- [
- 'postgres',
- '-c',
- 'wal_level=logical',
- '-c',
- 'max_replication_slots=1',
- '-c',
- 'max_wal_senders=1',
- ]
- environment:
- POSTGRES_HOST_AUTH_METHOD: 'trust'
- POSTGRES_DB: 'sentry'
- volumes:
- - 'sentry-postgres:/var/lib/postgresql/data'
- ports:
- - '5432:5432'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- kafka:
- <<: *restart_policy
- image: 'ghcr.io/getsentry/image-mirror-confluentinc-cp-kafka:7.5.0'
- container_name: sentry_kafka
- environment:
- # https://docs.confluent.io/platform/current/installation/docker/config-reference.html#cp-kakfa-example
- KAFKA_PROCESS_ROLES: 'broker,controller'
- KAFKA_CONTROLLER_QUORUM_VOTERS: '1@127.0.0.1:29093'
- KAFKA_CONTROLLER_LISTENER_NAMES: 'CONTROLLER'
- KAFKA_NODE_ID: '1'
- CLUSTER_ID: 'MkU3OEVBNTcwNTJENDM2Qk'
- KAFKA_LISTENERS: 'PLAINTEXT://0.0.0.0:29092,INTERNAL://0.0.0.0:9093,EXTERNAL://0.0.0.0:9092,CONTROLLER://0.0.0.0:29093'
- KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://127.0.0.1:29092,INTERNAL://kafka:9093,EXTERNAL://127.0.0.1:9092'
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: 'PLAINTEXT:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT'
- KAFKA_INTER_BROKER_LISTENER_NAME: 'PLAINTEXT'
- KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: '1'
- KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: '1'
- KAFKA_LOG_RETENTION_HOURS: '24'
- KAFKA_MESSAGE_MAX_BYTES: '50000000' #50MB or bust
- KAFKA_MAX_REQUEST_SIZE: '50000000' #50MB on requests apparently too
- volumes:
- - 'sentry-kafka:/var/lib/kafka/data'
- - 'sentry-kafka-log:/var/lib/kafka/log'
- healthcheck:
- <<: *healthcheck_defaults
- test: ['CMD-SHELL', 'nc -z localhost 9092']
- interval: 10s
- timeout: 10s
- retries: 30
- ports:
- - '9092:9092'
- - '9093:9093'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- clickhouse:
- <<: *restart_policy
- container_name: sentry_clickhouse
- image: 'ghcr.io/getsentry/image-mirror-altinity-clickhouse-server:23.3.19.33.altinitystable'
- ulimits:
- nofile:
- soft: 262144
- hard: 262144
- volumes:
- - 'sentry-clickhouse:/var/lib/clickhouse'
- - 'sentry-clickhouse-log:/var/log/clickhouse-server'
- - type: bind
- read_only: true
- source: ./clickhouse/config.xml
- target: /etc/clickhouse-server/config.d/sentry.xml
- healthcheck:
- test: [
- 'CMD-SHELL',
- # Manually override any http_proxy envvar that might be set, because
- # this wget does not support no_proxy. See:
- # https://github.com/getsentry/self-hosted/issues/1537
- "http_proxy='' wget -nv -t1 --spider 'http://localhost:8123/' || exit 1",
- ]
- interval: 10s
- timeout: 10s
- retries: 30
- ports:
- - '8123:8123'
- - '9000:9000'
- - '9009:9009'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- symbolicator:
- <<: *restart_policy
- container_name: sentry_symbolicator
- image: 'us-central1-docker.pkg.dev/sentryio/symbolicator/image:nightly'
- volumes:
- - 'sentry-symbolicator:/data'
- - type: bind
- read_only: true
- source: ./symbolicator
- target: /etc/symbolicator
- command: run -c /etc/symbolicator/config.yml
- ports:
- - '3021:3021'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- vroom:
- <<: *restart_policy
- container_name: sentry_vroom
- image: 'us-central1-docker.pkg.dev/sentryio/vroom/vroom:latest'
- environment:
- SENTRY_KAFKA_BROKERS_PROFILING: 'sentry_kafka:9092'
- SENTRY_KAFKA_BROKERS_OCCURRENCES: 'sentry_kafka:9092'
- SENTRY_BUCKET_PROFILES: file://localhost//var/lib/sentry-profiles
- SENTRY_SNUBA_HOST: 'http://snuba-api:1218'
- volumes:
- - sentry-vroom:/var/lib/sentry-profiles
- depends_on:
- kafka:
- <<: *depends_on-healthy
- ports:
- - '8085:8085'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- snuba:
- <<: *restart_policy
- container_name: sentry_snuba
- image: ghcr.io/getsentry/snuba:latest
- ports:
- - '1218:1218'
- - '1219:1219'
- networks:
- - sentry
- command: ['devserver']
- environment:
- PYTHONUNBUFFERED: '1'
- SNUBA_SETTINGS: docker
- DEBUG: '1'
- CLICKHOUSE_HOST: 'clickhouse'
- CLICKHOUSE_PORT: '9000'
- CLICKHOUSE_HTTP_PORT: '8123'
- DEFAULT_BROKERS: 'kafka:9093'
- REDIS_HOST: 'redis'
- REDIS_PORT: '6379'
- REDIS_DB: '1'
- ENABLE_SENTRY_METRICS_DEV: '${ENABLE_SENTRY_METRICS_DEV:-}'
- ENABLE_PROFILES_CONSUMER: '${ENABLE_PROFILES_CONSUMER:-}'
- ENABLE_SPANS_CONSUMER: '${ENABLE_SPANS_CONSUMER:-}'
- ENABLE_ISSUE_OCCURRENCE_CONSUMER: '${ENABLE_ISSUE_OCCURRENCE_CONSUMER:-}'
- ENABLE_AUTORUN_MIGRATION_SEARCH_ISSUES: '1'
- ENABLE_GROUP_ATTRIBUTES_CONSUMER: '${ENABLE_GROUP_ATTRIBUTES_CONSUMER:-}'
- platform: linux/amd64
- depends_on:
- - kafka
- - redis
- - clickhouse
- extra_hosts:
- host.docker.internal: host-gateway
- bigtable:
- <<: *restart_policy
- container_name: sentry_bigtable
- image: 'ghcr.io/getsentry/cbtemulator:d28ad6b63e461e8c05084b8c83f1c06627068c04'
- ports:
- - '8086:8086'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- redis-cluster:
- <<: *restart_policy
- container_name: sentry_redis-cluster
- image: ghcr.io/getsentry/docker-redis-cluster:7.0.10
- ports:
- - '7000:7000'
- - '7001:7001'
- - '7002:7002'
- - '7003:7003'
- - '7004:7004'
- - '7005:7005'
- networks:
- - sentry
- volumes:
- - sentry-redis-cluster:/redis-data
- environment:
- - IP=0.0.0.0
- chartcuterie:
- <<: *restart_policy
- container_name: sentry_chartcuterie
- image: 'us-central1-docker.pkg.dev/sentryio/chartcuterie/image:latest'
- environment:
- CHARTCUTERIE_CONFIG: /etc/chartcuterie/config.js
- CHARTCUTERIE_CONFIG_POLLING: true
- volumes:
- - ./chartcuterie:/etc/chartcuterie
- ports:
- - '7901:9090'
- networks:
- - sentry
- extra_hosts:
- host.docker.internal: host-gateway
- healthcheck:
- <<: *healthcheck_defaults
- # Using default user "postgres" from sentry/sentry.conf.example.py or value of POSTGRES_USER if provided
- test:
- [
- 'CMD-SHELL',
- 'docker exec sentry_chartcuterie python3 -c "import urllib.request; urllib.request.urlopen(\"http://127.0.0.1:9090/api/chartcuterie/healthcheck/live\", timeout=5)"',
- ]
- volumes:
- # These store application data that should persist across restarts.
- sentry-data:
- sentry-postgres:
- sentry-redis:
- sentry-redis-cluster:
- sentry-kafka:
- sentry-clickhouse:
- sentry-symbolicator:
- # This volume stores profiles and should be persisted.
- # Not being external will still persist data across restarts.
- # It won't persist if someone does a docker compose down -v.
- sentry-vroom:
- sentry-kafka-log:
- sentry-clickhouse-log:
- networks:
- sentry:
- name: sentry
- external: true
|