version: '3.8' services: postgres: image: postgres:15 container_name: colanode_postgres restart: always environment: POSTGRES_USER: colanode_user POSTGRES_PASSWORD: strongpassword POSTGRES_DB: colanode_db volumes: - postgres_data:/var/lib/postgresql/data ports: - '5432:5432' networks: - colanode_network redis: image: redis:7 container_name: colanode_redis restart: always command: ['redis-server', '--requirepass', 'strongredispassword'] volumes: - redis_data:/data ports: - '6379:6379' networks: - colanode_network minio: image: minio/minio container_name: colanode_minio restart: always environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadminpassword volumes: - minio_data:/data ports: - '9000:9000' command: server /data networks: - colanode_network server: build: context: . dockerfile: apps/server/Dockerfile image: colanode_server container_name: colanode_server restart: always depends_on: - postgres - redis - minio environment: # ─────────────────────────────────────────────────────────────── # General Node/Server Config # ─────────────────────────────────────────────────────────────── NODE_ENV: production PORT: 3000 # The server requires a name and avatar URL which will be displayed in the desktop app login screen. SERVER_NAME: 'Colanode' SERVER_AVATAR: '' # Possible values for SERVER_MODE: 'standalone', 'cluster' SERVER_MODE: 'standalone' # ─────────────────────────────────────────────────────────────── # Account Configuration # ─────────────────────────────────────────────────────────────── # Possible values for ACCOUNT_VERIFICATION_TYPE: 'automatic', 'manual', 'email' ACCOUNT_VERIFICATION_TYPE: 'manual' ACCOUNT_OTP_TIMEOUT: '600' # in seconds ACCOUNT_ALLOW_GOOGLE_LOGIN: 'false' # ─────────────────────────────────────────────────────────────── # User Configuration # ─────────────────────────────────────────────────────────────── USER_STORAGE_LIMIT: '10737418240' # 10 GB USER_MAX_FILE_SIZE: '104857600' # 100 MB # ─────────────────────────────────────────────────────────────── # PostgreSQL Configuration # ─────────────────────────────────────────────────────────────── # The server expects a PostgreSQL database with the pgvector extension installed. POSTGRES_URL: 'postgres://colanode_user:strongpassword@postgres:5432/colanode_db' # Optional variables for SSL connection to the database POSTGRES_SSL_REJECT_UNAUTHORIZED: 'false' POSTGRES_SSL_CA: '' POSTGRES_SSL_KEY: '' POSTGRES_SSL_CERT: '' # ─────────────────────────────────────────────────────────────── # Redis Configuration # ─────────────────────────────────────────────────────────────── REDIS_URL: 'redis://:strongredispassword@redis:6379/0' REDIS_DB: '0' # Optional variables: REDIS_JOBS_QUEUE_NAME: 'jobs' REDIS_JOBS_QUEUE_PREFIX: 'colanode' REDIS_EVENTS_CHANNEL: 'events' # ─────────────────────────────────────────────────────────────── # S3 Configuration for Avatars # ─────────────────────────────────────────────────────────────── S3_AVATARS_ENDPOINT: 'http://minio:9000' S3_AVATARS_ACCESS_KEY: 'minioadmin' S3_AVATARS_SECRET_KEY: 'minioadminpassword' S3_AVATARS_BUCKET_NAME: 'colanode-avatars' S3_AVATARS_REGION: 'us-east-1' # ─────────────────────────────────────────────────────────────── # S3 Configuration for Files # ─────────────────────────────────────────────────────────────── S3_FILES_ENDPOINT: 'http://minio:9000' S3_FILES_ACCESS_KEY: 'minioadmin' S3_FILES_SECRET_KEY: 'minioadminpassword' S3_FILES_BUCKET_NAME: 'colanode-files' S3_FILES_REGION: 'us-east-1' # ─────────────────────────────────────────────────────────────── # SMTP Configuration # ─────────────────────────────────────────────────────────────── SMTP_HOST: 'smtp.example.com' SMTP_PORT: '587' SMTP_USER: 'user@example.com' SMTP_PASSWORD: 'passsword' # configuration.ts requires SMTP_EMAIL_FROM and SMTP_EMAIL_FROM_NAME SMTP_EMAIL_FROM: 'no-reply@example.com' SMTP_EMAIL_FROM_NAME: 'ColaNode' # ─────────────────────────────────────────────────────────────── # AI Configuration # ─────────────────────────────────────────────────────────────── AI_ENABLED: 'false' AI_ENTRY_EMBED_DELAY: '60000' OPENAI_API_KEY: '' OPENAI_EMBEDDING_MODEL: 'text-embedding-ada-002' OPENAI_EMBEDDING_DIMENSIONS: '2000' OPENAI_EMBEDDING_BATCH_SIZE: '50' CHUNK_DEFAULT_CHUNK_SIZE: '1000' CHUNK_DEFAULT_OVERLAP: '200' CHUNK_ENHANCE_WITH_CONTEXT: 'false' CHUNK_CONTEXT_ENHANCER_MODEL: 'gpt-4o-mini' CHUNK_CONTEXT_ENHANCER_TEMPERATURE: '0.3' # ─────────────────────────────────────────────────────────────── ports: - '3000:3000' networks: - colanode_network volumes: postgres_data: redis_data: minio_data: networks: colanode_network: driver: bridge