x-environment: &environment
  environment:
    ######################################################## REQUIRED ########################################################

    # The url of your Formbricks instance used in the admin panel
    # Set this to your public-facing URL, e.g., https://example.com
    WEBAPP_URL:

    # Required for next-auth. Should be the same as WEBAPP_URL
    NEXTAUTH_URL:

    # PostgreSQL DB for Formbricks to connect to
    DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks?schema=public"

    # NextJS Auth
    # @see: https://next-auth.js.org/configuration/options#nextauth_secret
    # You can use: `openssl rand -hex 32` to generate one
    NEXTAUTH_SECRET:

    # Encryption Key is used for 2FA & Single use URLs for Link Surveys
    # You can use: $(openssl rand -hex 32) to generate one
    ENCRYPTION_KEY:

    # API Secret for running cron jobs.
    # You can use: $(openssl rand -hex 32) to generate a secure one
    CRON_SECRET:

    # Redis URL for caching, rate limiting, and audit logging
    # To use external Redis/Valkey: remove the redis service below and update this URL
    REDIS_URL: redis://redis:6379

    # Set the minimum log level(debug, info, warn, error, fatal)
    # LOG_LEVEL: info

    ############################################# OPTIONAL (ENTERPRISE EDITION) #############################################

    # Enterprise License Key (More info at: https://formbricks.com/docs/self-hosting/license)
    # Required to access Enterprise-only features
    # ENTERPRISE_LICENSE_KEY:

    ############################################# OPTIONAL (EMAIL CONFIGURATION) #############################################

    # Email Configuration
    # MAIL_FROM:
    # MAIL_FROM_NAME:
    # SMTP_HOST:
    # SMTP_PORT:
    # SMTP_USER:
    # SMTP_PASSWORD:
    # SMTP_AUTHENTICATED:

    # (Additional option for TLS (port 465) only)
    # SMTP_SECURE_ENABLED:

    # If set to 0, the server will accept connections without requiring authorization from the list of supplied CAs (default is 1).
    # SMTP_REJECT_UNAUTHORIZED_TLS: 0

    ############################################## OPTIONAL (APP CONFIGURATION) ##############################################

    # Set the below to 0 to enable Email Verification for new signups (will required Email Configuration)
    EMAIL_VERIFICATION_DISABLED: 1

    # Set the below to 0 to enable Password Reset (will required Email Configuration)
    PASSWORD_RESET_DISABLED: 1

    # Set the below to 1 to disable logins with email
    # EMAIL_AUTH_DISABLED:

    # Set the below to 1 to disable invites
    # INVITE_DISABLED:

    # Set the below if you want to ship JS & CSS files from a complete URL instead of the current domain
    # ASSET_PREFIX_URL:

    # Set the below to your Unsplash API Key for their Survey Backgrounds
    # UNSPLASH_ACCESS_KEY:

    # Set the below to your public domain (default is WEBAPP_URL)
    # PUBLIC_URL:

    # The SENTRY_DSN is used for error tracking and performance monitoring with Sentry.
    # SENTRY_DSN:
    # It's used for authentication when uploading source maps to Sentry, to make errors more readable.
    # SENTRY_AUTH_TOKEN:
    # The SENTRY_ENVIRONMENT is used to identify the environment in Sentry.
    # SENTRY_ENVIRONMENT:

    ################################################### OPTIONAL (STORAGE) ###################################################

    # Set S3 Storage configuration (required for the file upload in serverless environments like Vercel)
    # S3_ACCESS_KEY:
    # S3_SECRET_KEY:
    # S3_REGION:
    # S3_BUCKET_NAME:

    # Set a third party S3 compatible storage service endpoint like StorJ leave empty if you use Amazon S3
    # S3_ENDPOINT_URL:

    # Force path style for S3 compatible storage (0 for disabled, 1 for enabled)
    # S3_FORCE_PATH_STYLE: 0

    ############################################# OPTIONAL (OAUTH CONFIGURATION) #############################################

    # Set the below from Cloudflare Turnstile if you want to enable turnstile in signups
    # TURNSTILE_SITE_KEY:
    # TURNSTILE_SECRET_KEY:

    # Set the below keys to enable recaptcha V3 for survey responses bot protection(only available in the Enterprise Edition)
    # RECAPTCHA_SITE_KEY:
    # RECAPTCHA_SECRET_KEY:

    # Set the below from GitHub if you want to enable GitHub OAuth
    # GITHUB_ID:
    # GITHUB_SECRET:

    # Set the below from Google if you want to enable Google OAuth
    # GOOGLE_CLIENT_ID:
    # GOOGLE_CLIENT_SECRET:

    # Set the below from Azure Active Directory Login if you want to enable Azure AD OAuth
    # AZUREAD_CLIENT_ID:
    # AZUREAD_CLIENT_SECRET:
    # AZUREAD_TENANT_ID:

    # Set the below to OpenID Connect Provider if you want to enable OIDC
    # OIDC_CLIENT_ID:
    # OIDC_CLIENT_SECRET:
    # OIDC_ISSUER:
    # OIDC_DISPLAY_NAME:
    # OIDC_SIGNING_ALGORITHM:

    # Set the below to SAML Provider if you want to enable SAML
    # SAML_DATABASE_URL: "postgresql://postgres:postgres@postgres:5432/formbricks-saml?sslmode=disable"

    ########################################## OPTIONAL (THIRD PARTY INTEGRATIONS) ###########################################

    # Oauth credentials for Notion Integration
    # NOTION_OAUTH_CLIENT_ID:
    # NOTION_OAUTH_CLIENT_SECRET:

    # Oauth credentials for Google Sheet Integration
    # GOOGLE_SHEETS_CLIENT_ID:
    # GOOGLE_SHEETS_CLIENT_SECRET:
    # GOOGLE_SHEETS_REDIRECT_URL:

    # Oauth credentials for Airtable Integration
    # AIRTABLE_CLIENT_ID:

    # Oauth credentials for Slack Integration
    # SLACK_CLIENT_ID:
    # SLACK_CLIENT_SECRET:

    ############################################### OPTIONAL (LEGAL INFORMATION) ################################################

    # Set the below to have your own Privacy Page URL on auth & link survey page
    # PRIVACY_URL:

    # Set the below to have your own Terms Page URL on auth & link survey page
    # TERMS_URL:

    # Set the below to have your own Imprint Page URL on auth & link survey page
    # IMPRINT_URL:

    # Set the below to have your own Address on email footer
    # IMPRINT_ADDRESS:

    ########################################## OPTIONAL (SERVER CONFIGURATION) ###########################################

    # Set the below to 1 to disable Rate Limiting across Formbricks
    # RATE_LIMITING_DISABLED: 1

    # Set the below to send OpenTelemetry data for tracing
    # OPENTELEMETRY_LISTENER_URL: http://localhost:4318/v1/traces

    ########################################## OPTIONAL (AUDIT LOGGING) ###########################################

    # Set the below to 1 to enable audit logging.
    # AUDIT_LOG_ENABLED: 1

    # Set the below to get the ip address of the user from the request headers
    # AUDIT_LOG_GET_USER_IP: 1

    ############################################# OPTIONAL (OTHER) #############################################

    # signup is disabled by default for self-hosted instances, users can only signup using an invite link, in order to allow signup from SSO(without invite), set the below to 1
    # AUTH_SKIP_INVITE_FOR_SSO: 1
    # Set the below to automatically assign new users to a specific team, insert an existing team id
    # (Role Management is an Enterprise feature)
    # AUTH_SSO_DEFAULT_TEAM_ID:

    # Configure the minimum role for user management from UI(owner, manager, disabled)
    # USER_MANAGEMENT_MINIMUM_ROLE: "manager"

    # Configure the maximum age for the session in seconds. Default is 86400 (24 hours)
    # SESSION_MAX_AGE: 86400

services:
  postgres:
    restart: always
    image: pgvector/pgvector:pg17
    volumes:
      - postgres:/var/lib/postgresql/data
    environment:
      # Postgres DB Super User Password
      # Replace the below with your own secure password & Make sure the password matches the password field in DATABASE_URL above
      - POSTGRES_PASSWORD=postgres

  # Redis/Valkey service for caching, rate limiting, and audit logging
  # Remove this service if you want to use an external Redis/Valkey instance
  redis:
    restart: always
    image: valkey/valkey@sha256:12ba4f45a7c3e1d0f076acd616cb230834e75a77e8516dde382720af32832d6d
    command: valkey-server --appendonly yes
    volumes:
      - redis:/data
    ports:
      - "6379:6379"

  formbricks:
    restart: always
    image: ghcr.io/formbricks/formbricks:latest
    depends_on:
      - postgres
      - redis
    ports:
      - 3000:3000
    volumes:
      - ./saml-connection:/home/nextjs/apps/web/saml-connection
    <<: *environment

volumes:
  postgres:
    driver: local
  redis:
    driver: local
