Sie interessieren sich für das vorgestellte Produkt?
Sprechen Sie uns an! Bei WZ-IT übernehmen wir Beratung, Installation, Support, Betrieb, Wartung und Monitoring Ihrer Lösung.
Vereinbaren Sie hier Ihr kostenloses und unverbindliches Gespräch:
Termin vereinbaren.

Twenty CRM ist eine moderne, schlanke Alternative zu umfangreichen CRM-Systemen wie Odoo. Als Open-Source-Lösung ermöglicht es Ihnen, die volle Kontrolle über Ihre Kundendaten zu behalten und gleichzeitig von einer benutzerfreundlichen, modernen Oberfläche zu profitieren. In dieser Anleitung zeigen wir Ihnen, wie Sie Twenty CRM auf einem Ubuntu 24.04 Server installieren und automatisch SSL-Zertifikate von Let's Encrypt mit Caddy einrichten.

Voraussetzungen

  • Ein Ubuntu 24.04 Server (z.B. ein VPS von Hetzner oder einem anderen Anbieter)
  • Zugriff auf den Server via SSH
  • Domain, die auf den Server zeigt (mind. A Eintrag) (z.B. crm.example.com)

In unserem Beispiel verwenden wir die Domain crm-demo.wz-it.com. Sie können diese Domain in der Anleitung durch Ihre eigene Domain ersetzen. Wir haben die Domain mit einem A Eintrag auf die IP-Adresse des Servers gesetzt, auf dem wir Twenty CRM installieren möchten. Hier ein Auszug aus der DNS-Konfiguration:

DNS Eintrag für Twenty CRM

Schritt 1: Server vorbereiten

Wir melden uns per SSH als root oder einem Benutzer mit sudo-Rechten auf dem Server an und aktualisieren die Paketliste:

apt update && apt upgrade -y

Schritt 2: Docker und Docker Compose installieren

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
rm get-docker.sh

Dieses Skript installiert die neuste Version von Docker und Docker Compose. Schauen Sie sich auch gerne den Inhalt des Skripts an, um zu verstehen, was genau passiert. Generell ist es keine gute Idee, Skripte aus dem Internet blind auszuführen, aber in diesem Fall ist es eine gängige Methode, um Docker zu installieren.

Schritt 3: Benutzer für Twenty CRM erstellen

Wir erstellen einen neuen Benutzer, der später für die Twenty CRM Installation verwendet wird. Außerdem fügen wir den Benutzer zur Docker-Gruppe hinzu, damit er Docker-Befehle ohne sudo ausführen kann. Dies ist wichtig, da Twenty CRM in Docker-Containern läuft und der Benutzer Zugriff auf die Docker-Ressourcen benötigt.

adduser --system --group --home /opt/twenty twenty
sudo usermod -aG docker twenty

Schritt 4: Twenty CRM Installation vorbereiten

Wir wechseln in das Benutzerverzeichnis und erstellen die notwendigen Dateien für Twenty CRM:

cd /opt/twenty

Zuerst erstellen wir die Docker Compose Konfiguration:

sudo -u twenty nano docker-compose.yml

Fügen Sie folgenden Inhalt ein:

name: twenty
services:
  server:
    image: 'twentycrm/twenty:${TAG:-latest}'
    volumes:
      - server-local-data:/app/packages/twenty-server/.local-storage
    environment:
      NODE_PORT: 3000
      PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-postgres}@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/postgres'
      SERVER_URL: '${SERVER_URL}'
      REDIS_URL: '${REDIS_URL:-redis://redis:6379}'
      DISABLE_DB_MIGRATIONS: '${DISABLE_DB_MIGRATIONS}'
      DISABLE_CRON_JOBS_REGISTRATION: '${DISABLE_CRON_JOBS_REGISTRATION}'
      STORAGE_TYPE: '${STORAGE_TYPE}'
      APP_SECRET: '${APP_SECRET:-replace_me_with_a_random_string}'
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: 'curl --fail http://localhost:3000/healthz'
      interval: 5s
      timeout: 5s
      retries: 20
    restart: always
    networks:
      - twenty-network
  worker:
    image: 'twentycrm/twenty:${TAG:-latest}'
    command:
      - yarn
      - 'worker:prod'
    environment:
      PG_DATABASE_URL: 'postgres://${PG_DATABASE_USER:-postgres}:${PG_DATABASE_PASSWORD:-postgres}@${PG_DATABASE_HOST:-db}:${PG_DATABASE_PORT:-5432}/postgres'
      SERVER_URL: '${SERVER_URL}'
      REDIS_URL: '${REDIS_URL:-redis://redis:6379}'
      DISABLE_DB_MIGRATIONS: 'true'
      DISABLE_CRON_JOBS_REGISTRATION: 'true'
      STORAGE_TYPE: '${STORAGE_TYPE}'
      APP_SECRET: '${APP_SECRET:-replace_me_with_a_random_string}'
    depends_on:
      db:
        condition: service_healthy
      server:
        condition: service_healthy
    restart: always
    networks:
      - twenty-network
  db:
    image: 'postgres:16'
    volumes:
      - 'db-data:/var/lib/postgresql/data'
    environment:
      POSTGRES_USER: '${PG_DATABASE_USER:-postgres}'
      POSTGRES_PASSWORD: '${PG_DATABASE_PASSWORD:-postgres}'
    healthcheck:
      test: 'pg_isready -U ${PG_DATABASE_USER:-postgres} -h localhost -d postgres'
      interval: 5s
      timeout: 5s
      retries: 10
    restart: always
    networks:
      - twenty-network
  redis:
    image: redis
    restart: always
    command:
      - '--maxmemory-policy'
      - noeviction
    networks:
      - twenty-network
  caddy:
    image: caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./caddy/data/:/data/
      - ./caddy/config/:/config/
      - ./caddy/Caddyfile:/etc/caddy/Caddyfile
    restart: always
    networks:
      - twenty-network
volumes:
  db-data: null
  server-local-data: null
networks:
  twenty-network:
    driver: bridge

Schritt 5: Umgebungsvariablen konfigurieren

Erstellen Sie die .env Datei mit den notwendigen Konfigurationen:

sudo -u twenty nano .env

Fügen Sie folgenden Inhalt ein:

TAG=v1.2 # Ersetzen Sie dies durch die gewünschte Version von Twenty CRM, z.B. v1.2
APP_SECRET=HIER_GENERIERTES_SECRET_EINFÜGEN
PG_DATABASE_USER=postgres
PG_DATABASE_PASSWORD=HIER_SICHERES_PASSWORT_EINFÜGEN
PG_DATABASE_HOST=db
PG_DATABASE_PORT=5432
DISABLE_DB_MIGRATIONS=false
DISABLE_CRON_JOBS_REGISTRATION=false
REDIS_URL=redis://redis:6379
SERVER_URL=https://crm-demo.wz-it.com
STORAGE_TYPE=local

Generieren Sie ein sicheres APP_SECRET und Datenbankpasswort mit folgenden Befehlen:

# APP_SECRET generieren
openssl rand -base64 32

# Sicheres Datenbankpasswort generieren
openssl rand -base64 32

Ersetzen Sie:

  • HIER_GENERIERTES_SECRET_EINFÜGEN mit dem generierten APP_SECRET
  • HIER_SICHERES_PASSWORT_EINFÜGEN mit dem generierten Datenbankpasswort
  • https://crm-demo.wz-it.com bei SERVER_URL mit Ihrer eigenen Domain (z.B. https://crm.ihre-domain.de)

Schritt 6: Caddy als Reverse Proxy einrichten

Erstellen Sie die Verzeichnisse für Caddy und die Konfigurationsdatei:

sudo -u twenty mkdir -p /opt/twenty/caddy

Erstellen Sie die Datei Caddyfile im Caddy-Verzeichnis:

sudo -u twenty nano /opt/twenty/caddy/Caddyfile

Fügen Sie folgenden Inhalt ein:

{
    email [email protected] # Ihre E-Mail-Adresse für Let's Encrypt Benachrichtigungen
}

crm-demo.wz-it.com { # Ersetzen Sie dies durch Ihre Domain
    reverse_proxy http://server:3000
}

Ersetzen Sie crm-demo.wz-it.com durch Ihre eigene Domain und [email protected] durch Ihre E-Mail-Adresse. Die E-Mail-Adresse wird für die Let's Encrypt Zertifikatsregistrierung verwendet.

Schritt 7: Twenty CRM starten

Wir starten nun Twenty CRM mit Docker Compose:

sudo -u twenty docker compose up -d

Twenty CRM wird nun gestartet und sollte nach wenigen Minuten über HTTPS erreichbar sein. Sie können dies überprüfen, indem Sie Ihre Domain in Ihrem Browser aufrufen (in unserem Beispiel wäre das https://crm-demo.wz-it.com, bei Ihnen entsprechend die Domain, die Sie in der Caddyfile konfiguriert haben).

Troubleshooting: Manuelle Datenbank-Initialisierung

Falls Sie sich nicht einloggen können oder Datenbankfehler auftreten, müssen Sie möglicherweise die Datenbank manuell initialisieren:

# In den Server-Container wechseln
sudo -u twenty docker compose exec server bash

# In das richtige Verzeichnis wechseln
cd /app/packages/twenty-server

# Datenbank initialisieren
yarn database:init:prod

Wenn Sie nach der Installation von ts-node gefragt werden, bestätigen Sie mit y. Die Ausgabe sollte etwa so aussehen:

Need to install the following packages:
[email protected]
Ok to proceed? (y) y

Performed 'create schema "public"' successfully
Performed 'create schema "core"' successfully
Performed 'create extension "uuid-ossp"' successfully

Nach erfolgreicher Initialisierung verlassen Sie den Container mit exit und starten Sie den Server neu:

sudo -u twenty docker compose restart server

Schritt 8: Initial Setup

Nach erfolgreichem Start können Sie Twenty CRM über Ihre Domain aufrufen. Sie werden zur Login-Seite weitergeleitet:

Twenty CRM Login

Beim ersten Aufruf werden Sie durch das Initial Setup geführt, wo Sie Ihren Admin-Account erstellen können:

Twenty CRM Initial Setup

Nach der Einrichtung haben Sie Zugriff auf das moderne Twenty CRM Dashboard.

Twenty CRM Dashboard

Firewall-Konfiguration

Wenn Sie eine Firewall auf Ihrem Server eingerichtet haben, stellen Sie sicher, dass die Ports 80 (HTTP) und 443 (HTTPS) geöffnet sind. Dies ist notwendig, damit Caddy die Anfragen über HTTP und HTTPS entgegennehmen kann.

Fazit

Mit dieser Anleitung haben Sie Twenty CRM erfolgreich auf einem Ubuntu 24.04 Server installiert und mit Caddy ein SSL-Zertifikat von Let's Encrypt eingerichtet. Twenty CRM bietet eine moderne, benutzerfreundliche Alternative zu komplexeren CRM-Systemen wie Odoo und ist besonders für kleinere bis mittelgroße Unternehmen geeignet, die eine schlanke CRM-Lösung suchen.

Weitere Informationen und Dokumentation finden Sie auf der offiziellen Twenty CRM Website: https://twenty.com/ und im GitHub Repository: https://github.com/twentyhq/twenty.