name: sequin-dev services: postgres: profiles: [databases] platform: linux/arm64 build: context: . dockerfile: Dockerfile.postgres command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all -c max_connections=300 -c pg_stat_statements.max=10000 -c track_activity_query_size=2048 -c wal_level=logical ports: - "127.0.0.1:5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: sequin_dev volumes: - sequin_dev_postgres:/var/lib/postgresql/data redis: profiles: [databases] image: redis:7 ports: - "127.0.0.1:6379:6379" prometheus: profiles: [monitoring] image: prom/prometheus:v2.45.0 ports: - "127.0.0.1:9090:9090" volumes: - ./prometheus:/etc/prometheus - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' extra_hosts: - "host.docker.internal:host-gateway" grafana: profiles: [monitoring] image: grafana/grafana:10.0.3 ports: - "127.0.0.1:3000:3000" environment: GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin GF_USERS_ALLOW_SIGN_UP: "false" volumes: - grafana_data:/var/lib/grafana - ./grafana/datasources:/etc/grafana/provisioning/datasources - ./grafana/dashboards:/etc/grafana/provisioning/dashboards - ./grafana/dashboards:/etc/grafana/dashboards depends_on: - prometheus nats: profiles: [nats] image: nats:2.10-alpine ports: - "127.0.0.1:4222:4222" # Client connections - "127.0.0.1:8222:8222" # HTTP management port command: "-js" # Enable JetStream volumes: - sequin_dev_nats:/root/.local/share/nats rabbitmq: profiles: [rabbitmq] image: rabbitmq:3.13-management-alpine ports: - "127.0.0.1:5672:5672" # AMQP protocol port - "127.0.0.1:15672:15672" # Management UI port environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest volumes: - sequin_dev_rabbitmq:/var/lib/rabbitmq zookeeper: profiles: [kafka] image: confluentinc/cp-zookeeper:7.6.1 environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 kafka: # "`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,- # An important note about accessing Kafka from clients on other machines: # ----------------------------------------------------------------------- # # The config used here exposes port 9092 for _external_ connections to the broker # i.e. those from _outside_ the docker network. This could be from the host machine # running docker, or maybe further afield if you've got a more complicated setup. # If the latter is true, you will need to change the value 'localhost' in # KAFKA_ADVERTISED_LISTENERS to one that is resolvable to the docker host from those # remote clients # # For connections _internal_ to the docker network, such as from other services # and components, use kafka:29092. # # See https://rmoff.net/2018/08/02/kafka-listeners-explained/ for details # "`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,-'"`-._,- # profiles: [kafka] image: confluentinc/cp-kafka:7.6.1 depends_on: - zookeeper ports: - "127.0.0.1:9092:9092" environment: KAFKA_BROKER_ID: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_LOG4J_LOGGERS: "kafka.controller=TRACE,kafka.producer.async.DefaultEventHandler=TRACE,state.change.logger=TRACE" KAFKA_MESSAGE_MAX_BYTES: 10485760 # 10MB KAFKA_MAX_REQUEST_SIZE: 10485760 KAFKA_REPLICA_FETCH_MAX_BYTES: 10485760 elasticsearch: profiles: [elasticsearch] image: docker.elastic.co/elasticsearch/elasticsearch:8.11.1 environment: - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ports: - "127.0.0.1:9200:9200" volumes: - sequin_dev_elasticsearch:/usr/share/elasticsearch/data typesense: profiles: [typesense] image: typesense/typesense:28.0 restart: on-failure ports: - "8108:8108" volumes: - ./typesense-data:/data command: '--data-dir /data --api-key=xyz --enable-cors' meilisearch: image: getmeili/meilisearch:v1.15 profiles: [meilisearch] command: 'meilisearch --master-key="masterKey"' ports: - "7700:7700" volumes: - ./meilisearch-data:/meili_data restart: on-failure timescaledb: profiles: [timescaledb] image: timescale/timescaledb:latest-pg16 command: postgres -c wal_level=logical ports: - "127.0.0.1:5433:5432" environment: POSTGRES_USER: timescale POSTGRES_PASSWORD: timescale POSTGRES_DB: timescale volumes: - timescaledb_data:/var/lib/postgresql/data volumes: sequin_dev_postgres: sequin_dev_nats: sequin_dev_rabbitmq: sequin_dev_elasticsearch: prometheus_data: grafana_data: timescaledb_data: