> ## Documentation Index
> Fetch the complete documentation index at: https://simplecloud.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Multi-Root Setup

> SimpleCloud über mehrere Maschinen mit verteilten Serverhosts betreiben

## Wann du Multi-Root verwendest

Nutze ein Multi-Root-Setup, wenn ein SimpleCloud-Netzwerk Minecraft-Server auf mehr als einer physischen oder virtuellen Maschine ausführen soll.

## Voraussetzungen

* Ein bestehendes SimpleCloud-Netzwerk mit mindestens einem Serverhost
* Zusätzliche Maschinen, auf denen Serverhosts ausgeführt werden sollen
* Root- oder sudo-Zugriff auf jeder Maschine

## Teil 1: Serverhosts hinzufügen

Füge jede Maschine mit einem frischen Befehl aus dem Dashboard hinzu. Der Befehl installiert die CLI, authentifiziert den Host, registriert ihn im aktuellen Netzwerk und startet den lokalen Serverhost-Prozess.

<Steps>
  <Step title="Server-Hosts-Einstellungen öffnen">
    Gehe zum [SimpleCloud Dashboard](https://dash.simplecloud.app), melde dich an, öffne **Settings** und wähle **Server Hosts**.
  </Step>

  <Step title="Add-Host-Befehl erzeugen">
    Klicke auf **Add Host**. Das Dashboard erzeugt einen Befehl mit einem kurzlebigen Login-Code für das aktuelle Netzwerk.
  </Step>

  <Step title="Befehl auf dem neuen Serverhost ausführen">
    Kopiere den Befehl und führe ihn auf der neuen Maschine aus.

    SimpleCloud installiert die CLI, registriert die Maschine und startet den Serverhost. Das kann ein paar Minuten dauern.
  </Step>

  <Step title="Verbindung prüfen">
    Prüfe nach Abschluss, ob die lokale Serverhost-Komponente läuft:

    ```bash theme={null}
    sc status serverhost
    ```

    Der neue Serverhost sollte außerdem im Dashboard erscheinen, sobald er mit dem Controller verbunden ist.
  </Step>
</Steps>

<Tip>
  Erzeuge für jede Maschine einen eigenen **Add Host**-Befehl. Jeder Serverhost braucht seine eigene Identität und darf das Verzeichnis `secrets/` nicht mit einem anderen Host teilen.
</Tip>

## Teil 2: Dateien synchronisieren

Bei mehreren Serverhosts musst du Templates, Workflows und Optionen synchron halten. Wir empfehlen die Verwendung von Syncthing für die automatische Dateisynchronisierung.

### Was synchronisiert werden soll

| Verzeichnis  | Zweck                                                                | Sync?                     |
| ------------ | -------------------------------------------------------------------- | ------------------------- |
| `templates/` | Server-Templates, Plugins, Tags, benannte Templates und Cache-Regeln | Ja                        |
| `workflows/` | Server-Vorbereitungs- und Cleanup-Workflows                          | Ja                        |
| `options/`   | Configurator-Einstellungen und Platform-Mappings                     | Ja                        |
| `secrets/`   | Netzwerk-Anmeldedaten                                                | Nein - eindeutig pro Host |
| `running/`   | Aktive Server-Instanzen                                              | Nein - nur lokal          |
| `logs/`      | Serverhost-Logs                                                      | Nein - nur lokal          |

<Warning>
  Synchronisiere niemals das Verzeichnis `secrets/`. Jeder Serverhost benötigt seine
  eigenen eindeutigen Identitäts-Anmeldedaten.
</Warning>

### Dein SimpleCloud-Verzeichnis finden

Der Installationspfad ist benutzerkonfigurierbar. Dein Serverhost-Verzeichnis enthält:

<Tree>
  <Tree.Folder name="simplecloud" defaultOpen>
    <Tree.Folder name="templates" defaultOpen>
      <Tree.File name="Dies synchronisieren" />
    </Tree.Folder>

    <Tree.Folder name="workflows">
      <Tree.File name="Dies synchronisieren" />
    </Tree.Folder>

    <Tree.Folder name="options">
      <Tree.File name="Dies synchronisieren" />
    </Tree.Folder>

    <Tree.Folder name="secrets">
      <Tree.File name="NICHT synchronisieren" />
    </Tree.Folder>

    <Tree.Folder name="running" />
  </Tree.Folder>
</Tree>

### Sync auf dem primären Serverhost initialisieren

Führe dies auf dem Serverhost aus, der als primärer Sync-Host dienen soll:

```bash theme={null}
sc sync init --name serverhost-1
```

Die CLI bereitet die verwalteten Verzeichnisse vor, ignoriert `templates/cache/`, konfiguriert Syncthing für `templates/`, `workflows/` und `options/`, speichert die Ordner-IDs in `.simplecloud-sync.json` und gibt einen `sc sync join ...`-Befehl für den nächsten Serverhost aus.

<Note>
  Wenn du SimpleCloud als root ausführst, füge `--as-root` hinzu, damit die CLI
  `syncthing@root.service` verwendet.
</Note>

### Von einem weiteren Serverhost beitreten

Führe auf dem neuen Serverhost den `sc sync join ...`-Befehl aus, den `sc sync init` oder `sc sync add` ausgegeben hat.

```bash theme={null}
sc sync join \
  --primary-device-id PRIMARY_DEVICE_ID \
  --primary-name serverhost-1 \
  --templates-id TEMPLATES_FOLDER_ID \
  --workflows-id WORKFLOWS_FOLDER_ID \
  --options-id OPTIONS_FOLDER_ID \
  --name serverhost-2
```

Nach Abschluss gibt der Join-Befehl einen `sc sync approve ...`-Befehl aus.

### Beitretenden Serverhost genehmigen

Führe den ausgegebenen Approve-Befehl auf dem primären Serverhost aus:

```bash theme={null}
sc sync approve --device-id JOINING_DEVICE_ID --name serverhost-2
```

Für weitere Serverhosts erzeugst du später auf dem primären Serverhost einen neuen Join-Befehl:

```bash theme={null}
sc sync add --join-name serverhost-3
```

Prüfe den Synchronisierungsstatus auf einem beliebigen Host:

```bash theme={null}
sc sync status
```

### Synchronisierung überprüfen

Teste, ob die Synchronisierung funktioniert:

```bash theme={null}
CLOUD_DIR=/pfad/zu/simplecloud

# Auf Serverhost 1
echo "sync test" > "$CLOUD_DIR/templates/sync-test.txt"

# Warte ein paar Sekunden, dann prüfe auf Serverhost 2
cat "$CLOUD_DIR/templates/sync-test.txt"

# Aufräumen
rm "$CLOUD_DIR/templates/sync-test.txt"
```

## Best Practices

### Server-Verteilung

Konfiguriere Gruppen, um festzulegen, welche Serverhosts sie ausführen können:

| Strategie         | Anwendungsfall                                            |
| ----------------- | --------------------------------------------------------- |
| Beliebiger Host   | Lastverteilung über alle Maschinen                        |
| Spezifische Hosts | Dedizierte Hardware für ressourcenintensive Server        |
| Geografisch       | Spieler verbinden sich mit dem nächstgelegenen Serverhost |

### Dateisynchronisierungs-Einstellungen

| Einstellung               | Empfohlen          | Grund                                   |
| ------------------------- | ------------------ | --------------------------------------- |
| Ordnertyp                 | Senden & Empfangen | Erlaubt Änderungen von jedem Serverhost |
| Dateiversionierung        | Einfach            | Behält Backup-Kopien                    |
| Berechtigungen ignorieren | Aktiviert          | Vermeidet Berechtigungskonflikte        |

### Cache von der Synchronisierung ausschließen

Der Ordner `templates/cache/` enthält lokal generierte Dateien. Erwäge, ihn von der Synchronisierung auszuschließen, um unnötige Übertragungen zu vermeiden.

## Fehlerbehebung

<AccordionGroup>
  <Accordion title="Serverhost erscheint nicht in der Liste">
    **Symptom:** Nach dem **Add Host**-Befehl wird der Host nicht angezeigt.

    **Lösungen:**

    1. Überprüfe, ob der Serverhost läuft: `sc status serverhost`
    2. Überprüfe die Netzwerkverbindung zum Controller
    3. Überprüfe, ob Anmeldedaten im Verzeichnis `secrets/` vorhanden sind
    4. Überprüfe die Serverhost-Logs: `sc logs serverhost`
  </Accordion>

  <Accordion title="Syncthing-Geräte verbinden sich nicht">
    **Symptom:** Geräte werden als "Getrennt" angezeigt.

    **Lösungen:**

    1. Stelle sicher, dass die Firewall Port 22000 TCP und UDP erlaubt
    2. Führe `sc sync status` auf jedem Host aus
    3. Prüfe, ob der `sc sync approve ...`-Befehl auf dem primären Host ausgeführt wurde
    4. Wenn du als root arbeitest, verwende `--as-root` bei jedem `sc sync`-Befehl
  </Accordion>

  <Accordion title="Dateien werden nicht zwischen Hosts synchronisiert">
    **Symptom:** Template-Änderungen erscheinen nicht auf anderen Serverhosts.

    **Lösungen:**

    1. Führe `sc sync status` aus und prüfe, ob `templates`, `workflows` und `options` konfiguriert sind
    2. Prüfe, ob die Ordner-IDs in `.simplecloud-sync.json` auf allen Hosts übereinstimmen
    3. Bestätige, dass der beitretende Host mit `sc sync approve` genehmigt wurde
    4. Prüfe die von `sc sync status` gemeldeten Syncthing-Verbindungsfehler
  </Accordion>

  <Accordion title="Server starten auf dem falschen Host">
    **Symptom:** Server starten auf unerwarteten Serverhosts.

    **Lösungen:**

    1. Überprüfe die Gruppenkonfiguration für Host-Beschränkungen
    2. Überprüfe, ob alle Serverhosts die erforderlichen Templates synchronisiert haben
    3. Überprüfe die Serverhost-Verfügbarkeit im Dashboard
  </Accordion>

  <Accordion title="Konfliktdateien erscheinen">
    **Symptom:** Dateien mit `.sync-conflict` im Namen erscheinen.

    **Ursache:** Dieselbe Datei wurde gleichzeitig auf mehreren Hosts geändert.

    **Lösungen:**

    1. Überprüfe Konfliktdateien und wähle die richtige Version
    2. Vermeide es, dieselbe Datei gleichzeitig auf mehreren Hosts zu bearbeiten
    3. Bestimme einen Host als "primär" für die Template-Bearbeitung
  </Accordion>
</AccordionGroup>

## Verwandte Themen

* [Templates](/docs/de/manual/setup/templates) - Template-Hierarchie und -Verwaltung
* [Workflows](/docs/de/manual/configuration/workflows) - Workflow-Konfiguration
* [Serverhost](/docs/de/manual/introduction/architecture/serverhost) - Serverhost-Architektur
