diff --git a/blueprints/appflowy/appflowy.png b/blueprints/appflowy/appflowy.png new file mode 100644 index 00000000..5424aa22 Binary files /dev/null and b/blueprints/appflowy/appflowy.png differ diff --git a/blueprints/appflowy/docker-compose.yml b/blueprints/appflowy/docker-compose.yml new file mode 100644 index 00000000..f8429c8a --- /dev/null +++ b/blueprints/appflowy/docker-compose.yml @@ -0,0 +1,251 @@ +services: + minio: + restart: on-failure + image: minio/minio + environment: + - MINIO_BROWSER_REDIRECT_URL=${APPFLOWY_BASE_URL}/minio + - MINIO_ROOT_USER=${APPFLOWY_S3_ACCESS_KEY:-minioadmin} + - MINIO_ROOT_PASSWORD=${APPFLOWY_S3_SECRET_KEY:-minioadmin} + command: server /data --console-address ":9001" + volumes: + - minio_data:/data + + postgres: + restart: on-failure + image: pgvector/pgvector:pg16 + environment: + - POSTGRES_USER=${POSTGRES_USER:-postgres} + - POSTGRES_DB=${POSTGRES_DB:-postgres} + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password} + - POSTGRES_HOST=${POSTGRES_HOST:-postgres} + healthcheck: + test: ["CMD", "pg_isready", "-U", "${POSTGRES_USER}", "-d", "${POSTGRES_DB}"] + interval: 5s + timeout: 5s + retries: 12 + volumes: + - postgres_data:/var/lib/postgresql/data + - ./files/volumes/postgres/:/docker-entrypoint-initdb.d/ + + redis: + restart: on-failure + image: redis + + gotrue: + restart: on-failure + image: appflowyinc/gotrue:${GOTRUE_VERSION:-latest} + depends_on: + postgres: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "--fail", "http://127.0.0.1:9999/health"] + interval: 5s + timeout: 5s + retries: 12 + environment: + # Admin Configuration + - GOTRUE_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} + - GOTRUE_ADMIN_PASSWORD=${GOTRUE_ADMIN_PASSWORD} + - GOTRUE_DISABLE_SIGNUP=${GOTRUE_DISABLE_SIGNUP:-false} + + # Site Configuration + - GOTRUE_SITE_URL=appflowy-flutter:// + - GOTRUE_URI_ALLOW_LIST=${GOTRUE_URI_ALLOW_LIST:-**} + - API_EXTERNAL_URL=${API_EXTERNAL_URL} + + # JWT Configuration + - GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} + - GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP:-7200} + - GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin + + # Database Configuration + - GOTRUE_DB_DRIVER=postgres + - DATABASE_URL=${GOTRUE_DATABASE_URL} + - PORT=9999 + + # Email Configuration + - GOTRUE_SMTP_HOST=${GOTRUE_SMTP_HOST} + - GOTRUE_SMTP_PORT=${GOTRUE_SMTP_PORT} + - GOTRUE_SMTP_USER=${GOTRUE_SMTP_USER} + - GOTRUE_SMTP_PASS=${GOTRUE_SMTP_PASS} + - GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_SMTP_ADMIN_EMAIL} + - GOTRUE_SMTP_MAX_FREQUENCY=${GOTRUE_SMTP_MAX_FREQUENCY:-1ns} + - GOTRUE_RATE_LIMIT_EMAIL_SENT=${GOTRUE_RATE_LIMIT_EMAIL_SENT:-100} + - GOTRUE_MAILER_AUTOCONFIRM=${GOTRUE_MAILER_AUTOCONFIRM:-true} + + # Email Templates + - 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_TEMPLATES_MAGIC_LINK=${GOTRUE_MAILER_TEMPLATES_MAGIC_LINK} + + # OAuth Providers + - GOTRUE_EXTERNAL_GOOGLE_ENABLED=${GOTRUE_EXTERNAL_GOOGLE_ENABLED:-false} + - GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=${GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID} + - GOTRUE_EXTERNAL_GOOGLE_SECRET=${GOTRUE_EXTERNAL_GOOGLE_SECRET} + - GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI} + + - GOTRUE_EXTERNAL_GITHUB_ENABLED=${GOTRUE_EXTERNAL_GITHUB_ENABLED:-false} + - GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=${GOTRUE_EXTERNAL_GITHUB_CLIENT_ID} + - GOTRUE_EXTERNAL_GITHUB_SECRET=${GOTRUE_EXTERNAL_GITHUB_SECRET} + - GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=${GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI} + + - GOTRUE_EXTERNAL_DISCORD_ENABLED=${GOTRUE_EXTERNAL_DISCORD_ENABLED:-false} + - GOTRUE_EXTERNAL_DISCORD_CLIENT_ID=${GOTRUE_EXTERNAL_DISCORD_CLIENT_ID} + - GOTRUE_EXTERNAL_DISCORD_SECRET=${GOTRUE_EXTERNAL_DISCORD_SECRET} + - GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=${GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI} + + # SAML Configuration + - GOTRUE_SAML_ENABLED=${GOTRUE_SAML_ENABLED:-false} + - GOTRUE_SAML_PRIVATE_KEY=${GOTRUE_SAML_PRIVATE_KEY} + + appflowy_cloud: + restart: on-failure + image: appflowyinc/appflowy_cloud:${APPFLOWY_CLOUD_VERSION:-latest} + depends_on: + gotrue: + condition: service_healthy + environment: + # Core Configuration + - RUST_LOG=${RUST_LOG:-info} + - APPFLOWY_ENVIRONMENT=production + - APPFLOWY_DATABASE_URL=${APPFLOWY_DATABASE_URL} + - APPFLOWY_REDIS_URI=${APPFLOWY_REDIS_URI} + - APPFLOWY_WEB_URL=${APPFLOWY_WEB_URL} + + # Authentication Configuration + - APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} + - APPFLOWY_GOTRUE_JWT_EXP=${GOTRUE_JWT_EXP:-7200} + - APPFLOWY_GOTRUE_BASE_URL=${APPFLOWY_GOTRUE_BASE_URL} + + # File Storage Configuration + - APPFLOWY_S3_CREATE_BUCKET=${APPFLOWY_S3_CREATE_BUCKET:-true} + - APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO:-true} + - APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} + - APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} + - APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} + - APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET:-appflowy} + - APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION:-us-east-1} + - APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=${APPFLOWY_S3_PRESIGNED_URL_ENDPOINT} + + # Email Configuration + - APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} + - APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} + - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} + - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} + - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} + - APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND:-wrapper} + + # Access Control and Performance + - APPFLOWY_ACCESS_CONTROL=${APPFLOWY_ACCESS_CONTROL:-true} + - APPFLOWY_DATABASE_MAX_CONNECTIONS=${APPFLOWY_DATABASE_MAX_CONNECTIONS:-40} + - APPFLOWY_WEBSOCKET_MAILBOX_SIZE=${APPFLOWY_WEBSOCKET_MAILBOX_SIZE:-6000} + + # AI Configuration + - AI_SERVER_HOST=${AI_SERVER_HOST:-ai} + - AI_SERVER_PORT=${AI_SERVER_PORT:-5001} + - AI_OPENAI_API_KEY=${AI_OPENAI_API_KEY} + + admin_frontend: + restart: on-failure + image: appflowyinc/admin_frontend:${APPFLOWY_ADMIN_FRONTEND_VERSION:-latest} + depends_on: + gotrue: + condition: service_healthy + appflowy_cloud: + condition: service_started + environment: + - RUST_LOG=${RUST_LOG:-info} + - ADMIN_FRONTEND_REDIS_URL=${ADMIN_FRONTEND_REDIS_URL} + - ADMIN_FRONTEND_GOTRUE_URL=${ADMIN_FRONTEND_GOTRUE_URL} + - ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=${ADMIN_FRONTEND_APPFLOWY_CLOUD_URL} + - ADMIN_FRONTEND_PATH_PREFIX=${ADMIN_FRONTEND_PATH_PREFIX:-/console} + + ai: + restart: on-failure + image: appflowyinc/appflowy_ai:${APPFLOWY_AI_VERSION:-latest} + depends_on: + postgres: + condition: service_healthy + appflowy_cloud: + condition: service_started + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:5001/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + environment: + # Core AI Configuration + - AI_SERVER_PORT=${AI_SERVER_PORT:-5001} + - OPENAI_API_KEY=${AI_OPENAI_API_KEY} + - DEFAULT_AI_MODEL=${DEFAULT_AI_MODEL:-gpt-4o-mini} + - DEFAULT_AI_COMPLETION_MODEL=${DEFAULT_AI_COMPLETION_MODEL:-gpt-4o-mini} + + # Azure OpenAI (optional) + - AZURE_OPENAI_API_KEY=${AZURE_OPENAI_API_KEY} + - AZURE_OPENAI_ENDPOINT=${AZURE_OPENAI_ENDPOINT} + - AZURE_OPENAI_API_VERSION=${AZURE_OPENAI_API_VERSION} + + # Database and Cache + - AI_DATABASE_URL=${APPFLOWY_DATABASE_URL} + - AI_REDIS_URL=${APPFLOWY_REDIS_URI} + + # File Storage for AI + - APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} + - APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} + - APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET:-appflowy} + - APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION:-us-east-1} + - AI_USE_MINIO=${APPFLOWY_S3_USE_MINIO:-true} + - AI_MINIO_URL=${APPFLOWY_S3_MINIO_URL} + + # Integration + - AI_APPFLOWY_HOST=${APPFLOWY_BASE_URL} + - APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} + + appflowy_worker: + restart: on-failure + image: appflowyinc/appflowy_worker:${APPFLOWY_WORKER_VERSION:-latest} + depends_on: + postgres: + condition: service_healthy + environment: + # Core Configuration + - RUST_LOG=${RUST_LOG:-info} + - APPFLOWY_ENVIRONMENT=production + - APPFLOWY_WORKER_REDIS_URL=${APPFLOWY_WORKER_REDIS_URL} + - APPFLOWY_WORKER_ENVIRONMENT=production + - APPFLOWY_WORKER_DATABASE_URL=${APPFLOWY_WORKER_DATABASE_URL} + - APPFLOWY_WORKER_DATABASE_NAME=${APPFLOWY_WORKER_DATABASE_NAME} + - APPFLOWY_WORKER_IMPORT_TICK_INTERVAL=${APPFLOWY_WORKER_IMPORT_TICK_INTERVAL:-30} + + # File Storage Configuration + - APPFLOWY_S3_USE_MINIO=${APPFLOWY_S3_USE_MINIO:-true} + - APPFLOWY_S3_MINIO_URL=${APPFLOWY_S3_MINIO_URL} + - APPFLOWY_S3_ACCESS_KEY=${APPFLOWY_S3_ACCESS_KEY} + - APPFLOWY_S3_SECRET_KEY=${APPFLOWY_S3_SECRET_KEY} + - APPFLOWY_S3_BUCKET=${APPFLOWY_S3_BUCKET:-appflowy} + - APPFLOWY_S3_REGION=${APPFLOWY_S3_REGION:-us-east-1} + + # Email Configuration + - APPFLOWY_MAILER_SMTP_HOST=${APPFLOWY_MAILER_SMTP_HOST} + - APPFLOWY_MAILER_SMTP_PORT=${APPFLOWY_MAILER_SMTP_PORT} + - APPFLOWY_MAILER_SMTP_USERNAME=${APPFLOWY_MAILER_SMTP_USERNAME} + - APPFLOWY_MAILER_SMTP_EMAIL=${APPFLOWY_MAILER_SMTP_EMAIL} + - APPFLOWY_MAILER_SMTP_PASSWORD=${APPFLOWY_MAILER_SMTP_PASSWORD} + - APPFLOWY_MAILER_SMTP_TLS_KIND=${APPFLOWY_MAILER_SMTP_TLS_KIND:-wrapper} + + appflowy_web: + restart: on-failure + image: appflowyinc/appflowy_web:${APPFLOWY_WEB_VERSION:-latest} + depends_on: + - appflowy_cloud + environment: + - AF_BASE_URL=${APPFLOWY_BASE_URL} + - AF_GOTRUE_URL=${APPFLOWY_BASE_URL}/gotrue + - AF_WS_V2_URL=${APPFLOWY_WEBSOCKET_BASE_URL} + +volumes: + postgres_data: + minio_data: diff --git a/blueprints/appflowy/template.toml b/blueprints/appflowy/template.toml new file mode 100644 index 00000000..db93b949 --- /dev/null +++ b/blueprints/appflowy/template.toml @@ -0,0 +1,252 @@ +[variables] +main_domain = "${domain}" + +[config] +env = [ + # ============================================================================= + # 🌐 CORE DOMAIN CONFIGURATION + # ============================================================================= + "FQDN=${main_domain}", + "SCHEME=https", + "WS_SCHEME=wss", + "APPFLOWY_BASE_URL=https://${main_domain}", + "APPFLOWY_WEBSOCKET_BASE_URL=wss://${main_domain}/ws/v2", + "APPFLOWY_WEB_URL=https://${main_domain}", + "API_EXTERNAL_URL=https://${main_domain}/gotrue", + "TZ=UTC", + + # Admin Configuration + "GOTRUE_ADMIN_EMAIL=${email}", + "GOTRUE_ADMIN_PASSWORD=${password:16}", + "GOTRUE_DISABLE_SIGNUP=false", + + # ============================================================================= + # 🗄️ DATABASE & CACHE CONFIGURATION + # ============================================================================= + "POSTGRES_HOST=postgres", + "POSTGRES_USER=appflowy", + "POSTGRES_PASSWORD=${password:64}", + "POSTGRES_PORT=5432", + "POSTGRES_DB=appflowy", + "REDIS_HOST=redis", + "REDIS_PORT=6379", + + # ============================================================================= + # 🔐 GOTRUE AUTHENTICATION CONFIGURATION + # ============================================================================= + + # JWT Configuration + "GOTRUE_JWT_SECRET=${password:64}", + "GOTRUE_JWT_EXP=7200", + "GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin", + + # Database Configuration + "GOTRUE_DB_DRIVER=postgres", + "GOTRUE_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy?search_path=auth", + "PORT=9999", + + # Site Configuration + "GOTRUE_SITE_URL=appflowy-flutter://", + "GOTRUE_URI_ALLOW_LIST=**", + + # Email Configuration (SMTP - Configure for production) + "GOTRUE_SMTP_HOST=", + "GOTRUE_SMTP_PORT=465", + "GOTRUE_SMTP_USER=", + "GOTRUE_SMTP_PASS=", + "GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL}", + "GOTRUE_SMTP_MAX_FREQUENCY=1ns", + "GOTRUE_RATE_LIMIT_EMAIL_SENT=100", + "GOTRUE_MAILER_AUTOCONFIRM=true", + + # Email Templates + "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_TEMPLATES_MAGIC_LINK=", + + # OAuth Providers (Configure as needed) + "GOTRUE_EXTERNAL_GOOGLE_ENABLED=false", + "GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=", + "GOTRUE_EXTERNAL_GOOGLE_SECRET=", + "GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=https://${main_domain}/gotrue/callback", + + "GOTRUE_EXTERNAL_GITHUB_ENABLED=false", + "GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=", + "GOTRUE_EXTERNAL_GITHUB_SECRET=", + "GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=https://${main_domain}/gotrue/callback", + + "GOTRUE_EXTERNAL_DISCORD_ENABLED=false", + "GOTRUE_EXTERNAL_DISCORD_CLIENT_ID=", + "GOTRUE_EXTERNAL_DISCORD_SECRET=", + "GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=https://${main_domain}/gotrue/callback", + + # SAML Configuration + "GOTRUE_SAML_ENABLED=false", + "GOTRUE_SAML_PRIVATE_KEY=", + + # ============================================================================= + # ☁️ APPFLOWY CLOUD SERVICE CONFIGURATION + # ============================================================================= + # Core Configuration + "RUST_LOG=info", + "APPFLOWY_ENVIRONMENT=production", + "APPFLOWY_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy", + "APPFLOWY_REDIS_URI=redis://redis:6379", + + # Authentication Integration + "APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET}", + "APPFLOWY_GOTRUE_JWT_EXP=7200", + "APPFLOWY_GOTRUE_BASE_URL=http://gotrue:9999", + + # Access Control and Performance + "APPFLOWY_ACCESS_CONTROL=true", + "APPFLOWY_DATABASE_MAX_CONNECTIONS=40", + "APPFLOWY_WEBSOCKET_MAILBOX_SIZE=6000", + + # Email Configuration (SMTP) + "APPFLOWY_MAILER_SMTP_HOST=", + "APPFLOWY_MAILER_SMTP_PORT=465", + "APPFLOWY_MAILER_SMTP_USERNAME=", + "APPFLOWY_MAILER_SMTP_EMAIL=", + "APPFLOWY_MAILER_SMTP_PASSWORD=", + "APPFLOWY_MAILER_SMTP_TLS_KIND=wrapper", + + # ============================================================================= + # 💾 FILE STORAGE CONFIGURATION (MinIO/S3) + # ============================================================================= + # MinIO Configuration + "MINIO_HOST=minio", + "MINIO_PORT=9000", + "APPFLOWY_S3_USE_MINIO=true", + "APPFLOWY_S3_CREATE_BUCKET=true", + "APPFLOWY_S3_MINIO_URL=http://minio:9000", + + # Storage Credentials + "APPFLOWY_S3_ACCESS_KEY=${password:16}", + "APPFLOWY_S3_SECRET_KEY=${password:32}", + + # Storage Configuration + "APPFLOWY_S3_BUCKET=appflowy", + "APPFLOWY_S3_REGION=us-east-1", + "APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=https://${main_domain}/minio-api", + + # AWS S3 Configuration (Alternative to MinIO) + # "APPFLOWY_S3_USE_MINIO=false", + # "APPFLOWY_S3_REGION=us-east-1", + + # ============================================================================= + # 🎛️ ADMIN FRONTEND CONFIGURATION + # ============================================================================= + "ADMIN_FRONTEND_REDIS_URL=redis://redis:6379", + "ADMIN_FRONTEND_GOTRUE_URL=http://gotrue:9999", + "ADMIN_FRONTEND_APPFLOWY_CLOUD_URL=http://appflowy_cloud:8000", + "ADMIN_FRONTEND_PATH_PREFIX=/console", + + # ============================================================================= + # 🤖 AI FEATURES CONFIGURATION (Optional) + # ============================================================================= + # OpenAI Configuration + "AI_OPENAI_API_KEY=", + "DEFAULT_AI_MODEL=gpt-4o-mini", + "DEFAULT_AI_COMPLETION_MODEL=gpt-4o-mini", + + # Azure OpenAI (Alternative) + "AZURE_OPENAI_API_KEY=", + "AZURE_OPENAI_ENDPOINT=", + "AZURE_OPENAI_API_VERSION=", + + # AI Service Configuration + "AI_SERVER_HOST=ai", + "AI_SERVER_PORT=5001", + "AI_DATABASE_URL=postgresql+psycopg://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy", + "AI_REDIS_URL=redis://redis:6379", + "AI_USE_MINIO=true", + "AI_MINIO_URL=http://minio:9000", + "AI_APPFLOWY_HOST=https://${main_domain}", + + # Embedding Configuration + "APPFLOWY_EMBEDDING_CHUNK_SIZE=2000", + "APPFLOWY_EMBEDDING_CHUNK_OVERLAP=200", + + # ============================================================================= + # ⚙️ WORKER SERVICES CONFIGURATION + # ============================================================================= + # AppFlowy Worker + "APPFLOWY_WORKER_REDIS_URL=redis://redis:6379", + "APPFLOWY_WORKER_ENVIRONMENT=production", + "APPFLOWY_WORKER_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy", + "APPFLOWY_WORKER_DATABASE_NAME=appflowy", + "APPFLOWY_WORKER_IMPORT_TICK_INTERVAL=30", + + # Indexer Configuration + "APPFLOWY_INDEXER_ENABLED=true", + "APPFLOWY_INDEXER_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy", + "APPFLOWY_INDEXER_REDIS_URL=redis://redis:6379", + "APPFLOWY_INDEXER_EMBEDDING_BUFFER_SIZE=5000", + + # Collaboration Service + "APPFLOWY_COLLABORATE_MULTI_THREAD=false", + "APPFLOWY_COLLABORATE_REMOVE_BATCH_SIZE=100", + + # ============================================================================= + # 🌐 NGINX CONFIGURATION + # ============================================================================= + "NGINX_PORT=80", + "NGINX_TLS_PORT=443", + + # ============================================================================= + # 🛠️ VERSION TAGS (Easily Configurable) + # ============================================================================= + "GOTRUE_VERSION=latest", + "APPFLOWY_CLOUD_VERSION=latest", + "APPFLOWY_ADMIN_FRONTEND_VERSION=latest", + "APPFLOWY_AI_VERSION=latest", + "APPFLOWY_WORKER_VERSION=latest", + "APPFLOWY_WEB_VERSION=latest", +] + +mounts = [ + "postgres_data:/var/lib/postgresql/data", + "minio_data:/data", + "letsencrypt:/etc/letsencrypt" +] + +# ============================================================================= +# 🌐 DOMAIN ROUTING CONFIGURATION +# ============================================================================= +[[config.domains]] +serviceName = "appflowy_web" +port = 80 +host = "${main_domain}" + +[[config.domains]] +serviceName = "appflowy_cloud" +port = 8000 +host = "${main_domain}" +path = "/api" + +[[config.domains]] +serviceName = "admin_frontend" +port = 3000 +host = "${main_domain}" +path = "/console" + +[[config.domains]] +serviceName = "gotrue" +port = 9999 +host = "${main_domain}" +path = "/gotrue" + +[[config.domains]] +serviceName = "minio" +port = 9001 +host = "${main_domain}" +path = "/minio" + +[[config.domains]] +serviceName = "minio" +port = 9000 +host = "${main_domain}" +path = "/minio-api" diff --git a/meta.json b/meta.json index 2192872b..ff86accf 100644 --- a/meta.json +++ b/meta.json @@ -203,6 +203,25 @@ "chatbot" ] }, + { + "id": "appflowy", + "name": "App Flowy", + "version": "0.9.3", + "description": "AppFlowy is an open-source alternative to Notion. You are in charge of your data and customizations.", + "links": { + "github": "https://github.com/AppFlowy-IO/AppFlowy", + "website": "https://appflowy.io/", + "docs": "https://docs.appflowy.io/docs" + }, + "logo": "appflowy.png", + "tags": [ + "productivity", + "self-hosted", + "notes", + "knowledge-base", + "notion-alternative" + ] + }, { "id": "apprise-api", "name": "Apprise API",