Railway

Deploy Postiz — Self-Hosted Social Scheduler, 30+ Platforms

Self-host Postiz — schedule 30+ platforms, no per-channel fees

Deploy Postiz — Self-Hosted Social Scheduler, 30+ Platforms

Just deployed

/data

Just deployed

/uploads

/var/lib/postgresql/data

Deploy and Host Postiz on Railway

Postiz is the open-source alternative to Buffer, Hypefury, and Later — schedule, publish, and analyze content across 30+ platforms from one dashboard, with AI-assisted writing and no per-channel fees. This template deploys the current version of Postiz correctly, including the Temporal workflow engine recent releases require to actually run scheduled posts — the multi-service piece that breaks most self-hosted attempts. Everything is pre-wired over private networking so posts publish on schedule from the first deploy.


What This Template Deploys

ServicePurpose
PostizThe scheduling app, dashboard, and API (Next.js + Node.js)
PostgreSQL (app)Postiz's own database — posts, accounts, and history
RedisJob queues and caching
TemporalWorkflow engine that executes scheduled posts (required on current versions)
PostgreSQL (Temporal)Temporal's separate database — kept apart from Postiz's
ElasticsearchTemporal's workflow visibility store

All services connect over Railway's private network — no database or queue ports are public. Persistent volumes hold uploads, both databases, and Redis data.


About Hosting

Postiz looks simple, but recent versions have a hard architectural requirement that catches almost everyone self-hosting — this template handles it.

Current Postiz requires Temporal — it won't run scheduled posts without it. As of v2.12, Postiz depends on Temporal, a workflow orchestration engine, to execute scheduled posts — the app can't do its core job without it. Temporal in turn needs its own separate PostgreSQL database and an Elasticsearch instance. That's why a naive "Postiz + Postgres + Redis" deploy on the latest version appears to run but silently never publishes. This template includes the full Temporal stack, wired correctly, so posts actually go out.

The Elasticsearch dotted-variable fix is Railway-specific. Elasticsearch expects config like cluster.routing.allocation.disk.watermark.low, but Railway rejects env var names with dots. This template uses a wrapped image that bakes the config into elasticsearch.yml at build time and fixes volume permissions on startup, so it runs where a stock image fails.

The URL variables must match your Railway domain for OAuth. MAIN_URL, FRONTEND_URL, and NEXT_PUBLIC_BACKEND_URL must point at your Railway public domain, because social platforms use them for OAuth callbacks. This template sets them automatically, so connecting X, LinkedIn, and the rest works once you add each platform's API keys.

Lock down registration after your first login. Postiz allows open signup by default. Create your admin account, then set DISABLE_REGISTRATION=true and redeploy so no one else can register.

Pin the version, and expect a first-boot pause. The template pins a specific release rather than latest. On first deploy, Postiz may need a moment (or a manual restart) after Temporal's 30–60 second auto-setup — a one-time ordering quirk, not a failure.

Typical cost: ~$15–25/month on Railway for the full stack, since Temporal and Elasticsearch add services beyond the base app. Postiz is open source and free — versus Buffer's per-channel pricing that climbs fast.


How It Compares

Postiz (self-hosted)BufferHypefuryLater
Cost modelFlat infraPer channel/monthSubscriptionPer social set
Platforms30+ incl. Fediverse~6X-focusedVisual-focused
AI contentBuilt-inAdd-onYesLimited
Data ownershipFull — your infraVendorVendorVendor
API / MCP publishingYesLimitedNoNo
Self-hostableYesNoNoNo

Buffer, Hypefury, and Later are polished but priced per channel or seat and keep your data on their servers. Postiz gives you 30+ platforms including Mastodon and the Fediverse, AI-assisted writing, and programmatic publishing via API/MCP — self-hosted, with your accounts and content on infrastructure you own and no per-channel fees.


Deploy in Under 5 Minutes

  1. Click Deploy on Railway — all services build and wire together (~5 minutes)
  2. Confirm the URL variables point at your Railway domain and JWT_SECRET is set
  3. Wait for Temporal's auto-setup, then open your Postiz domain and register the first admin account
  4. Set DISABLE_REGISTRATION=true and redeploy to lock signups
  5. In Settings → Providers, add OAuth credentials for each platform and start scheduling

Common Use Cases

  • Buffer alternative without per-channel fees — schedule unlimited channels at flat cost instead of paying per profile
  • Multi-platform scheduling — post to X, LinkedIn, Instagram, Facebook, Threads, Mastodon, Reddit, and more from one calendar
  • Fediverse publishing — one of the few schedulers with real Mastodon and Fediverse support
  • Agency and team workflows — manage many clients' accounts with team access, on your own infrastructure

Configuration

VariableRequiredDescription
MAIN_URLRequiredYour Railway public domain — used for OAuth callbacks
FRONTEND_URL / NEXT_PUBLIC_BACKEND_URLRequiredSame public domain (the backend adds /api)
JWT_SECRETRequiredSigns auth tokens — auto-generated at deploy; keep it stable
DATABASE_URLAuto-injectedPostiz's PostgreSQL via Railway reference variable
REDIS_URLAuto-injectedRedis connection via Railway reference variable
TEMPORAL_ADDRESSAuto-injectedTemporal server's private address on port 7233
DISABLE_REGISTRATIONRecommendedSet true after creating your admin account

Current Postiz needs the full Temporal stack. On v2.12+, scheduled posts won't execute without Temporal, its own PostgreSQL, and Elasticsearch. This template includes and wires all of them — a "Postiz + Postgres + Redis"-only deploy silently won't publish. Match the URL variables and lock registration. MAIN_URL, FRONTEND_URL, and NEXT_PUBLIC_BACKEND_URL must be your Railway domain for OAuth to work. After first login, set DISABLE_REGISTRATION=true and redeploy.


Dependencies for Postiz Hosting

  • Railway account — ~$15–25/month for the full Temporal-inclusive stack
  • PostgreSQL ×2, Redis, Temporal, and Elasticsearch (all included and wired)
  • OAuth API credentials for each social platform you connect
  • Persistent volumes for uploads and databases (included)

Deployment Dependencies

Implementation Details

The template runs a pinned Postiz release (ghcr.io/gitroomhq/postiz-app) as a unified Next.js + Node.js app, backed by its own PostgreSQL and Redis, plus a full Temporal stack: the Temporal server, a dedicated Temporal PostgreSQL, and an Elasticsearch visibility store. Services connect through Railway reference variables (DATABASE_URL, REDIS_URL, TEMPORAL_ADDRESS) over the private network, and PORT is set explicitly as a Railway variable rather than a Dockerfile default so routing reaches the container.

Since v2.12, Temporal is a hard dependency for executing scheduled posts, which is why the stack is larger than older Postgres-and-Redis-only setups. The Elasticsearch service uses a wrapped image because Railway rejects dotted env var names; the wrapper writes the required config into elasticsearch.yml at build time and fixes volume permissions via a custom entrypoint. Public URL variables are set to the Railway domain so OAuth callbacks resolve, and the JWT secret is auto-generated. Data persists across the provisioned volumes, so scheduled posts, accounts, and history survive redeploys; on first boot, Postiz may need a restart after Temporal's auto-setup completes.


Frequently Asked Questions

Why does Postiz need so many services now? Since v2.12, Postiz uses Temporal to execute scheduled posts, and Temporal needs its own PostgreSQL and Elasticsearch. Without them, the app runs but never publishes — which is why this template includes the full stack.

My older Postiz template stopped scheduling — why? Likely because it predates the Temporal requirement. On current versions, a Postgres-and-Redis-only setup starts but can't run the scheduler. This template adds the Temporal stack that recent Postiz needs.

Why the custom Elasticsearch image? Railway rejects environment variable names with dots, which Elasticsearch's config uses. The wrapped image bakes that config into a file at build time so it runs on Railway, where the stock image fails.

Does my data persist? Yes — Postiz's database and uploads and Temporal's database all live on volumes, so scheduled posts, accounts, and history survive redeploys.

Which platforms does Postiz support? 30+, including X, LinkedIn, Instagram, Facebook, Threads, Reddit, Mastodon, and other Fediverse platforms — broader than most managed schedulers, with API/MCP publishing.


Why Deploy Postiz on Railway?

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Postiz on Railway you get a self-hosted social scheduler that actually works on the current version — the required Temporal engine included and wired, the Railway-specific Elasticsearch fix applied, and OAuth URLs set automatically. Schedule 30+ platforms with AI-assisted content and no per-channel fees, on infrastructure you own.


Template Content

More templates in this category

View Template
N8N Main + Worker
Deploy and Host N8N with Inactive worker.

jakemerson
120
View Template
Evolution API with n8n
[Jul'26] WhatsApp automation platform using Evolution API, n8n & PostgreSQL

codestorm
60
View Template
Postgres Backup
Cron-based PostgreSQL backup to bucket storage

Railway Templates
869