.env.example to .env and fill in the values relevant to your deployment. The bundled Compose stack requires the database, Redis, Temporal, and MinIO variables shown below; some application checks are diagnostic rather than startup validation.
This page is for people running their own PostSider instance. On PostSider Cloud, the instance is already configured - you only manage your account, channels, and API keys.
Core and URLs
Required secrets and database
Docker storage (MinIO)
Cloudflare R2 (
STORAGE_PROVIDER=cloudflare): CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_ACCESS_KEY, CLOUDFLARE_SECRET_ACCESS_KEY, CLOUDFLARE_BUCKETNAME, CLOUDFLARE_BUCKET_URL, CLOUDFLARE_REGION.
Temporal
Self-hosting flags
Invitations, password resets, activation links, and approval notifications are sent through the configured provider. If email is not configured, deliver invite and reset links manually.
AI
Self-hosted instances can instead let each organization provide its own key under Settings → Post Checker. See AI Assistant.
Social platform credentials
Each OAuth platform reads its app credentials from environment variables. Configure only the platforms you use and register each callback athttps://your-domain.com/integrations/social/<provider>:
X_API_KEY/X_API_SECRET, LINKEDIN_CLIENT_ID/LINKEDIN_CLIENT_SECRET, GITHUB_CLIENT_ID/GITHUB_CLIENT_SECRET, FACEBOOK_APP_ID/FACEBOOK_APP_SECRET, INSTAGRAM_APP_ID/INSTAGRAM_APP_SECRET, THREADS_APP_ID/THREADS_APP_SECRET, YOUTUBE_CLIENT_ID/YOUTUBE_CLIENT_SECRET, GOOGLE_GMB_CLIENT_ID/GOOGLE_GMB_CLIENT_SECRET, TIKTOK_CLIENT_ID/TIKTOK_CLIENT_SECRET, PINTEREST_CLIENT_ID/PINTEREST_CLIENT_SECRET, DRIBBBLE_CLIENT_ID/DRIBBBLE_CLIENT_SECRET, DISCORD_CLIENT_ID/DISCORD_CLIENT_SECRET/DISCORD_BOT_TOKEN_ID, SLACK_ID/SLACK_SECRET, TWITCH_CLIENT_ID/TWITCH_CLIENT_SECRET, WHOP_CLIENT_ID, MASTODON_URL/MASTODON_CLIENT_ID/MASTODON_CLIENT_SECRET, TELEGRAM_TOKEN/TELEGRAM_BOT_NAME/NEXT_PUBLIC_TELEGRAM_BOT_NAME, NEYNAR_CLIENT_ID/NEYNAR_SECRET_KEY.
Credential-based platforms (Bluesky, Nostr, WordPress, Medium, and other token/username-password providers) are connected directly in the dashboard and need no environment variable. See the Channels guides for per-platform details.
Billing (Polar)
LeavingPOLAR_ACCESS_TOKEN empty keeps a self-hosted instance unlimited. To enable managed billing, configure the token, server (sandbox or production), webhook secret, and all eight product mappings for Standard/Team/Pro/Ultimate monthly and yearly products (POLAR_PRODUCT_*). On Cloud these are set for you. See Billing.
Generic OIDC / SSO
Connect an external identity provider (for example Authentik):POSTSIDER_GENERIC_OAUTH, POSTSIDER_OAUTH_URL, POSTSIDER_OAUTH_AUTH_URL, POSTSIDER_OAUTH_TOKEN_URL, POSTSIDER_OAUTH_USERINFO_URL, POSTSIDER_OAUTH_CLIENT_ID, POSTSIDER_OAUTH_CLIENT_SECRET, NEXT_PUBLIC_POSTSIDER_OAUTH_DISPLAY_NAME, NEXT_PUBLIC_POSTSIDER_OAUTH_LOGO_URL.
Short-link providers (optional)
DUB_TOKEN/DUB_API_ENDPOINT/DUB_SHORT_LINK_DOMAIN, KUTT_API_KEY/KUTT_API_ENDPOINT/KUTT_SHORT_LINK_DOMAIN, SHORT_IO_SECRET_KEY, LINK_DRIP_API_KEY/LINK_DRIP_API_ENDPOINT/LINK_DRIP_SHORT_LINK_DOMAIN.
Monitoring and analytics (optional)
Media and content
Public API rate limiting
Frontend build arguments
NEXT_PUBLIC_* values are baked into the frontend bundle at build time: NEXT_PUBLIC_BACKEND_URL, NEXT_PUBLIC_SELF_HOSTED, NEXT_PUBLIC_DISABLE_REGISTRATION, NEXT_PUBLIC_VERSION, NEXT_PUBLIC_TELEGRAM_BOT_NAME. Changing any of these requires rebuilding the image.
Other
Full example
A minimal production-ready.env:

