# ============================================================================= # Postiz Stack — Space: {{SPACE_NAME}} # ============================================================================= # Generated by generate.sh from spaces.yml — DO NOT EDIT DIRECTLY. # To modify, edit spaces.yml and re-run: ./generate.sh # Domain: {{PRIMARY_DOMAIN}} (fallback: {{FALLBACK_DOMAIN}}) services: postiz-{{SPACE_SLUG}}: image: {{POSTIZ_IMAGE}} container_name: postiz-{{SPACE_SLUG}} restart: always environment: MAIN_URL: 'https://{{PRIMARY_DOMAIN}}' FRONTEND_URL: 'https://{{PRIMARY_DOMAIN}}' NEXT_PUBLIC_BACKEND_URL: 'https://{{PRIMARY_DOMAIN}}/api' JWT_SECRET: '${JWT_SECRET}' DATABASE_URL: 'postgresql://postiz:${POSTGRES_PASSWORD}@postiz-{{SPACE_SLUG}}-postgres:5432/postiz' REDIS_URL: 'redis://postiz-{{SPACE_SLUG}}-redis:6379' BACKEND_INTERNAL_URL: 'http://localhost:3000' TEMPORAL_ADDRESS: "postiz-{{SPACE_SLUG}}-temporal:7233" IS_GENERAL: '{{IS_GENERAL}}' DISABLE_REGISTRATION: '{{DISABLE_REG}}' # Storage STORAGE_PROVIDER: '{{STORAGE_PROVIDER}}' UPLOAD_DIRECTORY: '{{UPLOAD_DIR}}' NEXT_PUBLIC_UPLOAD_DIRECTORY: '{{UPLOAD_DIR}}' # Social Media API Settings (from .env or Infisical) X_API_KEY: '${X_API_KEY:-}' X_API_SECRET: '${X_API_SECRET:-}' LINKEDIN_CLIENT_ID: '${LINKEDIN_CLIENT_ID:-}' LINKEDIN_CLIENT_SECRET: '${LINKEDIN_CLIENT_SECRET:-}' REDDIT_CLIENT_ID: '${REDDIT_CLIENT_ID:-}' REDDIT_CLIENT_SECRET: '${REDDIT_CLIENT_SECRET:-}' THREADS_APP_ID: '${THREADS_APP_ID:-}' THREADS_APP_SECRET: '${THREADS_APP_SECRET:-}' FACEBOOK_APP_ID: '${FACEBOOK_APP_ID:-}' FACEBOOK_APP_SECRET: '${FACEBOOK_APP_SECRET:-}' YOUTUBE_CLIENT_ID: '${YOUTUBE_CLIENT_ID:-}' YOUTUBE_CLIENT_SECRET: '${YOUTUBE_CLIENT_SECRET:-}' TIKTOK_CLIENT_ID: '${TIKTOK_CLIENT_ID:-}' TIKTOK_CLIENT_SECRET: '${TIKTOK_CLIENT_SECRET:-}' DISCORD_CLIENT_ID: '${DISCORD_CLIENT_ID:-}' DISCORD_CLIENT_SECRET: '${DISCORD_CLIENT_SECRET:-}' DISCORD_BOT_TOKEN_ID: '${DISCORD_BOT_TOKEN_ID:-}' MASTODON_URL: '${MASTODON_URL:-https://mastodon.social}' MASTODON_CLIENT_ID: '${MASTODON_CLIENT_ID:-}' MASTODON_CLIENT_SECRET: '${MASTODON_CLIENT_SECRET:-}' SLACK_ID: '${SLACK_ID:-}' SLACK_SECRET: '${SLACK_SECRET:-}' SLACK_SIGNING_SECRET: '${SLACK_SIGNING_SECRET:-}' PINTEREST_CLIENT_ID: '${PINTEREST_CLIENT_ID:-}' PINTEREST_CLIENT_SECRET: '${PINTEREST_CLIENT_SECRET:-}' # Email EMAIL_PROVIDER: '{{EMAIL_PROVIDER}}' EMAIL_FROM_NAME: '{{EMAIL_FROM_NAME}}' EMAIL_FROM_ADDRESS: '{{EMAIL_FROM}}' EMAIL_HOST: '{{EMAIL_HOST}}' EMAIL_PORT: '{{EMAIL_PORT}}' EMAIL_SECURE: '{{EMAIL_SECURE}}' EMAIL_USER: '{{EMAIL_USER}}' EMAIL_PASS: '${EMAIL_PASS}' NODE_TLS_REJECT_UNAUTHORIZED: '0' # AI OPENAI_API_KEY: '${OPENAI_API_KEY:-}' # Misc NX_ADD_PLUGINS: false API_LIMIT: {{API_LIMIT}} volumes: - postiz-{{SPACE_SLUG}}-config:/config/ - postiz-{{SPACE_SLUG}}-uploads:/uploads/ labels: - "traefik.enable=true" # Primary domain -> Postiz - "traefik.http.routers.postiz-{{SPACE_SLUG}}.rule=Host(`{{PRIMARY_DOMAIN}}`)" - "traefik.http.routers.postiz-{{SPACE_SLUG}}.entrypoints=web" - "traefik.http.services.postiz-{{SPACE_SLUG}}.loadbalancer.server.port={{POSTIZ_PORT}}" # Redirect fallback domain -> primary domain - "traefik.http.routers.postiz-{{SPACE_SLUG}}-redirect.rule=Host(`{{FALLBACK_DOMAIN}}`)" - "traefik.http.routers.postiz-{{SPACE_SLUG}}-redirect.entrypoints=web" - "traefik.http.routers.postiz-{{SPACE_SLUG}}-redirect.middlewares=postiz-{{SPACE_SLUG}}-redirect" - "traefik.http.middlewares.postiz-{{SPACE_SLUG}}-redirect.redirectregex.regex=^https?://{{FALLBACK_ESCAPED}}(.*)" - "traefik.http.middlewares.postiz-{{SPACE_SLUG}}-redirect.redirectregex.replacement=https://{{PRIMARY_DOMAIN}}$${1}" - "traefik.http.middlewares.postiz-{{SPACE_SLUG}}-redirect.redirectregex.permanent=true" - "traefik.docker.network=traefik-public" networks: - traefik-public - postiz-{{SPACE_SLUG}}-internal - mailcow-network depends_on: postiz-{{SPACE_SLUG}}-postgres: condition: service_healthy postiz-{{SPACE_SLUG}}-redis: condition: service_healthy postiz-{{SPACE_SLUG}}-postgres: image: {{POSTGRES_IMAGE}} container_name: postiz-{{SPACE_SLUG}}-postgres restart: always environment: POSTGRES_PASSWORD: '${POSTGRES_PASSWORD}' POSTGRES_USER: postiz POSTGRES_DB: postiz volumes: - postiz-{{SPACE_SLUG}}-postgres-data:/var/lib/postgresql/data networks: - postiz-{{SPACE_SLUG}}-internal healthcheck: test: pg_isready -U postiz -d postiz interval: 10s timeout: 3s retries: 3 cap_drop: - ALL cap_add: - DAC_OVERRIDE - FOWNER - SETGID - SETUID security_opt: - no-new-privileges:true postiz-{{SPACE_SLUG}}-redis: image: {{REDIS_IMAGE}} container_name: postiz-{{SPACE_SLUG}}-redis restart: always healthcheck: test: redis-cli ping interval: 10s timeout: 3s retries: 3 volumes: - postiz-{{SPACE_SLUG}}-redis-data:/data networks: - postiz-{{SPACE_SLUG}}-internal cap_drop: - ALL cap_add: - SETGID - SETUID security_opt: - no-new-privileges:true postiz-{{SPACE_SLUG}}-temporal-postgres: image: {{TEMPORAL_PG_IMAGE}} container_name: postiz-{{SPACE_SLUG}}-temporal-postgres restart: always environment: POSTGRES_PASSWORD: temporal POSTGRES_USER: temporal networks: - postiz-{{SPACE_SLUG}}-internal volumes: - postiz-{{SPACE_SLUG}}-temporal-postgres-data:/var/lib/postgresql/data cap_drop: - ALL cap_add: - DAC_OVERRIDE - FOWNER - SETGID - SETUID security_opt: - no-new-privileges:true postiz-{{SPACE_SLUG}}-temporal: image: {{TEMPORAL_IMAGE}} container_name: postiz-{{SPACE_SLUG}}-temporal restart: always depends_on: - postiz-{{SPACE_SLUG}}-temporal-postgres environment: - DB=postgres12 - DB_PORT=5432 - POSTGRES_USER=temporal - POSTGRES_PWD=temporal - POSTGRES_SEEDS=postiz-{{SPACE_SLUG}}-temporal-postgres - TEMPORAL_NAMESPACE=default networks: - postiz-{{SPACE_SLUG}}-internal volumes: postiz-{{SPACE_SLUG}}-postgres-data: postiz-{{SPACE_SLUG}}-redis-data: postiz-{{SPACE_SLUG}}-config: postiz-{{SPACE_SLUG}}-uploads: postiz-{{SPACE_SLUG}}-temporal-postgres-data: networks: traefik-public: external: true postiz-{{SPACE_SLUG}}-internal: internal: true mailcow-network: external: true name: mailcowdockerized_mailcow-network