Postiz: self-hosted social media scheduler in Docker

Postiz schedules posts to X, LinkedIn, Mastodon and other networks from one calendar. How to install it with the official Docker Compose setup.

Postiz is a social media scheduling tool. You connect your accounts, write a post once, adapt it per network and place it on a calendar. It supports the major networks, including X, LinkedIn, Instagram, Facebook, Reddit, Mastodon and Bluesky, and has team features and analytics.

What you need

  • A server with Docker and the Compose plugin. The documentation states that the setup was tested on Ubuntu 24.04 with 2 GB of RAM and 2 vCPUs. The stack is large, so treat that as the minimum.
  • A domain with HTTPS for real use. Most social networks accept only HTTPS callback addresses when you connect an account.
  • Developer app credentials for each network you want to post to. Postiz does not ship with them.

Install

The compose file is long and changes between releases, so the project asks you to take it from its repository instead of copying a snapshot:

git clone https://github.com/gitroomhq/postiz-docker-compose
cd postiz-docker-compose

Open docker-compose.yaml and set these values in the postiz service:

      MAIN_URL: 'https://postiz.example.com'
      FRONTEND_URL: 'https://postiz.example.com'
      NEXT_PUBLIC_BACKEND_URL: 'https://postiz.example.com/api'
      JWT_SECRET: 'change-me'
  • The three URLs must be the address you will open in the browser. For a local test leave them as http://localhost:4007.
  • JWT_SECRET is a long random string, unique to your install.
  • The same file sets the PostgreSQL password inside DATABASE_URL and in the postiz-postgres service. Change it in both places before the first start.

Start it:

docker compose up -d

The stack includes Postiz itself, PostgreSQL, Redis and Temporal with its own PostgreSQL and Elasticsearch. Temporal runs the scheduled jobs. The first start takes a few minutes.

First run

Open the address from MAIN_URL; with the default settings it is http://localhost:4007. Register the first account.

Then add the API keys of the networks you need to the environment block (the file has commented placeholders for each one) and recreate the containers. The Postiz documentation explains where to get the keys for every network.

The Temporal web interface is on port 8080. It shows the scheduled workflows and is useful when a post does not go out. Do not expose it to the internet.

Updating

git pull
docker compose pull
docker compose down && docker compose up -d

git pull will stop if your edited docker-compose.yaml conflicts with the new one; keep your values in a separate note so you can re-apply them. Installs older than v2.12 need the migration guide first.