AppFlowy-Cloud

AppFlowy-Cloud

Docker app from vmalinics0's Repository

Overview

Step 5/7: AppFlowy Cloud — the core Rust backend providing REST API, WebSocket real-time collaboration, file management, and AI integration. Part of the AppFlowy Cloud stack.

AppFlowy 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

  1. Place your certificate and key in /mnt/user/appdata/AppFlowy-Nginx/ssl/:
    • certificate.crt
    • private_key.key
  2. Point the AppFlowy-Nginx nginx.conf path to nginx-https-custom.conf.
  3. Update all http:// URLs in every template to https://.
  4. Update APPFLOWY_WS_BASE_URL in AppFlowy-Web from ws:// to wss://.
  5. Restart all containers.

Option B — Automated Let's Encrypt (AppFlowy-Certbot)

Requires a public domain name with port 80 reachable from the internet.

  1. Create the required host directories:
    mkdir -p /mnt/user/appdata/AppFlowy-Nginx/letsencrypt
    mkdir -p /mnt/user/appdata/AppFlowy-Nginx/certbot-webroot
    
  2. Download nginx-letsencrypt.conf and edit it — replace YOUR_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
    
  3. Point the AppFlowy-Nginx nginx.conf path to nginx-letsencrypt.conf and restart it.
  4. In Community Apps, install AppFlowy-Certbot. Edit its Extra Parameters field — replace yourdomain.com and admin@yourdomain.com with your real values. Start it; it will obtain the certificate and exit (this is normal).
  5. Restart AppFlowy-Nginx to load the new certificate.
  6. Update all http:// URLs in every template to https:// and APPFLOWY_WS_BASE_URL from ws:// to wss://.
  7. 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

  1. Fork / create a public GitHub repository.
  2. Push all files from this directory into the repo root.
  3. Submit the repository URL at https://ca.unraid.net/submit.
  4. Run Validate and Scan in the CA submission flow.

Support

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.

Open the Apps tab on your Unraid server Search Community Apps for AppFlowy-Cloud Review the template variables and paths Click Install

Requirements

Custom Docker network named "appflowy" must exist before deploying any container in this stack. Create it via SSH or the Unraid terminal: docker network create appflowy — Network Type is pre-set to "appflowy" by default, verify it is selected.

Download Statistics

367,504
Total Downloads

Related apps

Details

Repository
appflowyinc/appflowy_cloud:latest
Last Updated2026-06-24
First Seen2026-05-26

Runtime arguments

Network
custom:appflowy
Shell
bash
Privileged
false

Template configuration

Base URLVariable

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
JWT SecretVariable

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!!
Web URLVariable

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
Database URLVariable

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 URIVariable

Redis connection URI.

Target
APPFLOWY_REDIS_URI
Default
redis://AppFlowy-Redis:6379
Value
redis://AppFlowy-Redis:6379
GoTrue Base URLVariable

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
Use MinIOVariable

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 Access KeyVariable

S3/MinIO access key. Must match AppFlowy-MinIO MINIO_ROOT_USER.

Target
APPFLOWY_S3_ACCESS_KEY
Default
minioadmin
Value
minioadmin
S3 Secret KeyVariable

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 BucketVariable

S3/MinIO bucket name. Created automatically on first start if APPFLOWY_S3_CREATE_BUCKET=true.

Target
APPFLOWY_S3_BUCKET
Default
appflowy
Value
appflowy
MinIO URL (internal)Variable

Internal MinIO API URL for container-to-container communication.

Target
APPFLOWY_S3_MINIO_URL
Default
http://AppFlowy-MinIO:9000
Value
http://AppFlowy-MinIO:9000
S3 Presigned URL EndpointVariable

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
Auto-create S3 BucketVariable

Automatically create the S3 bucket on startup if it does not exist.

Target
APPFLOWY_S3_CREATE_BUCKET
Default
true
Value
true
S3 RegionVariable

AWS S3 region (e.g. us-east-1). Required only when APPFLOWY_S3_USE_MINIO=false.

Target
APPFLOWY_S3_REGION
Access ControlVariable

Enable permission-based workspace access control. Recommended: true.

Target
APPFLOWY_ACCESS_CONTROL
Default
true
Value
true
DB Max ConnectionsVariable

PostgreSQL connection pool size. Reduce if your Postgres hits connection limits.

Target
APPFLOWY_DATABASE_MAX_CONNECTIONS
Default
40
Value
40
WebSocket Mailbox SizeVariable

Max queued WebSocket messages per actor. Higher = more memory; lower may drop messages under load.

Target
APPFLOWY_WEBSOCKET_MAILBOX_SIZE
Default
6000
Value
6000
Whitelist SignupVariable

Restrict signup to whitelisted emails. Requires GOTRUE_DISABLE_SIGNUP=false.

Target
SIGNUP_WHITELIST_ENABLED
Default
false
Value
false
Guest Invite ApprovalVariable

Require admin approval for guest invitations.

Target
GUEST_INVITES_REQUIRE_ADMIN_APPROVAL
Default
false
Value
false
Search Service URLVariable

Internal URL for the AppFlowy-Search container.

Target
APPFLOWY_SEARCH_SERVICE_URL
Default
http://AppFlowy-Search:4002
Value
http://AppFlowy-Search:4002
Search Request Timeout (s)Variable

Timeout in seconds for requests to the search service.

Target
APPFLOWY_SEARCH_REQUEST_TIMEOUT_SECS
Default
10
Value
10
AI EnabledVariable

Enable AI features. Set false to disable entirely.

Target
AI_ENABLED
Default
true
Value
true
AI Server HostVariable

Hostname of the AppFlowy-AI container on the appflowy network.

Target
AI_SERVER_HOST
Default
AppFlowy-AI
Value
AppFlowy-AI
AI Server PortVariable

Port of the AI service.

Target
AI_SERVER_PORT
Default
5001
Value
5001
OpenAI API KeyVariable

OpenAI API key. Required for AI-powered search summaries and document embeddings. Leave empty to disable AI.

Target
AI_OPENAI_API_KEY
SMTP HostVariable

SMTP host for AppFlowy Cloud mailer (e.g. smtp.gmail.com).

Target
APPFLOWY_MAILER_SMTP_HOST
SMTP PortVariable

SMTP port.

Target
APPFLOWY_MAILER_SMTP_PORT
Default
465
Value
465
SMTP UsernameVariable

SMTP authentication username.

Target
APPFLOWY_MAILER_SMTP_USERNAME
SMTP EmailVariable

Sender email address.

Target
APPFLOWY_MAILER_SMTP_EMAIL
SMTP PasswordVariable

SMTP password.

Target
APPFLOWY_MAILER_SMTP_PASSWORD
SMTP TLS KindVariable

TLS mode: wrapper (port 465), required, opportunistic, or none.

Target
APPFLOWY_MAILER_SMTP_TLS_KIND
Default
wrapper
Value
wrapper
AssemblyAI API KeyVariable

AssemblyAI API key for voice transcription features. Optional.

Target
ASSEMBLYAI_API_KEY
AssemblyAI API BaseVariable

AssemblyAI REST API base URL.

Target
ASSEMBLYAI_API_BASE
Default
https://api.assemblyai.com/v2
Value
https://api.assemblyai.com/v2
AssemblyAI Streaming BaseVariable

AssemblyAI streaming API base URL.

Target
ASSEMBLYAI_STREAMING_API_BASE
Default
https://streaming.assemblyai.com/v3
Value
https://streaming.assemblyai.com/v3
Log LevelVariable

Rust log level: error, warn, info, debug, trace.

Target
RUST_LOG
Default
info
Value
info
EnvironmentVariable

Deployment environment. Keep as production.

Target
APPFLOWY_ENVIRONMENT
Default
production
Value
production