services: database: image: postgres:latest environment: - POSTGRES_PASSWORD=${DB_PASS} - POSTGRES_USER=${DB_USER} - POSTGRES_DB=${DB_NAME} ports: - "5432:5432" healthcheck: test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}" ] interval: 5s timeout: 10s retries: 5 networks: - aether volumes: - db-data:/var/lib/postgresql restart: unless-stopped rabbitmq: image: rabbitmq:3.8-management environment: RABBITMQ_DEFAULT_USER: "${RMQ_USER}" RABBITMQ_DEFAULT_PASS: "${RMQ_PASS}" ports: - "5672:5672" - "15672:15672" networks: - aether volumes: - rabbitmq-data:/var/lib/rabbitmq restart: unless-stopped redis: image: redis:latest ports: - "6379:6379" healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s retries: 5 networks: - aether volumes: - redis-data:/data restart: unless-stopped minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: "${S3_ACCESS_KEY_ID}" MINIO_ROOT_PASSWORD: "${S3_SECRET_ACCESS_KEY}" ports: - "9000:9000" - "9001:9001" networks: - aether volumes: - minio-data:/data restart: unless-stopped minio-init: image: minio/mc:latest depends_on: - minio networks: - aether environment: S3_ACCESS_KEY_ID: "${S3_ACCESS_KEY_ID}" S3_SECRET_ACCESS_KEY: "${S3_SECRET_ACCESS_KEY}" S3_BUCKET_NAME: "${S3_BUCKET_NAME}" entrypoint: > /bin/sh -c " mc alias set minio http://minio:9000 $${S3_ACCESS_KEY_ID} $${S3_SECRET_ACCESS_KEY} && mc mb -p minio/$${S3_BUCKET_NAME} || true && mc anonymous set download minio/$${S3_BUCKET_NAME} || true " restart: "no" prestart: build: context: ./backend command: bash scripts/prestart.sh depends_on: database: condition: service_healthy networks: - aether env_file: - .env celery: build: context: ./backend command: celery -A app.core.celery_app.celery_app worker -l INFO depends_on: database: condition: service_healthy prestart: condition: service_completed_successfully networks: - aether env_file: - .env environment: S3_URL: "http://minio:9000" restart: unless-stopped backend: build: context: ./backend depends_on: database: condition: service_healthy prestart: condition: service_completed_successfully celery: condition: service_started redis: condition: service_healthy ports: - "3541:${BACKEND_PORT}" networks: - aether env_file: - .env environment: S3_URL: "http://minio:9000" restart: unless-stopped frontend: build: context: ./frontend args: VITE_API_URL: ${VITE_API_URL} depends_on: backend: condition: service_started ports: - "${FRONTEND_PORT}:3000" networks: - aether restart: unless-stopped volumes: db-data: rabbitmq-data: redis-data: minio-data: networks: aether: