console/docker/docker-compose.community.yml
2024-08-28 05:23:07 +00:00

412 lines
12 KiB
YAML

version: '3.8'
name: 'hive'
networks:
stack:
name: hive
services:
db:
image: postgres:14.13-alpine
environment:
POSTGRES_DB: '${POSTGRES_DB}'
POSTGRES_USER: '${POSTGRES_USER}'
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
PGDATA: /var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}']
interval: 5s
timeout: 5s
retries: 6
networks:
- 'stack'
volumes:
- ./.hive/postgres:/var/lib/postgresql/data
clickhouse:
image: clickhouse/clickhouse-server:24.8-alpine
healthcheck:
test: ['CMD', 'wget', '--spider', '-q', 'http://0.0.0.0:8123/ping']
interval: 5s
timeout: 5s
retries: 6
start_period: 10s
environment:
CLICKHOUSE_USER: '${CLICKHOUSE_USER}'
CLICKHOUSE_PASSWORD: '${CLICKHOUSE_PASSWORD}'
networks:
- 'stack'
volumes:
- ./.hive/clickhouse/db:/var/lib/clickhouse
broker:
image: redpandadata/redpanda:v23.3.20
container_name: broker
hostname: broker
networks:
- 'stack'
ports:
- '0.0.0.0:9092:9092'
- '0.0.0.0:9644:9644'
command:
- redpanda
- start
- --smp
- '1'
- --set redpanda.empty_seed_starts_cluster=false
- --seeds "redpanda-1:33145"
- --kafka-addr
- PLAINTEXT://0.0.0.0:29092,OUTSIDE://0.0.0.0:9092
- --advertise-kafka-addr
- PLAINTEXT://broker:29092,OUTSIDE://localhost:9092
- --pandaproxy-addr
- PLAINTEXT://0.0.0.0:27082,OUTSIDE://0.0.0.0:7082
- --advertise-pandaproxy-addr
- PLAINTEXT://broker:27082,OUTSIDE://localhost:7082
- --advertise-rpc-addr redpanda-1:33145
mem_limit: 300m
mem_reservation: 100m
healthcheck:
test: 'curl -f http://localhost:9644/public_metrics'
interval: 3s
timeout: 3s
retries: 6
start_period: 5s
volumes:
- ./.hive/broker/db:/var/lib/redpanda/data
redis:
image: bitnami/redis:7.4.0
networks:
- 'stack'
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 10s
retries: 6
start_period: 5s
environment:
REDIS_PASSWORD: '${REDIS_PASSWORD}'
REDIS_DISABLE_COMMANDS: 'FLUSHDB,FLUSHALL'
volumes:
- './.hive/redis/db:/bitnami/redis/data'
supertokens:
image: registry.supertokens.io/supertokens/supertokens-postgresql:7.0
depends_on:
db:
condition: service_healthy
networks:
- 'stack'
environment:
POSTGRESQL_USER: '${POSTGRES_USER}'
POSTGRESQL_PASSWORD: '${POSTGRES_PASSWORD}'
POSTGRESQL_DATABASE_NAME: '${POSTGRES_DB}'
POSTGRESQL_TABLE_NAMES_PREFIX: 'supertokens'
POSTGRESQL_HOST: db
POSTGRESQL_PORT: 5432
API_KEYS: '${SUPERTOKENS_API_KEY}'
s3:
image: quay.io/minio/minio:RELEASE.2022-11-29T23-40-49Z
command: server /data --console-address ":9001"
ports:
- '9000:9000'
- '9001:9001'
networks:
- 'stack'
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
interval: 30s
timeout: 20s
retries: 3
environment:
MINIO_ROOT_USER: ${MINIO_ROOT_USER}
MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
volumes:
- './.hive/minio/db:/data'
s3_provision_buckets:
image: quay.io/minio/mc:RELEASE.2022-11-17T21-20-39Z
depends_on:
s3:
condition: service_healthy
networks:
- 'stack'
entrypoint: >
/bin/sh -c " /usr/bin/mc alias set myminio http://s3:9000 ${MINIO_ROOT_USER}
${MINIO_ROOT_PASSWORD}; /usr/bin/mc ls myminio/artifacts >/dev/null 2>&1 || /usr/bin/mc mb
myminio/artifacts; exit 0"
s3_reverse_proxy:
image: caddy:2.8.4-alpine
depends_on:
s3:
condition: service_healthy
networks:
- 'stack'
ports:
- '8083:8083'
command: caddy reverse-proxy --from :8083 --to s3:9000 --change-host-header
migrations:
image: '${DOCKER_REGISTRY}storage${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
clickhouse:
condition: service_healthy
db:
condition: service_healthy
environment:
MIGRATOR: 'up'
CLICKHOUSE_MIGRATOR: 'up'
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DB: '${POSTGRES_DB}'
POSTGRES_USER: '${POSTGRES_USER}'
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
CLICKHOUSE_PROTOCOL: 'http'
CLICKHOUSE_HOST: 'clickhouse'
CLICKHOUSE_PORT: '8123'
CLICKHOUSE_USERNAME: '${CLICKHOUSE_USER}'
CLICKHOUSE_PASSWORD: '${CLICKHOUSE_PASSWORD}'
TS_NODE_TRANSPILE_ONLY: 'true'
LOG_LEVEL: '${LOG_LEVEL:-debug}'
server:
image: '${DOCKER_REGISTRY}server${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
redis:
condition: service_healthy
clickhouse:
condition: service_healthy
migrations:
condition: service_completed_successfully
s3_provision_buckets:
condition: service_completed_successfully
tokens:
condition: service_healthy
webhooks:
condition: service_healthy
emails:
condition: service_healthy
schema:
condition: service_healthy
policy:
condition: service_healthy
ports:
- '8082:3001'
environment:
NODE_ENV: production
POSTGRES_HOST: db
POSTGRES_PORT: 5432
POSTGRES_DB: '${POSTGRES_DB}'
POSTGRES_USER: '${POSTGRES_USER}'
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
CLICKHOUSE_PROTOCOL: 'http'
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: 8123
CLICKHOUSE_USERNAME: '${CLICKHOUSE_USER}'
CLICKHOUSE_PASSWORD: '${CLICKHOUSE_PASSWORD}'
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: '${REDIS_PASSWORD}'
TOKENS_ENDPOINT: http://tokens:3003
WEBHOOKS_ENDPOINT: http://webhooks:3005
SCHEMA_ENDPOINT: http://schema:3002
SCHEMA_POLICY_ENDPOINT: http://policy:3012
EMAILS_ENDPOINT: http://emails:3011
ENCRYPTION_SECRET: '${HIVE_ENCRYPTION_SECRET}'
WEB_APP_URL: '${HIVE_APP_BASE_URL}'
PORT: 3001
S3_ENDPOINT: 'http://s3:9000'
S3_ACCESS_KEY_ID: ${MINIO_ROOT_USER}
S3_SECRET_ACCESS_KEY: ${MINIO_ROOT_PASSWORD}
S3_BUCKET_NAME: artifacts
CDN_AUTH_PRIVATE_KEY: ${CDN_AUTH_PRIVATE_KEY}
CDN_API: '1'
CDN_API_BASE_URL: 'http://localhost:8082'
LOG_LEVEL: '${LOG_LEVEL:-debug}'
# Auth
AUTH_ORGANIZATION_OIDC: '1'
AUTH_REQUIRE_EMAIL_VERIFICATION: '0'
SUPERTOKENS_CONNECTION_URI: http://supertokens:3567
SUPERTOKENS_API_KEY: '${SUPERTOKENS_API_KEY}'
GRAPHQL_PUBLIC_ORIGIN: http://localhost:8082
# Tracing
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
policy:
image: '${DOCKER_REGISTRY}policy${DOCKER_TAG}'
networks:
- 'stack'
environment:
NODE_ENV: production
PORT: 3012
LOG_LEVEL: '${LOG_LEVEL:-debug}'
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
schema:
image: '${DOCKER_REGISTRY}schema${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
redis:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 3002
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: '${REDIS_PASSWORD}'
ENCRYPTION_SECRET: '${HIVE_ENCRYPTION_SECRET}'
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
LOG_LEVEL: '${LOG_LEVEL:-debug}'
tokens:
image: '${DOCKER_REGISTRY}tokens${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
migrations:
condition: service_completed_successfully
environment:
NODE_ENV: production
POSTGRES_HOST: db
POSTGRES_USER: '${POSTGRES_USER}'
POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}'
POSTGRES_PORT: 5432
POSTGRES_DB: '${POSTGRES_DB}'
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: '${REDIS_PASSWORD}'
PORT: 3003
LOG_LEVEL: '${LOG_LEVEL:-debug}'
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
webhooks:
image: '${DOCKER_REGISTRY}webhooks${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
redis:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 3005
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: '${REDIS_PASSWORD}'
LOG_LEVEL: '${LOG_LEVEL:-debug}'
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
emails:
image: '${DOCKER_REGISTRY}emails${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
redis:
condition: service_healthy
environment:
NODE_ENV: production
PORT: 3011
REDIS_HOST: redis
REDIS_PORT: 6379
REDIS_PASSWORD: '${REDIS_PASSWORD}'
EMAIL_FROM: no-reply@graphql-hive.com
EMAIL_PROVIDER: sendmail
LOG_LEVEL: '${LOG_LEVEL:-debug}'
OPENTELEMETRY_COLLECTOR_ENDPOINT: '${OPENTELEMETRY_COLLECTOR_ENDPOINT:-}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
usage:
image: '${DOCKER_REGISTRY}usage${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
broker:
condition: service_healthy
tokens:
condition: service_healthy
ports:
- 8081:3006
environment:
NODE_ENV: production
TOKENS_ENDPOINT: http://tokens:3003
KAFKA_CONNECTION_MODE: 'docker'
KAFKA_TOPIC: 'usage_reports_v2'
KAFKA_BROKER: broker:29092
KAFKA_BUFFER_SIZE: 350
KAFKA_BUFFER_INTERVAL: 1000
KAFKA_BUFFER_DYNAMIC: '1'
PORT: 3006
LOG_LEVEL: '${LOG_LEVEL:-debug}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
usage-ingestor:
image: '${DOCKER_REGISTRY}usage-ingestor${DOCKER_TAG}'
networks:
- 'stack'
depends_on:
broker:
condition: service_healthy
clickhouse:
condition: service_healthy
environment:
NODE_ENV: production
KAFKA_CONNECTION_MODE: 'docker'
KAFKA_BROKER: broker:29092
KAFKA_CONCURRENCY: '1'
KAFKA_CONSUMER_GROUP: 'usage-ingestor-v2'
KAFKA_TOPIC: 'usage_reports_v2'
CLICKHOUSE_PROTOCOL: 'http'
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: 8123
CLICKHOUSE_USERNAME: '${CLICKHOUSE_USER}'
CLICKHOUSE_PASSWORD: '${CLICKHOUSE_PASSWORD}'
PORT: 3007
LOG_LEVEL: '${LOG_LEVEL:-debug}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'
PROMETHEUS_METRICS: '${PROMETHEUS_METRICS:-}'
app:
image: '${DOCKER_REGISTRY}app${DOCKER_TAG}'
ports:
- '8080:3000'
networks:
- 'stack'
environment:
PORT: 3000
NODE_ENV: production
APP_BASE_URL: '${HIVE_APP_BASE_URL}'
GRAPHQL_PUBLIC_ENDPOINT: http://localhost:8082/graphql
GRAPHQL_PUBLIC_SUBSCRIPTION_ENDPOINT: http://localhost:8082/graphql
GRAPHQL_PUBLIC_ORIGIN: http://localhost:8082
AUTH_REQUIRE_EMAIL_VERIFICATION: '0'
AUTH_ORGANIZATION_OIDC: '1'
LOG_LEVEL: '${LOG_LEVEL:-debug}'
SENTRY: '${SENTRY:-0}'
SENTRY_DSN: '${SENTRY_DSN:-}'