InstallationDocker Compose

Docker Compose

This guide assumes that you have docker installed, with a reasonable amount of resources to run Postiz. This Docker Compose setup has been tested with;

  • Virtual Machine, Ubuntu 24.04, 4Gb RAM, 2 vCPUs.

Installation Prerequisites

This section will ask you to install & configure several services exaplained below.

Network Requirements

HTTPS / HTTP Requirement

Postiz marks it’s login cookies as Secure, this is called “secure context” in modern web browsers.

If you want to use an secure Login Process, you need to set up an Certificate, which can be done via Reverse Proxy like Caddy or Nginx.

If you cannot use a certificate (HTTPS), add the following environment variable to your .env file:

NOT_SECURED=true

Security Warning: Setting NOT_SECURED=true disables secure cookie requirements. This should only be used in development environments or when you fully understand the security implications. Not recommended for production use.

Network Ports

  • 5000/tcp: for a single single entry point for postiz when running in a container. This is the one port your reverse proxy should talk to.
  • 4200/tcp: for the Frontend service (the web interface). Most users do not need to expose this port publicly.
  • 3000/tcp: for the Backend service (the API). Most users do not need to expose this port publicly.
  • 5432/tcp: for the Postgres container. Most users do not need to expose this port publicly.
  • 6379/tcp: for the Redis container. Most users do not need to expose this port publicly.

If you are using docker images, we recommend just exposing port 5000 to your external proxy. This will reduce the likelihood of misconfiguration, and make it easier to manage your network.

Installation Prerequisites

The docker containers for Postiz are entirely configured with environment variables.

  • Option A - environment variables in your docker-compose.yml file
  • Option B - environment variables in a postiz.env file mounted in /config for the Postiz container only
  • Option C - environment variables in a .env file next to your docker-compose.yml file (not recommended).

… or a mixture of the above options!

There is a configuration reference page with a list of configuration settings.

Network Requirements

services:
  postiz:
    image: ghcr.io/gitroomhq/postiz-app:latest
    container_name: postiz
    restart: always
    environment:
      # You must change these. Replace `postiz.your-server.com` with your DNS name - this needs to be exactly the URL you're accessing Postiz on.
      MAIN_URL: "https://postiz.your-server.com"
      FRONTEND_URL: "https://postiz.your-server.com"
      NEXT_PUBLIC_BACKEND_URL: "https://postiz.your-server.com/api"
      JWT_SECRET: "random string that is unique to every install - just type random characters here!"
 
      # These defaults are probably fine, but if you change your user/password, update it in the
      # postiz-postgres or postiz-redis services below.
      DATABASE_URL: "postgresql://postiz-user:postiz-password@postiz-postgres:5432/postiz-db-local"
      REDIS_URL: "redis://postiz-redis:6379"
      BACKEND_INTERNAL_URL: "http://localhost:3000"
      IS_GENERAL: "true" # Required for self-hosting.
      # The container images are pre-configured to use /uploads for file storage.
      # You probably should not change this unless you have a really good reason!
      STORAGE_PROVIDER: "local"
      UPLOAD_DIRECTORY: "/uploads"
      NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads"
    volumes:
      - postiz-config:/config/
      - postiz-uploads:/uploads/
    ports:
      - 5000:5000
    networks:
      - postiz-network
    depends_on:
      postiz-postgres:
        condition: service_healthy
      postiz-redis:
        condition: service_healthy
 
  postiz-postgres:
    image: postgres:17-alpine
    container_name: postiz-postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: postiz-password
      POSTGRES_USER: postiz-user
      POSTGRES_DB: postiz-db-local
    volumes:
      - postgres-volume:/var/lib/postgresql/data
    networks:
      - postiz-network
    healthcheck:
      test: pg_isready -U postiz-user -d postiz-db-local
      interval: 10s
      timeout: 3s
      retries: 3
  postiz-redis:
    image: redis:7.2
    container_name: postiz-redis
    restart: always
    healthcheck:
      test: redis-cli ping
      interval: 10s
      timeout: 3s
      retries: 3
    volumes:
      - postiz-redis-data:/data
    networks:
      - postiz-network
 
 
volumes:
  postgres-volume:
    external: false
 
  postiz-redis-data:
    external: false
 
  postiz-config:
    external: false
 
  postiz-uploads:
    external: false
 
networks:
  postiz-network:
    external: false

HTTPS / HTTP Requirement

Save the file contents to docker-compose.yml in your directory you create for postiz.

Run docker compose up to start the services.

⚠️

Note When you change variables, you must run docker compose down and then docker compose up to recreate these containers with these updated variables.

Look through the logs for startup errors, and if you have problems, check out the support page.

If everything looks good, then you can access the Postiz web interface at https://postiz.your-server.com

Controlling container services

When the environment variable POSTIZ_APPS is not set, or is set to an empty string, all services will be started in a single container. This is normally fine for small, personal deployments.

However, you can only start specific services within the docker container by changing this environement variable.

If you need to scale, you can experiement with having multiple containers defined like;

  • Frontend only: POSTIZ_APPS="frontend"
  • Backend only: POSTIZ_APPS="backend"
  • Worker and Cron only: POSTIZ_APPS="worker cron"

Network Ports