All apps · 0 apps
AppFlowy-Cloud
Docker app from vmalinics0's Repository
Overview
Readme
View on GitHubAppFlowy Cloud — Unraid Community Apps Templates
Unraid Community Apps templates for self-hosting AppFlowy Cloud — the open-source, privacy-first collaborative workspace (Notion alternative).
Services
| Container | Image | Role |
|---|---|---|
| AppFlowy-Postgres | pgvector/pgvector:pg16 |
Primary database |
| AppFlowy-Redis | redis:7 |
Cache & pub/sub |
| AppFlowy-MinIO | minio/minio |
S3-compatible object storage |
| AppFlowy-GoTrue | appflowyinc/gotrue |
Authentication (JWT, OAuth, email) |
| AppFlowy-Cloud | appflowyinc/appflowy_cloud |
Core backend API + WebSocket |
| AppFlowy-Admin | appflowyinc/admin_frontend |
Admin web console (/console) |
| AppFlowy-Web | appflowyinc/appflowy_web |
Browser client (/) |
| AppFlowy-Worker | appflowyinc/appflowy_worker |
Background job processor |
| AppFlowy-Search | appflowyinc/appflowy_search |
Full-text & semantic search |
| AppFlowy-AI (optional) | appflowyinc/appflowy_ai |
LLM chat & embeddings |
| AppFlowy-Nginx | nginx:stable-alpine |
Reverse proxy (public entry point) |
| AppFlowy-Certbot (optional) | certbot/certbot |
Automated Let's Encrypt TLS certificates |
Prerequisites
1. Create the appflowy Docker network
All containers communicate on a shared custom bridge network.
Via SSH or the Unraid terminal:
docker network create appflowy
2. Download the nginx config
Before starting AppFlowy-Nginx, place the custom config at:
/mnt/user/appdata/AppFlowy-Nginx/nginx.conf
mkdir -p /mnt/user/appdata/AppFlowy-Nginx/ssl
curl -o /mnt/user/appdata/AppFlowy-Nginx/nginx.conf \
https://raw.githubusercontent.com/vmalinics0/unraid-appflowy/main/nginx/nginx.conf
The nginx.conf in this repo uses Unraid container names (AppFlowy-Cloud, AppFlowy-GoTrue, etc.) instead of the default compose service names.
Deploy Order
Deploy containers in this order (each group can be deployed in parallel). The install step number is shown in each app's description in Community Apps.
Step 1 — AppFlowy-Postgres
Step 2 — AppFlowy-Redis
Step 3 — AppFlowy-MinIO
Step 4 — AppFlowy-GoTrue (waits for Postgres)
Step 5 — AppFlowy-Cloud (waits for GoTrue, Postgres, Redis, MinIO)
Step 6 — AppFlowy-Admin \
AppFlowy-Web | (wait for AppFlowy-Cloud)
AppFlowy-Worker |
AppFlowy-Search |
AppFlowy-AI (optional) /
Step 7 — AppFlowy-Nginx (deploy last)
Required Configuration
Set these values consistently across all templates before starting:
| Setting | Where to set | Notes |
|---|---|---|
YOUR_SERVER_IP |
All templates | Your Unraid server's LAN IP or domain |
| Postgres Password | AppFlowy-Postgres, AppFlowy-GoTrue, AppFlowy-Cloud, AppFlowy-Worker, AppFlowy-Search, AppFlowy-AI | Must be identical everywhere |
| JWT Secret | AppFlowy-GoTrue, AppFlowy-Cloud, AppFlowy-Search, AppFlowy-AI | Min 32 chars; must be identical everywhere |
| MinIO credentials | AppFlowy-MinIO, AppFlowy-Cloud, AppFlowy-Worker, AppFlowy-Search, AppFlowy-AI | Access key + secret key |
| Admin email/password | AppFlowy-GoTrue | Login for /console |
Accessing AppFlowy
| URL | Service |
|---|---|
http://YOUR_SERVER_IP/ |
AppFlowy Web (browser client) |
http://YOUR_SERVER_IP/console |
Admin console |
http://YOUR_SERVER_IP/minio/ |
MinIO web UI |
Native desktop/mobile clients: point them to http://YOUR_SERVER_IP as the server URL.
TLS / HTTPS
Three nginx config files are provided; choose one:
| Config file | Use when |
|---|---|
nginx/nginx.conf |
HTTP only (default, no TLS) |
nginx/nginx-https-custom.conf |
You have your own TLS certificate |
nginx/nginx-letsencrypt.conf |
Automated Let's Encrypt certificates |
Option A — User-provided certificate
- Place your certificate and key in
/mnt/user/appdata/AppFlowy-Nginx/ssl/:certificate.crtprivate_key.key
- Point the AppFlowy-Nginx nginx.conf path to
nginx-https-custom.conf. - Update all
http://URLs in every template tohttps://. - Update
APPFLOWY_WS_BASE_URLin AppFlowy-Web fromws://towss://. - Restart all containers.
Option B — Automated Let's Encrypt (AppFlowy-Certbot)
Requires a public domain name with port 80 reachable from the internet.
- Create the required host directories:
mkdir -p /mnt/user/appdata/AppFlowy-Nginx/letsencrypt mkdir -p /mnt/user/appdata/AppFlowy-Nginx/certbot-webroot - Download
nginx-letsencrypt.confand edit it — replaceYOUR_DOMAIN(two occurrences) with your actual domain:curl -o /mnt/user/appdata/AppFlowy-Nginx/nginx-letsencrypt.conf \ https://raw.githubusercontent.com/vmalinics0/unraid-appflowy/main/nginx/nginx-letsencrypt.conf - Point the AppFlowy-Nginx nginx.conf path to
nginx-letsencrypt.confand restart it. - In Community Apps, install AppFlowy-Certbot. Edit its Extra Parameters field — replace
yourdomain.comandadmin@yourdomain.comwith your real values. Start it; it will obtain the certificate and exit (this is normal). - Restart AppFlowy-Nginx to load the new certificate.
- Update all
http://URLs in every template tohttps://andAPPFLOWY_WS_BASE_URLfromws://towss://. - Schedule AppFlowy-Certbot to restart monthly (e.g. via the Unraid User Scripts plugin) for automatic renewal. After each renewal, restart AppFlowy-Nginx.
Submitting to Community Apps
- Fork / create a public GitHub repository.
- Push all files from this directory into the repo root.
- Submit the repository URL at https://ca.unraid.net/submit.
- Run Validate and Scan in the CA submission flow.
Support
- Template issues / requests: https://github.com/vmalinics0/unraid-appflowy/issues
- Template docs: https://github.com/vmalinics0/unraid-appflowy/blob/main/README.md
- Upstream AppFlowy Cloud discussions: https://github.com/AppFlowy-IO/AppFlowy-Cloud/discussions
Upstream
Install AppFlowy-Cloud on Unraid in a few clicks.
Find AppFlowy-Cloud in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Requirements
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
appflowyinc/appflowy_cloud:latestRuntime arguments
- Network
custom:appflowy- Shell
bash- Privileged
- false
Template configuration
Public-facing base URL of your AppFlowy instance (e.g. http://192.168.1.100 or https://appflowy.yourdomain.com). No trailing slash.
- Target
- APPFLOWY_BASE_URL
- Default
- http://YOUR_SERVER_IP
- Value
- http://YOUR_SERVER_IP
Shared JWT secret. MUST be identical to GOTRUE_JWT_SECRET in AppFlowy-GoTrue. Keep private.
- Target
- APPFLOWY_GOTRUE_JWT_SECRET
- Default
- changeme_jwt_secret_min32chars!!
- Value
- changeme_jwt_secret_min32chars!!
URL where AppFlowy Web is served. Usually the same as Base URL.
- Target
- APPFLOWY_WEB_URL
- Default
- http://YOUR_SERVER_IP
- Value
- http://YOUR_SERVER_IP
PostgreSQL connection string. Update password and host if changed.
- Target
- APPFLOWY_DATABASE_URL
- Default
- postgres://postgres:changeme_strong_password@AppFlowy-Postgres:5432/postgres
- Value
- postgres://postgres:changeme_strong_password@AppFlowy-Postgres:5432/postgres
Redis connection URI.
- Target
- APPFLOWY_REDIS_URI
- Default
- redis://AppFlowy-Redis:6379
- Value
- redis://AppFlowy-Redis:6379
Internal URL of the AppFlowy-GoTrue container on the appflowy network.
- Target
- APPFLOWY_GOTRUE_BASE_URL
- Default
- http://AppFlowy-GoTrue:9999
- Value
- http://AppFlowy-GoTrue:9999
Set true to use MinIO (recommended for self-hosted). Set false to use AWS S3.
- Target
- APPFLOWY_S3_USE_MINIO
- Default
- true
- Value
- true
S3/MinIO access key. Must match AppFlowy-MinIO MINIO_ROOT_USER.
- Target
- APPFLOWY_S3_ACCESS_KEY
- Default
- minioadmin
- Value
- minioadmin
S3/MinIO secret key. Must match AppFlowy-MinIO MINIO_ROOT_PASSWORD.
- Target
- APPFLOWY_S3_SECRET_KEY
- Default
- changeme_minio_secret
- Value
- changeme_minio_secret
S3/MinIO bucket name. Created automatically on first start if APPFLOWY_S3_CREATE_BUCKET=true.
- Target
- APPFLOWY_S3_BUCKET
- Default
- appflowy
- Value
- appflowy
Internal MinIO API URL for container-to-container communication.
- Target
- APPFLOWY_S3_MINIO_URL
- Default
- http://AppFlowy-MinIO:9000
- Value
- http://AppFlowy-MinIO:9000
Public-facing URL for MinIO presigned file access. Clients use this to upload/download files directly.
- Target
- APPFLOWY_S3_PRESIGNED_URL_ENDPOINT
- Default
- http://YOUR_SERVER_IP/minio-api
- Value
- http://YOUR_SERVER_IP/minio-api
Automatically create the S3 bucket on startup if it does not exist.
- Target
- APPFLOWY_S3_CREATE_BUCKET
- Default
- true
- Value
- true
AWS S3 region (e.g. us-east-1). Required only when APPFLOWY_S3_USE_MINIO=false.
- Target
- APPFLOWY_S3_REGION
Enable permission-based workspace access control. Recommended: true.
- Target
- APPFLOWY_ACCESS_CONTROL
- Default
- true
- Value
- true
PostgreSQL connection pool size. Reduce if your Postgres hits connection limits.
- Target
- APPFLOWY_DATABASE_MAX_CONNECTIONS
- Default
- 40
- Value
- 40
Max queued WebSocket messages per actor. Higher = more memory; lower may drop messages under load.
- Target
- APPFLOWY_WEBSOCKET_MAILBOX_SIZE
- Default
- 6000
- Value
- 6000
Restrict signup to whitelisted emails. Requires GOTRUE_DISABLE_SIGNUP=false.
- Target
- SIGNUP_WHITELIST_ENABLED
- Default
- false
- Value
- false
Require admin approval for guest invitations.
- Target
- GUEST_INVITES_REQUIRE_ADMIN_APPROVAL
- Default
- false
- Value
- false
Internal URL for the AppFlowy-Search container.
- Target
- APPFLOWY_SEARCH_SERVICE_URL
- Default
- http://AppFlowy-Search:4002
- Value
- http://AppFlowy-Search:4002
Timeout in seconds for requests to the search service.
- Target
- APPFLOWY_SEARCH_REQUEST_TIMEOUT_SECS
- Default
- 10
- Value
- 10
Enable AI features. Set false to disable entirely.
- Target
- AI_ENABLED
- Default
- true
- Value
- true
Hostname of the AppFlowy-AI container on the appflowy network.
- Target
- AI_SERVER_HOST
- Default
- AppFlowy-AI
- Value
- AppFlowy-AI
Port of the AI service.
- Target
- AI_SERVER_PORT
- Default
- 5001
- Value
- 5001
OpenAI API key. Required for AI-powered search summaries and document embeddings. Leave empty to disable AI.
- Target
- AI_OPENAI_API_KEY
SMTP host for AppFlowy Cloud mailer (e.g. smtp.gmail.com).
- Target
- APPFLOWY_MAILER_SMTP_HOST
SMTP port.
- Target
- APPFLOWY_MAILER_SMTP_PORT
- Default
- 465
- Value
- 465
SMTP authentication username.
- Target
- APPFLOWY_MAILER_SMTP_USERNAME
Sender email address.
- Target
- APPFLOWY_MAILER_SMTP_EMAIL
SMTP password.
- Target
- APPFLOWY_MAILER_SMTP_PASSWORD
TLS mode: wrapper (port 465), required, opportunistic, or none.
- Target
- APPFLOWY_MAILER_SMTP_TLS_KIND
- Default
- wrapper
- Value
- wrapper
AssemblyAI API key for voice transcription features. Optional.
- Target
- ASSEMBLYAI_API_KEY
AssemblyAI REST API base URL.
- Target
- ASSEMBLYAI_API_BASE
- Default
- https://api.assemblyai.com/v2
- Value
- https://api.assemblyai.com/v2
AssemblyAI streaming API base URL.
- Target
- ASSEMBLYAI_STREAMING_API_BASE
- Default
- https://streaming.assemblyai.com/v3
- Value
- https://streaming.assemblyai.com/v3
Rust log level: error, warn, info, debug, trace.
- Target
- RUST_LOG
- Default
- info
- Value
- info
Deployment environment. Keep as production.
- Target
- APPFLOWY_ENVIRONMENT
- Default
- production
- Value
- production