plunk Docker & Self-Hosted Deployment

GitHub

The Open-Source Email Platform

5,539 stars TypeScript TypeScript 42 files ยท ~70,633 tokens
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/postgres
2. Docker Run (1-Click Launch) docker run -d --name plunk -p 55432:55432 --restart always postgres:16-alpine
3. Podman Run podman run -d --name plunk -p 55432:55432 --restart always postgres:16-alpine
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/postgres:16-alpine
5. ORAS Pull (OCI Artifact) oras pull postgres:16-alpine
6. Compose Deployment docker compose up -d
docker/docker-compose.dev.yml
Download .yml
services:
  db:
    image: postgres:16-alpine
    ports:
      - 55432:5432
    environment:
      POSTGRES_PASSWORD: postgres
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD-SHELL", "pg_isready -U postgres" ]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis
    command: redis-server --appendonly yes
    ports:
      - 56379:6379
    volumes:
      - redis_data:/data
    healthcheck:
      test: [ "CMD", "redis-cli", "ping" ]
      interval: 10s
      timeout: 5s
      retries: 5

  minio:
    # MinIO stopped publishing images; pgsty/minio is the community build the self-host compose uses too
    image: pgsty/minio:RELEASE.2026-08-04T00-00-00Z
    command: server /data --console-address ":9001"
    ports:
      - 9000:9000
      - 9001:9001
    environment:
      MINIO_ROOT_USER: plunk
      MINIO_ROOT_PASSWORD: plunkminiopass
    volumes:
      - minio_data:/data
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:9000/minio/health/live" ]
      interval: 30s
      timeout: 20s
      retries: 3

volumes:
  redis_data:
  minio_data:
  postgres_data: