[GH-ISSUE #8583] Cannot authenticate to admin console #3925

Open
opened 2026-03-23 21:34:11 +00:00 by mirror · 8 comments
Owner

Originally created by @dfranco on GitHub (Mar 17, 2026).
Original GitHub issue: https://github.com/AppFlowy-IO/AppFlowy/issues/8583

Originally assigned to: @appflowy on GitHub.

Hi,

Whenever I try to authenticate to admin console using /console, I get this error in the Docker container log

🚨 [ServerFetch] [CRITICAL] Server fetch failed: {
name: 'GoTrue health check',
url: 'http://localhost:9999/health',
method: 'GET',
error: {
..

Which env variable have I missed ?

Everything seem to work without issue except this for now.

Thanks for your help

Originally created by @dfranco on GitHub (Mar 17, 2026). Original GitHub issue: https://github.com/AppFlowy-IO/AppFlowy/issues/8583 Originally assigned to: @appflowy on GitHub. Hi, Whenever I try to authenticate to admin console using /console, I get this error in the Docker container log ``` 🚨 [ServerFetch] [CRITICAL] Server fetch failed: { name: 'GoTrue health check', url: 'http://localhost:9999/health', method: 'GET', error: { .. ``` Which env variable have I missed ? Everything seem to work without issue except this for now. Thanks for your help
Author
Owner

@appflowy commented on GitHub (Mar 18, 2026):

@dfranco The admin frontend can not connect to gotrue. How do you selfhost AppFlowy? You can DM me in discord if you want.

<!-- gh-comment-id:4082024435 --> @appflowy commented on GitHub (Mar 18, 2026): @dfranco The admin frontend can not connect to gotrue. How do you selfhost AppFlowy? You can DM me in discord if you want.
Author
Owner

@dfranco commented on GitHub (Mar 18, 2026):

@dfranco The admin frontend can not connect to gotrue. How do you selfhost AppFlowy? You can DM me in discord if you want.

I'm using Docker Compose

Let me send you the details in Discord

<!-- gh-comment-id:4084911487 --> @dfranco commented on GitHub (Mar 18, 2026): > @dfranco The admin frontend can not connect to gotrue. How do you selfhost AppFlowy? You can DM me in discord if you want. I'm using Docker Compose Let me send you the details in Discord
Author
Owner

@dfranco commented on GitHub (Mar 19, 2026):

Finally, I prefer to stick here, using Discord would be another source of distraction I don't need.

@appflowy I use a Docker Compose within DokPloy.

Here's the .env

FQDN=appflowy.acme.com
SCHEME=https
WS_SCHEME=wss
APPFLOWY_BASE_URL=${SCHEME}://${FQDN}
APPFLOWY_WEBSOCKET_BASE_URL=wss://${FQDN}/ws/v2
APPFLOWY_WEB_URL=${SCHEME}://${FQDN}
API_EXTERNAL_URL=${SCHEME}://${FQDN}/gotrue
TZ=UTC
GOTRUE_ADMIN_EMAIL=admin@acme.com
GOTRUE_ADMIN_PASSWORD="super secret"
ADMIN_FRONTEND_PATH_PREFIX=/console

GOTRUE_DISABLE_SIGNUP=true
GOTRUE_EXTERNAL_GOOGLE_ENABLED=false
GOTRUE_EXTERNAL_GITHUB_ENABLED=false
GOTRUE_EXTERNAL_APPLE_ENABLED=false
GOTRUE_EXTERNAL_DISCORD_ENABLED=false

POSTGRES_HOST=postgres
POSTGRES_USER=appflowy
POSTGRES_PASSWORD="super secret"
POSTGRES_PORT=5432
POSTGRES_DB=appflowy
REDIS_HOST=redis
REDIS_PORT=6379
GOTRUE_JWT_SECRET=xxxxxxxx
GOTRUE_JWT_EXP=7200
GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin
GOTRUE_DB_DRIVER=postgres
GOTRUE_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy?search_path=auth
PORT=9999
GOTRUE_SITE_URL=appflowy-flutter://
GOTRUE_URI_ALLOW_LIST=**
GOTRUE_SMTP_HOST=smtp.gmail.com
GOTRUE_SMTP_PORT=465
GOTRUE_SMTP_USER=johndoe@acme.com
GOTRUE_SMTP_PASS="super secret"
GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL}
GOTRUE_SMTP_MAX_FREQUENCY=1ns
GOTRUE_RATE_LIMIT_EMAIL_SENT=100
GOTRUE_MAILER_AUTOCONFIRM=true
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_EXTERNAL_GOOGLE_ENABLED=false
GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID=
GOTRUE_EXTERNAL_GOOGLE_SECRET=
GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback
GOTRUE_EXTERNAL_GITHUB_ENABLED=false
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=
GOTRUE_EXTERNAL_GITHUB_SECRET=
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback
GOTRUE_EXTERNAL_DISCORD_ENABLED=false
GOTRUE_EXTERNAL_DISCORD_CLIENT_ID=
GOTRUE_EXTERNAL_DISCORD_SECRET=
GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback
GOTRUE_SAML_ENABLED=false
GOTRUE_SAML_PRIVATE_KEY=
RUST_LOG=info
APPFLOWY_ENVIRONMENT=production
APPFLOWY_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy
APPFLOWY_REDIS_URI=redis://redis:6379
APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET}
APPFLOWY_GOTRUE_JWT_EXP=7200
APPFLOWY_GOTRUE_BASE_URL=http://gotrue:9999
APPFLOWY_ACCESS_CONTROL=true
APPFLOWY_DATABASE_MAX_CONNECTIONS=40
APPFLOWY_WEBSOCKET_MAILBOX_SIZE=6000
APPFLOWY_MAILER_SMTP_HOST=smtp.gmail.com
APPFLOWY_MAILER_SMTP_PORT=465
APPFLOWY_MAILER_SMTP_USERNAME=johndoe@acme.com
APPFLOWY_MAILER_SMTP_EMAIL=johndoe@acme.com
APPFLOWY_MAILER_SMTP_PASSWORD="super secret"
APPFLOWY_MAILER_SMTP_TLS_KIND=wrapper
MINIO_HOST=minio
MINIO_PORT=9000
APPFLOWY_S3_USE_MINIO=true
APPFLOWY_S3_CREATE_BUCKET=true
APPFLOWY_S3_MINIO_URL=http://minio:9000
APPFLOWY_S3_ACCESS_KEY="super secret"
APPFLOWY_S3_SECRET_KEY="super secret"
APPFLOWY_S3_BUCKET=appflowy
APPFLOWY_S3_REGION=us-east-1
APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=${SCHEME}://${FQDN}/minio-api
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_OPENAI_API_KEY=
DEFAULT_AI_MODEL=gpt-4o-mini
DEFAULT_AI_COMPLETION_MODEL=gpt-4o-mini

# AI
AI_OPENAI_API_KEY=
AZURE_OPENAI_API_KEY=
AZURE_OPENAI_ENDPOINT=
AZURE_OPENAI_API_VERSION=
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=${SCHEME}://${FQDN}
APPFLOWY_EMBEDDING_CHUNK_SIZE=2000
APPFLOWY_EMBEDDING_CHUNK_OVERLAP=200
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
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
APPFLOWY_COLLABORATE_MULTI_THREAD=false
APPFLOWY_COLLABORATE_REMOVE_BATCH_SIZE=100
NGINX_PORT=80
NGINX_TLS_PORT=443
GOTRUE_VERSION=latest
APPFLOWY_CLOUD_VERSION=latest
APPFLOWY_ADMIN_FRONTEND_VERSION=latest
APPFLOWY_AI_VERSION=latest
APPFLOWY_WORKER_VERSION=latest
APPFLOWY_WEB_VERSION=latest

and the compose.yml

Thanks for your help
services:
  nginx:
    restart: on-failure
    image: nginx
    volumes:
      - ../files/nginx/nginx.conf:/etc/nginx/nginx.conf

  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}
      - APPFLOWY_BASE_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}

  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:
<!-- gh-comment-id:4087831883 --> @dfranco commented on GitHub (Mar 19, 2026): Finally, I prefer to stick here, using Discord would be another source of distraction I don't need. @appflowy I use a Docker Compose within DokPloy. Here's the .env ``` FQDN=appflowy.acme.com SCHEME=https WS_SCHEME=wss APPFLOWY_BASE_URL=${SCHEME}://${FQDN} APPFLOWY_WEBSOCKET_BASE_URL=wss://${FQDN}/ws/v2 APPFLOWY_WEB_URL=${SCHEME}://${FQDN} API_EXTERNAL_URL=${SCHEME}://${FQDN}/gotrue TZ=UTC GOTRUE_ADMIN_EMAIL=admin@acme.com GOTRUE_ADMIN_PASSWORD="super secret" ADMIN_FRONTEND_PATH_PREFIX=/console GOTRUE_DISABLE_SIGNUP=true GOTRUE_EXTERNAL_GOOGLE_ENABLED=false GOTRUE_EXTERNAL_GITHUB_ENABLED=false GOTRUE_EXTERNAL_APPLE_ENABLED=false GOTRUE_EXTERNAL_DISCORD_ENABLED=false POSTGRES_HOST=postgres POSTGRES_USER=appflowy POSTGRES_PASSWORD="super secret" POSTGRES_PORT=5432 POSTGRES_DB=appflowy REDIS_HOST=redis REDIS_PORT=6379 GOTRUE_JWT_SECRET=xxxxxxxx GOTRUE_JWT_EXP=7200 GOTRUE_JWT_ADMIN_GROUP_NAME=supabase_admin GOTRUE_DB_DRIVER=postgres GOTRUE_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy?search_path=auth PORT=9999 GOTRUE_SITE_URL=appflowy-flutter:// GOTRUE_URI_ALLOW_LIST=** GOTRUE_SMTP_HOST=smtp.gmail.com GOTRUE_SMTP_PORT=465 GOTRUE_SMTP_USER=johndoe@acme.com GOTRUE_SMTP_PASS="super secret" GOTRUE_SMTP_ADMIN_EMAIL=${GOTRUE_ADMIN_EMAIL} GOTRUE_SMTP_MAX_FREQUENCY=1ns GOTRUE_RATE_LIMIT_EMAIL_SENT=100 GOTRUE_MAILER_AUTOCONFIRM=true 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_EXTERNAL_GOOGLE_ENABLED=false GOTRUE_EXTERNAL_GOOGLE_CLIENT_ID= GOTRUE_EXTERNAL_GOOGLE_SECRET= GOTRUE_EXTERNAL_GOOGLE_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback GOTRUE_EXTERNAL_GITHUB_ENABLED=false GOTRUE_EXTERNAL_GITHUB_CLIENT_ID= GOTRUE_EXTERNAL_GITHUB_SECRET= GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback GOTRUE_EXTERNAL_DISCORD_ENABLED=false GOTRUE_EXTERNAL_DISCORD_CLIENT_ID= GOTRUE_EXTERNAL_DISCORD_SECRET= GOTRUE_EXTERNAL_DISCORD_REDIRECT_URI=${SCHEME}://${FQDN}/gotrue/callback GOTRUE_SAML_ENABLED=false GOTRUE_SAML_PRIVATE_KEY= RUST_LOG=info APPFLOWY_ENVIRONMENT=production APPFLOWY_DATABASE_URL=postgres://appflowy:${POSTGRES_PASSWORD}@postgres:5432/appflowy APPFLOWY_REDIS_URI=redis://redis:6379 APPFLOWY_GOTRUE_JWT_SECRET=${GOTRUE_JWT_SECRET} APPFLOWY_GOTRUE_JWT_EXP=7200 APPFLOWY_GOTRUE_BASE_URL=http://gotrue:9999 APPFLOWY_ACCESS_CONTROL=true APPFLOWY_DATABASE_MAX_CONNECTIONS=40 APPFLOWY_WEBSOCKET_MAILBOX_SIZE=6000 APPFLOWY_MAILER_SMTP_HOST=smtp.gmail.com APPFLOWY_MAILER_SMTP_PORT=465 APPFLOWY_MAILER_SMTP_USERNAME=johndoe@acme.com APPFLOWY_MAILER_SMTP_EMAIL=johndoe@acme.com APPFLOWY_MAILER_SMTP_PASSWORD="super secret" APPFLOWY_MAILER_SMTP_TLS_KIND=wrapper MINIO_HOST=minio MINIO_PORT=9000 APPFLOWY_S3_USE_MINIO=true APPFLOWY_S3_CREATE_BUCKET=true APPFLOWY_S3_MINIO_URL=http://minio:9000 APPFLOWY_S3_ACCESS_KEY="super secret" APPFLOWY_S3_SECRET_KEY="super secret" APPFLOWY_S3_BUCKET=appflowy APPFLOWY_S3_REGION=us-east-1 APPFLOWY_S3_PRESIGNED_URL_ENDPOINT=${SCHEME}://${FQDN}/minio-api 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_OPENAI_API_KEY= DEFAULT_AI_MODEL=gpt-4o-mini DEFAULT_AI_COMPLETION_MODEL=gpt-4o-mini # AI AI_OPENAI_API_KEY= AZURE_OPENAI_API_KEY= AZURE_OPENAI_ENDPOINT= AZURE_OPENAI_API_VERSION= 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=${SCHEME}://${FQDN} APPFLOWY_EMBEDDING_CHUNK_SIZE=2000 APPFLOWY_EMBEDDING_CHUNK_OVERLAP=200 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 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 APPFLOWY_COLLABORATE_MULTI_THREAD=false APPFLOWY_COLLABORATE_REMOVE_BATCH_SIZE=100 NGINX_PORT=80 NGINX_TLS_PORT=443 GOTRUE_VERSION=latest APPFLOWY_CLOUD_VERSION=latest APPFLOWY_ADMIN_FRONTEND_VERSION=latest APPFLOWY_AI_VERSION=latest APPFLOWY_WORKER_VERSION=latest APPFLOWY_WEB_VERSION=latest ``` and the compose.yml ``` Thanks for your help services: nginx: restart: on-failure image: nginx volumes: - ../files/nginx/nginx.conf:/etc/nginx/nginx.conf 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} - APPFLOWY_BASE_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} 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: ```
Author
Owner

@dfranco commented on GitHub (Mar 20, 2026):

Anyone ?

<!-- gh-comment-id:4100224500 --> @dfranco commented on GitHub (Mar 20, 2026): Anyone ?
Author
Owner

@appflowy commented on GitHub (Mar 21, 2026):

I’m not familiar with Dokploy. Are you using the Docker Compose file from the AppFlowy Cloud repository directly?

<!-- gh-comment-id:4103319212 --> @appflowy commented on GitHub (Mar 21, 2026): I’m not familiar with Dokploy. Are you using the Docker Compose file from the AppFlowy Cloud repository directly?
Author
Owner

@dfranco commented on GitHub (Mar 21, 2026):

Yes

<!-- gh-comment-id:4103322901 --> @dfranco commented on GitHub (Mar 21, 2026): Yes
Author
Owner

@JiBe-DE commented on GitHub (Mar 22, 2026):

+1
Same issue : I cannot connect to the admin panel {"success":false,"error":{"message":"fetch failed","type":"NETWORK"}}
I have deployed latest version of AppFlowy Cloud self hosted with the docker compose from AppFlowy Cloud repository (no edit at all).

<!-- gh-comment-id:4106225717 --> @JiBe-DE commented on GitHub (Mar 22, 2026): +1 Same issue : I cannot connect to the admin panel `{"success":false,"error":{"message":"fetch failed","type":"NETWORK"}}` I have deployed latest version of AppFlowy Cloud self hosted with the docker compose from AppFlowy Cloud repository (no edit at all).
Author
Owner

@dfranco commented on GitHub (Mar 22, 2026):

I guess the issue on my side is due to the fact that the front end is trying to reach localhost instead of gorust container.

<!-- gh-comment-id:4106297020 --> @dfranco commented on GitHub (Mar 22, 2026): I guess the issue on my side is due to the fact that the front end is trying to reach localhost instead of gorust container.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AppFlowy-IO/AppFlowy#3925
No description provided.