Meetings einfach planen mit Cal.com

Cal.com ist eine Open-Source Software für das einfache planen von Meetings. Dabei kann Cal.com selbst auf einem Server betrieben werden oder im Abo von Cal.com genutzt werden.

Vorteile einer Terminbuchungs Lösung

Nichts ist nerviger als E-Mails mit Terminvorschlägen mit Kunden und Mandanten hin und her zu senden.

Wäre es nicht viel einfachher, wenn Kunden und Mandanten sich durch den Terminkalender klicken können und einen passenden Termin selber auswählen?

Das bietet die Lösung von Cal.com. Dabei bietet Cal.com einen eigenen Hostingdienst an oder man kann die Open-Source Software auf einem eigenen Server betreiben. Dazu beraten wir Sie gerne.

Es können mehrere Event Types definiert werden mit eigenen Geschäftszeiten sowie eigenen Limitierungen für die Buchung. Die Dauer kann fest vorgegeben werden oder wir stellen dem Buchenden mehrere Möglichkeiten zur Verfügung, z.B. 15 Minuten, 30 Minuten oder 60 Minuten.

Es sind Pflichtfelder sowie auch optionale Felder möglich.

Damit Buchungstermine nicht mit eigenen Terminen kollidieren, können wir mehrere Kalender in unserem Benutzerprofil einbinden. Auch das einbinden von Privaten Kalendern ist möglich. Sind dort schon Termine vorhanden, stehen diese Zeiten nicht mehr in der Buchungsübersicht zur Auswahl und sind automatisch geblockt. Kunden und Mandaten habe natürlich auf die Kalender keinen Zugriff und sehen auch nicht warum diese Termine geblockt sind. Die Termine sind einfach nicht auswählbar.

Funktionen im Überblick

  • Mehrere Benutzer möglich
  • Geschäftszeiten definierbar, aber auch Ausnahmen können eingestellt werden
  • Die eigenen Kalender können per CalDav, Exchange und vielen anderen Diensten eingebunden werden, damit bereits belegte Zeiten nicht von Kunden gebucht werden können.
  • Buchungen können mit und ohne Bestätigung eingestellt werden, es ist auch möglich eine Bestätigung einzustellen, wenn die Buchung kurzfristig ist, z.B. bei Buchungen unter 2 Stunden vorlaufzeit.
  • Ebenso kann eine Sperrfrist für kurzfristige Buchungen eingestellt werden.
  • Es können mehrere optionale wie auch Pflichtfelder erstellt werden.

Installationsanleitung für Ubuntu 22.04 LTS

Die Docker Version von Cal.com benötigt docker, docker-compose sowie git.

apt install docker
apt install docker-compose
apt install git

Anschließend wechseln wir in das Verzeichnis /opt.

cd /opt

Und downloaden die aktuelle Version mit git.

git clone --recursive https://github.com/calcom/docker.git calcom

Dadurch wird ein Unterordner calcom in /opt erstellt. Nun wechsel wir in den calcom Ordner.

cd calcom

Im Ordner calcom muss nun das calcom submodule geupdatet werden.

git submodule update --remote --init

Nun öffnen wir die docker-compose.yaml Konfigurationsdatei und Klammern den Teil vom Prisma Studio aus. Dafür setzten wir vor die Zeilen ein #.

nano docker-compose.yaml

Die Konfigurationsdatei sollte wie folgt aussehen.

# Use postgres/example user/password credentials
version: '3.8'

volumes:
  database-data:

networks:
  stack:
    name: stack
    external: false

services:
  database:
    container_name: database
    image: postgres:17
    restart: always
    volumes:
      - database-data:/var/lib/postgresql/data/
    env_file: .env
    networks:
      - stack

  calcom:
    image: calcom.docker.scarf.sh/calcom/cal.com
    build:
      context: .
      dockerfile: Dockerfile
      args:
        NEXT_PUBLIC_WEBAPP_URL: ${NEXT_PUBLIC_WEBAPP_URL}
        NEXT_PUBLIC_LICENSE_CONSENT: ${NEXT_PUBLIC_LICENSE_CONSENT}
        CALCOM_TELEMETRY_DISABLED: ${CALCOM_TELEMETRY_DISABLED}
        NEXTAUTH_SECRET: ${NEXTAUTH_SECRET}
        CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY}
        DATABASE_URL: ${DATABASE_URL}
      network: stack
    restart: always
    networks:
      - stack
    ports:
      - 3000:3000
    env_file: .env
    environment:
      - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
    depends_on:
      - database

# Optional use of Prisma Studio. In production, comment out or remove the section below to prevent unwanted access to your database.
#  studio:
#    image: calcom.docker.scarf.sh/calcom/cal.com
#    restart: always
#    networks:
#      - stack
#    ports:
#      - 5555:5555
#    env_file: .env
#    environment:
#      - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
#    depends_on:
#      - database
#    command:
#      - npx
#      - prisma
#      - studio
# END SECTION: Optional use of Prisma Studio.

Wir speichern die docker-compose.yaml Datei und machen weiter mit der .env Datei.

Die Konfigurationsdatei .env.example bennen wir in .env um.

mv .env.example .env

In der Konfigurationsdatei .env müssen folgende Zeilen geändert werden:

  • NEXT_PUBLIC_WEBAPP_URL=
  • NEXTAUTH_URL=
  • NEXTAUTH_SECRET=
  • CALENDSO_ENCRYPTION_KEY=
  • EMAIL_FROM=
  • EMAIL_SERVER_HOST=
  • E_MAIL_SERVER_PORT=
  • EMAIL_SAERVER_USER=
  • EMAIL_SERVER_PASSWORD
  • NODE_TLS_REJECT_UNAUTHORIZED=0 (Wenn ein Nginx Proxy vor Cal.com verwendet wird)

Für die Generierung von NEXTAUTH_SECRET nutzen wir openssl rand -base64 32 und notieren uns den generierten Key für diesen später in die Konfigurationsdatei einzufügen.

openssl rand -base64 32

Für CALENDSO_ENCRYPTION_KEY nutzen wir zur Generierung dd if=/dev/urandom bs=1K count=1 | md5sum und notieren uns auch diesen Key für später.

dd if=/dev/urandom bs=1K count=1 | md5sum

Anschließend öffnen wir die .env Konfigurationsdatei und nehmen die Änderungen vor.

nano .env

Folgende Einträge sollten nun zu sehen sein.

# Set this value to 'agree' to accept our license:
# LICENSE: https://github.com/calendso/calendso/blob/main/LICENSE
#
# Summary of terms:
# - The codebase has to stay open source, whether it was modified or not
# - You can not repackage or sell the codebase
# - Acquire a commercial license to remove these terms by emailing: license@cal.com
NEXT_PUBLIC_LICENSE_CONSENT=
LICENSE=

# BASE_URL and NEXT_PUBLIC_APP_URL are both deprecated. Both are replaced with one variable, NEXT_PUBLIC_WEBAPP_URL
# BASE_URL=http://localhost:3000
# NEXT_PUBLIC_APP_URL=http://localhost:3000

NEXT_PUBLIC_WEBAPP_URL=

# Configure NEXTAUTH_URL manually if needed, otherwise it will resolve to {NEXT_PUBLIC_WEBAPP_URL}/api/auth
NEXTAUTH_URL=

# 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=

# 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=

# Deprecation note: JWT_SECRET is no longer used
# JWT_SECRET=secret

POSTGRES_USER=unicorn_user
POSTGRES_PASSWORD=magical_password
POSTGRES_DB=calendso
DATABASE_HOST=database:5432
DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}
GOOGLE_API_CREDENTIALS={}

# Set this to '1' if you don't want Cal to collect anonymous usage
CALCOM_TELEMETRY_DISABLED=1

# Used for the Office 365 / Outlook.com Calendar integration
MS_GRAPH_CLIENT_ID=
MS_GRAPH_CLIENT_SECRET=

# Used for the Zoom integration
ZOOM_CLIENT_ID=
ZOOM_CLIENT_SECRET=

# E-mail settings
# Configures the global From: header whilst sending emails.
EMAIL_FROM=

# Configure SMTP settings (@see https://nodemailer.com/smtp/).
EMAIL_SERVER_HOST=
EMAIL_SERVER_PORT=
EMAIL_SERVER_USER=
EMAIL_SERVER_PASSWORD=

NODE_ENV=production

NODE_TLS_REJECT_UNAUTHORIZED=0

Die Zeilen NEXT_PUBLIC_WEBAPP_URL= und NEXTAUTH_URL= müssen eure Domain enthalten. Bei NEXTAUTH_URL wird hinter die Domain zusätzlich noch /api/auth hinzugefügt, z.B. https://xyz.com/apit/auth

Damit HTTPS funktioniert, wird ein Nginx Proxy benötigt. Die Installation und Konfiguration ist nicht bestandteil dieser Anleitung.

NEXTAUTH_SECRET= muss mit dem eben generierten Key vervollständigt werden und CALENDSO_ENCCYPTION_KEY ebenso.

Anschließend müssen die E-Mail Einstellungen vorgenommen werden, damit später bei gebuchten Terminen automatisch eine Bestätigungsemail versendet wird.

Am Ende fügen wir noch NODE_TLS_REJECT_UNAUTHORIZED=0 ein, sofern ein Nginx Proxy verwendet wird.

Sind alle Einstellungen geändert und die .env Datei gespeichert, können wir den Docker Container erstmalig starten.

docker-compose pull && docker-compose up -d

Der Docker Container sollte nun unter http://localhost:3000 erreichbar sein bzw. muss der Nginx Proxy auf die IP-Adresse des Servers verweisen und den Port 3000.


© TECH-SUPPORT.KOELN