Alternative to Buffer/Hootsuite. Schedule posts to Twitter/X, LinkedIn, Instagram, Facebook, TikTok and 20+ more platforms.
./local/deploy.sh postiz --ssh=ALIAS --domain-type=cloudflare --domain=postiz.example.com# Default: bundled PostgreSQL + Redis (zero config)
./local/deploy.sh postiz --ssh=ALIAS --domain-type=cloudflare --domain=postiz.example.com
# External PostgreSQL
./local/deploy.sh postiz --ssh=ALIAS --db-source=custom --domain-type=cloudflare --domain=postiz.example.com
# External Redis (auto-detected on host)
POSTIZ_REDIS=external ./local/deploy.sh postiz --ssh=ALIAS --domain-type=cloudflare --domain=postiz.example.com- RAM: 4GB minimum (~3.5-4GB total: Postiz ~3GB + Temporal ~512M + PostgreSQL ~256M + Redis ~128M)
- Disk: ~3.5GB (Docker images)
- Port: 5000 (main app)
- Database: PostgreSQL 17 (bundled by default, or external via
--db-source=custom) - Domain: required (HTTPS needed for OAuth callbacks)
Dedicated server recommended. Postiz alone peaks at ~2.2GB RAM during webpack build. Do not install alongside other heavy services.
| Container | Image | RAM | Role | Bundled? |
|---|---|---|---|---|
| postiz | ghcr.io/gitroomhq/postiz-app:latest | ~3GB | App (Next.js + Nest.js) | always |
| postiz-postgres | postgres:17-alpine | ~256MB | Postiz database | default (skip with --db-source=custom) |
| postiz-redis | redis:7.2-alpine | ~128MB | Cache + queues | default (skip with POSTIZ_REDIS=external) |
| temporal | temporalio/auto-setup:1.29.3 | ~512MB | Workflow engine | always |
| temporal-postgresql | postgres:16-alpine | ~256MB | Temporal database | always |
| temporal-ui | temporalio/ui:2.34.0 | ~256MB | Temporal panel | always |
Temporal UI port: defaults to
8080. If that port is occupied (e.g. by NocoDB), install.sh auto-increments to find a free port. Check the actual port in the compose file after installation.
- Open the app in browser → create an admin account
- Disable registration after creating your account:
ssh ALIAS 'cd /opt/stacks/postiz && sed -i "/IS_GENERAL/a\ - DISABLE_REGISTRATION=true" docker-compose.yaml && docker compose up -d' - Fill in API keys for the platforms you want to use:
ssh ALIAS 'nano /opt/stacks/postiz/.env' # After saving: ssh ALIAS 'cd /opt/stacks/postiz && docker compose up -d'
The .env file is downloaded automatically from the official Postiz repo during installation.
Twitter/X, LinkedIn, Instagram, Facebook, TikTok, YouTube, Pinterest, Reddit, Mastodon, Bluesky, Threads, Discord, Slack, Telegram and more (20+).
Platform-specific notes:
- Facebook/Instagram: switch app from Development → Live (otherwise posts are visible only to you!)
- LinkedIn: add the "Advertising API" product (without it tokens don't refresh!)
- TikTok: domain with uploads must be verified in TikTok Developer Account
- YouTube: after configuring Brand Account, wait ~5h for propagation
- Threads: complex setup — docs.postiz.com/providers/threads
- Discord/Slack: app icon is required (without it you get 404)
Docs: docs.postiz.com/providers
- API:
https://<domain>/api/public/v1 - MCP (built-in):
https://<domain>/mcp/<API-KEY>/sse - Auth: API key from Settings,
Authorizationheader - Rate limit: 30 req/h
{
"mcpServers": {
"postiz": {
"url": "https://<domain>/mcp/<API-KEY>/sse"
}
}
}Docs: docs.postiz.com/public-api
- Dedicated server — 4-6 containers, ~3.5-4GB RAM
- Slow start — Temporal + Next.js take ~90-120s to boot
- HTTPS required — most OAuth providers require HTTPS for callback URLs
- SSH tunnel without domain — Postiz sets secure cookies; login over HTTP won't work. Add
NOT_SECURED=trueto docker-compose (dev/tunnel only!)
Data in /opt/stacks/postiz/:
config/— configurationuploads/— uploaded mediapostgres-data/— Postiz databaseredis-data/— Redis cachetemporal-postgres-data/— Temporal database.env— social platform API keys