Plunk
Plunk is the open-source, affordable email platform that brings together marketing, transactional and broadcast emails into one single, complete solution
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 → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogIiMgUGx1bmsgU2VsZi1Ib3N0aW5nIERvY2tlciBDb21wb3NlIGZvciBEb2twbG95XG4jIFRoaXMgc2V0dXAgcnVucyBhbGwgUGx1bmsgc2VydmljZXMgd2l0aCBuZ2lueCByZXZlcnNlIHByb3h5XG4jXG4jIElNUE9SVEFOVDogVGhpcyB0ZW1wbGF0ZSByZXF1aXJlcyBtdWx0aXBsZSBzdWJkb21haW5zOlxuIyAgIC0gYXBpLnlvdXJkb21haW4uY29tIC0+IEFQSSBTZXJ2ZXJcbiMgICAtIGFwcC55b3VyZG9tYWluLmNvbSAtPiBXZWIgRGFzaGJvYXJkXG4jICAgLSB3d3cueW91cmRvbWFpbi5jb20gLT4gTGFuZGluZyBQYWdlXG4jICAgLSBkb2NzLnlvdXJkb21haW4uY29tIC0+IERvY3VtZW50YXRpb25cbiMgICAtIG1pbmlvLnlvdXJkb21haW4uY29tIC0+IE1pbmlvIENvbnNvbGUgKG9wdGlvbmFsKVxuI1xuIyBBbGwgZG9tYWlucyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCBpbiBEb2twbG95XG5cbnNlcnZpY2VzOlxuICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICMgSW5mcmFzdHJ1Y3R1cmUgU2VydmljZXNcbiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNi1hbHBpbmVcbiAgICByZXN0YXJ0OiB1bmxlc3Mtc3RvcHBlZFxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfREI6IHBsdW5rXG4gICAgICBQT1NUR1JFU19VU0VSOiBwbHVua1xuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gcG9zdGdyZXNfZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgcGx1bmtcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG5cbiAgcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjctYWxwaW5lXG4gICAgcmVzdGFydDogdW5sZXNzLXN0b3BwZWRcbiAgICBjb21tYW5kOiByZWRpcy1zZXJ2ZXIgLS1hcHBlbmRvbmx5IHllc1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHJlZGlzX2RhdGE6L2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRFwiLCBcInJlZGlzLWNsaVwiLCBcInBpbmdcIl1cbiAgICAgIGludGVydmFsOiAxMHNcbiAgICAgIHRpbWVvdXQ6IDVzXG4gICAgICByZXRyaWVzOiA1XG5cbiAgbWluaW86XG4gICAgaW1hZ2U6IG1pbmlvL21pbmlvOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgY29tbWFuZDogc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzIFwiOjkwMDFcIlxuICAgIGVudmlyb25tZW50OlxuICAgICAgTUlOSU9fUk9PVF9VU0VSOiAke01JTklPX1JPT1RfVVNFUn1cbiAgICAgIE1JTklPX1JPT1RfUEFTU1dPUkQ6ICR7TUlOSU9fUk9PVF9QQVNTV09SRH1cbiAgICB2b2x1bWVzOlxuICAgICAgLSBtaW5pb19kYXRhOi9kYXRhXG4gICAgcG9ydHM6XG4gICAgICAtIDkwMDBcbiAgICAgIC0gOTAwMVxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiY3VybFwiLCBcIi1mXCIsIFwiaHR0cDovL2xvY2FsaG9zdDo5MDAwL21pbmlvL2hlYWx0aC9saXZlXCJdXG4gICAgICBpbnRlcnZhbDogMzBzXG4gICAgICB0aW1lb3V0OiAyMHNcbiAgICAgIHJldHJpZXM6IDNcblxuICAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICMgUGx1bmsgQXBwbGljYXRpb25cbiAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHBsdW5rOlxuICAgIGltYWdlOiBnaGNyLmlvL3VzZXBsdW5rL3BsdW5rOmxhdGVzdFxuICAgIHJlc3RhcnQ6IHVubGVzcy1zdG9wcGVkXG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAjIFNlcnZpY2UgbW9kZSAtIHJ1bnMgYWxsIHNlcnZpY2VzIGluIG9uZSBjb250YWluZXJcbiAgICAgIFNFUlZJQ0U6IGFsbFxuICAgICAgTk9ERV9FTlY6IHByb2R1Y3Rpb25cblxuICAgICAgIyBEYXRhYmFzZVxuICAgICAgREFUQUJBU0VfVVJMOiBwb3N0Z3Jlc3FsOi8vcGx1bms6JHtEQl9QQVNTV09SRH1AcG9zdGdyZXM6NTQzMi9wbHVua1xuICAgICAgRElSRUNUX0RBVEFCQVNFX1VSTDogcG9zdGdyZXNxbDovL3BsdW5rOiR7REJfUEFTU1dPUkR9QHBvc3RncmVzOjU0MzIvcGx1bmtcblxuICAgICAgIyBSZWRpc1xuICAgICAgUkVESVNfVVJMOiAke1JFRElTX1VSTH1cblxuICAgICAgIyBTZWN1cml0eVxuICAgICAgSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuXG4gICAgICAjIE5naW54IGNvbmZpZ3VyYXRpb25cbiAgICAgIE5HSU5YX1BPUlQ6ICR7TkdJTlhfUE9SVH1cblxuICAgICAgIyBEb21haW4gY29uZmlndXJhdGlvbiAoc3ViZG9tYWluLWJhc2VkIHJvdXRpbmcpXG4gICAgICBBUElfRE9NQUlOOiAke0FQSV9ET01BSU59XG4gICAgICBEQVNIQk9BUkRfRE9NQUlOOiAke0RBU0hCT0FSRF9ET01BSU59XG4gICAgICBMQU5ESU5HX0RPTUFJTjogJHtMQU5ESU5HX0RPTUFJTn1cbiAgICAgIFdJS0lfRE9NQUlOOiAke1dJS0lfRE9NQUlOfVxuICAgICAgVVNFX0hUVFBTOiAke1VTRV9IVFRQU31cblxuICAgICAgIyBBV1MgU0VTIChmb3Igc2VuZGluZyBlbWFpbHMpIC0gUkVRVUlSRURcbiAgICAgIEFXU19TRVNfUkVHSU9OOiAke0FXU19TRVNfUkVHSU9OfVxuICAgICAgQVdTX1NFU19BQ0NFU1NfS0VZX0lEOiAke0FXU19TRVNfQUNDRVNTX0tFWV9JRH1cbiAgICAgIEFXU19TRVNfU0VDUkVUX0FDQ0VTU19LRVk6ICR7QVdTX1NFU19TRUNSRVRfQUNDRVNTX0tFWX1cbiAgICAgIFNFU19DT05GSUdVUkFUSU9OX1NFVDogJHtTRVNfQ09ORklHVVJBVElPTl9TRVR9XG4gICAgICBTRVNfQ09ORklHVVJBVElPTl9TRVRfTk9fVFJBQ0tJTkc6ICR7U0VTX0NPTkZJR1VSQVRJT05fU0VUX05PX1RSQUNLSU5HfVxuXG4gICAgICAjIE9wdGlvbmFsOiBPQXV0aFxuICAgICAgR0lUSFVCX09BVVRIX0NMSUVOVDogJHtHSVRIVUJfT0FVVEhfQ0xJRU5UfVxuICAgICAgR0lUSFVCX09BVVRIX1NFQ1JFVDogJHtHSVRIVUJfT0FVVEhfU0VDUkVUfVxuICAgICAgR09PR0xFX09BVVRIX0NMSUVOVDogJHtHT09HTEVfT0FVVEhfQ0xJRU5UfVxuICAgICAgR09PR0xFX09BVVRIX1NFQ1JFVDogJHtHT09HTEVfT0FVVEhfU0VDUkVUfVxuXG4gICAgICAjIE9wdGlvbmFsOiBTdHJpcGVcbiAgICAgIFNUUklQRV9TSzogJHtTVFJJUEVfU0t9XG4gICAgICBTVFJJUEVfV0VCSE9PS19TRUNSRVQ6ICR7U1RSSVBFX1dFQkhPT0tfU0VDUkVUfVxuICAgICAgU1RSSVBFX1BSSUNFX09OQk9BUkRJTkc6ICR7U1RSSVBFX1BSSUNFX09OQk9BUkRJTkd9XG4gICAgICBTVFJJUEVfUFJJQ0VfRU1BSUxfVVNBR0U6ICR7U1RSSVBFX1BSSUNFX0VNQUlMX1VTQUdFfVxuICAgICAgU1RSSVBFX01FVEVSX0VWRU5UX05BTUU6ICR7U1RSSVBFX01FVEVSX0VWRU5UX05BTUV9XG5cbiAgICAgICMgUzMtY29tcGF0aWJsZSBzdG9yYWdlIChNaW5pbylcbiAgICAgIFMzX0VORFBPSU5UOiAke1MzX0VORFBPSU5UfVxuICAgICAgUzNfQUNDRVNTX0tFWV9JRDogJHtTM19BQ0NFU1NfS0VZX0lEfVxuICAgICAgUzNfQUNDRVNTX0tFWV9TRUNSRVQ6ICR7UzNfQUNDRVNTX0tFWV9TRUNSRVR9XG4gICAgICBTM19CVUNLRVQ6ICR7UzNfQlVDS0VUfVxuICAgICAgUzNfUFVCTElDX1VSTDogJHtTM19QVUJMSUNfVVJMfVxuICAgICAgUzNfRk9SQ0VfUEFUSF9TVFlMRTogJHtTM19GT1JDRV9QQVRIX1NUWUxFfVxuXG4gICAgICAjIFNNVFAgU2VydmVyIChmb3Igc2VuZGluZyBlbWFpbHMgdmlhIFNNVFApXG4gICAgICBTTVRQX0RPTUFJTjogJHtTTVRQX0RPTUFJTn1cbiAgICAgIFBPUlRfU0VDVVJFOiAke1BPUlRfU0VDVVJFfVxuICAgICAgUE9SVF9TVUJNSVNTSU9OOiAke1BPUlRfU1VCTUlTU0lPTn1cblxuICAgICAgIyBJbnRlcm5hbFxuICAgICAgUExVTktfQVBJX0tFWTogJHtQTFVOS19BUElfS0VZfVxuICAgICAgUExVTktfRlJPTV9BRERSRVNTOiAke1BMVU5LX0ZST01fQUREUkVTU31cblxuICAgIHZvbHVtZXM6XG4gICAgICAjIE1vdW50IFRyYWVmaWsgY2VydGlmaWNhdGVzIGZvciBTU0xcbiAgICAgIC0gL2V0Yy9kb2twbG95L3RyYWVmaWsvZHluYW1pYy9hY21lLmpzb246L2NlcnRzL2FjbWUuanNvbjpyb1xuXG4gICAgcG9ydHM6XG4gICAgICAjIE1haW4gbmdpbnggcG9ydCAoaGFuZGxlcyBhbGwgc3ViZG9tYWluIHJvdXRpbmcpXG4gICAgICAtIDgwXG4gICAgICAjIFNNVFAgcG9ydHMgKGZvciBlbWFpbCByZWxheSlcbiAgICAgIC0gNDY1XG4gICAgICAtIDU4N1xuXG4gICAgZGVwZW5kc19vbjpcbiAgICAgIHBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcmVkaXM6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5XG4gICAgICBtaW5pbzpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHlcblxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwiY3VybFwiLCBcIi1mXCIsIFwiaHR0cDovL2xvY2FsaG9zdDo4MC9cIl1cbiAgICAgIGludGVydmFsOiAzMHNcbiAgICAgIHRpbWVvdXQ6IDEwc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiA2MHNcblxudm9sdW1lczpcbiAgcG9zdGdyZXNfZGF0YTpcbiAgICBkcml2ZXI6IGxvY2FsXG4gIHJlZGlzX2RhdGE6XG4gICAgZHJpdmVyOiBsb2NhbFxuICBtaW5pb19kYXRhOlxuICAgIGRyaXZlcjogbG9jYWxcbiAgcGx1bmtfZGF0YTpcbiAgICBkcml2ZXI6IGxvY2FsXG4iLAogICJjb25maWciOiAiW3ZhcmlhYmxlc11cbiMgR2VuZXJhdGUgdW5pcXVlIGRvbWFpbnMgZm9yIGVhY2ggc2VydmljZVxuYXBpX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmRhc2hib2FyZF9kb21haW4gPSBcIiR7ZG9tYWlufVwiXG5sYW5kaW5nX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbndpa2lfZG9tYWluID0gXCIke2RvbWFpbn1cIlxubWluaW9fZG9tYWluID0gXCIke2RvbWFpbn1cIlxuXG4jIERhdGFiYXNlIGNyZWRlbnRpYWxzXG5wb3N0Z3Jlc19wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG4jIFNlY3VyaXR5XG5qd3Rfc2VjcmV0ID0gXCIke3Bhc3N3b3JkOjY0fVwiXG5cbiMgTWluaW8gY3JlZGVudGlhbHNcbm1pbmlvX3Jvb3RfdXNlciA9IFwicGx1bmtcIlxubWluaW9fcm9vdF9wYXNzd29yZCA9IFwiJHtwYXNzd29yZDozMn1cIlxuXG5bY29uZmlnXVxuaXNvbGF0ZWQgPSB0cnVlXG5cbiMgQVBJIERvbWFpblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicGx1bmtcIlxucG9ydCA9IDgwXG5ob3N0ID0gXCIke2FwaV9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIERhc2hib2FyZCBEb21haW5cbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcInBsdW5rXCJcbnBvcnQgPSA4MFxuaG9zdCA9IFwiJHtkYXNoYm9hcmRfZG9tYWlufVwiXG5wYXRoID0gXCIvXCJcblxuIyBMYW5kaW5nIFBhZ2UgRG9tYWluXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJwbHVua1wiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7bGFuZGluZ19kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIERvY3VtZW50YXRpb24gRG9tYWluXG5bW2NvbmZpZy5kb21haW5zXV1cbnNlcnZpY2VOYW1lID0gXCJwbHVua1wiXG5wb3J0ID0gODBcbmhvc3QgPSBcIiR7d2lraV9kb21haW59XCJcbnBhdGggPSBcIi9cIlxuXG4jIE1pbmlvIENvbnNvbGUgRG9tYWluIChvcHRpb25hbClcbltbY29uZmlnLmRvbWFpbnNdXVxuc2VydmljZU5hbWUgPSBcIm1pbmlvXCJcbnBvcnQgPSA5MDAxXG5ob3N0ID0gXCIke21pbmlvX2RvbWFpbn1cIlxucGF0aCA9IFwiL1wiXG5cbltjb25maWcuZW52XVxuIyBEYXRhYmFzZVxuREJfUEFTU1dPUkQgPSBcIiR7cG9zdGdyZXNfcGFzc3dvcmR9XCJcblxuIyBSZWRpc1xuUkVESVNfVVJMID0gXCJyZWRpczovL3JlZGlzOjYzNzlcIlxuXG4jIFNlY3VyaXR5XG5KV1RfU0VDUkVUID0gXCIke2p3dF9zZWNyZXR9XCJcblxuIyBOZ2lueCBjb25maWd1cmF0aW9uXG5OR0lOWF9QT1JUID0gXCI4MFwiXG5cbiMgRG9tYWluIGNvbmZpZ3VyYXRpb24gKHN1YmRvbWFpbi1iYXNlZCByb3V0aW5nKVxuQVBJX0RPTUFJTiA9IFwiJHthcGlfZG9tYWlufVwiXG5EQVNIQk9BUkRfRE9NQUlOID0gXCIke2Rhc2hib2FyZF9kb21haW59XCJcbkxBTkRJTkdfRE9NQUlOID0gXCIke2xhbmRpbmdfZG9tYWlufVwiXG5XSUtJX0RPTUFJTiA9IFwiJHt3aWtpX2RvbWFpbn1cIlxuVVNFX0hUVFBTID0gXCJ0cnVlXCJcblxuIyBBV1MgU0VTIChSZXF1aXJlZCAtIHVzZXJzIG11c3QgY29uZmlndXJlIHRoZXNlIGZvciBlbWFpbCB0byB3b3JrKVxuQVdTX1NFU19SRUdJT04gPSBcInVzLWVhc3QtMVwiXG5BV1NfU0VTX0FDQ0VTU19LRVlfSUQgPSBcIjx5b3VyLWF3cy1zZXMtYWNjZXNzLWtleS1pZD5cIlxuQVdTX1NFU19TRUNSRVRfQUNDRVNTX0tFWSA9IFwiPHlvdXItYXdzLXNlcy1zZWNyZXQtYWNjZXNzLWtleT5cIlxuU0VTX0NPTkZJR1VSQVRJT05fU0VUID0gXCI8eW91ci1zZXMtY29uZmlndXJhdGlvbi1zZXQ+XCJcblxuIyBTMy1jb21wYXRpYmxlIHN0b3JhZ2UgKE1pbmlvKVxuTUlOSU9fUk9PVF9VU0VSID0gXCIke21pbmlvX3Jvb3RfdXNlcn1cIlxuTUlOSU9fUk9PVF9QQVNTV09SRCA9IFwiJHttaW5pb19yb290X3Bhc3N3b3JkfVwiXG5TM19FTkRQT0lOVCA9IFwiaHR0cDovL21pbmlvOjkwMDBcIlxuUzNfQUNDRVNTX0tFWV9JRCA9IFwiJHttaW5pb19yb290X3VzZXJ9XCJcblMzX0FDQ0VTU19LRVlfU0VDUkVUID0gXCIke21pbmlvX3Jvb3RfcGFzc3dvcmR9XCJcblMzX0JVQ0tFVCA9IFwidXBsb2Fkc1wiXG5TM19QVUJMSUNfVVJMID0gXCJodHRwczovLyR7bWluaW9fZG9tYWlufS91cGxvYWRzXCJcblMzX0ZPUkNFX1BBVEhfU1RZTEUgPSBcInRydWVcIlxuXG4jIE1pbmlvIHBvcnRzXG5NSU5JT19BUElfUE9SVCA9IFwiOTAwMFwiXG5NSU5JT19DT05TT0xFX1BPUlQgPSBcIjkwMDFcIlxuXG4jIFNNVFAgU2VydmVyIHBvcnRzXG5QT1JUX1NFQ1VSRSA9IFwiNDY1XCJcblBPUlRfU1VCTUlTU0lPTiA9IFwiNTg3XCJcblxuIyBOb3RpZmljYXRpb25zIChudGZ5LnNoKVxuTlRGWV9VUkwgPSBcImh0dHA6Ly9udGZ5L3BsdW5rLW5vdGlmaWNhdGlvbnNcIlxuXG4jIE9wdGlvbmFsOiBPQXV0aCAobGVhdmUgZW1wdHkgaWYgbm90IHVzaW5nKVxuR0lUSFVCX09BVVRIX0NMSUVOVCA9IFwiXCJcbkdJVEhVQl9PQVVUSF9TRUNSRVQgPSBcIlwiXG5HT09HTEVfT0FVVEhfQ0xJRU5UID0gXCJcIlxuR09PR0xFX09BVVRIX1NFQ1JFVCA9IFwiXCJcblxuIyBPcHRpb25hbDogU3RyaXBlIChsZWF2ZSBlbXB0eSBpZiBub3QgdXNpbmcpXG5TVFJJUEVfU0sgPSBcIlwiXG5TVFJJUEVfV0VCSE9PS19TRUNSRVQgPSBcIlwiXG5TVFJJUEVfUFJJQ0VfT05CT0FSRElORyA9IFwiXCJcblNUUklQRV9QUklDRV9FTUFJTF9VU0FHRSA9IFwiXCJcblNUUklQRV9NRVRFUl9FVkVOVF9OQU1FID0gXCJlbWFpbHNcIlxuXG4jIEludGVybmFsXG5QTFVOS19BUElfS0VZID0gXCJcIlxuUExVTktfRlJPTV9BRERSRVNTID0gXCJcIlxuU01UUF9ET01BSU4gPSBcIlwiIgp9Links
Tags
email, newsletter, mailing-list, marketing
Version: latest