# OpenMail local/self-host stack. See ARCHITECTURE.md §2. # `docker compose up` brings up Postgres, MinIO, the openmail binary, and Caddy. services: postgres: image: postgres:16-alpine environment: POSTGRES_USER: openmail POSTGRES_PASSWORD: openmail POSTGRES_DB: openmail volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U openmail"] interval: 5s timeout: 3s retries: 10 minio: image: minio/minio:latest command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: openmail MINIO_ROOT_PASSWORD: openmail123 volumes: - miniodata:/data ports: - "9001:9001" # console (dev only) openmail: build: .. command: ["serve"] environment: OPENMAIL_HTTP_ADDR: ":8080" DATABASE_URL: "postgres://openmail:openmail@postgres:5432/openmail?sslmode=disable" OPENMAIL_ADMIN_TOKEN: "dev-change-me" # S3/MinIO wiring lands with milestone 1 object-store client. depends_on: postgres: condition: service_healthy # Inbound :25 (milestone 2) — uncomment when smtpd lands: # ports: # - "25:25" caddy: image: caddy:2-alpine ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddydata:/data depends_on: - openmail volumes: pgdata: miniodata: caddydata: