services: api: build: context: ./server dockerfile: Dockerfile environment: APP_ROLE: api APP_ENV: ${APP_ENV:-dev} APP_HOST: ${APP_HOST:-0.0.0.0} APP_PORT: ${APP_PORT:-8000} CORS_ORIGINS: ${CORS_ORIGINS:-http://localhost:5173,http://127.0.0.1:5173,http://localhost:8080} DATABASE_URL: ${DATABASE_URL:-postgresql+psycopg://multimailer:multimailer@postgres:5432/multimailer} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} S3_ENDPOINT_URL: ${S3_ENDPOINT_URL:-http://garage:3900} S3_REGION: ${S3_REGION:-garage} S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-GKmultimailerdev0000000000000000} S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-multimailer-dev-secret-change-me} S3_BUCKET: ${S3_BUCKET:-attachments} MASTER_KEY_B64: ${MASTER_KEY_B64:-} MAX_UPLOAD_MB: ${MAX_UPLOAD_MB:-50} MAX_ATTACHMENTS_PER_JOB: ${MAX_ATTACHMENTS_PER_JOB:-50} DEFAULT_SEND_RATE_PER_MIN: ${DEFAULT_SEND_RATE_PER_MIN:-30} DEFAULT_CONCURRENCY: ${DEFAULT_CONCURRENCY:-2} ports: - "${API_PUBLISHED_PORT:-8000}:8000" networks: - app healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health').read()"] interval: 10s timeout: 3s retries: 10 worker: build: context: ./server dockerfile: Dockerfile environment: APP_ROLE: worker APP_ENV: ${APP_ENV:-dev} DATABASE_URL: ${DATABASE_URL:-postgresql+psycopg://multimailer:multimailer@postgres:5432/multimailer} REDIS_URL: ${REDIS_URL:-redis://redis:6379/0} S3_ENDPOINT_URL: ${S3_ENDPOINT_URL:-http://garage:3900} S3_REGION: ${S3_REGION:-garage} S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID:-GKmultimailerdev0000000000000000} S3_SECRET_ACCESS_KEY: ${S3_SECRET_ACCESS_KEY:-multimailer-dev-secret-change-me} S3_BUCKET: ${S3_BUCKET:-attachments} MASTER_KEY_B64: ${MASTER_KEY_B64:-} CELERY_QUEUES: ${CELERY_QUEUES:-send_email,append_sent,default} CELERY_CONCURRENCY: ${CELERY_CONCURRENCY:-4} CELERY_PREFETCH_MULTIPLIER: ${CELERY_PREFETCH_MULTIPLIER:-1} CELERY_MAX_TASKS_PER_CHILD: ${CELERY_MAX_TASKS_PER_CHILD:-200} CELERY_LOGLEVEL: ${CELERY_LOGLEVEL:-INFO} networks: - app webui: build: context: ./webui dockerfile: Dockerfile args: VITE_API_BASE_URL: ${VITE_API_BASE_URL:-/api/v1} ports: - "${WEBUI_PUBLISHED_PORT:-5173}:80" networks: - app networks: app: name: ${COMPOSE_PROJECT_NAME:-multimailer}_app