Skip to main content

Configuration

Posta is configured via environment variables. All variables are prefixed with POSTA_.

Server

VariableDefaultDescription
POSTA_PORT9000HTTP server port
POSTA_ENVproductionEnvironment name
POSTA_DEV_MODEfalseDevelopment mode — stores emails without sending
POSTA_WEB_DIRweb/distPath to the dashboard frontend build
POSTA_WEB_URLPublic base URL of the Posta instance

Database (PostgreSQL)

VariableDefaultDescription
POSTA_DB_HOSTlocalhostDatabase host
POSTA_DB_PORT5432Database port
POSTA_DB_USERpostaDatabase user
POSTA_DB_PASSWORDpostaDatabase password
POSTA_DB_NAMEpostaDatabase name
POSTA_DB_SSL_MODEdisableSSL mode (disable, require, verify-full)
POSTA_DB_URLFull connection string (overrides individual settings)

Redis

VariableDefaultDescription
POSTA_REDIS_ADDRlocalhost:6379Redis address
POSTA_REDIS_PASSWORDRedis password

Security

VariableDefaultDescription
POSTA_JWT_SECRETRequired. JWT signing key. Must be changed in production.
POSTA_ADMIN_EMAILadmin@example.comInitial admin account email
POSTA_ADMIN_PASSWORDadmin1234Initial admin account password
POSTA_CORS_ORIGINS*Comma-separated allowed CORS origins

Features

VariableDefaultDescription
POSTA_REGISTRATION_ENABLEDtrueAllow new user registration
POSTA_OPENAPI_DOCStrueEnable Swagger/ReDoc API documentation
POSTA_METRICS_ENABLEDfalseEnable Prometheus metrics endpoint

Rate Limiting

VariableDefaultDescription
POSTA_AUTH_RATE_LIMIT_ENABLEDtrueEnable rate limiting on login/register endpoints
POSTA_RATE_LIMIT_HOURLY100Maximum emails per hour per user
POSTA_RATE_LIMIT_DAILY1000Maximum emails per day per user

Worker

VariableDefaultDescription
POSTA_EMBEDDED_WORKERtrueRun the worker within the API server process
POSTA_WORKER_CONCURRENCY10Number of worker goroutines
POSTA_WORKER_MAX_RETRIES5Maximum retry attempts per email

Webhooks

VariableDefaultDescription
POSTA_WEBHOOK_MAX_RETRIES3Maximum webhook delivery retries
POSTA_WEBHOOK_TIMEOUT_SECS10Webhook HTTP request timeout (seconds)

Example .env File

# Server
POSTA_PORT=9000
POSTA_ENV=production

# Database
POSTA_DB_HOST=localhost
POSTA_DB_USER=posta
POSTA_DB_PASSWORD=secure-password
POSTA_DB_NAME=posta
POSTA_DB_PORT=5432

# Redis
POSTA_REDIS_ADDR=localhost:6379

# Security
POSTA_JWT_SECRET=your-very-long-random-secret-key
POSTA_ADMIN_EMAIL=admin@yourdomain.com
POSTA_ADMIN_PASSWORD=strong-admin-password
POSTA_CORS_ORIGINS=https://dashboard.yourdomain.com

# Features
POSTA_REGISTRATION_ENABLED=false
POSTA_METRICS_ENABLED=true

# Rate Limiting
POSTA_AUTH_RATE_LIMIT_ENABLED=true
POSTA_RATE_LIMIT_HOURLY=500
POSTA_RATE_LIMIT_DAILY=5000

# Worker
POSTA_EMBEDDED_WORKER=true
POSTA_WORKER_CONCURRENCY=20