56 lines
2.3 KiB
YAML
56 lines
2.3 KiB
YAML
# Overlay that swaps the in-process queues for durable RabbitMQ ones.
|
|
#
|
|
# docker compose up # channels
|
|
# docker compose -f docker-compose.yml -f docker-compose.rabbitmq.yml up
|
|
#
|
|
# The base file is left alone deliberately: `docker compose up` still brings up
|
|
# exactly what it always did, so neither backend is the awkward one to run.
|
|
#
|
|
# What the broker changes: a job stays unacked until its handler commits, so a
|
|
# restart resumes each file at the stage it had reached instead of re-driving
|
|
# everything in spool/ from stage 1. See "Queue backends" in the README for the
|
|
# guarantees, and for the deliberate holes.
|
|
|
|
services:
|
|
rabbitmq:
|
|
image: rabbitmq:4-management
|
|
environment:
|
|
# The built-in guest/guest only authenticates over loopback, so it cannot
|
|
# work across the compose network. Override these for anything real; they
|
|
# are here so the stack comes up with one command, not as a credential.
|
|
RABBITMQ_DEFAULT_USER: "fileserver"
|
|
RABBITMQ_DEFAULT_PASS: "fileserver"
|
|
ports:
|
|
# 5672 is published so you can run the server on the host
|
|
# (`julia --project=. -t auto bin/server.jl`) against this broker; 15672 is
|
|
# the management UI, which is most of the reason to run a broker you can
|
|
# look at. Neither needs publishing for the composed server to work.
|
|
- "5672:5672"
|
|
- "15672:15672"
|
|
volumes:
|
|
# Durable queues and persistent messages are only as durable as what they
|
|
# are written to: without this, `docker compose down` discards the backlog
|
|
# the acks exist to protect.
|
|
- rabbitmq-data:/var/lib/rabbitmq
|
|
healthcheck:
|
|
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 12
|
|
start_period: 30s
|
|
restart: unless-stopped
|
|
|
|
file-server:
|
|
environment:
|
|
FS_QUEUE_BACKEND: "rabbitmq"
|
|
FS_AMQP_URL: "amqp://fileserver:fileserver@rabbitmq:5672/"
|
|
depends_on:
|
|
rabbitmq:
|
|
# The server retries a broker that isn't up yet (AMQP_CONNECT_RETRY_SECONDS),
|
|
# so this gate is belt-and-braces rather than load-bearing — but it keeps
|
|
# a cold start quiet instead of a screenful of retry lines.
|
|
condition: service_healthy
|
|
|
|
volumes:
|
|
rabbitmq-data:
|