services:
  postiz:
    image: ghcr.io/gitroomhq/postiz-app:latest
    container_name: postiz
    restart: always
    environment:
      MAIN_URL: "https://postiz.your-server.com"
      FRONTEND_URL: "https://postiz.your-server.com"
      NEXT_PUBLIC_BACKEND_URL: "https://postiz.your-server.com/api"
      JWT_SECRET: "random string that is unique to every install - just type random characters here!"
      DATABASE_URL: "postgresql://postiz-user:postiz-password@postiz-postgres:5432/postiz-db-local"
      REDIS_URL: "redis://postiz-redis:6379"
      BACKEND_INTERNAL_URL: "http://localhost:3000"
      IS_GENERAL: "true"
      DISABLE_REGISTRATION: "false"
      STORAGE_PROVIDER: "local"
      UPLOAD_DIRECTORY: "/uploads"
      NEXT_PUBLIC_UPLOAD_DIRECTORY: "/uploads"
      CLOUDFLARE_ACCOUNT_ID: "your-account-id"
      CLOUDFLARE_ACCESS_KEY: "your-access-key"
      CLOUDFLARE_SECRET_ACCESS_KEY: "your-secret-access-key"
      CLOUDFLARE_BUCKETNAME: "your-bucket-name"
      CLOUDFLARE_BUCKET_URL: "https://your-bucket-url.r2.cloudflarestorage.com/"
      CLOUDFLARE_REGION: "auto"
      X_API_KEY: ""
      X_API_SECRET: ""
      LINKEDIN_CLIENT_ID: ""
      LINKEDIN_CLIENT_SECRET: ""
      REDDIT_CLIENT_ID: ""
      REDDIT_CLIENT_SECRET: ""
      GITHUB_CLIENT_ID: ""
      GITHUB_CLIENT_SECRET: ""
      BEEHIIVE_API_KEY: ""
      BEEHIIVE_PUBLICATION_ID: ""
      THREADS_APP_ID: ""
      THREADS_APP_SECRET: ""
      FACEBOOK_APP_ID: ""
      FACEBOOK_APP_SECRET: ""
      YOUTUBE_CLIENT_ID: ""
      YOUTUBE_CLIENT_SECRET: ""
      TIKTOK_CLIENT_ID: ""
      TIKTOK_CLIENT_SECRET: ""
      PINTEREST_CLIENT_ID: ""
      PINTEREST_CLIENT_SECRET: ""
      DRIBBBLE_CLIENT_ID: ""
      DRIBBBLE_CLIENT_SECRET: ""
      DISCORD_CLIENT_ID: ""
      DISCORD_CLIENT_SECRET: ""
      DISCORD_BOT_TOKEN_ID: ""
      SLACK_ID: ""
      SLACK_SECRET: ""
      SLACK_SIGNING_SECRET: ""
      MASTODON_URL: "https://mastodon.social"
      MASTODON_CLIENT_ID: ""
      MASTODON_CLIENT_SECRET: ""
      NEXT_PUBLIC_POSTIZ_OAUTH_DISPLAY_NAME: "Authentik"
      NEXT_PUBLIC_POSTIZ_OAUTH_LOGO_URL: "https://raw.githubusercontent.com/walkxcode/dashboard-icons/master/png/authentik.png"
      POSTIZ_GENERIC_OAUTH: "false"
      POSTIZ_OAUTH_URL: "https://auth.example.com"
      POSTIZ_OAUTH_AUTH_URL: "https://auth.example.com/application/o/authorize"
      POSTIZ_OAUTH_TOKEN_URL: "https://auth.example.com/application/o/token"
      POSTIZ_OAUTH_USERINFO_URL: "https://authentik.example.com/application/o/userinfo"
      POSTIZ_OAUTH_CLIENT_ID: ""
      POSTIZ_OAUTH_CLIENT_SECRET: ""
      OPENAI_API_KEY: ""
      NEXT_PUBLIC_DISCORD_SUPPORT: ""
      NEXT_PUBLIC_POLOTNO: ""
      API_LIMIT: 30
      FEE_AMOUNT: 0.05
      STRIPE_PUBLISHABLE_KEY: ""
      STRIPE_SECRET_KEY: ""
      STRIPE_SIGNING_KEY: ""
      STRIPE_SIGNING_KEY_CONNECT: ""
      NX_ADD_PLUGINS: false
    volumes:
      - postiz-config:/config/
      - postiz-uploads:/uploads/
    ports:
      - "${POSTIZ_PORT:-5000}:5000"
    networks:
      - postiz-network
    depends_on:
      postiz-postgres:
        condition: service_healthy
      postiz-redis:
        condition: service_healthy

  postiz-postgres:
    image: postgres:17-alpine
    container_name: postiz-postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postiz-password}
      POSTGRES_USER: ${POSTGRES_USER:-postiz-user}
      POSTGRES_DB: ${POSTGRES_DB:-postiz-db-local}
    volumes:
      - postgres-volume:/var/lib/postgresql/data
    networks:
      - postiz-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postiz-user} -d ${POSTGRES_DB:-postiz-db-local}"]
      interval: 10s
      timeout: 3s
      retries: 3

  postiz-redis:
    image: redis:7.2
    container_name: postiz-redis
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping | grep PONG"]
      interval: 10s
      timeout: 3s
      retries: 3
    volumes:
      - postiz-redis-data:/data
    networks:
      - postiz-network

volumes:
  postgres-volume:
    external: false
  postiz-redis-data:
    external: false
  postiz-config:
    external: false
  postiz-uploads:
    external: false

networks:
  postiz-network:
    external: false
