Open the server Apps tab
Select the tutorial-vps VPS, open the Apps tab, and start a new app deployment. Keep sensitive server details hidden before capturing or sharing screenshots.


Open-source social media scheduling tool with built-in Temporal workflows
Add your server credentials to Server Compass
Choose from our template library
Fill in settings and click Deploy
Use the Postiz template in Server Compass to deploy a self-hosted social media scheduling platform with Postgres, Redis, Temporal, and Elasticsearch, then verify the web UI in a browser.
Select the tutorial-vps VPS, open the Apps tab, and start a new app deployment. Keep sensitive server details hidden before capturing or sharing screenshots.

Click New App and choose the template deployment path so Server Compass can load the built-in catalog.

Use the template picker search to find Postiz in the Server Compass template catalog.

Choose the Postiz template. Server Compass fills the app service, Postgres, Redis, Temporal, Elasticsearch, upload volumes, and the published web ports.

Confirm the app name and web UI port. In this run, the app was named postiz-demo and used host port 4007.

Review the generated compose settings, confirm the Postiz web port is available, and click Deploy.

Keep the deployment modal open while Server Compass uploads the compose file, pulls the Postiz image, starts the container, and verifies the stack.

After deployment finishes, return to the Apps tab and confirm the Postiz app is marked Running with its application URL available.

Open the application URL in a browser. The Postiz signup or login page confirms the social scheduling app is reachable.

The Postiz web interface loaded successfully from the deployed container.
It deploys the Postiz app plus Postgres, Redis, Temporal, Elasticsearch, and a Temporal UI service.
The tutorial used host port 4007, which maps to the Postiz web UI on container port 5000.
Yes. Create the first account and configure social provider credentials before publishing posts.
No. The deployment guide should live on the Postiz template detail page and be linked from the reusable template deployment docs page.
Want full control? Here's how to deploy Postiz yourself using Docker Compose.
Initiate a secure shell connection to your server using the command below.
# Connect to your VPS
ssh root@your-server-ip
# Or with a specific SSH key
ssh -i ~/.ssh/your-key root@your-server-ipFirst time? Docker required! Install it with: curl -fsSL https://get.docker.com | sh
Organize your deployment by creating a dedicated project folder.
# Create and navigate to project directory
mkdir -p ~/apps/postiz
cd ~/apps/postizCreate a new docker-compose.yml file and paste this configuration:
services:
postiz:
image: ghcr.io/gitroomhq/postiz-app:latest
ports:
- "4007:5000"
environment:
- MAIN_URL=<your-main-url>
- FRONTEND_URL=<your-main-url>
- NEXT_PUBLIC_BACKEND_URL=<your-main-url>/api
- BACKEND_INTERNAL_URL=http://localhost:3000
- JWT_SECRET=<your-jwt-secret>
- DATABASE_URL=postgresql://postiz:<your-db-password>@postiz-postgres:5432/postiz
- REDIS_URL=redis://postiz-redis:6379
- STORAGE_PROVIDER=local
- UPLOAD_DIRECTORY=/uploads
- NEXT_PUBLIC_UPLOAD_DIRECTORY=/uploads
- IS_GENERAL=true
- DISABLE_REGISTRATION=false
- RUN_CRON=true
- TEMPORAL_ADDRESS=temporal:7233
volumes:
- postiz-config:/config/
- postiz-uploads:/uploads/
restart: unless-stopped
depends_on:
postiz-postgres:
condition: service_healthy
postiz-redis:
condition: service_healthy
temporal:
condition: service_started
postiz-postgres:
image: postgres:17-alpine
environment:
- POSTGRES_DB=postiz
- POSTGRES_USER=postiz
- POSTGRES_PASSWORD=<your-db-password>
volumes:
- postiz-postgres-data:/var/lib/postgresql/data
restart: unless-stopped
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postiz -d postiz"]
interval: 10s
timeout: 5s
retries: 5
postiz-redis:
image: redis:7.2
volumes:
- postiz-redis-data:/data
restart: unless-stopped
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
temporal:
image: temporalio/auto-setup:1.28.1
depends_on:
temporal-postgresql:
condition: service_started
temporal-elasticsearch:
condition: service_started
environment:
- DB=postgres12
- DB_PORT=5432
- POSTGRES_USER=temporal
- POSTGRES_PWD=temporal
- POSTGRES_SEEDS=temporal-postgresql
- ENABLE_ES=true
- ES_SEEDS=temporal-elasticsearch
- ES_VERSION=v7
restart: unless-stopped
temporal-postgresql:
image: postgres:16
environment:
- POSTGRES_USER=temporal
- POSTGRES_PASSWORD=temporal
volumes:
- temporal-postgres-data:/var/lib/postgresql/data
restart: unless-stopped
temporal-elasticsearch:
image: elasticsearch:7.17.27
environment:
- cluster.routing.allocation.disk.threshold_enabled=true
- cluster.routing.allocation.disk.watermark.low=512mb
- cluster.routing.allocation.disk.watermark.high=256mb
- cluster.routing.allocation.disk.watermark.flood_stage=128mb
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms256m -Xmx256m
- xpack.security.enabled=false
volumes:
- temporal-elasticsearch-data:/usr/share/elasticsearch/data
restart: unless-stopped
temporal-ui:
image: temporalio/ui:2.34.0
environment:
- TEMPORAL_ADDRESS=temporal:7233
- TEMPORAL_CORS_ORIGINS=http://localhost:3000
ports:
- "8080:8080"
depends_on:
temporal:
condition: service_started
restart: unless-stopped
volumes:
postiz-config:
postiz-uploads:
postiz-postgres-data:
postiz-redis-data:
temporal-postgres-data:
temporal-elasticsearch-data:
PORTPostiz web port(default: 4007)TEMPORAL_UI_PORTTemporal UI port(default: 8080)MAIN_URLPublic URLJWT_SECRETJWT secretDB_USERPostgres user(default: postiz)DB_PASSWORDPostgres passwordStart the services and tail the logs to verify startup.
# Spin up containers
docker compose up -d
# Verify deployment
docker compose ps
# Check logs for errors
docker compose logs -fOpen the required port in your firewall to allow access.
# Allow the application port through firewall
sudo ufw allow 4007/tcp
sudo ufw reload
# Access your app at:
# http://your-server-ip:4007Skip the terminal and deploy Postiz with a visual interface. Configure everything with clicks, not commands.
After deploying Postiz with Server Compass, complete these steps to finish setup
Open Postiz at http://YOUR_SERVER_IP:{{PORT}}
Create admin account and connect social providers
If using a domain with HTTPS, update MAIN_URL, set NOT_SECURED=false, and redeploy
Use Temporal UI at http://YOUR_SERVER_IP:{{TEMPORAL_UI_PORT}} for workflow diagnostics
If temporal-elasticsearch is unhealthy, run: sudo sysctl -w vm.max_map_count=262144
Need help? Check out our documentation for detailed guides.
Common questions about self-hosting Postiz
Simply download Server Compass, connect to your VPS, and select Postiz from the templates list. Fill in the required configuration and click Deploy. The entire process takes under 3 minutes.
Postiz requires a minimum of 3072MB RAM. We recommend a VPS with at least 6144MB RAM for optimal performance. Any modern Linux server with Docker support will work.
Yes! Server Compass provides volume mapping that allows you to import existing data. You can also use standard Postiz backup and restore procedures.
Server Compass makes updates easy. Simply click the Update button in your deployment dashboard, and the latest Postiz image will be pulled and deployed with zero downtime.
Postiz is open-source software. You only pay for your VPS hosting (typically $5-20/month) and optionally Server Compass ($29 one-time). No subscription fees or per-seat pricing.
Download Server Compass and deploy Postiz to your VPS in under 3 minutes. No Docker expertise required.
Download Server Compass