Dokploy

Plunk

Plunk is the open-source, affordable email platform that brings together marketing, transactional and broadcast emails into one single, complete solution

Plunk logo

Configuration

# Plunk Self-Hosting Docker Compose for Dokploy
# This setup runs all Plunk services with nginx reverse proxy
#
# IMPORTANT: This template requires multiple subdomains:
#   - api.yourdomain.com -> API Server
#   - app.yourdomain.com -> Web Dashboard
#   - www.yourdomain.com -> Landing Page
#   - docs.yourdomain.com -> Documentation
#   - minio.yourdomain.com -> Minio Console (optional)
#
# All domains will be automatically configured in Dokploy

services:
  # ============================================
  # Infrastructure Services
  # ============================================

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: plunk
      POSTGRES_USER: plunk
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U plunk"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

  minio:
    image: minio/minio:latest
    restart: unless-stopped
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: ${MINIO_ROOT_USER}
      MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD}
    volumes:
      - minio_data:/data
    ports:
      - 9000
      - 9001
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
      interval: 30s
      timeout: 20s
      retries: 3

  # ============================================
  # Plunk Application
  # ============================================

  plunk:
    image: ghcr.io/useplunk/plunk:latest
    restart: unless-stopped
    environment:
      # Service mode - runs all services in one container
      SERVICE: all
      NODE_ENV: production

      # Database
      DATABASE_URL: postgresql://plunk:${DB_PASSWORD}@postgres:5432/plunk
      DIRECT_DATABASE_URL: postgresql://plunk:${DB_PASSWORD}@postgres:5432/plunk

      # Redis
      REDIS_URL: ${REDIS_URL}

      # Security
      JWT_SECRET: ${JWT_SECRET}

      # Nginx configuration
      NGINX_PORT: ${NGINX_PORT}

      # Domain configuration (subdomain-based routing)
      API_DOMAIN: ${API_DOMAIN}
      DASHBOARD_DOMAIN: ${DASHBOARD_DOMAIN}
      LANDING_DOMAIN: ${LANDING_DOMAIN}
      WIKI_DOMAIN: ${WIKI_DOMAIN}
      USE_HTTPS: ${USE_HTTPS}

      # AWS SES (for sending emails) - REQUIRED
      AWS_SES_REGION: ${AWS_SES_REGION}
      AWS_SES_ACCESS_KEY_ID: ${AWS_SES_ACCESS_KEY_ID}
      AWS_SES_SECRET_ACCESS_KEY: ${AWS_SES_SECRET_ACCESS_KEY}
      SES_CONFIGURATION_SET: ${SES_CONFIGURATION_SET}
      SES_CONFIGURATION_SET_NO_TRACKING: ${SES_CONFIGURATION_SET_NO_TRACKING}

      # Optional: OAuth
      GITHUB_OAUTH_CLIENT: ${GITHUB_OAUTH_CLIENT}
      GITHUB_OAUTH_SECRET: ${GITHUB_OAUTH_SECRET}
      GOOGLE_OAUTH_CLIENT: ${GOOGLE_OAUTH_CLIENT}
      GOOGLE_OAUTH_SECRET: ${GOOGLE_OAUTH_SECRET}

      # Optional: Stripe
      STRIPE_SK: ${STRIPE_SK}
      STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET}
      STRIPE_PRICE_ONBOARDING: ${STRIPE_PRICE_ONBOARDING}
      STRIPE_PRICE_EMAIL_USAGE: ${STRIPE_PRICE_EMAIL_USAGE}
      STRIPE_METER_EVENT_NAME: ${STRIPE_METER_EVENT_NAME}

      # S3-compatible storage (Minio)
      S3_ENDPOINT: ${S3_ENDPOINT}
      S3_ACCESS_KEY_ID: ${S3_ACCESS_KEY_ID}
      S3_ACCESS_KEY_SECRET: ${S3_ACCESS_KEY_SECRET}
      S3_BUCKET: ${S3_BUCKET}
      S3_PUBLIC_URL: ${S3_PUBLIC_URL}
      S3_FORCE_PATH_STYLE: ${S3_FORCE_PATH_STYLE}

      # SMTP Server (for sending emails via SMTP)
      SMTP_DOMAIN: ${SMTP_DOMAIN}
      PORT_SECURE: ${PORT_SECURE}
      PORT_SUBMISSION: ${PORT_SUBMISSION}

      # Internal
      PLUNK_API_KEY: ${PLUNK_API_KEY}
      PLUNK_FROM_ADDRESS: ${PLUNK_FROM_ADDRESS}

    volumes:
      # Mount Traefik certificates for SSL
      - /etc/dokploy/traefik/dynamic/acme.json:/certs/acme.json:ro

    ports:
      # Main nginx port (handles all subdomain routing)
      - 80
      # SMTP ports (for email relay)
      - 465
      - 587

    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
      minio:
        condition: service_healthy

    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:80/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 60s

volumes:
  postgres_data:
    driver: local
  redis_data:
    driver: local
  minio_data:
    driver: local
  plunk_data:
    driver: local
[variables]
# Generate unique domains for each service
api_domain = "${domain}"
dashboard_domain = "${domain}"
landing_domain = "${domain}"
wiki_domain = "${domain}"
minio_domain = "${domain}"

# Database credentials
postgres_password = "${password:32}"

# Security
jwt_secret = "${password:64}"

# Minio credentials
minio_root_user = "plunk"
minio_root_password = "${password:32}"

[config]
isolated = true

# API Domain
[[config.domains]]
serviceName = "plunk"
port = 80
host = "${api_domain}"
path = "/"

# Dashboard Domain
[[config.domains]]
serviceName = "plunk"
port = 80
host = "${dashboard_domain}"
path = "/"

# Landing Page Domain
[[config.domains]]
serviceName = "plunk"
port = 80
host = "${landing_domain}"
path = "/"

# Documentation Domain
[[config.domains]]
serviceName = "plunk"
port = 80
host = "${wiki_domain}"
path = "/"

# Minio Console Domain (optional)
[[config.domains]]
serviceName = "minio"
port = 9001
host = "${minio_domain}"
path = "/"

[config.env]
# Database
DB_PASSWORD = "${postgres_password}"

# Redis
REDIS_URL = "redis://redis:6379"

# Security
JWT_SECRET = "${jwt_secret}"

# Nginx configuration
NGINX_PORT = "80"

# Domain configuration (subdomain-based routing)
API_DOMAIN = "${api_domain}"
DASHBOARD_DOMAIN = "${dashboard_domain}"
LANDING_DOMAIN = "${landing_domain}"
WIKI_DOMAIN = "${wiki_domain}"
USE_HTTPS = "true"

# AWS SES (Required - users must configure these for email to work)
AWS_SES_REGION = "us-east-1"
AWS_SES_ACCESS_KEY_ID = "<your-aws-ses-access-key-id>"
AWS_SES_SECRET_ACCESS_KEY = "<your-aws-ses-secret-access-key>"
SES_CONFIGURATION_SET = "<your-ses-configuration-set>"

# S3-compatible storage (Minio)
MINIO_ROOT_USER = "${minio_root_user}"
MINIO_ROOT_PASSWORD = "${minio_root_password}"
S3_ENDPOINT = "http://minio:9000"
S3_ACCESS_KEY_ID = "${minio_root_user}"
S3_ACCESS_KEY_SECRET = "${minio_root_password}"
S3_BUCKET = "uploads"
S3_PUBLIC_URL = "https://${minio_domain}/uploads"
S3_FORCE_PATH_STYLE = "true"

# Minio ports
MINIO_API_PORT = "9000"
MINIO_CONSOLE_PORT = "9001"

# SMTP Server ports
PORT_SECURE = "465"
PORT_SUBMISSION = "587"

# Notifications (ntfy.sh)
NTFY_URL = "http://ntfy/plunk-notifications"

# Optional: OAuth (leave empty if not using)
GITHUB_OAUTH_CLIENT = ""
GITHUB_OAUTH_SECRET = ""
GOOGLE_OAUTH_CLIENT = ""
GOOGLE_OAUTH_SECRET = ""

# Optional: Stripe (leave empty if not using)
STRIPE_SK = ""
STRIPE_WEBHOOK_SECRET = ""
STRIPE_PRICE_ONBOARDING = ""
STRIPE_PRICE_EMAIL_USAGE = ""
STRIPE_METER_EVENT_NAME = "emails"

# Internal
PLUNK_API_KEY = ""
PLUNK_FROM_ADDRESS = ""
SMTP_DOMAIN = ""

Base64

To import this template in Dokploy: create a Compose service → AdvancedBase64 import and paste the content below:

ewogICJjb21wb3NlIjogIiMgUGx1bmsgU2VsZi1Ib3N0aW5nIERvY2tlciBDb21wb3NlIGZvciBEb2twbG95XG4jIFRoaXMgc2V0dXAgcnVucyBhbGwgUGx1bmsgc2VydmljZXMgd2l0aCBuZ2lueCByZXZlcnNlIHByb3h5XG4jXG4jIElNUE9SVEFOVDogVGhpcyB0ZW1wbGF0ZSByZXF1aXJlcyBtdWx0aXBsZSBzdWJkb21haW5zOlxuIyAgIC0gYXBpLnlvdXJkb21haW4uY29tIC0+IEFQSSBTZXJ2ZXJcbiMgICAtIGFwcC55b3VyZG9tYWluLmNvbSAtPiBXZWIgRGFzaGJvYXJkXG4jICAgLSB3d3cueW91cmRvbWFpbi5jb20gLT4gTGFuZGluZyBQYWdlXG4jICAgLSBkb2NzLnlvdXJkb21haW4uY29tIC0+IERvY3VtZW50YXRpb25cbiMgICAtIG1pbmlvLnlvdXJkb21haW4uY29tIC0+IE1pbmlvIENvbnNvbGUgKG9wdGlvbmFsKVxuI1xuIyBBbGwgZG9tYWlucyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCBpbiBEb2twbG95XG5cbnNlcnZpY2VzOlxuICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICMgSW5mcmFzdHJ1Y3R1cmUgU2VydmljZXNcbiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfREI6IHBsdW5rXG4gICAgICBQT1NUR1JFU19VU0VSOiBwbHVua1xuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gcG9zdGdyZXNfZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgcGx1bmtcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG5cbiAgcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjctYWxwaW5lXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBjb21tYW5kOiByZWRpcy1zZXJ2ZXIgLS1hcHBlbmRvbmx5IHllc1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHJlZGlzX2RhdGE6L2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRFwiLCBcInJlZGlzLWNsaVwiLCBcInBpbmdcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG5cbiAgbWluaW86XG4gICAgaW1hZ2U6IG1pbmlvL21pbmlvOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgY29tbWFuZDogc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzIFwiOjkwMDFcIlxuICAgIGVudmlyb25tZW50OlxuICAgICAgTUlOSU9fUk9PVF9VU0VSOiAke01JTklPX1JPT1RfVVNFUn1cbiAgICAgIE1JTklPX1JPT1RfUEFTU1dPUkQ6ICR7TUlOSU9fUk9PVF9QQVNTV09SRH1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBtaW5pb19kYXRhOi9kYXRhXG4gICAgcG9ydHM6XG4gICAgICAtIDkwMDBcbiAgICAgIC0gOTAwMVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiY3VybFwiLCBcIi1mXCIsIFwiaHR0cDovL2xvY2FsaG9zdDo5MDAwL21pbmlvL2hlYWx0aC9saXZlXCJdXG4gICAgICBpbnRlcnZhbDogMzBzXG4gICAgICB0aW1lb3V0OiAyMHNcbiAgICAgIHJldHJpZXM6IDNcblxuICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICMgUGx1bmsgQXBwbGljYXRpb25cbiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHBsdW5rOlxuICAgIGltYWdlOiBnaGNyLmlvL3VzZXBsdW5rL3BsdW5rOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAjIFNlcnZpY2UgbW9kZSAtIHJ1bnMgYWxsIHNlcnZpY2VzIGluIG9uZSBjb250YWluZXJcbiAgICAgIFNFUlZJQ0U6IGFsbFxuICAgICAgTk9ERV9FTlY6IHByb2R1Y3Rpb25cblxuICAgICAgIyBEYXRhYmFzZVxuICAgICAgREFUQUJBU0VfVVJMOiBwb3N0Z3Jlc3FsOi8vcGx1bms6JHtEQl9QQVNTV09SRH1AcG9zdGdyZXM6NTQzMi9wbHVua1xuICAgICAgRElSRUNUX0RBVEFCQVNFX1VSTDogcG9zdGdyZXNxbDovL3BsdW5rOiR7REJfUEFTU1dPUkR9QHBvc3RncmVzOjU0MzIvcGx1bmtcblxuICAgICAgIyBSZWRpc1xuICAgICAgUkVESVNfVVJMOiAke1JFRElTX1VSTH1cblxuICAgICAgIyBTZWN1cml0eVxuICAgICAgSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuXG4gICAgICAjIE5naW54IGNvbmZpZ3VyYXRpb25cbiAgICAgIE5HSU5YX1BPUlQ6ICR7TkdJTlhfUE9SVH1cblxuICAgICAgIyBEb21haW4gY29uZmlndXJhdGlvbiAoc3ViZG9tYWluLWJhc2VkIHJvdXRpbmcpXG4gICAgICBBUElfRE9NQUlOOiAke0FQSV9ET01BSU59XG4gICAgICBEQVNIQk9BUkRfRE9NQUlOOiAke0RBU0hCT0FSRF9ET01BSU59XG4gICAgICBMQU5ESU5HX0RPTUFJTjogJHtMQU5ESU5HX0RPTUFJTn1cbiAgICAgIFdJS0lfRE9NQUlOOiAke1dJS0lfRE9NQUlOfVxuICAgICAgVVNFX0hUVFBTOiAke1VTRV9IVFRQU31cblxuICAgICAgIyBBV1MgU0VTIChmb3Igc2VuZGluZyBlbWFpbHMpIC0gUkVRVUlSRURcbiAgICAgIEFXU19TRVNfUkVHSU9OOiAke0FXU19TRVNfUkVHSU9OfVxuICAgICAgQVdTX1NFU19BQ0NFU1NfS0VZX0lEOiAke0FXU19TRVNfQUNDRVNTX0tFWV9JRH1cbiAgICAgIEFXU19TRVNfU0VDUkVUX0FDQ0VTU19LRVk6ICR7QVdTX1NFU19TRUNSRVRfQUNDRVNTX0tFWX1cbiAgICAgIFNFU19DT05GSUdVUkFUSU9OX1NFVDogJHtTRVNfQ09ORklHVVJBVElPTl9TRVR9XG4gICAgICBTRVNfQ09ORklHVVJBVElPTl9TRVRfTk9fVFJBQ0tJTkc6ICR7U0VTX0NPTkZJR1VSQVRJT05fU0VUX05PX1RSQUNLSU5HfVxuXG4gICAgICAjIE9wdGlvbmFsOiBPQXV0aFxuICAgICAgR0lUSFVCX09BVVRIX0NMSUVOVDogJHtHSVRIVUJfT0FVVEhfQ0xJRU5UfVxuICAgICAgR0lUSFVCX09BVVRIX1NFQ1JFVDogJHtHSVRIVUJfT0FVVEhfU0VDUkVUfVxuICAgICAgR09PR0xFX09BVVRIX0NMSUVOVDogJHtHT09HTEVfT0FVVEhfQ0xJRU5UfVxuICAgICAgR09PR0xFX09BVVRIX1NFQ1JFVDogJHtHT09HTEVfT0FVVEhfU0VDUkVUfVxuXG4gICAgICAjIE9wdGlvbmFsOiBTdHJpcGVcbiAgICAgIFNUUklQRV9TSzogJHtTVFJJUEVfU0t9XG4gICAgICBTVFJJUEVfV0VCSE9PS19TRUNSRVQ6ICR7U1RSSVBFX1dFQkhPT0tfU0VDUkVUfVxuICAgICAgU1RSSVBFX1BSSUNFX09OQk9BUkRJTkc6ICR7U1RSSVBFX1BSSUNFX09OQk9BUkRJTkd9XG4gICAgICBTVFJJUEVfUFJJQ0VfRU1BSUxfVVNBR0U6ICR7U1RSSVBFX1BSSUNFX0VNQUlMX1VTQUdFfVxuICAgICAgU1RSSVBFX01FVEVSX0VWRU5UX05BTUU6ICR7U1RSSVBFX01FVEVSX0VWRU5UX05BTUV9XG5cbiAgICAgICMgUzMtY29tcGF0aWJsZSBzdG9yYWdlIChNaW5pbylcbiAgICAgIFMzX0VORFBPSU5UOiAke1MzX0VORFBPSU5UfVxuICAgICAgUzNfQUNDRVNTX0tFWV9JRDogJHtTM19BQ0NFU1NfS0VZX0lEfVxuICAgICAgUzNfQUNDRVNTX0tFWV9TRUNSRVQ6ICR7UzNfQUNDRVNTX0tFWV9TRUNSRVR9XG4gICAgICBTM19CVUNLRVQ6ICR7UzNfQlVDS0VUfVxuICAgICAgUzNfUFVCTElDX1VSTDogJHtTM19QVUJMSUNfVVJMfVxuICAgICAgUzNfRk9SQ0VfUEFUSF9TVFlMRTogJHtTM19GT1JDRV9QQVRIX1NUWUxFfVxuXG4gICAgICAjIFNNVFAgU2VydmVyIChmb3Igc2VuZGluZyBlbWFpbHMgdmlhIFNNVFApXG4gICAgICBTTVRQX0RPTUFJTjogJHtTTVRQX0RPTUFJTn1cbiAgICAgIFBPUlRfU0VDVVJFOiAke1BPUlRfU0VDVVJFfVxuICAgICAgUE9SVF9TVUJNSVNTSU9OOiAke1BPUlRfU1VCTUlTU0lPTn1cblxuICAgICAgIyBJbnRlcm5hbFxuICAgICAgUExVTktfQVBJX0tFWTogJHtQTFVOS19BUElfS0VZfVxuICAgICAgUExVTktfRlJPTV9BRERSRVNTOiAke1BMVU5LX0ZST01fQUREUkVTU31cblxuICAgIHZvbHVtZXM6XG4gICAgICAjIE1vdW50IFRyYWVmaWsgY2VydGlmaWNhdGVzIGZvciBTU0xcbiAgICAgIC0gL2V0Yy9kb2twbG95L3RyYWVmaWsvZHluYW1pYy9hY21lLmpzb246L2NlcnRzL2FjbWUuanNvbjpyb1xuXG4gICAgcG9ydHM6XG4gICAgICAjIE1haW4gbmdpbnggcG9ydCAoaGFuZGxlcyBhbGwgc3ViZG9tYWluIHJvdXRpbmcpXG4gICAgICAtIDgwXG4gICAgICAjIFNNVFAgcG9ydHMgKGZvciBlbWFpbCByZWxheSlcbiAgICAgIC0gNDY1XG4gICAgICAtIDU4N1xuXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcmVkaXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBtaW5pbzpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcblxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiY3VybFwiLCBcIi1mXCIsIFwiaHR0cDovL2xvY2FsaG9zdDo4MC9cIl1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiA2MHNcblxudm9sdW1lczpcbiAgcG9zdGdyZXNfZGF0YTpcbiAgICBkcml2ZXI6IGxvY2FsXG4gIHJlZGlzX2RhdGE6XG4gICAgZHJpdmVyOiBsb2NhbFxuICBtaW5pb19kYXRhOlxuICAgIGRyaXZlcjogbG9jYWxcbiAgcGx1bmtfZGF0YTpcbiAgICBkcml2ZXI6IGxvY2FsXG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbiMgR2VuZXJhdGUgdW5pcXVlIGRvbWFpbnMgZm9yIGVhY2ggc2VydmljZVxuYXBpX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmRhc2hib2FyZF9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5sYW5kaW5nX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbndpa2lfZG9tYWluID0gXCIke2RvbWFpbn1cIlxubWluaW9fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuXG4jIERhdGFiYXNlIGNyZWRlbnRpYWxzXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG4jIFNlY3VyaXR5XG5qd3Rfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbiMgTWluaW8gY3JlZGVudGlhbHNcbm1pbmlvX3Jvb3RfdXNlciA9IFwicGx1bmtcIlxubWluaW9fcm9vdF9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG5bY29uZmlnXVxuaXNvbGF0ZWQgPSB0cnVlXG5cbiMgQVBJIERvbWFpblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicGx1bmtcIlxucG9ydCA9IDgwXG5ob3N0ID0gXCIke2FwaV9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIERhc2hib2FyZCBEb21haW5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInBsdW5rXCJcbnBvcnQgPSA4MFxuaG9zdCA9IFwiJHtkYXNoYm9hcmRfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuIyBMYW5kaW5nIFBhZ2UgRG9tYWluXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJwbHVua1wiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7bGFuZGluZ19kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIERvY3VtZW50YXRpb24gRG9tYWluXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJwbHVua1wiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7d2lraV9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIE1pbmlvIENvbnNvbGUgRG9tYWluIChvcHRpb25hbClcbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcIm1pbmlvXCJcbnBvcnQgPSA5MDAxXG5ob3N0ID0gXCIke21pbmlvX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltjb25maWcuZW52XVxuIyBEYXRhYmFzZVxuREJfUEFTU1dPUkQgPSBcIiR7cG9zdGdyZXNfcGFzc3dvcmR9XCJcblxuIyBSZWRpc1xuUkVESVNfVVJMID0gXCJyZWRpczovL3JlZGlzOjYzNzlcIlxuXG4jIFNlY3VyaXR5XG5KV1RfU0VDUkVUID0gXCIke2p3dF9zZWNyZXR9XCJcblxuIyBOZ2lueCBjb25maWd1cmF0aW9uXG5OR0lOWF9QT1JUID0gXCI4MFwiXG5cbiMgRG9tYWluIGNvbmZpZ3VyYXRpb24gKHN1YmRvbWFpbi1iYXNlZCByb3V0aW5nKVxuQVBJX0RPTUFJTiA9IFwiJHthcGlfZG9tYWlufVwiXG5EQVNIQk9BUkRfRE9NQUlOID0gXCIke2Rhc2hib2FyZF9kb21haW59XCJcbkxBTkRJTkdfRE9NQUlOID0gXCIke2xhbmRpbmdfZG9tYWlufVwiXG5XSUtJX0RPTUFJTiA9IFwiJHt3aWtpX2RvbWFpbn1cIlxuVVNFX0hUVFBTID0gXCJ0cnVlXCJcblxuIyBBV1MgU0VTIChSZXF1aXJlZCAtIHVzZXJzIG11c3QgY29uZmlndXJlIHRoZXNlIGZvciBlbWFpbCB0byB3b3JrKVxuQVdTX1NFU19SRUdJT04gPSBcInVzLWVhc3QtMVwiXG5BV1NfU0VTX0FDQ0VTU19LRVlfSUQgPSBcIjx5b3VyLWF3cy1zZXMtYWNjZXNzLWtleS1pZD5cIlxuQVdTX1NFU19TRUNSRVRfQUNDRVNTX0tFWSA9IFwiPHlvdXItYXdzLXNlcy1zZWNyZXQtYWNjZXNzLWtleT5cIlxuU0VTX0NPTkZJR1VSQVRJT05fU0VUID0gXCI8eW91ci1zZXMtY29uZmlndXJhdGlvbi1zZXQ+XCJcblxuIyBTMy1jb21wYXRpYmxlIHN0b3JhZ2UgKE1pbmlvKVxuTUlOSU9fUk9PVF9VU0VSID0gXCIke21pbmlvX3Jvb3RfdXNlcn1cIlxuTUlOSU9fUk9PVF9QQVNTV09SRCA9IFwiJHttaW5pb19yb290X3Bhc3N3b3JkfVwiXG5TM19FTkRQT0lOVCA9IFwiaHR0cDovL21pbmlvOjkwMDBcIlxuUzNfQUNDRVNTX0tFWV9JRCA9IFwiJHttaW5pb19yb290X3VzZXJ9XCJcblMzX0FDQ0VTU19LRVlfU0VDUkVUID0gXCIke21pbmlvX3Jvb3RfcGFzc3dvcmR9XCJcblMzX0JVQ0tFVCA9IFwidXBsb2Fkc1wiXG5TM19QVUJMSUNfVVJMID0gXCJodHRwczovLyR7bWluaW9fZG9tYWlufS91cGxvYWRzXCJcblMzX0ZPUkNFX1BBVEhfU1RZTEUgPSBcInRydWVcIlxuXG4jIE1pbmlvIHBvcnRzXG5NSU5JT19BUElfUE9SVCA9IFwiOTAwMFwiXG5NSU5JT19DT05TT0xFX1BPUlQgPSBcIjkwMDFcIlxuXG4jIFNNVFAgU2VydmVyIHBvcnRzXG5QT1JUX1NFQ1VSRSA9IFwiNDY1XCJcblBPUlRfU1VCTUlTU0lPTiA9IFwiNTg3XCJcblxuIyBOb3RpZmljYXRpb25zIChudGZ5LnNoKVxuTlRGWV9VUkwgPSBcImh0dHA6Ly9udGZ5L3BsdW5rLW5vdGlmaWNhdGlvbnNcIlxuXG4jIE9wdGlvbmFsOiBPQXV0aCAobGVhdmUgZW1wdHkgaWYgbm90IHVzaW5nKVxuR0lUSFVCX09BVVRIX0NMSUVOVCA9IFwiXCJcbkdJVEhVQl9PQVVUSF9TRUNSRVQgPSBcIlwiXG5HT09HTEVfT0FVVEhfQ0xJRU5UID0gXCJcIlxuR09PR0xFX09BVVRIX1NFQ1JFVCA9IFwiXCJcblxuIyBPcHRpb25hbDogU3RyaXBlIChsZWF2ZSBlbXB0eSBpZiBub3QgdXNpbmcpXG5TVFJJUEVfU0sgPSBcIlwiXG5TVFJJUEVfV0VCSE9PS19TRUNSRVQgPSBcIlwiXG5TVFJJUEVfUFJJQ0VfT05CT0FSRElORyA9IFwiXCJcblNUUklQRV9QUklDRV9FTUFJTF9VU0FHRSA9IFwiXCJcblNUUklQRV9NRVRFUl9FVkVOVF9OQU1FID0gXCJlbWFpbHNcIlxuXG4jIEludGVybmFsXG5QTFVOS19BUElfS0VZID0gXCJcIlxuUExVTktfRlJPTV9BRERSRVNTID0gXCJcIlxuU01UUF9ET01BSU4gPSBcIlwiIgp9

Tags

email, newsletter, mailing-list, marketing


Version: latest

On this page