---
title: "Deploy Postiz"
description: "Self-Host Postiz (Temporal). Schedule posts in 30+ social platforms with AI"
category: "Automation"
url: https://railway.com/deploy/postiz-with-temporal
---

# Deploy Postiz

Self-Host Postiz (Temporal). Schedule posts in 30+ social platforms with AI

**[Deploy Postiz on Railway](https://railway.com/template/postiz-with-temporal)**

- **Creator:** Heimdall
- **Category:** Automation
- **Total deploys:** 68

## Template content

### postiz_postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:17

### temporal_server https://docs.temporal.io/img/favicon.png

- **Image:** temporalio/auto-setup

### temporal-postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:17

### postiz-app https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postiz.svg

- **Image:** ghcr.io/gitroomhq/postiz-app:latest
- **Public domain:** Yes

### elasticsearch-railway https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/elasticsearch.svg

- **Source:** https://github.com/praveen-ks-2001/elasticsearch-railway

### temporal-ui https://docs.temporal.io/img/favicon.png

- **Image:** temporalio/ui
- **Public domain:** Yes

### postiz_redis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2.1
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### temporal-admin-tools https://djeqr6to3dedg.cloudfront.net/repo-logos/temporalio/admin-tools/live/logo-1731448348189.png

- **Image:** temporalio/admin-tools

## Documentation

![postiz dashboard screenshot](https://repository-images.githubusercontent.com/664013991/8b16b484-683a-4ed9-a132-6d070704cc12)

# Deploy and Host Postiz [with Temporal]

Deploy a fully self-hosted social media scheduling platform on Railway with one click. This template provisions all 8 required services — Postiz app, two Postgres databases, Redis, Temporal workflow engine, Temporal UI, admin tools, and Elasticsearch — pre-wired with private networking and auto-generated secrets.

![postiz railway deployment](https://res.cloudinary.com/asset-cloudinary/image/upload/v1772992354/postiz_on_railway_ict9aj.png)

## About Hosting Postiz [with Temporal]

Postiz is an open-source alternative to Buffer and Hootsuite, supporting 30+ platforms including X, Instagram, LinkedIn, Threads, Bluesky, Mastodon, TikTok, Reddit, and YouTube. Since v2.12.0, Postiz replaced BullMQ with **Temporal** for all background job processing — scheduled posting, token refresh, email digests, and streak tracking. 

**Key features:**
- Visual content calendar with AI writing assistant
- Multi-platform publishing (30+ networks)
- Team collaboration and approval workflows
- Built-in analytics dashboard
- Fully open-source (`ghcr.io/gitroomhq/postiz-app:latest`)

![postiz-with-temporal dashboard screenshot](https://github.com/user-attachments/assets/a27ee220-beb7-4c7e-8c1b-2c44301f82ef)

**Architecture (8 services):**
`postiz` → `postiz-postgres` + `redis` + `temporal-server` → `temporal-postgres` + `elasticsearch` + `temporal-ui` + `temporal-admin-tools`

The Elasticsearch service uses a custom-wrapped image  because Railway rejects dotted env var names like `cluster.routing.allocation.disk.watermark.low`. The wrapper bakes config into `elasticsearch.yml` at build time and fixes volume permissions at runtime via a custom entrypoint.

## Why Deploy Postiz [with Temporal]

Standing up this 8-service stack manually on a VPS means writing Docker Compose files, managing inter-service DNS, handling secrets, and debugging Temporal's Elasticsearch integration from scratch. On Railway:

- All services communicate over **private networking** — no exposed ports between internal services
- Secrets like `JWT_SECRET` are auto-generated at deploy time
- Environment variable references (`${{service.VAR}}`) wire services together automatically
- Zero-downtime redeploys and persistent volumes are managed for you
- The Elasticsearch permission-fix complexity is already solved in the template

## Common Use Cases of Postiz [with Temporal]

- **Marketing agencies** managing multiple client social accounts from one dashboard with team-based access controls
- **Content creators** automating cross-platform publishing schedules while tracking engagement analytics
- **Developer teams** building agent/API-driven publishing workflows using Postiz's public API and MCP tools
- **Privacy-conscious businesses** that need full data ownership and can't use SaaS tools due to compliance requirements

## Dependencies for Postiz [with Temporal]


- PostgreSQL (×2 — one for Postiz, one for Temporal)
- Redis (session state and caching)
- Temporal Server (`temporalio/auto-setup`)
- Elasticsearch (Temporal workflow visibility backend)

### Environment Variables Reference

| Variable | Service | Description | Required |
|---|---|---|---|
| `MAIN_URL` | postiz | Primary public URL | ✅ |
| `JWT_SECRET` | postiz | Auth token signing secret | ✅ |
| `DATABASE_URL` | postiz | Postiz Postgres connection string | ✅ |
| `REDIS_URL` | postiz | Redis connection for queues | ✅ |
| `TEMPORAL_ADDRESS` | postiz | Temporal server endpoint | ✅ |
| `IS_GENERAL` | postiz | Enable multi-user mode | ✅ |
| `DISABLE_REGISTRATION` | postiz | Lock signups after setup | Optional |
| `STORAGE_PROVIDER` | postiz | `local` or `cloudflare-r2` | ✅ |
| `OPENAI_API_KEY` | postiz | Enable AI assistant | Optional |
| `ELASTIC_PASSWORD` | elasticsearch | Elasticsearch auth password | ✅ |
| `ES_JAVA_OPTS` | elasticsearch | JVM heap (`-Xms256m -Xmx512m`) | ✅ |
| `ENABLE_ES` | temporal-server | Enable Elasticsearch visibility | ✅ |
| `POSTGRES_SEEDS` | temporal-server | Temporal Postgres host | ✅ |

### Deployment Dependencies 

- Docker images: `ghcr.io/gitroomhq/postiz-app:latest`, `temporalio/auto-setup`, `temporalio/admin-tools`, `ghcr.io/temporalio/ui:latest`
- Source: [github.com/gitroomhq/postiz-app](https://github.com/gitroomhq/postiz-app)
- Docs: [docs.postiz.com](https://docs.postiz.com)
- Minimum recommended resources: 2 vCPU, 4 GB RAM for the Postiz service

## Postiz vs Buffer vs Hootsuite

| | Postiz (self-hosted) | Buffer | Hootsuite |
|---|---|---|---|
| Cost | Free (infra only) | $6–$120/mo | $99+/mo |
| Open source | ✅ | ❌ | ❌ |
| Bluesky/Mastodon | ✅ | ❌ | ❌ |
| AI content tools | ✅ | Limited | Limited |
| Data ownership | Full | ❌ | ❌ |
| Temporal workflows | ✅ v2.12+ | N/A | N/A |

Postiz is the only option if you need Fediverse platform support, full data sovereignty, or programmatic publishing via API/MCP.

## Getting Started After Deployment

Once Railway finishes provisioning all 8 services, open the Postiz public URL (your `MAIN_URL`). Register the first admin account — set `DISABLE_REGISTRATION="true"` afterward to lock signups. Navigate to **Settings → Providers** and add OAuth credentials for each social platform you want to connect. Create your first post from the calendar view and verify it appears in the Temporal UI (exposed on port 8080) as a scheduled workflow.


## Troubleshooting

**Postiz crashes on startup** — Check that `TEMPORAL_ADDRESS` resolves. Temporal's auto-setup takes 30–60 seconds; Postiz may need a manual restart after Temporal is healthy.

**Elasticsearch fails to start** — The custom entrypoint runs `chown` on the mounted volume. If the volume mount races ahead of the entrypoint, restart the elasticsearch service once.

**Temporal UI shows no workflows** — Confirm `ENABLE_ES=true` and that `ES_SEEDS` points to the correct private domain. Check elasticsearch logs for heap errors; increase `ES_JAVA_OPTS` if needed.


## Is Postiz Free to Self-Host?

Postiz is fully open-source (Apache 2.0). There are no licensing fees. Your only cost is Railway infrastructure — typically $20–$40/month for this 8-service stack depending on usage. A managed Temporal Cloud option exists at [temporal.io/cloud](https://temporal.io/cloud) if you want to reduce operational overhead, but this template runs everything self-contained.

## FAQ

**Is Postiz a self-hosted alternative to Buffer?**
Yes. Postiz is an open-source social media scheduler with self-hosting capabilities, designed as a drop-in replacement for tools like Buffer, Hootsuite, and Hypefury — with no per-seat fees and full data ownership.

**Why does Postiz need Temporal?**
Since v2.12.0, Postiz uses Temporal as its workflow orchestration engine for all async operations: scheduling posts, refreshing OAuth tokens, sending emails, and tracking streaks. Temporal provides durable execution with automatic retries — if a post fails, Temporal retries it without data loss.

**Can I disable user registration after setup?**
Yes. Set `DISABLE_REGISTRATION="true"` in the Postiz service environment variables after creating your admin account.

**What's the difference between this template and the Postiz App template (without Temporal)?**
The simpler template runs Postiz v2.11.x without Temporal. You can find that one here - 
[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/deploy-postiz?referralCode=QXdhdr&utm_medium=integration&utm_source=template&utm_campaign=generic)
This template targets v2.12+ and includes the full Temporal stack. You cannot run v2.12+ without Temporal — the app will fail to start.

**Can I use Cloudflare R2 instead of local storage?**
Yes. Set `STORAGE_PROVIDER="cloudflare"` and add `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_ACCESS_KEY`, `CLOUDFLARE_SECRET_ACCESS_KEY`, and `CLOUDFLARE_BUCKETNAME` to the Postiz service.

**How do I enable the AI assistant in Postiz?**
Add `OPENAI_API_KEY=sk-...` to the Postiz service environment variables. The AI chat feature activates automatically.

## Similar templates

- [N8N Main + Worker](https://railway.com/deploy/n8n-main-worker) — Deploy and Host N8N with Inactive worker.
- [Evolution API with n8n](https://railway.com/deploy/evolution-api-with-n8n) — [Jul'26] WhatsApp automation platform using Evolution API, n8n & PostgreSQL
- [Postgres Backup](https://railway.com/deploy/postgres-s3-backups) — Cron-based PostgreSQL backup to bucket storage

Open this page in a browser: https://railway.com/deploy/postiz-with-temporal
