AppFlowy-Search

AppFlowy-Search

Docker app from vmalinics0's Repository

Overview

Step 6/7: AppFlowy Search — full-text and semantic (AI-powered) search service for AppFlowy Cloud documents. 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-Search on Unraid in a few clicks.

Find AppFlowy-Search 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-Search 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

30,221
Total Downloads

Related apps

Details

Repository
appflowyinc/appflowy_search:latest
Last Updated2026-06-23
First Seen2026-05-26

Runtime arguments

Network
custom:appflowy
Shell
bash
Privileged
false

Template configuration

Keyword Index DirectoryPathrw

Persistent directory for the full-text (keyword) search index. Must have sufficient free space.

Target
/var/lib/appflowy/keyword_index
Default
/mnt/user/appdata/AppFlowy-Search/keyword_index
Value
/mnt/user/appdata/AppFlowy-Search/keyword_index
Database URLVariable

PostgreSQL connection string. Must match AppFlowy-Cloud.

Target
APPFLOWY_SEARCH_DATABASE_URL
Default
postgres://postgres:changeme_strong_password@AppFlowy-Postgres:5432/postgres
Value
postgres://postgres:changeme_strong_password@AppFlowy-Postgres:5432/postgres
Redis URLVariable

Redis connection URL.

Target
APPFLOWY_SEARCH_REDIS_URL
Default
redis://AppFlowy-Redis:6379
Value
redis://AppFlowy-Redis:6379
JWT SecretVariable

Shared JWT secret. Must be identical to GoTrue and AppFlowy-Cloud.

Target
APPFLOWY_GOTRUE_JWT_SECRET
Default
changeme_jwt_secret_min32chars!!
Value
changeme_jwt_secret_min32chars!!
Use MinIOVariable

Set true to use MinIO.

Target
APPFLOWY_S3_USE_MINIO
Default
true
Value
true
S3 Access KeyVariable

S3/MinIO access key.

Target
APPFLOWY_S3_ACCESS_KEY
Default
minioadmin
Value
minioadmin
S3 Secret KeyVariable

S3/MinIO secret key.

Target
APPFLOWY_S3_SECRET_KEY
Default
changeme_minio_secret
Value
changeme_minio_secret
S3 BucketVariable

S3/MinIO bucket name.

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

Internal MinIO API URL.

Target
APPFLOWY_S3_MINIO_URL
Default
http://AppFlowy-MinIO:9000
Value
http://AppFlowy-MinIO:9000
S3 RegionVariable

AWS S3 region (leave empty for MinIO).

Target
APPFLOWY_S3_REGION
OpenAI API KeyVariable

OpenAI API key for semantic/vector search and document embeddings. Leave empty to use keyword-only search.

Target
AI_OPENAI_API_KEY
Azure OpenAI API KeyVariable

Azure-hosted OpenAI API key (alternative to OpenAI). Leave empty if using standard OpenAI.

Target
AZURE_OPENAI_API_KEY
Azure OpenAI EndpointVariable

Azure OpenAI resource endpoint URL.

Target
AZURE_OPENAI_ENDPOINT
Azure OpenAI API VersionVariable

Azure OpenAI API version string.

Target
AZURE_OPENAI_API_VERSION
Keyword Search EnabledVariable

Enable full-text keyword search. Recommended: true.

Target
APPFLOWY_KEYWORD_SEARCH_ENABLED
Default
true
Value
true
Background Indexer EnabledVariable

Continuously index new/updated documents in the background.

Target
APPFLOWY_BACKGROUND_INDEXER_ENABLED
Default
true
Value
true
Keyword Worker EnabledVariable

Enable the keyword indexing worker.

Target
APPFLOWY_KEYWORD_WORKER_ENABLED
Default
true
Value
true
Database Indexer EnabledVariable

Enable database-level indexing (experimental).

Target
APPFLOWY_INDEXER_DATABASE_ENABLED
Default
false
Value
false
Keyword Index Map Size (bytes)Variable

Memory-mapped file size for keyword index in bytes. Default: 2 GiB. Reduce if RAM is limited.

Target
APPFLOWY_KEYWORD_INDEX_MAP_SIZE_BYTES
Default
2147483648
Value
2147483648
Listen HostVariable

IP address the search service listens on. :: = all interfaces.

Target
APPFLOWY_SEARCH_HOST
Default
::
Value
::
Listen PortVariable

Port the search service listens on (internal).

Target
APPFLOWY_SEARCH_PORT
Default
4002
Value
4002
Log LevelVariable

Rust log level.

Target
RUST_LOG
Default
info
Value
info