AppFlowy Cloud schlanke Self-Host-Compose (Coolify/Traefik, ohne ai+search, Mem-Limits, Secrets via Env)

This commit is contained in:
till
2026-06-30 10:58:22 +00:00
commit d47361e7f2
6 changed files with 491 additions and 0 deletions
+171
View File
@@ -0,0 +1,171 @@
# 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: