From aeff6e770ef4c1744ed2ac666a8dcc7ab24c2b63 Mon Sep 17 00:00:00 2001 From: Vincent Vu <172068404+rubixvi@users.noreply.github.com> Date: Fri, 16 Jan 2026 20:57:23 +1100 Subject: [PATCH 1/5] feat: enhance docker-compose with comprehensive service integrations - Remove deprecated version field for compose file format compliance - Add Temporal workflow engine with PostgreSQL and Elasticsearch - Configure comprehensive social media platform integrations (Discord, LinkedIn, X, TikTok, YouTube, etc.) - Add Cloudflare R2 storage provider configuration options - Include email service configuration for notifications - Implement Redis persistence and health checks - Add proper service networking and dependencies --- blueprints/postiz/docker-compose.yml | 146 +++++++++++++++++++++++++-- blueprints/postiz/template.toml | 46 +++++++++ 2 files changed, 183 insertions(+), 9 deletions(-) diff --git a/blueprints/postiz/docker-compose.yml b/blueprints/postiz/docker-compose.yml index dfbf3ae94..80f7814a0 100644 --- a/blueprints/postiz/docker-compose.yml +++ b/blueprints/postiz/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - services: postiz-app: image: ghcr.io/gitroomhq/postiz-app:latest @@ -9,14 +7,64 @@ services: 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" - STORAGE_PROVIDER: "local" + + STORAGE_PROVIDER: "local" # Change to "cloudflare" to use Cloudflare R2 UPLOAD_DIRECTORY: "/uploads" NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads" + + CLOUDFLARE_ACCOUNT_ID: ${CLOUDFLARE_ACCOUNT_ID} + CLOUDFLARE_ACCESS_KEY: ${CLOUDFLARE_ACCESS_KEY} + CLOUDFLARE_SECRET_ACCESS_KEY: ${CLOUDFLARE_SECRET_ACCESS_KEY} + CLOUDFLARE_BUCKETNAME: ${CLOUDFLARE_BUCKETNAME} + CLOUDFLARE_BUCKET_URL: ${CLOUDFLARE_BUCKET_URL} + CLOUDFLARE_REGION: ${CLOUDFLARE_REGION} + + EMAIL_HOST: ${EMAIL_HOST} + EMAIL_PORT: ${EMAIL_PORT} + EMAIL_SECURE: ${EMAIL_SECURE} + EMAIL_USER: ${EMAIL_USER} + EMAIL_PASS: ${EMAIL_PASS} + + BEEHIIVE_API_KEY: ${BEEHIIVE_API_KEY} + BEEHIIVE_PUBLICATION_ID: ${BEEHIIVE_PUBLICATION_ID} + DISCORD_CLIENT_ID: ${DISCORD_CLIENT_ID} + DISCORD_CLIENT_SECRET: ${DISCORD_CLIENT_SECRET} + DISCORD_BOT_TOKEN_ID: ${DISCORD_BOT_TOKEN_ID} + DRIBBBLE_CLIENT_ID: ${DRIBBBLE_CLIENT_ID} + DRIBBBLE_CLIENT_SECRET: ${DRIBBBLE_CLIENT_SECRET} + GITHUB_CLIENT_ID: ${GITHUB_CLIENT_ID} + GITHUB_CLIENT_SECRET: ${GITHUB_CLIENT_SECRET} + FACEBOOK_APP_ID: ${FACEBOOK_APP_ID} + FACEBOOK_APP_SECRET: ${FACEBOOK_APP_SECRET} + LINKEDIN_CLIENT_ID: ${LINKEDIN_CLIENT_ID} + LINKEDIN_CLIENT_SECRET: ${LINKEDIN_CLIENT_SECRET} + MASTODON_CLIENT_ID: ${MASTODON_CLIENT_ID} + MASTODON_CLIENT_SECRET: ${MASTODON_CLIENT_SECRET} + PINTEREST_CLIENT_ID: ${PINTEREST_CLIENT_ID} + PINTEREST_CLIENT_SECRET: ${PINTEREST_CLIENT_SECRET} + REDDIT_CLIENT_ID: ${REDDIT_CLIENT_ID} + REDDIT_CLIENT_SECRET: ${REDDIT_CLIENT_SECRET} + SLACK_ID: ${SLACK_ID} + SLACK_SECRET: ${SLACK_SECRET} + SLACK_SIGNING_SECRET: ${SLACK_SIGNING_SECRET} + THREADS_APP_ID: ${THREADS_APP_ID} + THREADS_APP_SECRET: ${THREADS_APP_SECRET} + TIKTOK_CLIENT_ID: ${TIKTOK_CLIENT_ID} + TIKTOK_CLIENT_SECRET: ${TIKTOK_CLIENT_SECRET} + X_API_KEY: ${X_API_KEY} + X_API_SECRET: ${X_API_SECRET} + X_CLIENT: ${X_CLIENT} + X_SECRET: ${X_SECRET} + YOUTUBE_CLIENT_ID: ${YOUTUBE_CLIENT_ID} + YOUTUBE_CLIENT_SECRET: ${YOUTUBE_CLIENT_SECRET} volumes: - postiz-config:/config/ - postiz-uploads:/uploads/ @@ -25,37 +73,117 @@ services: condition: service_healthy postiz-redis: condition: service_healthy + temporal: + condition: service_started + networks: + - dokploy-network + - temporal-network postiz-postgres: image: postgres:17-alpine restart: always - environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USER} POSTGRES_DB: ${DB_NAME} - volumes: - - postiz-postgres-data:/var/lib/postgresql/data healthcheck: test: pg_isready -U ${DB_USER} -d ${DB_NAME} interval: 10s timeout: 3s retries: 3 + volumes: + - postiz-postgres-data:/var/lib/postgresql/data + networks: + - dokploy-network postiz-redis: image: redis:7.2 restart: always + command: > + redis-server + --appendonly yes + --appendfsync everysec + --maxmemory 512mb + --maxmemory-policy noeviction + --save "" + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 10s + timeout: 5s + retries: 5 + volumes: + - postiz-redis-data:/data + networks: + - dokploy-network + temporal-elasticsearch: + image: elasticsearch:7.17.27 + restart: always + pull_policy: always + 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 + networks: + - temporal-network + + temporal-postgresql: + image: postgres:17-alpine + restart: always + pull_policy: always + environment: + POSTGRES_USER: temporal + POSTGRES_PASSWORD: temporal + POSTGRES_DB: temporal healthcheck: - test: redis-cli ping + test: pg_isready -U temporal -d temporal interval: 10s timeout: 3s retries: 3 volumes: - - postiz-redis-data:/data + - temporal-db-data:/pg/data + networks: + - temporal-network + + temporal: + image: temporalio/auto-setup:1.28.1 + restart: always + pull_policy: always + 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 + - TEMPORAL_NAMESPACE=default + depends_on: + temporal-postgresql: + condition: service_healthy + temporal-elasticsearch: + condition: service_started + networks: + - temporal-network + +networks: + dokploy-network: + external: true + temporal-network: + driver: bridge + name: temporal-network volumes: postiz-postgres-data: postiz-redis-data: postiz-config: - postiz-uploads: \ No newline at end of file + postiz-uploads: + temporal-db-data: + temporal-es-data: \ No newline at end of file diff --git a/blueprints/postiz/template.toml b/blueprints/postiz/template.toml index 260b77afb..018049f1f 100644 --- a/blueprints/postiz/template.toml +++ b/blueprints/postiz/template.toml @@ -19,3 +19,49 @@ DB_PASSWORD = "${db_password}" DB_USER = "${db_user}" DB_NAME = "${db_name}" JWT_SECRET = "${jwt_secret}" + +EMAIL_HOST = "" +EMAIL_PORT = "587" +EMAIL_SECURE = "false" +EMAIL_USER = "" +EMAIL_PASS = "" + +CLOUDFLARE_ACCOUNT_ID = "" +CLOUDFLARE_ACCESS_KEY = "" +CLOUDFLARE_SECRET_ACCESS_KEY = "" +CLOUDFLARE_BUCKETNAME = "" +CLOUDFLARE_BUCKET_URL = "" +CLOUDFLARE_REGION = "" + +BEEHIIVE_API_KEY = "" +BEEHIIVE_PUBLICATION_ID = "" +DISCORD_CLIENT_ID = "" +DISCORD_CLIENT_SECRET = "" +DISCORD_BOT_TOKEN_ID = "" +DRIBBBLE_CLIENT_ID = "" +DRIBBBLE_CLIENT_SECRET = "" +FACEBOOK_APP_ID = "" +FACEBOOK_APP_SECRET = "" +GITHUB_CLIENT_ID = "" +GITHUB_CLIENT_SECRET = "" +LINKEDIN_CLIENT_ID = "" +LINKEDIN_CLIENT_SECRET= = "" +MASTODON_CLIENT_ID = "" +MASTODON_CLIENT_SECRET = "" +PINTEREST_CLIENT_ID = "" +PINTEREST_CLIENT_SECRET = "" +REDDIT_CLIENT_ID = "" +REDDIT_CLIENT_SECRET = "" +SLACK_ID = "" +SLACK_SECRET = "" +SLACK_SIGNING_SECRET = "" +THREADS_APP_ID = "" +THREADS_APP_SECRET = "" +TIKTOK_CLIENT_ID = "" +TIKTOK_CLIENT_SECRET = "" +X_API_KEY = "" +X_API_SECRET = "" +X_CLIENT = "" +X_SECRET = "" +YOUTUBE_CLIENT_ID = "" +YOUTUBE_CLIENT_SECRET = "" From 9a00f67e74c0c1592d98199a2dffe1791cfe6a38 Mon Sep 17 00:00:00 2001 From: Vincent Vu <172068404+rubixvi@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:16:06 +1100 Subject: [PATCH 2/5] Update blueprints/postiz/template.toml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- blueprints/postiz/template.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/postiz/template.toml b/blueprints/postiz/template.toml index 018049f1f..c225dee6a 100644 --- a/blueprints/postiz/template.toml +++ b/blueprints/postiz/template.toml @@ -45,7 +45,7 @@ FACEBOOK_APP_SECRET = "" GITHUB_CLIENT_ID = "" GITHUB_CLIENT_SECRET = "" LINKEDIN_CLIENT_ID = "" -LINKEDIN_CLIENT_SECRET= = "" +LINKEDIN_CLIENT_SECRET = "" MASTODON_CLIENT_ID = "" MASTODON_CLIENT_SECRET = "" PINTEREST_CLIENT_ID = "" From cb57f6c3db6670745bf80ecb5f3df0be1c277068 Mon Sep 17 00:00:00 2001 From: Vincent Vu <172068404+rubixvi@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:16:59 +1100 Subject: [PATCH 3/5] Update blueprints/postiz/docker-compose.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- blueprints/postiz/docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/blueprints/postiz/docker-compose.yml b/blueprints/postiz/docker-compose.yml index 80f7814a0..b8b48f0f2 100644 --- a/blueprints/postiz/docker-compose.yml +++ b/blueprints/postiz/docker-compose.yml @@ -4,9 +4,9 @@ services: restart: always environment: - MAIN_URL: "https://${POSTIZ_HOST}" - FRONTEND_URL: "https://${POSTIZ_HOST}" - NEXT_PUBLIC_BACKEND_URL: "https://${POSTIZ_HOST}/api" + MAIN_URL: "http://${POSTIZ_HOST}" + FRONTEND_URL: "http://${POSTIZ_HOST}" + NEXT_PUBLIC_BACKEND_URL: "http://${POSTIZ_HOST}/api" JWT_SECRET: ${JWT_SECRET} DATABASE_URL: "postgresql://${DB_USER}:${DB_PASSWORD}@postiz-postgres:5432/${DB_NAME}" From 66082b5bc3da3bdc44aafbfc77556563ef91d14f Mon Sep 17 00:00:00 2001 From: Vincent Vu <172068404+rubixvi@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:19:34 +1100 Subject: [PATCH 4/5] fix: correct URL scheme and syntax in docker-compose and template files --- blueprints/postiz/docker-compose.yml | 9 +++------ blueprints/postiz/template.toml | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/blueprints/postiz/docker-compose.yml b/blueprints/postiz/docker-compose.yml index 80f7814a0..a5bac9ba9 100644 --- a/blueprints/postiz/docker-compose.yml +++ b/blueprints/postiz/docker-compose.yml @@ -4,9 +4,9 @@ services: restart: always environment: - MAIN_URL: "https://${POSTIZ_HOST}" - FRONTEND_URL: "https://${POSTIZ_HOST}" - NEXT_PUBLIC_BACKEND_URL: "https://${POSTIZ_HOST}/api" + MAIN_URL: "http://${POSTIZ_HOST}" + FRONTEND_URL: "http://${POSTIZ_HOST}" + NEXT_PUBLIC_BACKEND_URL: "http://${POSTIZ_HOST}/api" JWT_SECRET: ${JWT_SECRET} DATABASE_URL: "postgresql://${DB_USER}:${DB_PASSWORD}@postiz-postgres:5432/${DB_NAME}" @@ -119,7 +119,6 @@ services: temporal-elasticsearch: image: elasticsearch:7.17.27 restart: always - pull_policy: always environment: - cluster.routing.allocation.disk.threshold_enabled=true - cluster.routing.allocation.disk.watermark.low=512mb @@ -136,7 +135,6 @@ services: temporal-postgresql: image: postgres:17-alpine restart: always - pull_policy: always environment: POSTGRES_USER: temporal POSTGRES_PASSWORD: temporal @@ -154,7 +152,6 @@ services: temporal: image: temporalio/auto-setup:1.28.1 restart: always - pull_policy: always environment: - DB=postgres12 - DB_PORT=5432 diff --git a/blueprints/postiz/template.toml b/blueprints/postiz/template.toml index 018049f1f..c225dee6a 100644 --- a/blueprints/postiz/template.toml +++ b/blueprints/postiz/template.toml @@ -45,7 +45,7 @@ FACEBOOK_APP_SECRET = "" GITHUB_CLIENT_ID = "" GITHUB_CLIENT_SECRET = "" LINKEDIN_CLIENT_ID = "" -LINKEDIN_CLIENT_SECRET= = "" +LINKEDIN_CLIENT_SECRET = "" MASTODON_CLIENT_ID = "" MASTODON_CLIENT_SECRET = "" PINTEREST_CLIENT_ID = "" From 21ca84747f78f5ef81ce158931ededc0d4a6a91a Mon Sep 17 00:00:00 2001 From: Vincent Vu <172068404+rubixvi@users.noreply.github.com> Date: Fri, 16 Jan 2026 21:21:49 +1100 Subject: [PATCH 5/5] fix: update volume path for temporal-postgresql service in docker-compose --- blueprints/postiz/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blueprints/postiz/docker-compose.yml b/blueprints/postiz/docker-compose.yml index a5bac9ba9..3c49c4f36 100644 --- a/blueprints/postiz/docker-compose.yml +++ b/blueprints/postiz/docker-compose.yml @@ -145,7 +145,7 @@ services: timeout: 3s retries: 3 volumes: - - temporal-db-data:/pg/data + - temporal-db-data:/var/lib/postgresql/data networks: - temporal-network