| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- name: stoat
- services:
- # MongoDB: Database
- database:
- image: docker.io/mongo
- restart: always
- volumes:
- - ./data/db:/data/db
- healthcheck:
- test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
- interval: 10s
- timeout: 10s
- retries: 5
- start_period: 10s
- # Redis: Event message broker & KV store
- redis:
- image: docker.io/eqalpha/keydb
- restart: always
- # RabbitMQ: Internal message broker
- rabbit:
- image: docker.io/rabbitmq:4
- restart: always
- environment:
- RABBITMQ_DEFAULT_USER: rabbituser
- RABBITMQ_DEFAULT_PASS: rabbitpass
- volumes:
- - ./data/rabbit:/var/lib/rabbitmq
- healthcheck:
- test: rabbitmq-diagnostics -q ping
- interval: 10s
- timeout: 10s
- retries: 3
- start_period: 20s
- # MinIO: S3-compatible storage server
- minio:
- image: docker.io/minio/minio
- command: server /data
- volumes:
- - ./data/minio:/data
- environment:
- MINIO_ROOT_USER: minioautumn
- MINIO_ROOT_PASSWORD: minioautumn
- MINIO_DOMAIN: minio
- networks:
- default:
- aliases:
- - revolt-uploads.minio
- # legacy support:
- - attachments.minio
- - avatars.minio
- - backgrounds.minio
- - icons.minio
- - banners.minio
- - emojis.minio
- restart: always
- # Caddy: Web server
- caddy:
- image: docker.io/caddy
- restart: always
- env_file: .env.web
- ports:
- - "80:80"
- - "443:443"
- volumes:
- - ./Caddyfile:/etc/caddy/Caddyfile
- - ./data/caddy-data:/data
- - ./data/caddy-config:/config
- # API server
- api:
- image: ghcr.io/revoltchat/server:20250930-2
- depends_on:
- database:
- condition: service_healthy
- redis:
- condition: service_started
- rabbit:
- condition: service_healthy
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Events service
- events:
- image: ghcr.io/revoltchat/bonfire:20250930-2
- depends_on:
- database:
- condition: service_healthy
- redis:
- condition: service_started
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Web App
- web:
- image: ghcr.io/revoltchat/client:master
- restart: always
- env_file: .env.web
- # File server
- autumn:
- image: ghcr.io/revoltchat/autumn:20250930-2
- depends_on:
- database:
- condition: service_healthy
- createbuckets:
- condition: service_started
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Metadata and image proxy
- january:
- image: ghcr.io/revoltchat/january:20250930-2
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Tenor proxy
- gifbox:
- image: ghcr.io/revoltchat/gifbox:20250930-2
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Regular task daemon
- crond:
- image: ghcr.io/revoltchat/crond:20250930-2
- depends_on:
- database:
- condition: service_healthy
- minio:
- condition: service_started
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Push notification daemon
- pushd:
- image: ghcr.io/revoltchat/pushd:20250930-2
- depends_on:
- database:
- condition: service_healthy
- redis:
- condition: service_started
- rabbit:
- condition: service_healthy
- volumes:
- - type: bind
- source: ./Revolt.toml
- target: /Revolt.toml
- restart: always
- # Create buckets for minio.
- createbuckets:
- image: docker.io/minio/mc
- depends_on:
- - minio
- entrypoint: >
- /bin/sh -c "
- while ! /usr/bin/mc ready minio; do
- /usr/bin/mc alias set minio http://minio:9000 minioautumn minioautumn;
- echo 'Waiting minio...' && sleep 1;
- done;
- /usr/bin/mc mb minio/revolt-uploads;
- exit 0;
- "
|