Update postiz.yaml

### Proposed Improvements to Postiz Template

I'd like to propose several improvements to the current Postiz template that enhance security, reliability, and configuration flexibility:

#### Security Enhancements
- Added Redis ACL configuration with proper authentication
- Implemented secure healthchecks with authentication
- Enhanced PostgreSQL security configurations

#### Reliability Improvements
- Added memory limits and resource management for Redis
- Implemented proper data persistence configurations
- Added tmpfs for temporary files
- More comprehensive healthcheck configurations with proper retry/timeout strategies
- Better dependency management with health conditions

#### Configuration Flexibility
- Support for all environment variables from Postiz documentation
- Added Cloudflare R2 integration support
- Logical grouping of environment variables
- Default values for critical settings
- Better volume management with explicit drivers

The improved template provides a more production-ready setup while maintaining compatibility with Coolify's requirements. It follows best practices for Docker deployments and provides better security out of the box.
This commit is contained in:
Drdiffie
2024-11-21 16:05:55 +01:00
committed by GitHub
parent 092bd916ff
commit 47c442431b

View File

@@ -6,92 +6,157 @@
services:
postiz:
image: ghcr.io/gitroomhq/postiz-app:latest
image: 'ghcr.io/gitroomhq/postiz-app:latest'
environment:
# Required Settings
- 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://${SERVICE_USER_POSTGRESQL}:${SERVICE_PASSWORD_POSTGRESQL}@postgresql:5432/${POSTGRESQL_DATABASE:-postiz-db}
- REDIS_URL=redis://${SERVICE_USER_REDIS}:${SERVICE_PASSWORD_REDIS}@redis:6379
- BACKEND_INTERNAL_URL=http://localhost:3000
- IS_GENERAL=true
- 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}
- 'MAIN_URL=${SERVICE_FQDN_POSTIZ}'
- 'FRONTEND_URL=${SERVICE_FQDN_POSTIZ}'
- 'NEXT_PUBLIC_BACKEND_URL=${SERVICE_FQDN_POSTIZ}/api'
- 'DATABASE_URL=postgresql://${SERVICE_USER_POSTGRESQL}:${SERVICE_PASSWORD_POSTGRESQL}@postgres:5432/${POSTGRESQL_DATABASE:-postiz-db}'
- 'REDIS_URL=redis://${SERVICE_USER_REDIS}:${SERVICE_PASSWORD_REDIS}@redis:6379'
- 'JWT_SECRET=${SERVICE_PASSWORD_JWTSECRET}'
- 'BACKEND_INTERNAL_URL=http://localhost:3000'
# Cloudflare R2 Settings
- '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}'
# Storage Settings
- 'STORAGE_PROVIDER=${STORAGE_PROVIDER:-local}'
- 'UPLOAD_DIRECTORY=${UPLOAD_DIRECTORY:-/uploads}'
- 'NEXT_PUBLIC_UPLOAD_DIRECTORY=${NEXT_PUBLIC_UPLOAD_DIRECTORY:-/uploads}'
- 'NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY=${NEXT_PUBLIC_UPLOAD_STATIC_DIRECTORY}'
# Email Settings
- 'RESEND_API_KEY=${RESEND_API_KEY}'
- 'EMAIL_FROM_ADDRESS=${EMAIL_FROM_ADDRESS}'
- 'EMAIL_FROM_NAME=${EMAIL_FROM_NAME}'
# Social Media API Settings
- 'X_API_KEY=${SERVICE_X_API}'
- 'X_API_SECRET=${SERVICE_X_SECRET}'
- 'LINKEDIN_CLIENT_ID=${SERVICE_LINKEDIN_ID}'
- 'LINKEDIN_CLIENT_SECRET=${SERVICE_LINKEDIN_SECRET}'
- 'REDDIT_CLIENT_ID=${SERVICE_REDDIT_API}'
- 'REDDIT_CLIENT_SECRET=${SERVICE_REDDIT_SECRET}'
- 'GITHUB_CLIENT_ID=${SERVICE_GITHUB_ID}'
- 'GITHUB_CLIENT_SECRET=${SERVICE_GITHUB_SECRET}'
- 'THREADS_APP_ID=${SERVICE_THREADS_ID}'
- 'THREADS_APP_SECRET=${SERVICE_THREADS_SECRET}'
- 'FACEBOOK_APP_ID=${SERVICE_FACEBOOK_ID}'
- 'FACEBOOK_APP_SECRET=${SERVICE_FACEBOOK_SECRET}'
- 'YOUTUBE_CLIENT_ID=${SERVICE_YOUTUBE_ID}'
- 'YOUTUBE_CLIENT_SECRET=${SERVICE_YOUTUBE_SECRET}'
- 'TIKTOK_CLIENT_ID=${SERVICE_TIKTOK_ID}'
- 'TIKTOK_CLIENT_SECRET=${SERVICE_TIKTOK_SECRET}'
- 'PINTEREST_CLIENT_ID=${SERVICE_PINTEREST_ID}'
- 'PINTEREST_CLIENT_SECRET=${SERVICE_PINTEREST_SECRET}'
- 'DRIBBBLE_CLIENT_ID=${SERVICE_DRIBBLE_ID}'
- 'DRIBBBLE_CLIENT_SECRET=${SERVICE_DRIBBLE_SECRET}'
- 'DISCORD_CLIENT_ID=${SERVICE_DISCORD_ID}'
- 'DISCORD_CLIENT_SECRET=${SERVICE_DISCORD_SECRET}'
- 'DISCORD_BOT_TOKEN_ID=${SERVICE_DISCORD_TOKEN}'
- 'SLACK_ID=${SERVICE_SLACK_ID}'
- 'SLACK_SECRET=${SERVICE_SLACK_SECRET}'
- 'SLACK_SIGNING_SECRET=${SLACK_SIGNING_SECRET}'
- 'MASTODON_CLIENT_ID=${SERVICE_MASTODON_ID}'
- 'MASTODON_CLIENT_SECRET=${SERVICE_MASTODON_SECRET}'
# Integration APIs
- 'BEEHIIVE_API_KEY=${SERVICE_BEEHIIVE_KEY}'
- 'BEEHIIVE_PUBLICATION_ID=${SERVICE_BEEHIIVE_PUBID}'
- 'OPENAI_API_KEY=${SERVICE_OPENAI_KEY}'
# Misc Settings
- 'NEXT_PUBLIC_DISCORD_SUPPORT=${NEXT_PUBLIC_DISCORD_SUPPORT}'
- 'NEXT_PUBLIC_POLOTNO=${NEXT_PUBLIC_POLOTNO}'
- 'IS_GENERAL=${IS_GENERAL:-true}'
- 'NX_ADD_PLUGINS=${NX_ADD_PLUGINS:-false}'
# Payment Settings
- 'FEE_AMOUNT=${FEE_AMOUNT:-0.05}'
- 'STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY}'
- 'STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}'
- 'STRIPE_SIGNING_KEY=${STRIPE_SIGNING_KEY}'
- 'STRIPE_SIGNING_KEY_CONNECT=${STRIPE_SIGNING_KEY_CONNECT}'
volumes:
- postiz_config:/config/
- postiz_uploads:/uploads/
- 'postiz_config:/config/'
- 'postiz_uploads:/uploads/'
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://127.0.0.1:5000/"]
test:
- CMD-SHELL
- 'wget -qO- http://127.0.0.1:5000/'
interval: 5s
timeout: 20s
retries: 10
postgres:
image: postgres:14.5
image: 'postgres:14.5'
volumes:
- postiz_postgresql_data:/var/lib/postgresql/data
- 'postiz_postgresql_data:/var/lib/postgresql/data'
environment:
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
- POSTGRES_DB=${POSTGRESQL_DATABASE:-postiz-db}
- 'POSTGRES_USER=${SERVICE_USER_POSTGRESQL}'
- 'POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}'
- 'POSTGRES_DB=${POSTGRESQL_DATABASE:-postiz-db}'
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
test:
- CMD-SHELL
- 'pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}'
interval: 5s
timeout: 20s
retries: 10
redis:
image: redis:7.2
image: 'redis:7.2'
command: >
redis-server
--port 6379
--save 60 1
--loglevel warning
--protected-mode yes
--aclfile /data/users.acl
volumes:
- postiz_redis_data:/data
environment:
- REDIS_PASSWORD=${SERVICE_PASSWORD_REDIS}
- REDIS_USER=${SERVICE_USER_REDIS}
- 'postiz_redis_data:/data'
- type: tmpfs
target: /tmp
healthcheck:
test:
- CMD
- redis-cli
- PING
- '-u'
- 'redis://${SERVICE_USER_REDIS}:${SERVICE_PASSWORD_REDIS}@localhost:6379'
- ping
interval: 5s
timeout: 10s
retries: 20
deploy:
resources:
limits:
memory: 256M
entrypoint: >
sh -c "
echo 'user default off' > /data/users.acl &&
echo 'user ${SERVICE_USER_REDIS} on >${SERVICE_PASSWORD_REDIS} ~* &* +@all' >> /data/users.acl &&
redis-server --aclfile /data/users.acl
"
volumes:
postiz_config:
driver: local
postiz_uploads:
driver: local
postiz_postgresql_data:
driver: local
postiz_redis_data:
driver: local