Skip to Content

Deploy AppFlowy

Bring projects, wikis, and teams together with AI. AppFlowy is the AI collaborative workspace where you achieve more without losing control of your data. The leading open source Notion alternative.

⭐ 68.0k stars📜 GNU Affero General Public License v3.0🔴 Advanced⏱ ~20 minutes

What You’ll Get

A fully working AppFlowy instance running on your server. Your data stays on your hardware — no third-party access, no usage limits, no surprise invoices.

Prerequisites

  • A server with Docker and Docker Compose installed (setup guide)
  • A domain name pointed to your server (optional but recommended)
  • Basic terminal access (SSH)

The Config

Create a directory for AppFlowy and add this docker-compose.yml:

# ------------------------------------------------------------------------- # 🚀 Created and distributed by The AltStack # 🌍 https://thealtstack.com # ------------------------------------------------------------------------- # Docker Compose for AppFlowy Cloud version: '3.8' services: appflowy: build: context: . dockerfile: Dockerfile container_name: appflowy-cloud ports: - "8080:8080" environment: - DATABASE_URL=postgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowy - REDIS_URL=redis://redis:6379 depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - appflowy_net healthcheck: test: [ "CMD", "curl", "-f", "http://localhost:8080/health" ] interval: 10s timeout: 5s retries: 5 db: image: postgres:15-alpine container_name: appflowy-db environment: POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password} POSTGRES_DB: appflowy volumes: - appflowy_db_data:/var/lib/postgresql/data networks: - appflowy_net healthcheck: test: [ "CMD-SHELL", "pg_isready -U postgres" ] interval: 5s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: appflowy-redis networks: - appflowy_net healthcheck: test: [ "CMD", "redis-cli", "ping" ] interval: 5s timeout: 5s retries: 5 networks: appflowy_net: driver: bridge volumes: appflowy_db_data: name: appflowy_db_data

Let’s Ship It

# Create a directory mkdir -p /opt/appflowy && cd /opt/appflowy # Create the docker-compose.yml (paste the config above) nano docker-compose.yml # Pull images and start docker compose up -d # Watch the logs docker compose logs -f

Environment Variables

VariableDefaultRequired
DATABASE_URLpostgres://postgres:${POSTGRES_PASSWORD:-password}@db:5432/appflowyNo
REDIS_URLredis://redis:6379No
POSTGRES_PASSWORDpasswordNo

Post-Deployment Checklist

  • Service is accessible on the configured port
  • Admin account created (if applicable)
  • Reverse proxy configured (Caddy guide)
  • SSL/HTTPS working
  • Backup script set up (backup guide)
  • Uptime monitor added (Uptime Kuma)

The “I Broke It” Section

Container won’t start?

docker compose logs appflowy | tail -50

Port already in use?

# Find what's using the port lsof -i :PORT_NUMBER

Need to start fresh?

docker compose down -v # ⚠️ This deletes volumes/data! docker compose up -d

Going Further