# AppFlowy Cloud — schlanke Self-Host-Variante fuer Heidrich Digital (Coolify/Traefik) # Ohne 'ai' + 'appflowy_search'. Mem-Limits ~2.3 GB. nginx aus eigenem Image (kein Mount). # depends_on entkoppelt -> alle Container starten sofort, pendeln per restart:on-failure ein. 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: 20 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://o14i2dg0el8grbbbcm1u20u1.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 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://o14i2dg0el8grbbbcm1u20u1.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: 20 start_period: 60s appflowy_cloud: image: appflowyinc/appflowy_cloud:latest restart: on-failure mem_limit: 640m 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://o14i2dg0el8grbbbcm1u20u1.46.224.49.66.sslip.io/minio-api - APPFLOWY_ACCESS_CONTROL=true - APPFLOWY_DATABASE_MAX_CONNECTIONS=20 - APPFLOWY_WEB_URL=https://o14i2dg0el8grbbbcm1u20u1.46.224.49.66.sslip.io - APPFLOWY_BASE_URL=https://o14i2dg0el8grbbbcm1u20u1.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: 20 appflowy_worker: image: appflowyinc/appflowy_worker:latest restart: on-failure mem_limit: 256m 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 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 environment: - APPFLOWY_BASE_URL=https://o14i2dg0el8grbbbcm1u20u1.46.224.49.66.sslip.io - APPFLOWY_GOTRUE_BASE_URL=https://o14i2dg0el8grbbbcm1u20u1.46.224.49.66.sslip.io/gotrue - APPFLOWY_WS_BASE_URL=wss://o14i2dg0el8grbbbcm1u20u1.46.224.49.66.sslip.io/ws/v2 nginx: build: context: . dockerfile: Dockerfile.nginx restart: on-failure mem_limit: 96m expose: - "80" networks: - default - coolify networks: coolify: external: true volumes: postgres_data: minio_data: