README.md
Rendering markdown...
version: '3.8'
# Minimal Plunk triage environment for CVE research (SNS SSRF)
# Omits: MinIO, ntfy, SMTP — only what's needed to reach /webhooks/sns
services:
postgres:
image: postgres:16-alpine
container_name: plunk-triage-postgres
environment:
POSTGRES_DB: plunk
POSTGRES_USER: plunk
POSTGRES_PASSWORD: ${DB_PASSWORD:-testpass}
healthcheck:
test: ["CMD-SHELL", "pg_isready -U plunk"]
interval: 5s
timeout: 3s
retries: 10
networks:
- plunk-triage
redis:
image: redis:7-alpine
container_name: plunk-triage-redis
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 10
networks:
- plunk-triage
plunk:
image: ghcr.io/useplunk/plunk@sha256:729961b121923477c568e3e5b4698dfb1efcd87a7dbeea60cb538ba83b2f19da # pinned vulnerable version (was :latest on 2026-03-02)
container_name: plunk-triage-api
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
ports:
- "9080:80" # nginx on 80 → exposed as localhost:9080
environment:
SERVICE: all
NODE_ENV: production
# DB / Redis
DATABASE_URL: postgresql://plunk:${DB_PASSWORD:-testpass}@postgres:5432/plunk
DIRECT_DATABASE_URL: postgresql://plunk:${DB_PASSWORD:-testpass}@postgres:5432/plunk
REDIS_URL: redis://redis:6379
# Security
JWT_SECRET: ${JWT_SECRET:-triage-test-jwt-secret-do-not-use-in-prod}
# Nginx domain routing (subdomain-based)
NGINX_PORT: 80
API_DOMAIN: ${API_DOMAIN:-api.localhost}
DASHBOARD_DOMAIN: ${DASHBOARD_DOMAIN:-app.localhost}
LANDING_DOMAIN: ${LANDING_DOMAIN:-www.localhost}
WIKI_DOMAIN: ${WIKI_DOMAIN:-docs.localhost}
USE_HTTPS: "false"
# Explicit URIs (also set by setup-nginx.sh — provided here as belt-and-suspenders)
API_URI: http://${API_DOMAIN:-api.localhost}:9080
DASHBOARD_URI: http://${DASHBOARD_DOMAIN:-app.localhost}:9080
LANDING_URI: http://${LANDING_DOMAIN:-www.localhost}:9080
WIKI_URI: http://${WIKI_DOMAIN:-docs.localhost}:9080
# Fake AWS SES creds — not used for /webhooks/sns but required by constants.ts
AWS_SES_REGION: us-east-1
AWS_SES_ACCESS_KEY_ID: AKIAIOSFODNN7EXAMPLE
AWS_SES_SECRET_ACCESS_KEY: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
SES_CONFIGURATION_SET: plunk-configuration-set
# Disable DB request logging — avoids noise from missing tables during research
REQUEST_LOGGING: "false"
# Disable optional features
S3_ACCESS_KEY_ID: ""
S3_ACCESS_KEY_SECRET: ""
STRIPE_SK: ""
STRIPE_WEBHOOK_SECRET: ""
PLUNK_API_KEY: ""
PLUNK_FROM_ADDRESS: ""
AUTO_PROJECT_DISABLE: "false"
extra_hosts:
- "host.docker.internal:host-gateway" # Linux fallback; macOS has this natively
networks:
- plunk-triage
networks:
plunk-triage:
driver: bridge