diff --git a/public/svgs/postiz.svg b/public/svgs/postiz.svg new file mode 100644 index 000000000..6e3baa813 --- /dev/null +++ b/public/svgs/postiz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/templates/compose/postiz.yaml b/templates/compose/postiz.yaml index 8d199fde9..94e18891d 100644 --- a/templates/compose/postiz.yaml +++ b/templates/compose/postiz.yaml @@ -1,59 +1,129 @@ -# ignore: true -# documentation: https://docs.postiz.com/introduction -# slogan: -# tags: -# logo: -# port: 4200 +# documentation: https://docs.postiz.com +# slogan: Social media scheduling tool. +# tags: post everywhere, social media, planning +# logo: svgs/postiz.svg +version: "3.8" services: postiz: image: "ghcr.io/gitroomhq/postiz-app:latest" + container_name: postiz + restart: always environment: - - SERVICE_FQDN_POSTIZ_4200 - - MAIN_URL=${SERVICE_FQDN_POSTIZ} - - FRONTEND_URL=${SERVICE_FQDN_POSTIZ} - - NEXT_PUBLIC_BACKEND_URL=${SERVICE_FQDN_POSTIZAPI_3000} - - JWT_SECRET=${SERVICE_REALBASE64_JWTSECRET} - - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@postgres:5432/${POSTGRES_DB:-postiz}?schema=public - - REDIS_URL=redis://redis:6379 - - BACKEND_INTERNAL_URL=http://localhost:3000/ + - SERVICE_FQDN_POSTIZ_5000 + - "MAIN_URL=${SERVICE_FQDN_POSTIZ}" + - "FRONTEND_URL=${SERVICE_FQDN_POSTIZ}" + - "NEXT_PUBLIC_BACKEND_URL=${SERVICE_FQDN_POSTIZ}/api" + - "JWT_SECRET=${SERVICE_PASSWORD_JWTSECRET}" + - "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 - - 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} - - RESEND_API_KEY=${RESEND_API_KEY} - - EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS} - - EMAIL_FROM_NAME=${EMAIL_FROM_NAME} + - STORAGE_PROVIDER=local + - UPLOAD_DIRECTORY=/uploads + - NEXT_PUBLIC_UPLOAD_DIRECTORY=/uploads + - "X_API_KEY=${SERVICE_X_API}" + - "X_API_SECRET=${SERVICE_X_SECRET}" + - "REDDIT_CLIENT_ID=${SERVICE_REDDIT_API}" + - "REDDIT_CLIENT_SECRET=${SERVICE_REDDIT_SECRET}" + - "TIKTOK_CLIENT_ID=${SERVICE_TIKTOK_ID}" + - "TIKTOK_CLIENT_SECRET=${SERVICE_TIKTOK_SECRET}" + - "SLACK_ID=${SERVICE_SLACK_ID}" + - "SLACK_SECRET=${SERVICE_SLACK_SECRET}" + - "PINTEREST_CLIENT_ID=${SERVICE_PINTEREST_ID}" + - "PINTEREST_CLIENT_SECRET=${SERVICE_PINTEREST_SECRET}" + - "DRIBBLE_CLIENT_ID=${SERVICE_DRIBBLE_ID}" + - "DRIBBLE_CLIENT_SECRET=${SERVICE_DRIBBLE_SECRET}" + - "DISCORD_CLIENT_ID=${SERVICE_DISCORD_ID}" + - "DISCORD_CLIENT_SECRET=${SERVICE_DISCORD_SECRET}" + - "DISCORD_BOT_TOKEN_ID=${SERVICE_DISCORD_TOKEN}" + - "YOUTUBE_CLIENT_ID=${SERVICE_YOUTUBE_ID}" + - "YOUTUBE_CLIENT_SECRET=${SERVICE_YOUTUBE_SECRET}" + - "MASTODON_CLIENT_ID=${SERVICE_MASTODON_ID}" + - "MASTODON_CLIENT_SECRET=${SERVICE_MASTODON_SECRET}" + - "LINKEDIN_CLIENT_ID=${SERVICE_LINKEDIN_ID}" + - "LINKEDIN_CLIENT_SECRET=${SERVICE_LINKEDIN_SECRET}" + - "INSTAGRAM_APP_ID=${SERVICE_INSTAGRAM_ID}" + - "INSTAGRAM_APP_SECRET=${SERVICE_INSTAGRAM_SECRET}" + - "FACEBOOK_APP_ID=${SERVICE_FACEBOOK_ID}" + - "FACEBOOK_APP_SECRET=${SERVICE_FACEBOOK_SECRET}" + - "THREADS_APP_ID=${SERVICE_THREADS_ID}" + - "THREADS_APP_SECRET=${SERVICE_THREADS_SECRET}" + - "GITHUB_CLIENT_ID=${SERVICE_GITHUB_ID}" + - "GITHUB_CLIENT_SECRET=${SERVICE_GITHUB_SECRET}" + - "BEEHIIVE_API_KEY=${SERVICE_BEEHIIVE_KEY}" + - "BEEHIIVE_PUBLICATION_ID=${SERVICE_BEEHIIVE_PUBID}" + - "OPENAI_API_KEY=${SERVICE_OPENAI_KEY}" + + volumes: + - "postiz-config:/config/" + - "postiz-uploads:/uploads/" + ports: + - "5000:5000" + networks: + - postiz-network + labels: + - traefik.enable=true + - "traefik.http.routers.postiz.rule=Host(your.url) && PathPrefix(/)" + - traefik.http.routers.postiz.entryPoints=http + - traefik.http.routers.postiz.tls=true + - traefik.http.routers.postiz.tls.certresolver=letsencrypt + - traefik.http.services.postiz.loadbalancer.server.port=5000 depends_on: - postgres: - condition: service_healthy - redis: - condition: service_started - volumes: - - "postiz_config:/config" - postgres: - image: "postgres:latest" + - postiz-postgres + - postiz-redis + postiz-postgres: + image: "postgres:14.5" + container_name: postiz-postgres + restart: always environment: - - POSTGRES_DB=${POSTGRES_DB:-postiz} - - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES} - - POSTGRES_USER=${SERVICE_USER_POSTGRES} - - POSTGRES_PORT=${POSTGRES_PORT:-5432} + - POSTGRES_PASSWORD=postiz-password + - POSTGRES_USER=postiz-user + - POSTGRES_DB=postiz-db-local volumes: - - "pg-data:/var/lib/postgresql/data" + - "postgres-volume:/var/lib/postgresql/data" + ports: + - "5432:5432" + networks: + - postiz-network healthcheck: - test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] - interval: 5s - timeout: 20s - retries: 10 - redis: + test: + - CMD + - pg_isready + - "-U" + - postiz-user + - "-d" + - postiz-db-local + interval: 10s + timeout: 3s + retries: 3 + postiz-redis: image: "redis:7.2" - volumes: - - "redis_data:/data" + container_name: postiz-redis + restart: always + ports: + - "6379:6379" healthcheck: - test: ["CMD", "redis-cli", "ping"] - interval: 5s - timeout: 20s - retries: 10 + test: + - CMD + - redis-cli + - ping + 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