# AppFlowy Cloud — schlanke Self-Host-Variante fuer Heidrich Digital (Coolify/Traefik) # Abgespeckt: ohne 'ai' und 'appflowy_search'. Mem-Limits als Leitplanke (~2.3 GB). # Hinter Traefik: nginx ohne Host-Ports, im coolify-Netz. services: postgres: image: pgvector/pgvector:pg16 restart: on-failure mem_limit: 512m environment: - POSTGRES_USER=postgres - POSTGRES_DB=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} healthcheck: test: ["CMD","pg_isready","-U","postgres","-d","postgres"] interval: 5s timeout: 5s retries: 12 volumes: - postgres_data:/var/lib/postgresql/data redis: image: redis restart: on-failure mem_limit: 128m minio: image: minio/minio restart: on-failure mem_limit: 256m environment: - MINIO_BROWSER_REDIRECT_URL=https://appflowy.46.224.49.66.sslip.io/minio - MINIO_ROOT_USER=${MINIO_KEY} - MINIO_ROOT_PASSWORD=${MINIO_SECRET} command: server /data --console-address ":9001" volumes: - minio_data:/data gotrue: image: appflowyinc/gotrue:latest restart: on-failure mem_limit: 192m depends_on: postgres: condition: service_healthy environment: - GOTRUE_ADMIN_EMAIL=mail@heidrich-digital.de - GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} - GOTRUE_DISABLE_SIGNUP=false - GOTRUE_SITE_URL=appflowy-flutter:// - GOTRUE_URI_ALLOW_LIST=** - GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} - GOTRUE_JWT_EXP=604800 - GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin - GOTRUE_DB_DRIVER=postgres - API_EXTERNAL_URL=https://appflowy.46.224.49.66.sslip.io/gotrue - DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres?search_path=auth - PORT=9999 - GOTRUE_MAILER_URLPATHS_CONFIRMATION=/gotrue/verify - GOTRUE_MAILER_URLPATHS_INVITE=/gotrue/verify - GOTRUE_MAILER_URLPATHS_RECOVERY=/gotrue/verify - GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE=/gotrue/verify - GOTRUE_MAILER_AUTOCONFIRM=true - GOTRUE_SMTP_MAX_FREQUENCY=1ns - GOTRUE_RATE_LIMIT_EMAIL_SENT=100 healthcheck: test: "curl --fail http://127.0.0.1:9999/health || exit 1" interval: 5s timeout: 5s retries: 12 start_period: 40s appflowy_cloud: image: appflowyinc/appflowy_cloud:latest restart: on-failure mem_limit: 640m depends_on: gotrue: condition: service_healthy environment: - RUST_LOG=info - APPFLOWY_ENVIRONMENT=production - APPFLOWY_DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres - APPFLOWY_REDIS_URI=redis://redis:6379 - APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} - APPFLOWY_GOTRUE_BASE_URL=http://gotrue:9999 - APPFLOWY_S3_CREATE_BUCKET=true - APPFLOWY_S3_USE_MINIO=true - APPFLOWY_S3_MINIO_URL=http://minio:9000 - APPFLOWY_S3_ACCESS_KEY=${MINIO_KEY} - APPFLOWY_S3_SECRET_KEY=${MINIO_SECRET} - APPFLOWY_S3_BUCKET=appflowy - APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=https://appflowy.46.224.49.66.sslip.io/minio-api - APPFLOWY_ACCESS_CONTROL=true - APPFLOWY_DATABASE_MAX_CONNECTIONS=20 - APPFLOWY_WEB_URL=https://appflowy.46.224.49.66.sslip.io - APPFLOWY_BASE_URL=https://appflowy.46.224.49.66.sslip.io - AI_ENABLED=false - APPFLOWY_SEARCH_SERVICE_URL= healthcheck: test: "curl --fail http://127.0.0.1:8000/api/health || exit 1" interval: 5s timeout: 5s retries: 12 appflowy_worker: image: appflowyinc/appflowy_worker:latest restart: on-failure mem_limit: 256m depends_on: appflowy_cloud: condition: service_healthy environment: - RUST_LOG=info - APPFLOWY_ENVIRONMENT=production - APPFLOWY_WORKER_REDIS_URL=redis://redis:6379 - APPFLOWY_WORKER_ENVIRONMENT=production - APPFLOWY_WORKER_DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres - APPFLOWY_WORKER_DATABASE_NAME=postgres - APPFLOWY_WORKER_IMPORT_TICK_INTERVAL=30 - APPFLOWY_S3_USE_MINIO=true - APPFLOWY_S3_MINIO_URL=http://minio:9000 - APPFLOWY_S3_ACCESS_KEY=${MINIO_KEY} - APPFLOWY_S3_SECRET_KEY=${MINIO_SECRET} - APPFLOWY_S3_BUCKET=appflowy admin_frontend: image: appflowyinc/admin_frontend:latest restart: on-failure mem_limit: 96m depends_on: appflowy_cloud: condition: service_healthy environment: - APPFLOWY_GOTRUE_BASE_URL=http://gotrue:9999 - APPFLOWY_BASE_URL=http://appflowy_cloud:8000 appflowy_web: image: appflowyinc/appflowy_web:latest restart: on-failure mem_limit: 256m depends_on: appflowy_cloud: condition: service_healthy environment: - APPFLOWY_BASE_URL=https://appflowy.46.224.49.66.sslip.io - APPFLOWY_GOTRUE_BASE_URL=https://appflowy.46.224.49.66.sslip.io/gotrue - APPFLOWY_WS_BASE_URL=wss://appflowy.46.224.49.66.sslip.io/ws/v2 nginx: image: nginx restart: on-failure mem_limit: 96m depends_on: - appflowy_cloud - appflowy_web - gotrue volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/ssl/certificate.crt:/etc/nginx/ssl/certificate.crt - ./nginx/ssl/private_key.key:/etc/nginx/ssl/private_key.key networks: - default - coolify networks: coolify: external: true volumes: postgres_data: minio_data: