diff --git a/.env.example b/.env.example index 10e50d366..ed8f8fd57 100644 --- a/.env.example +++ b/.env.example @@ -1,27 +1,128 @@ +# General Application Settings ENVIRONMENT="development" -DATABASE_URL="postgresql://postgres:your-super-secret-and-long-postgres-password@db:5432/postgres" -POOLER_URL="postgresql://postgres:your-super-secret-and-long-postgres-password@db:5432/postgres" -JWT_SECRET="super-secret-jwt-token-with-at-least-32-characters-long" -REDIS_URL="redis://redis:6379" -LANGFUSE_API_URL="https://us.cloud.langfuse.com" -LANGFUSE_PUBLIC_API_KEY="" -LANGFUSE_PRIVATE_API_KEY="" -OPENAI_API_KEY="" -EMBED_VEC_LENGTH="1536" -POSTHOG_API_KEY="" -RESEND_API_KEY="" BUSTER_URL="http://web:3000" BUSTER_WH_TOKEN="buster-wh-token" + +# --- API Service Specific --- +# Direct Database Connection (for API service and potentially others) +DATABASE_URL="postgresql://postgres:your-super-secret-and-long-postgres-password@db:5432/postgres" +# Pooled Database Connection (for API service, uses Supavisor) +POOLER_URL="postgresql://postgres:your-super-secret-and-long-postgres-password@db:5432/postgres" +# Redis Connection +REDIS_URL="redis://buster-redis:6379" +# Supabase Connection for API service +SUPABASE_URL="http://kong:8000" +SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q" + +# --- LLM / AI Services --- EMBEDDING_PROVIDER="ollama" EMBEDDING_MODEL="mxbai-embed-large" COHERE_API_KEY="" +OPENAI_API_KEY="" # For OpenAI models or Supabase Studio assistant LLM_API_KEY="test-key" -LLM_BASE_URL="http://localhost:8000" +LLM_BASE_URL="http://litellm:4001" +# --- Web Client (Next.js) Specific --- +NEXT_PUBLIC_API_URL="http://localhost:3001" # External URL for the API service (buster-api) +NEXT_PUBLIC_URL="http://localhost:3000" # External URL for the Web service (buster-web) +NEXT_PUBLIC_SUPABASE_URL="http://localhost:8000" # External URL for Supabase (Kong proxy) +NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" +NEXT_PRIVATE_SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q" +################################################# +# Supabase Stack Configuration Variables +# These are primarily used by the Supabase services themselves +# (defined in supabase/docker-compose.yml) +# and are sourced from this .env file when `docker compose up` is run. +################################################# -NEXT_PUBLIC_API_URL="http://127.0.0.1:3001" -NEXT_PUBLIC_URL="http://localhost:3000" -NEXT_PUBLIC_SUPABASE_URL="http://kong:8000" -NEXT_PUBLIC_SUPABASE_ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" -NEXT_PRIVATE_SUPABASE_SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU" \ No newline at end of file +############ +# Secrets +############ +POSTGRES_PASSWORD="your-super-secret-and-long-postgres-password" +JWT_SECRET="your-super-secret-jwt-token-with-at-least-32-characters-long" +ANON_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE" +SERVICE_ROLE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q" +DASHBOARD_USERNAME="supabase" +DASHBOARD_PASSWORD="this_password_is_insecure_and_should_be_updated" + +############ +# Database +############ +POSTGRES_HOST="db" +POSTGRES_DB="postgres" +POSTGRES_PORT="5432" + +############ +# Supavisor -- Database pooler +############ +POOLER_PROXY_PORT_TRANSACTION="6543" +POOLER_DEFAULT_POOL_SIZE="20" +POOLER_MAX_CLIENT_CONN="100" +POOLER_TENANT_ID="your-tenant-id" + +############ +# API Proxy - Kong +############ +KONG_HTTP_PORT="8000" +KONG_HTTPS_PORT="8443" + +############ +# API - PostgREST +############ +PGRST_DB_SCHEMAS="public,storage,graphql_public" + +############ +# Auth - GoTrue +############ +SITE_URL="http://localhost:3000" # Default base URL for the site (used in emails, etc.) +ADDITIONAL_REDIRECT_URLS="" +JWT_EXPIRY="3600" +DISABLE_SIGNUP="false" +API_EXTERNAL_URL="http://localhost:8000" # Publicly accessible URL for the Supabase API (via Kong) + +## Mailer Config +MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify" +MAILER_URLPATHS_INVITE="/auth/v1/verify" +MAILER_URLPATHS_RECOVERY="/auth/v1/verify" +MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify" + +## Email auth +ENABLE_EMAIL_SIGNUP="true" +ENABLE_EMAIL_AUTOCONFIRM="false" +SMTP_ADMIN_EMAIL="admin@buster.so" +SMTP_HOST="supabase-mail" +SMTP_PORT="2500" +SMTP_USER="" +SMTP_PASS="" +SMTP_SENDER_NAME="Buster" +ENABLE_ANONYMOUS_USERS="true" + +## Phone auth +ENABLE_PHONE_SIGNUP="true" +ENABLE_PHONE_AUTOCONFIRM="true" + +############ +# Studio - Supabase Dashboard +############ +STUDIO_DEFAULT_ORGANIZATION="Default Organization" +STUDIO_DEFAULT_PROJECT="Default Project" +STUDIO_PORT="3003" +SUPABASE_PUBLIC_URL="http://localhost:8000" # Public URL for Supabase (Kong), used by Studio + +# Image Proxy +IMGPROXY_ENABLE_WEBP_DETECTION="true" + +############ +# Functions - Supabase Edge Functions +############ +FUNCTIONS_VERIFY_JWT="false" + +############ +# Logs - Logflare +############ +LOGFLARE_LOGGER_BACKEND_API_KEY="your-super-secret-and-long-logflare-key" +LOGFLARE_API_KEY="your-super-secret-and-long-logflare-key" +DOCKER_SOCKET_LOCATION="/var/run/docker.sock" +GOOGLE_PROJECT_ID="GOOGLE_PROJECT_ID" +GOOGLE_PROJECT_NUMBER="GOOGLE_PROJECT_NUMBER" \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index d6488500c..3bb5bb055 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -23,18 +23,10 @@ services: environment: - DATABASE_URL=${DATABASE_URL} - REDIS_URL=${REDIS_URL} - - OPENAI_API_KEY=${OPENAI_API_KEY} - - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} - JWT_SECRET=${JWT_SECRET} - SUPABASE_URL=${SUPABASE_URL} - SUPABASE_SERVICE_ROLE_KEY=${SUPABASE_SERVICE_ROLE_KEY} - POOLER_URL=${POOLER_URL} - - LANGFUSE_API_URL=${LANGFUSE_API_URL} - - LANGFUSE_PUBLIC_API_KEY=${LANGFUSE_PUBLIC_API_KEY} - - LANGFUSE_PRIVATE_API_KEY=${LANGFUSE_PRIVATE_API_KEY} - - EMBED_VEC_LENGTH=${EMBED_VEC_LENGTH} - - POSTHOG_API_KEY=${POSTHOG_API_KEY} - - RESEND_API_KEY=${RESEND_API_KEY} - BUSTER_URL=${BUSTER_URL} - BUSTER_WH_TOKEN=${BUSTER_WH_TOKEN} - EMBEDDING_PROVIDER=${EMBEDDING_PROVIDER} @@ -64,17 +56,6 @@ services: web: image: ghcr.io/buster-so/buster/web:latest container_name: buster-web - environment: - - NEXT_PUBLIC_API_URL=${NEXT_PUBLIC_API_URL} - - NEXT_PUBLIC_URL=${NEXT_PUBLIC_URL} - - NEXT_PUBLIC_SUPABASE_URL=${NEXT_PUBLIC_SUPABASE_URL} - - NEXT_PUBLIC_SUPABASE_ANON_KEY=${NEXT_PUBLIC_SUPABASE_ANON_KEY} - - NEXT_PRIVATE_SUPABASE_SERVICE_ROLE_KEY=${NEXT_PRIVATE_SUPABASE_SERVICE_ROLE_KEY} - - NEXT_PRIVATE_SUPABASE_CONNECT_CLIENT_ID=${NEXT_PRIVATE_SUPABASE_CONNECT_CLIENT_ID} - - NEXT_PRIVATE_SUPABASE_CONNECT_CLIENT_SECRET=${NEXT_PRIVATE_SUPABASE_CONNECT_CLIENT_SECRET} - - NODE_ENV=production - env_file: - - .env ports: - "3000:3000" depends_on: diff --git a/supabase/.env.example b/supabase/.env.example index 1ca0ad92a..3d856d987 100644 --- a/supabase/.env.example +++ b/supabase/.env.example @@ -5,8 +5,8 @@ POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long -ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE -SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q +ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE +SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ey AgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q DASHBOARD_USERNAME=supabase DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated @@ -66,9 +66,9 @@ ENABLE_EMAIL_AUTOCONFIRM=false SMTP_ADMIN_EMAIL=admin@buster.so SMTP_HOST=supabase-mail SMTP_PORT=2500 -SMTP_SENDER_NAME=buster SMTP_USER= SMTP_PASS= +SMTP_SENDER_NAME=Buster ENABLE_ANONYMOUS_USERS=true ## Phone auth diff --git a/web/Dockerfile b/web/Dockerfile index 415b39199..f200c3c78 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -8,12 +8,14 @@ ARG NEXT_PUBLIC_API_URL ARG NEXT_PUBLIC_URL ARG NEXT_PUBLIC_SUPABASE_URL ARG NEXT_PUBLIC_SUPABASE_ANON_KEY +ARG NEXT_PUBLIC_WEB_SOCKET_URL # Set public env vars for build time ENV NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL ENV NEXT_PUBLIC_URL=$NEXT_PUBLIC_URL ENV NEXT_PUBLIC_SUPABASE_URL=$NEXT_PUBLIC_SUPABASE_URL ENV NEXT_PUBLIC_SUPABASE_ANON_KEY=$NEXT_PUBLIC_SUPABASE_ANON_KEY +ENV NEXT_PUBLIC_WEB_SOCKET_URL=$NEXT_PUBLIC_WEB_SOCKET_URL # Copy package files and install dependencies first for better caching COPY package*.json ./