202 lines
6.8 KiB
YAML
202 lines
6.8 KiB
YAML
# =============================================================================
|
|
# 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
|