
  # MongoDB database
  database:
    image: mongo
    restart: always
    volumes:
      - ./data/db:/data/db

  # API server (delta)
  api:
    image: ghcr.io/revoltchat/server:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
    ports:
      - "8000:8000"
    restart: always

  # Events service (quark)
  events:
    image: ghcr.io/revoltchat/bonfire:20220715-1
    env_file: .env
    depends_on:
      - database
      - redis
    restart: always

  # Web App (revite)
  web:
    build:
      context: revite
      dockerfile: Dockerfile
    env_file: .env
    restart: always
    ports:
      - "5000:5000"
    volumes:
      - ./revite/src:/usr/src/app/src

  # S3-compatible storage server
  minio:
    image: minio/minio
    command: server /data
    env_file: .env
    volumes:
      - ./data/minio:/data
    restart: always

  # Create buckets for minio.
  createbuckets:
    image: minio/mc
    depends_on:
      - minio
    env_file: .env
    entrypoint: >
      /bin/sh -c "
      while ! curl -s --output /dev/null --connect-timeout 1 http://minio:9000; do echo 'Waiting minio...' && sleep 0.1; done;
      /usr/bin/mc alias set minio http://minio:9000 $MINIO_ROOT_USER $MINIO_ROOT_PASSWORD;
      /usr/bin/mc mb minio/attachments;
      /usr/bin/mc mb minio/avatars;
      /usr/bin/mc mb minio/backgrounds;
      /usr/bin/mc mb minio/icons;
      /usr/bin/mc mb minio/banners;
      /usr/bin/mc mb minio/emojis;
      exit 0;
      "
  # File server (autumn)
  autumn:
    image: ghcr.io/revoltchat/autumn:1.1.5
    env_file: .env
    depends_on:
      - database
      - createbuckets
    environment:
      - AUTUMN_MONGO_URI=mongodb://database
    restart: always

  # Metadata and image proxy (january)
  january:
    image: ghcr.io/revoltchat/january:master
    restart: always
