# documentation: https://cal.com/docs/developing/introduction
# slogan: Scheduling infrastructure for everyone.
# category: productivity
# tags: calcom,calendso,scheduling,open,source
# logo: svgs/calcom.svg
# port: 3000

services:
  calcom:
    image: calcom.docker.scarf.sh/calcom/cal.com
    platform: linux/amd64
    environment:
      # Some variables still uses Calcom previous name, Calendso
      #
      # Full list https://github.com/calcom/cal.com/blob/main/.env.example
      - SERVICE_URL_CALCOM_3000
      - NEXT_PUBLIC_LICENSE_CONSENT=agree
      - NODE_ENV=production
      - NEXT_PUBLIC_WEBAPP_URL=${SERVICE_URL_CALCOM}
      - NEXT_PUBLIC_API_V2_URL=${SERVICE_URL_CALCOM}/api/v2
      # https://next-auth.js.org/configuration/options#nextauth_url
      # From https://github.com/calcom/docker?tab=readme-ov-file#important-run-time-variables, it should be ${NEXT_PUBLIC_WEBAPP_URL}/api/auth
      - NEXTAUTH_URL=${SERVICE_URL_CALCOM}/api/auth
      # It is highly recommended that the NEXTAUTH_SECRET must be overridden and very unique
      # Use `openssl rand -base64 32` to generate a key
      - NEXTAUTH_SECRET=${SERVICE_BASE64_CALCOMSECRET}
      # Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum`
      - CALENDSO_ENCRYPTION_KEY=${SERVICE_BASE64_CALCOMKEY}
      - POSTGRES_USER=${SERVICE_USER_POSTGRES}
      - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
      - POSTGRES_DB=${POSTGRES_DB:-calendso}
      - DATABASE_HOST=postgresql
      - DATABASE_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@${DATABASE_HOST:-postgresql}/${POSTGRES_DB:-calendso}
      # Needed to run migrations while using a connection pooler like PgBouncer
      # Use the same one as DATABASE_URL if you are not using a connection pooler
      - DATABASE_DIRECT_URL=postgresql://${SERVICE_USER_POSTGRES}:${SERVICE_PASSWORD_POSTGRES}@${DATABASE_HOST:-postgresql}/${POSTGRES_DB:-calendso}
      # GOOGLE_API_CREDENTIALS={}
      # Set this to 1 if you don't want Cal to collect anonymous usage
      - CALCOM_TELEMETRY_DISABLED=1
      # E-mail settings
      # Configures the global From: header whilst sending emails.
      - EMAIL_FROM=${EMAIL_FROM}
      - EMAIL_FROM_NAME=${EMAIL_FROM_NAME}
      # Configure SMTP settings (@see https://nodemailer.com/smtp/).
      - EMAIL_SERVER_HOST=${EMAIL_SERVER_HOST}
      - EMAIL_SERVER_PORT=${EMAIL_SERVER_PORT}
      - EMAIL_SERVER_USER=${EMAIL_SERVER_USER}
      - EMAIL_SERVER_PASSWORD=${EMAIL_SERVER_PASSWORD}
      - NEXT_PUBLIC_APP_NAME="Cal.com"
      # More info on ALLOWED_HOSTNAMES https://github.com/calcom/cal.com/issues/12201
      - ALLOWED_HOSTNAMES=["${SERVICE_URL_CALCOM}"]
    depends_on:
      - postgresql
  postgresql:
    image: postgres:16-alpine
    environment:
      - POSTGRES_USER=${SERVICE_USER_POSTGRES}
      - POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRES}
      - POSTGRES_DB=${POSTGRES_DB:-calendso}
    volumes:
      - calcom-postgresql-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
      interval: 5s
      timeout: 20s
      retries: 10
