This is currently the recommended option to install Postiz in a supportable configuration. The docker images are in active and heavy development for now.
Tested configurations
- MacOS
- Linux (Fedora 40)
Naturally you can use these instructions to setup a development environment on any platform, but there may not be much experience in the community to help you with any issues you may encounter.
Warning about Windows
Several users using Windows (and WSL) have reported issues with the setup. This is not well tested as the main developers of the project do not use Windows/WSL for development. If you are using Windows and encounter issues, please let us know in the support page.
Installation Prerequisites
This section will ask you to install & configure several services exaplained below.
Network Requirements
HTTPS is required (or localhost)
Postiz marks it's login cookies as Secure, which means you must run it either on localhost, or behind HTTPS - this is called a "secure context" in modern web browsers.
If you are not running either HTTPS or on localhost, then you will not be able to login, as your browser will refuse to send the login cookie.
Postiz will not generate your HTTPS certificates for you, and it's servers cannot yet be configured to use a HTTPS certificate. This means you must use a reverse proxy to handle HTTPS. Documentation on popular reverse proxies can be found in the reverse proxies section, and if you've never used a reverse proxy with docker compose before, then caddy is recommended.
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.
Prerequisite Local Services
- Node.js - for running the code! (version 18+)
- PostgreSQL - or any other SQL database (instructions beleow suggest Docker)
- Redis - for handling worker queues (instructions below suggest Docker)
We have some messages from users who are using Windows, which should work, but they are not tested well yet.
Installation Instructions
NodeJS (version 18+)
A complete guide of how to install NodeJS can be found here (opens in a new tab).
PostgreSQL (or any other SQL database) & Redis
You can choose Option A to Option B to install the database.
Option A) Postgres and Redis as Single containers
You can install Docker (opens in a new tab) and run:
docker run -e POSTGRES_USER=root -e POSTGRES_PASSWORD=your_password --name postgres -p 5432:5432 -d postgres
docker run --name redis -p 6379:6379 -d redis
Option B) Postgres and Redis as docker-compose
Download the docker-compose.yaml file here (opens in a new tab), or grab it from the repository in the next step.
docker compose -f "docker-compose.dev.yaml" up
Build Postiz
Clone the repository
git clone https://github.com/gitroomhq/gitroom
Set environment variables
Copy the .env.example
file to .env
and fill in the values
# Required Settings
DATABASE_URL="postgresql://postiz-user:postiz-password@localhost:5432/postiz-db-local"
REDIS_URL="redis://localhost:6379"
JWT_SECRET="random string for your JWT secret, make it long"
FRONTEND_URL="http://localhost:4200"
NEXT_PUBLIC_BACKEND_URL="http://localhost:3000"
BACKEND_INTERNAL_URL="http://localhost:3000"
# Optional. Your upload directory path if you host your files locally.
UPLOAD_DIRECTORY="/opt/postiz/uploads/"
# Optional: your upload directory slug if you host your files locally.
NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=""
# Your email provider, optional
EMAIL_PROVIDER="resend|nodemailer"
RESEND_API_KEY="re_1234567890" # api key if you choose resend
EMAIL_HOST="smtp.gmail.com" # smtp host if you choose nodemailer
EMAIL_PORT="465" # smtp port if you choose nodemailer
EMAIL_SECURE="true" # smtp secure if you choose nodemailer
EMAIL_USER="user" # smtp user if you choose nodemailer
EMAIL_PASS="pass" # smtp pass if you choose nodemailer
## These are dummy values, you must create your own from Cloudflare.
## Remember to set your public internet IP address in the allow-list for the API token.
CLOUDFLARE_ACCOUNT_ID="QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu"
CLOUDFLARE_ACCESS_KEY="dcfCMSuFEeCNfvByUureMZEfxWJmDqZe"
CLOUDFLARE_SECRET_ACCESS_KEY="zTTMXBmtyLPwHEdpACGHgDgzRTNpTJewiNriLnUS"
CLOUDFLARE_BUCKETNAME="postiz"
CLOUDFLARE_BUCKET_URL="https://QhcMSXQyPuMCRpSQcSYdEuTYgHeCXHbu.r2.cloudflarestorage.com/"
CLOUDFLARE_REGION="auto"
# Social Media API Settings
X_API_KEY="Twitter API key for normal oAuth not oAuth2"
X_API_SECRET="Twitter API secret for normal oAuth not oAuth2"
LINKEDIN_CLIENT_ID="Linkedin Client ID"
LINKEDIN_CLIENT_SECRET="Linkedin Client Secret"
REDDIT_CLIENT_ID="Reddit Client ID"
REDDIT_CLIENT_SECRET="Linkedin Client Secret"
GITHUB_CLIENT_ID="GitHub Client ID"
GITHUB_CLIENT_SECRET="GitHub Client Secret"
# AI
OPENAI_API_KEY="OpenAI API key"
# Developer Settings
NX_ADD_PLUGINS=false
IS_GENERAL="true" # required for now
Install the dependencies
npm install
Generate the prisma client and run the migrations
npm run prisma-db-push
Run the project
npm run dev
If everything is running successfully, open http://localhost:4200 (opens in a new tab) in your browser!
If everything is not running - you had errors in the steps above, please head over to our support page.