Postiz
Postiz is a modern, open-source platform for managing and publishing content across multiple channels.
Configuration
version: "3.8"
services:
postiz-app:
image: ghcr.io/gitroomhq/postiz-app:latest
restart: always
environment:
MAIN_URL: "https://${POSTIZ_HOST}"
FRONTEND_URL: "https://${POSTIZ_HOST}"
NEXT_PUBLIC_BACKEND_URL: "https://${POSTIZ_HOST}/api"
JWT_SECRET: ${JWT_SECRET}
DATABASE_URL: "postgresql://${DB_USER}:${DB_PASSWORD}@postiz-postgres:5432/${DB_NAME}"
REDIS_URL: "redis://postiz-redis:6379"
BACKEND_INTERNAL_URL: "http://localhost:3000"
TEMPORAL_ADDRESS: "temporal:7233"
IS_GENERAL: "true"
DISABLE_REGISTRATION: "false"
RUN_CRON: "true"
NOT_SECURED: "true"
STORAGE_PROVIDER: "local"
UPLOAD_DIRECTORY: "/uploads"
NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads"
# === Social Media API Settings ===
# These variables should be defined in the Dokploy Environment tab.
# For more configuration options and details, please refer to the official documentation.
FACEBOOK_APP_ID: ${FACEBOOK_APP_ID}
FACEBOOK_APP_SECRET: ${FACEBOOK_APP_SECRET}
LINKEDIN_CLIENT_ID: ${LINKEDIN_CLIENT_ID}
LINKEDIN_CLIENT_SECRET: ${LINKEDIN_CLIENT_SECRET}
X_API_KEY: ${X_API_KEY}
X_API_SECRET: ${X_API_SECRET}
volumes:
- postiz-config:/config/
- postiz-uploads:/uploads/
depends_on:
postiz-postgres:
condition: service_healthy
postiz-redis:
condition: service_healthy
temporal:
condition: service_started
postiz-postgres:
image: postgres:17-alpine
restart: always
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: ${DB_NAME}
volumes:
- postgres-volume:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"]
interval: 10s
timeout: 3s
retries: 3
start_period: 10s
postiz-redis:
image: redis:7.2
restart: always
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 3s
retries: 3
volumes:
- postiz-redis-data:/data
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-es-data:/usr/share/elasticsearch/data
temporal-postgresql:
image: postgres:16
environment:
POSTGRES_PASSWORD: ${TEMPORAL_PASSWORD}
POSTGRES_USER: ${TEMPORAL_USER}
volumes:
- temporal-pg-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${TEMPORAL_USER}"]
interval: 10s
timeout: 5s
retries: 5
temporal:
image: temporalio/auto-setup:1.28.1
depends_on:
temporal-postgresql:
condition: service_healthy
temporal-elasticsearch:
condition: service_started
environment:
- DB=postgres12
- DB_PORT=5432
- POSTGRES_USER=${TEMPORAL_USER}
- POSTGRES_PWD=${TEMPORAL_PASSWORD}
- POSTGRES_SEEDS=temporal-postgresql
- ENABLE_ES=true
- ES_SEEDS=temporal-elasticsearch
- ES_VERSION=v7
- TEMPORAL_NAMESPACE=default
healthcheck:
test: ["CMD", "tctl", "--address", "127.0.0.1:7233", "workflow", "list"]
interval: 15s
timeout: 10s
retries: 30
start_period: 120s
volumes:
postgres-volume:
postiz-redis-data:
postiz-config:
postiz-uploads:
temporal-es-data:
temporal-pg-data:[variables]
main_domain = "${domain}"
db_password = "${password}"
db_user = "postiz"
db_name = "postiz"
temporal_password = "${password}"
temporal_user = "temporal"
jwt_secret = "${base64:32}"
[config]
env = [
"POSTIZ_HOST=${main_domain}",
"JWT_SECRET=${jwt_secret}",
"DB_USER=${db_user}",
"DB_PASSWORD=${db_password}",
"DB_NAME=${db_name}",
"TEMPORAL_USER=${temporal_user}",
"TEMPORAL_PASSWORD=${temporal_password}",
"FACEBOOK_APP_ID=",
"FACEBOOK_APP_SECRET=",
"LINKEDIN_CLIENT_ID=",
"LINKEDIN_CLIENT_SECRET=",
"X_API_KEY=",
"X_API_SECRET="
]
mounts = []
[[config.domains]]
serviceName = "postiz-app"
port = 5000
host = "${main_domain}"Base64
To import this template in Dokploy: create a Compose service → Advanced → Base64 import and paste the content below:
ewogICJjb21wb3NlIjogInZlcnNpb246IFwiMy44XCJcblxuc2VydmljZXM6XG4gIHBvc3Rpei1hcHA6XG4gICAgaW1hZ2U6IGdoY3IuaW8vZ2l0cm9vbWhxL3Bvc3Rpei1hcHA6bGF0ZXN0XG4gICAgcmVzdGFydDogYWx3YXlzXG5cbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIE1BSU5fVVJMOiBcImh0dHBzOi8vJHtQT1NUSVpfSE9TVH1cIlxuICAgICAgRlJPTlRFTkRfVVJMOiBcImh0dHBzOi8vJHtQT1NUSVpfSE9TVH1cIlxuICAgICAgTkVYVF9QVUJMSUNfQkFDS0VORF9VUkw6IFwiaHR0cHM6Ly8ke1BPU1RJWl9IT1NUfS9hcGlcIlxuICAgICAgSldUX1NFQ1JFVDogJHtKV1RfU0VDUkVUfVxuICAgICAgREFUQUJBU0VfVVJMOiBcInBvc3RncmVzcWw6Ly8ke0RCX1VTRVJ9OiR7REJfUEFTU1dPUkR9QHBvc3Rpei1wb3N0Z3Jlczo1NDMyLyR7REJfTkFNRX1cIlxuICAgICAgUkVESVNfVVJMOiBcInJlZGlzOi8vcG9zdGl6LXJlZGlzOjYzNzlcIlxuICAgICAgQkFDS0VORF9JTlRFUk5BTF9VUkw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCJcbiAgICAgIFRFTVBPUkFMX0FERFJFU1M6IFwidGVtcG9yYWw6NzIzM1wiXG4gICAgICBJU19HRU5FUkFMOiBcInRydWVcIlxuICAgICAgRElTQUJMRV9SRUdJU1RSQVRJT046IFwiZmFsc2VcIlxuICAgICAgUlVOX0NST046IFwidHJ1ZVwiXG4gICAgICBOT1RfU0VDVVJFRDogXCJ0cnVlXCJcbiAgICAgIFNUT1JBR0VfUFJPVklERVI6IFwibG9jYWxcIlxuICAgICAgVVBMT0FEX0RJUkVDVE9SWTogXCIvdXBsb2Fkc1wiXG4gICAgICBORVhUX1BVQkxJQ19VUExPQURfRElSRUNUT1JZOiBcIi91cGxvYWRzXCJcbiAgICAgIFxuICAgICAgIyA9PT0gU29jaWFsIE1lZGlhIEFQSSBTZXR0aW5ncyA9PT1cbiAgICAgICMgVGhlc2UgdmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGluIHRoZSBEb2twbG95IEVudmlyb25tZW50IHRhYi5cbiAgICAgICMgRm9yIG1vcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXRhaWxzLCBwbGVhc2UgcmVmZXIgdG8gdGhlIG9mZmljaWFsIGRvY3VtZW50YXRpb24uXG4gICAgICBGQUNFQk9PS19BUFBfSUQ6ICR7RkFDRUJPT0tfQVBQX0lEfVxuICAgICAgRkFDRUJPT0tfQVBQX1NFQ1JFVDogJHtGQUNFQk9PS19BUFBfU0VDUkVUfVxuICAgICAgTElOS0VESU5fQ0xJRU5UX0lEOiAke0xJTktFRElOX0NMSUVOVF9JRH1cbiAgICAgIExJTktFRElOX0NMSUVOVF9TRUNSRVQ6ICR7TElOS0VESU5fQ0xJRU5UX1NFQ1JFVH1cbiAgICAgIFhfQVBJX0tFWTogJHtYX0FQSV9LRVl9XG4gICAgICBYX0FQSV9TRUNSRVQ6ICR7WF9BUElfU0VDUkVUfVxuXG4gICAgdm9sdW1lczpcbiAgICAgIC0gcG9zdGl6LWNvbmZpZzovY29uZmlnL1xuICAgICAgLSBwb3N0aXotdXBsb2FkczovdXBsb2Fkcy9cbiAgICBkZXBlbmRzX29uOlxuICAgICAgcG9zdGl6LXBvc3RncmVzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgcG9zdGl6LXJlZGlzOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgdGVtcG9yYWw6XG4gICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkXG5cbiAgcG9zdGl6LXBvc3RncmVzOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNy1hbHBpbmVcbiAgICByZXN0YXJ0OiBhbHdheXNcblxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7REJfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19VU0VSOiAke0RCX1VTRVJ9XG4gICAgICBQT1NUR1JFU19EQjogJHtEQl9OQU1FfVxuICAgIHZvbHVtZXM6XG4gICAgICAtIHBvc3RncmVzLXZvbHVtZTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgJHtEQl9VU0VSfSAtZCAke0RCX05BTUV9XCJdXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiAzc1xuICAgICAgcmV0cmllczogM1xuICAgICAgc3RhcnRfcGVyaW9kOiAxMHNcblxuICBwb3N0aXotcmVkaXM6XG4gICAgaW1hZ2U6IHJlZGlzOjcuMlxuICAgIHJlc3RhcnQ6IGFsd2F5c1xuXG4gICAgaGVhbHRoY2hlY2s6XG4gICAgICB0ZXN0OiBbXCJDTURcIiwgXCJyZWRpcy1jbGlcIiwgXCJwaW5nXCJdXG4gICAgICBpbnRlcnZhbDogMTBzXG4gICAgICB0aW1lb3V0OiAzc1xuICAgICAgcmV0cmllczogM1xuICAgIHZvbHVtZXM6XG4gICAgICAtIHBvc3Rpei1yZWRpcy1kYXRhOi9kYXRhXG5cbiAgdGVtcG9yYWwtZWxhc3RpY3NlYXJjaDpcbiAgICBpbWFnZTogZWxhc3RpY3NlYXJjaDo3LjE3LjI3XG4gICAgZW52aXJvbm1lbnQ6XG4gICAgICAtIGNsdXN0ZXIucm91dGluZy5hbGxvY2F0aW9uLmRpc2sudGhyZXNob2xkX2VuYWJsZWQ9dHJ1ZVxuICAgICAgLSBjbHVzdGVyLnJvdXRpbmcuYWxsb2NhdGlvbi5kaXNrLndhdGVybWFyay5sb3c9NTEybWJcbiAgICAgIC0gY2x1c3Rlci5yb3V0aW5nLmFsbG9jYXRpb24uZGlzay53YXRlcm1hcmsuaGlnaD0yNTZtYlxuICAgICAgLSBjbHVzdGVyLnJvdXRpbmcuYWxsb2NhdGlvbi5kaXNrLndhdGVybWFyay5mbG9vZF9zdGFnZT0xMjhtYlxuICAgICAgLSBkaXNjb3ZlcnkudHlwZT1zaW5nbGUtbm9kZVxuICAgICAgLSBFU19KQVZBX09QVFM9LVhtczI1Nm0gLVhteDI1Nm1cbiAgICAgIC0geHBhY2suc2VjdXJpdHkuZW5hYmxlZD1mYWxzZVxuICAgIHZvbHVtZXM6XG4gICAgICAtIHRlbXBvcmFsLWVzLWRhdGE6L3Vzci9zaGFyZS9lbGFzdGljc2VhcmNoL2RhdGFcblxuICB0ZW1wb3JhbC1wb3N0Z3Jlc3FsOlxuICAgIGltYWdlOiBwb3N0Z3JlczoxNlxuICAgIGVudmlyb25tZW50OlxuICAgICAgUE9TVEdSRVNfUEFTU1dPUkQ6ICR7VEVNUE9SQUxfUEFTU1dPUkR9XG4gICAgICBQT1NUR1JFU19VU0VSOiAke1RFTVBPUkFMX1VTRVJ9XG4gICAgdm9sdW1lczpcbiAgICAgIC0gdGVtcG9yYWwtcGctZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGFcbiAgICBoZWFsdGhjaGVjazpcbiAgICAgIHRlc3Q6IFtcIkNNRC1TSEVMTFwiLCBcInBnX2lzcmVhZHkgLVUgJHtURU1QT1JBTF9VU0VSfVwiXVxuICAgICAgaW50ZXJ2YWw6IDEwc1xuICAgICAgdGltZW91dDogNXNcbiAgICAgIHJldHJpZXM6IDVcblxuICB0ZW1wb3JhbDpcbiAgICBpbWFnZTogdGVtcG9yYWxpby9hdXRvLXNldHVwOjEuMjguMVxuICAgIGRlcGVuZHNfb246XG4gICAgICB0ZW1wb3JhbC1wb3N0Z3Jlc3FsOlxuICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeVxuICAgICAgdGVtcG9yYWwtZWxhc3RpY3NlYXJjaDpcbiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX3N0YXJ0ZWRcbiAgICBlbnZpcm9ubWVudDpcbiAgICAgIC0gREI9cG9zdGdyZXMxMlxuICAgICAgLSBEQl9QT1JUPTU0MzJcbiAgICAgIC0gUE9TVEdSRVNfVVNFUj0ke1RFTVBPUkFMX1VTRVJ9XG4gICAgICAtIFBPU1RHUkVTX1BXRD0ke1RFTVBPUkFMX1BBU1NXT1JEfVxuICAgICAgLSBQT1NUR1JFU19TRUVEUz10ZW1wb3JhbC1wb3N0Z3Jlc3FsXG4gICAgICAtIEVOQUJMRV9FUz10cnVlXG4gICAgICAtIEVTX1NFRURTPXRlbXBvcmFsLWVsYXN0aWNzZWFyY2hcbiAgICAgIC0gRVNfVkVSU0lPTj12N1xuICAgICAgLSBURU1QT1JBTF9OQU1FU1BBQ0U9ZGVmYXVsdFxuICAgIGhlYWx0aGNoZWNrOlxuICAgICAgdGVzdDogW1wiQ01EXCIsIFwidGN0bFwiLCBcIi0tYWRkcmVzc1wiLCBcIjEyNy4wLjAuMTo3MjMzXCIsIFwid29ya2Zsb3dcIiwgXCJsaXN0XCJdXG4gICAgICBpbnRlcnZhbDogMTVzXG4gICAgICB0aW1lb3V0OiAxMHNcbiAgICAgIHJldHJpZXM6IDMwXG4gICAgICBzdGFydF9wZXJpb2Q6IDEyMHNcblxudm9sdW1lczpcbiAgcG9zdGdyZXMtdm9sdW1lOlxuICBwb3N0aXotcmVkaXMtZGF0YTpcbiAgcG9zdGl6LWNvbmZpZzpcbiAgcG9zdGl6LXVwbG9hZHM6XG4gIHRlbXBvcmFsLWVzLWRhdGE6XG4gIHRlbXBvcmFsLXBnLWRhdGE6IiwKICAiY29uZmlnIjogIlt2YXJpYWJsZXNdXG5tYWluX2RvbWFpbiA9IFwiJHtkb21haW59XCJcbmRiX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkfVwiXG5kYl91c2VyID0gXCJwb3N0aXpcIlxuZGJfbmFtZSA9IFwicG9zdGl6XCJcbnRlbXBvcmFsX3Bhc3N3b3JkID0gXCIke3Bhc3N3b3JkfVwiXG50ZW1wb3JhbF91c2VyID0gXCJ0ZW1wb3JhbFwiXG5qd3Rfc2VjcmV0ID0gXCIke2Jhc2U2NDozMn1cIlxuXG5bY29uZmlnXVxuZW52ID0gW1xuICAgIFwiUE9TVElaX0hPU1Q9JHttYWluX2RvbWFpbn1cIixcbiAgICBcIkpXVF9TRUNSRVQ9JHtqd3Rfc2VjcmV0fVwiLFxuICAgIFwiREJfVVNFUj0ke2RiX3VzZXJ9XCIsXG4gICAgXCJEQl9QQVNTV09SRD0ke2RiX3Bhc3N3b3JkfVwiLFxuICAgIFwiREJfTkFNRT0ke2RiX25hbWV9XCIsXG4gICAgXCJURU1QT1JBTF9VU0VSPSR7dGVtcG9yYWxfdXNlcn1cIixcbiAgICBcIlRFTVBPUkFMX1BBU1NXT1JEPSR7dGVtcG9yYWxfcGFzc3dvcmR9XCIsXG4gICAgXCJGQUNFQk9PS19BUFBfSUQ9XCIsXG4gICAgXCJGQUNFQk9PS19BUFBfU0VDUkVUPVwiLFxuICAgIFwiTElOS0VESU5fQ0xJRU5UX0lEPVwiLFxuICAgIFwiTElOS0VESU5fQ0xJRU5UX1NFQ1JFVD1cIixcbiAgICBcIlhfQVBJX0tFWT1cIixcbiAgICBcIlhfQVBJX1NFQ1JFVD1cIlxuXVxubW91bnRzID0gW11cblxuW1tjb25maWcuZG9tYWluc11dXG5zZXJ2aWNlTmFtZSA9IFwicG9zdGl6LWFwcFwiXG5wb3J0ID0gNTAwMFxuaG9zdCA9IFwiJHttYWluX2RvbWFpbn1cIlxuIgp9Links
Tags
cms, content-management, publishing
Version: latest
PostHog
PostHog is an open-source product analytics platform with feature flags, session replay, surveys, A/B testing and a customer data pipeline, all in one tool.
PowerSync
PowerSync is a sync engine for local-first apps. Syncs PostgreSQL data to mobile devices and browsers with real-time replication.