version: "3.4" services: postgres: hostname: postgres image: postgres:15-alpine restart: always volumes: # This will create a docker volume to persist the database files in. # If you prefer those files to be outside of docker, you'll need to change this. - dendrite_postgres_data:/var/lib/postgresql/data environment: POSTGRES_PASSWORD: itsasecret POSTGRES_USER: dendrite POSTGRES_DATABASE: dendrite healthcheck: test: ["CMD-SHELL", "pg_isready -U dendrite"] interval: 5s timeout: 5s retries: 5 networks: - internal jetstream: hostname: jetstream image: nats:latest command: | --jetstream --store_dir /var/lib/nats --cluster_name Dendrite volumes: - dendrite_jetstream:/var/lib/nats networks: - internal # This "component" will exit immediately, it's only purpose is # to provide the common settings component: image: matrixdotorg/dendrite-polylith:latest restart: "no" networks: - internal volumes: - ./config:/etc/dendrite depends_on: jetstream: condition: service_started postgres: condition: service_healthy client_api: extends: service: component hostname: client_api command: clientapi restart: unless-stopped depends_on: user_api: condition: service_started media_api: extends: service: component hostname: media_api command: mediaapi restart: unless-stopped volumes: - dendrite_media:/var/dendrite/media sync_api: extends: service: component hostname: sync_api command: syncapi restart: unless-stopped volumes: - dendrite_search_index:/var/dendrite/searchindex depends_on: room_server: condition: service_started user_api: condition: service_started key_server: condition: service_started room_server: extends: service: component hostname: room_server command: roomserver restart: unless-stopped federation_api: extends: service: component hostname: federation_api command: federationapi restart: unless-stopped depends_on: room_server: condition: service_started key_server: extends: service: component hostname: key_server command: keyserver restart: unless-stopped depends_on: room_server: condition: service_started federation_api: condition: service_started user_api: extends: service: component hostname: user_api command: userapi restart: unless-stopped depends_on: room_server: condition: service_started key_server: condition: service_started appservice_api: extends: service: component hostname: appservice_api command: appservice restart: unless-stopped depends_on: room_server: condition: service_started user_api: condition: service_started networks: internal: attachable: true volumes: dendrite_jetstream: dendrite_postgres_data: dendrite_media: dendrite_search_index: