name: usesend-prod

services:
  postgres:
    image: postgres:16
    container_name: usesend-db-prod
    restart: always
    environment:
      - POSTGRES_USER=${POSTGRES_USER:?err}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?err}
      - POSTGRES_DB=${POSTGRES_DB:?err}
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER}"]
      interval: 10s
      timeout: 5s
      retries: 5
    # ports:
    #   - "5432:5432"
    volumes:
      - database:/var/lib/postgresql/data

  redis:
    image: redis:7
    container_name: usesend-redis-prod
    restart: always
    # ports:
    #   - "6379:6379"
    volumes:
      - cache:/data
    command: ["redis-server", "--maxmemory-policy", "noeviction"]

  minio:
    image: minio/minio
    container_name: usesend-storage-prod
    ports:
      - 9002:9002
      - 9001:9001
    volumes:
      - storage:/data
    environment:
      MINIO_ROOT_USER: unsend
      MINIO_ROOT_PASSWORD: password
    entrypoint: sh
    command: -c 'mkdir -p /data/unsend && minio server /data --console-address ":9001" --address ":9002"'

  usesend:
    image: usesend/usesend:latest
    container_name: usesend
    restart: always
    ports:
      - ${PORT:-3000}:${PORT:-3000}
    environment:
      - PORT=${PORT:-3000}
      - DATABASE_URL=${DATABASE_URL:?err}
      - NEXTAUTH_URL=${NEXTAUTH_URL:?err}
      - NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?err}
      - AWS_ACCESS_KEY=${AWS_ACCESS_KEY:?err}
      - AWS_SECRET_KEY=${AWS_SECRET_KEY:?err}
      - AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:?err}
      - GITHUB_ID=${GITHUB_ID:?err}
      - GITHUB_SECRET=${GITHUB_SECRET:?err}
      - REDIS_URL=${REDIS_URL:?err}
      - NEXT_PUBLIC_IS_CLOUD=${NEXT_PUBLIC_IS_CLOUD:-false}
      - API_RATE_LIMIT=${API_RATE_LIMIT:-1}
      - SMTP_HOST=${SMTP_HOST:-smtp.usesend.com}
      - SMTP_USER=${SMTP_USER:-usesend}
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started

volumes:
  database:
  cache:
  storage:
