compose.yml 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. name: stoat
  2. services:
  3. # MongoDB: Database
  4. database:
  5. image: docker.io/mongo
  6. restart: always
  7. volumes:
  8. - ./data/db:/data/db
  9. healthcheck:
  10. test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet
  11. interval: 10s
  12. timeout: 10s
  13. retries: 5
  14. start_period: 10s
  15. # Redis: Event message broker & KV store
  16. redis:
  17. image: docker.io/eqalpha/keydb
  18. restart: always
  19. # RabbitMQ: Internal message broker
  20. rabbit:
  21. image: docker.io/rabbitmq:4
  22. restart: always
  23. environment:
  24. RABBITMQ_DEFAULT_USER: rabbituser
  25. RABBITMQ_DEFAULT_PASS: rabbitpass
  26. volumes:
  27. - ./data/rabbit:/var/lib/rabbitmq
  28. healthcheck:
  29. test: rabbitmq-diagnostics -q ping
  30. interval: 10s
  31. timeout: 10s
  32. retries: 3
  33. start_period: 20s
  34. # MinIO: S3-compatible storage server
  35. minio:
  36. image: docker.io/minio/minio
  37. command: server /data
  38. volumes:
  39. - ./data/minio:/data
  40. environment:
  41. MINIO_ROOT_USER: minioautumn
  42. MINIO_ROOT_PASSWORD: minioautumn
  43. MINIO_DOMAIN: minio
  44. networks:
  45. default:
  46. aliases:
  47. - revolt-uploads.minio
  48. # legacy support:
  49. - attachments.minio
  50. - avatars.minio
  51. - backgrounds.minio
  52. - icons.minio
  53. - banners.minio
  54. - emojis.minio
  55. restart: always
  56. # Caddy: Web server
  57. caddy:
  58. image: docker.io/caddy
  59. restart: always
  60. env_file: .env.web
  61. ports:
  62. - "80:80"
  63. - "443:443"
  64. volumes:
  65. - ./Caddyfile:/etc/caddy/Caddyfile
  66. - ./data/caddy-data:/data
  67. - ./data/caddy-config:/config
  68. # API server
  69. api:
  70. image: ghcr.io/revoltchat/server:20250930-2
  71. depends_on:
  72. database:
  73. condition: service_healthy
  74. redis:
  75. condition: service_started
  76. rabbit:
  77. condition: service_healthy
  78. volumes:
  79. - type: bind
  80. source: ./Revolt.toml
  81. target: /Revolt.toml
  82. restart: always
  83. # Events service
  84. events:
  85. image: ghcr.io/revoltchat/bonfire:20250930-2
  86. depends_on:
  87. database:
  88. condition: service_healthy
  89. redis:
  90. condition: service_started
  91. volumes:
  92. - type: bind
  93. source: ./Revolt.toml
  94. target: /Revolt.toml
  95. restart: always
  96. # Web App
  97. web:
  98. image: ghcr.io/revoltchat/client:master
  99. restart: always
  100. env_file: .env.web
  101. # File server
  102. autumn:
  103. image: ghcr.io/revoltchat/autumn:20250930-2
  104. depends_on:
  105. database:
  106. condition: service_healthy
  107. createbuckets:
  108. condition: service_started
  109. volumes:
  110. - type: bind
  111. source: ./Revolt.toml
  112. target: /Revolt.toml
  113. restart: always
  114. # Metadata and image proxy
  115. january:
  116. image: ghcr.io/revoltchat/january:20250930-2
  117. volumes:
  118. - type: bind
  119. source: ./Revolt.toml
  120. target: /Revolt.toml
  121. restart: always
  122. # Tenor proxy
  123. gifbox:
  124. image: ghcr.io/revoltchat/gifbox:20250930-2
  125. volumes:
  126. - type: bind
  127. source: ./Revolt.toml
  128. target: /Revolt.toml
  129. restart: always
  130. # Regular task daemon
  131. crond:
  132. image: ghcr.io/revoltchat/crond:20250930-2
  133. depends_on:
  134. database:
  135. condition: service_healthy
  136. minio:
  137. condition: service_started
  138. volumes:
  139. - type: bind
  140. source: ./Revolt.toml
  141. target: /Revolt.toml
  142. restart: always
  143. # Push notification daemon
  144. pushd:
  145. image: ghcr.io/revoltchat/pushd:20250930-2
  146. depends_on:
  147. database:
  148. condition: service_healthy
  149. redis:
  150. condition: service_started
  151. rabbit:
  152. condition: service_healthy
  153. volumes:
  154. - type: bind
  155. source: ./Revolt.toml
  156. target: /Revolt.toml
  157. restart: always
  158. # Create buckets for minio.
  159. createbuckets:
  160. image: docker.io/minio/mc
  161. depends_on:
  162. - minio
  163. entrypoint: >
  164. /bin/sh -c "
  165. while ! /usr/bin/mc ready minio; do
  166. /usr/bin/mc alias set minio http://minio:9000 minioautumn minioautumn;
  167. echo 'Waiting minio...' && sleep 1;
  168. done;
  169. /usr/bin/mc mb minio/revolt-uploads;
  170. exit 0;
  171. "