Cal.com mit Docker in der Hetzner Cloud

Cal.com

In diesem Artikel zeigen wir den schnellsten und bequemsten Weg, Cal.com mit Docker in der Hetzner Cloud zu self-hosten. Mit Hilfe von Polycrate haben Sie in weniger als 5 Minuten Zugang zu Ihrer eigenen Cal.com Instanz auf Hetzner.

Ihre Cal.com Instanz ermöglicht Ihnen zahlreiche Integrationen mit Kalender- und Meeting-Tools, wie zum Beispiel:

In diesem Artikel wird Ihre Cal.com Instanz mit Microsoft 365 integriert sodass Sie gleich Zugriff auf Ihre MS365 Kalender und Meetings haben.

Was ist Cal.com?

Cal.com

Cal.com (früher bekannt als Calendso) ist eine beliebte, quelloffene Alternative zu Calendly, unterstützt von Tausenden von Entwicklern, einer bekannten Buchungs- und Terminfindungs-Lösung. Cal.com macht die Terminplanung für Sie und Ihre Kunden transparenter und für alle zugänglicher.

Mit Cal.com ermöglichen Sie es Ihren Kunden und Interessenten, Meetings mit Ihnen oder Ihrem Team bequem von Ihrer Website aus zu buchen. Cal.com sorgt dabei dafür, dass nur freie Slots aus den konnektierten Kalendern Ihres Teams für die Terminplanung miteinbezogen werden.

Warum will ich das selbst hosten?

Dafür gibt es viele Gründe. Viele Unternehmen sind auf den Betrieb von Software auf eigener Infrastruktur angewiesen und können auf SaaS-Angebote wie Cal.com nicht zurückgreifen. Andere wiederum - und dazu zählen auch wir bei ayedo - wollen den Betrieb kritischer Business-Komponenten einfach in der eigenen Hand haben. Auch das kann viele Gründe haben: mehr Flexibilität, mehr Kontrolle über das Pricing, bessere Datensicherheit.

So oder so, Cal.com ist eine AGPLv3 lizenzierte Open Source Software und eignet sich dadurch für den Betrieb auf eigener Infrastruktur. Zum Glück für uns bietet Cal.com auch ein fertiges Docker-Setup für’s Self-Hosting an, das wir für Sie mit Hilfe von Polycrate verpackt und konfigurierbar gemacht haben.

Und warum Hetzner und nicht AWS?

Unter allen Providern weltweit hat Hetzner das beste Preis-Leistungs-Verhältnis und schlägt die meisten Konkurrenten mit Abstand, was Preise von Infrastruktur und die dafür gelieferte Performance angeht. Hinzu kommt, dass Hetzner ein europäischer Cloud-Provider ist und dadurch viele potentielle Probleme mit Blick auf Compliance, DSGVO und Cloud Act einfach umschifft werden können.

Installation

Vorbereitung

Sie benötigen einige Credentials und Tools für die korrekte Einrichtung Ihrer Cal.com Instanz:

  • Die aktuelleste Version von Polycrate
  • Microsoft Credentials für die Anbindung an Outlook und Teams
  • Calc.com Credentials für die Verschlüsselung von Daten (generieren Sie einfach 2 zufällige Secrets in unserer Toolbox)
  • SMTP Credentials für den Versand von Buchungs- und Bestätigungs-Mails
  • Ein API Token von Ihrem Hetzner Cloud Projekt
  • Eine DNS Zone und einen A-Record für den Hostnamen der Cal.com Instanz, der auf Ihren Hetzner Server zeigt

Polycrate installieren

Sollten Sie Polycrate noch nicht installiert haben, folgen Sie bitte dieser Anleitung.

Workspace anlegen

Legen Sie einen neuen Ordner für den Polycrate Workspace an: mkdir calcom.

Wechseln Sie in den Workspace-Ordner: cd calcom

Legen Sie dort die Datei workspace.poly an und fügen Sie den folgenden Inhalt ein:

x-letsencrypt-email: &letsencrypt-email "info@meinefirma.de"
x-hcloud-token: &hcloud-token "HCLOUD_API_TOKEN"
x-calcom-nextauth-secret: &calcom-nextauth-secret "GENERIERTES_SECRET_1"
x-calcom-calendso-encryption-key: &calcom-calendso-encryption-key "GENERIERTES_SECRET_2"
x-calcom-email-host: &calcom-email-host "mail.meinefirma.de"
x-calcom-email-port: &calcom-email-port 587
x-calcom-email-user: &calcom-email-user "noreply@meinefirma.de"
x-calcom-email-password: &calcom-email-password "SMTP_PASSWORT"
x-calcom-email-from: &calcom-email-from "noreply@meinefirma.de"
x-calcom-hostname: &calcom-hostname "cal.meinefirma.de"
x-calcom-microsoft-graph-client-id: &calcom-microsoft-graph-client-id "MICROSOFT_CLIENT_ID"
x-calcom-microsoft-graph-client-secret: &calcom-microsoft-graph-client-secret "MICROOFT_CLIENT_SECRET"

name: *workspace-name

blocks:
  - name: vpc
    from: cargo.ayedo.cloud/ayedo/hcloud/vpc:0.0.9
    config:
      ssh:
        port: 22
        user: "root"
      vpc:
        name: *workspace-name
      token: *hcloud-token
      node_defaults:
        nodename:
          prefix: *workspace-name
        type: cx31
        image: ubuntu-22.04
        location: fsn1
        firewalls: 
          - *workspace-name
        networks:
          - *workspace-name
        placement_group: *workspace-name
      nodes:
        - name: docker-1
      networks:
        - name: *workspace-name
          enabled: true
          zone: eu-central
          ip_range: 10.11.0.0/16
          delete_protection: false
          type: cloud
          subnet:
            enabled: true
            ip_range: 10.11.3.0/24
      placement_groups:
        - name: *workspace-name
          enabled: true
          type: spread
      firewalls:
        - name: *workspace-name
          enabled: true
          rules: 
            - description: allow 22
              direction: in
              port: 22
              protocol: tcp
              source_ips:
                - 0.0.0.0/0
            - description: allow 80
              direction: in
              port: 80
              protocol: tcp
              source_ips:
                - 0.0.0.0/0
            - description: allow 443
              direction: in
              port: 443
              protocol: tcp
              source_ips:
                - 0.0.0.0/0
            - description: allow icmp
              direction: in
              protocol: icmp
              source_ips:
                - 0.0.0.0/0

  - name: docker
    from: cargo.ayedo.cloud/ayedo/linux/docker:0.0.5
    inventory:
      from: vpc

  - name: traefik
    from: cargo.ayedo.cloud/ayedo/docker/traefik:0.1.1
    inventory:
      from: vpc
    config:
      tls:
        resolver:
          email: *letsencrypt-email
        solver:
          http:
            enabled: true

  - name: calcom
    from: cargo.ayedo.cloud/ayedo/docker/calcom:0.0.1
    inventory:
      from: vpc
    config:
      calcom:
        nextauth_secret: *calcom-nextauth-secret
        calendso_encryption_key: *calcom-calendso-encryption-key
        email:
          host: *calcom-email-host
          port: *calcom-email-port
          user: *calcom-email-user
          password: *calcom-email-password
          from: *calcom-email-from
        traefik:
          hostname: *calcom-hostname
        microsoft:
          graph_client_id: *calcom-microsoft-graph-client-id
          graph_client_secret: *calcom-microsoft-graph-client-secret

Passen Sie die Werte der x- Variablen entsprechend der vorbereiteten Secrets und Informationen an. Sobald Sie alle Werte eingetragen haben, können wir mit der Installation beginnen.

Workspace installieren

Führen Sie die folgenden Kommandos aus um den Workspace zu initialisieren, eine VM bei Hetzner zu povisionieren, Docker darauf zu installieren und im Anschluss Traefik und Cal.com in Docker zu starten:

polycrate init 
polycrate --blocks-auto-pull install vpc
polycrate --blocks-auto-pull install docker
polycrate --blocks-auto-pull install traefik
polycrate --blocks-auto-pull install calcom

Nachdem alle Befehle sauber terminiert haben, müssen Sie nur noch die IP Ihres Hetzner Servers als Ziel für den A-Record aus x-calcom-hostname in Ihrer DNS Zone eintragen. Innerhalb weniger Minuten sollte die Namensauflösung funktionieren. Traefik wird dann automatisch ein TLS-Zertifikat von LetsEncrypt abholen, um Ihre Cal.com Instanz abzusichern.

Sie können Ihr Terminplanungstool jetzt unter cal.meinefirma.de (bzw. dem Hostnamen den Sie konfiguriert haben) erreichen und die Erstinstallation beginnen:

Setup

info

Sie benötigen ein komplexeres Setup von Cal.com, z.B. in Kubernetes oder mit Enterprise SSO?

Sprechen Sie uns an!

Mit ayedo Fleet und ayedo Cruise bieten wir zahlreiche Apps wie Cal.com als Managed Service mit flexiblen Support-Paketen an.

Kontaktieren Sie uns

Unsere Container-Experten beraten Sie gerne und individuell.

Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team
Fleet Team

Wir antworten in der Regel innerhalb weniger Stunden auf Ihre Nachricht.