Maschineneinrichtung
Vier Schritte bringen Ihre erste Maschine zum Laufen: eine Konfiguration erstellen, den Server registrieren, ihn provisionieren und optional die Infrastruktur für öffentlichen Traffic konfigurieren.
Schritt 1: Konfiguration erstellen
Eine Konfiguration ist eine benannte Konfigurationsdatei, die Ihre SSH-Zugangsdaten, Maschinendefinitionen und Repository-Zuordnungen speichert. Betrachten Sie sie als Projekt-Arbeitsbereich.
rdc config init my-infra --ssh-key ~/.ssh/id_ed25519
| Option | Erforderlich | Beschreibung |
|---|---|---|
--ssh-key <path> | Ja | Pfad zu Ihrem privaten SSH-Schlüssel. Die Tilde (~) wird automatisch expandiert. |
--renet-path <path> | Nein | Benutzerdefinierter Pfad zur renet-Binary auf entfernten Rechnern. Standardmäßig der Standard-Installationspfad. |
Dies erstellt eine Konfiguration namens my-infra und speichert sie in ~/.config/rediacc/my-infra.json. Die Standardkonfiguration (wenn kein Name angegeben wird) wird als ~/.config/rediacc/rediacc.json gespeichert.
Sie können mehrere Konfigurationen haben (z. B.
production,staging,dev). Wechseln Sie zwischen ihnen mit dem--config-Flag bei jedem Befehl.
Schritt 2: Eine Maschine hinzufügen
Registrieren Sie Ihren entfernten Server als Maschine in der Konfiguration:
rdc machine add server-1 --ip 203.0.113.50 --user deploy
| Option | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
--ip <address> | Ja | - | IP-Adresse oder Hostname des entfernten Servers |
--user <username> | Ja | - | SSH-Benutzername auf dem entfernten Server |
--port <port> | Nein | 22 | SSH-Port |
--datastore <path> | Nein | /mnt/rediacc | Pfad auf dem Server, an dem Rediacc verschlüsselte Repositories speichert |
Nach dem Hinzufügen der Maschine führt rdc automatisch ssh-keyscan aus, um die Host-Schlüssel des Servers abzurufen. Sie können dies auch manuell ausführen:
rdc machine scan-keys server-1
Um alle registrierten Maschinen anzuzeigen:
rdc machine list
Schritt 3: Die Maschine einrichten
Provisionieren Sie den entfernten Server mit allen erforderlichen Abhängigkeiten:
rdc machine setup server-1
Dieser Befehl:
- Lädt die renet-Binary per SFTP auf den Server hoch
- Installiert Docker, containerd und cryptsetup (falls nicht vorhanden)
- Erstellt den
rediacc-Systembenutzer (UID 7111) - Erstellt das Datastore-Verzeichnis und bereitet es für verschlüsselte Repositories vor
| Option | Erforderlich | Standard | Beschreibung |
|---|---|---|---|
--datastore <path> | Nein | /mnt/rediacc | Datastore-Verzeichnis auf dem Server |
--datastore-size <size> | Nein | 95% | Anteil des verfügbaren Speichers, der für den Datastore reserviert wird |
--debug | Nein | false | Aktiviert ausführliche Ausgabe zur Fehlerbehebung |
Die Einrichtung muss nur einmal pro Maschine ausgeführt werden. Eine erneute Ausführung ist bei Bedarf sicher möglich.
Datastore-Backends
Der Datastore ist der Storage-Pool pro Maschine, der verschlüsselte Repository-Images vorhält. machine setup erstellt standardmäßig einen lokalen Datastore: ein loop-gestütztes BTRFS-Dateisystem auf der eigenen Festplatte des Servers, dimensioniert über --datastore-size (Standard 95% des verfügbaren Speicherplatzes). Das ist das richtige Backend für so gut wie jede Single-Maschine-Bereitstellung und braucht nichts außer dem Server selbst.
Datastore-Dimensionierung
--datastore-size akzeptiert einen Prozentsatz (95%) oder eine absolute Größe (50G, 1T). Der Datastore kann später online vergrößert werden:
rdc datastore resize ds-server-1 --size 200G
Repositories innerhalb des Datastores werden unabhängig davon zum Zeitpunkt von repo create dimensioniert und können im laufenden Betrieb erweitert werden, sodass Sie den Datastore nicht im Voraus überprovisionieren müssen.
Ceph-RBD-Backend
Für gemeinsam genutzten, skalierbaren oder Kubernetes-unterstützenden Storage initialisieren Sie den Datastore stattdessen auf einem externen Ceph-Cluster. Der Datastore liegt dann auf einem RBD-Image (BTRFS obendrauf, keine Per-Image-LUKS-Schicht), und Forks verwenden Copy-on-Write-Clones von RBD statt BTRFS-Reflinks.
# 1. Die Ceph-Referenz der Maschine festhalten (Pool + RBD-Image, nicht geheim)
# 2. Den Datastore auf dem Ceph-Backend initialisieren
rdc datastore create ds-server-1 -m server-1 --backend ceph --pool rbd --image datastore-server1 --size 100G
Ceph-Keyrings bleiben auf den Maschinen; die Konfigurationsdatei enthält nur die nicht geheimen Pool- und Image-Referenzen. Ceph ist auch die Storage-Schicht, die Kubernetes-Cluster über ceph-csi nutzen. Siehe den Kubernetes-Guide für Cluster und Persistent Volumes sowie Architektur für den Vergleich der beiden Backends.
Host-Schlüssel-Verwaltung
Wenn sich der SSH-Host-Schlüssel eines Servers ändert (z. B. nach einer Neuinstallation), aktualisieren Sie die gespeicherten Schlüssel:
rdc machine scan-keys server-1
Dies aktualisiert das knownHosts-Feld in Ihrer Konfiguration für diese Maschine.
SSH-Konnektivität testen
Nach dem Hinzufügen einer Maschine prüfen Sie, ob sie erreichbar ist:
rdc term connect server-1 -c "hostname"
Dies öffnet eine SSH-Verbindung zur Maschine und führt den Befehl aus. Bei Erfolg ist Ihre SSH-Konfiguration korrekt.
Für eine detailliertere Diagnose führen Sie aus:
rdc doctor
Tipp: Um die SSH-Konnektivität zu prüfen, führen Sie
rdc term connect <machine> -c "hostname"aus oder verwenden Sie direktssh.
Infrastruktur-Konfiguration
Für Maschinen, die Traffic öffentlich bereitstellen müssen, konfigurieren Sie die Infrastruktureinstellungen:
Infrastruktur festlegen
rdc machine infra set server-1 \
--public-ipv4 203.0.113.50 \
--base-domain example.com \
--cert-email admin@example.com \
--cf-dns-token your-cloudflare-api-token
| Option | Bereich | Beschreibung |
|---|---|---|
--public-ipv4 <ip> | Machine | Public IPv4 address, proxy entrypoints are only created for configured address families |
--public-ipv6 <ip> | Machine | Public IPv6 address, proxy entrypoints are only created for configured address families |
--base-domain <domain> | Machine | Basis-Domain für Anwendungen (z. B. example.com) |
--cert-email <email> | Config | E-Mail für Let’s Encrypt TLS-Zertifikate (maschinenübergreifend geteilt) |
--cf-dns-token <token> | Config | Cloudflare DNS API-Token für ACME DNS-01-Challenges (maschinenübergreifend geteilt) |
--tcp-ports <ports> | Machine | Kommagetrennte zusätzliche TCP-Ports zur Weiterleitung (z. B. 25,143,465,587,993) |
--udp-ports <ports> | Machine | Kommagetrennte zusätzliche UDP-Ports zur Weiterleitung (z. B. 53) |
Machine-Optionen werden pro Maschine gespeichert. Config-Optionen (--cert-email, --cf-dns-token) gelten für alle Maschinen in der Konfiguration. Einmal setzen und sie gelten überall.
Infrastruktur anzeigen
rdc machine infra show server-1
Auf den Server übertragen
Generieren und verteilen Sie die Traefik-Reverse-Proxy-Konfiguration auf den Server:
rdc machine infra push server-1
Dieser Befehl:
- Verteilt die renet-Binary auf die entfernte Maschine
- Konfiguriert den Traefik-Reverse-Proxy, Router und systemd-Dienste
- Erstellt Cloudflare-DNS-Einträge für die Maschinen-Subdomain (
server-1.example.comund*.server-1.example.com), wenn--cf-dns-tokengesetzt ist
Der DNS-Schritt ist automatisch und idempotent: er erstellt fehlende Einträge, aktualisiert Einträge mit geänderten IPs und überspringt bereits korrekte Einträge. Wenn kein Cloudflare-Token konfiguriert ist, wird DNS mit einer Warnung übersprungen. Per-Repo-Wildcard-DNS-Einträge (für automatische Routen) werden automatisch erstellt, wenn Sie rdc repo up ausführen.
Cloud-Provisionierung
Anstatt VMs manuell zu erstellen, können Sie einen Cloud-Provider konfigurieren und rdc Maschinen automatisch mit OpenTofu provisionieren lassen.
Voraussetzungen
Installieren Sie OpenTofu: opentofu.org/docs/intro/install
Stellen Sie sicher, dass Ihre SSH-Konfiguration einen registrierten Schlüssel bei rdc hat:
# Liest die Schlüsseldatei und inline ihren Inhalt unter /credentials/ssh.
rdc config ssh set --key ~/.ssh/id_ed25519
Einen Cloud-Provider hinzufügen
rdc machine provider add my-linode \
--provider linode/linode \
--token $LINODE_API_TOKEN \
--region us-east \
--type g6-standard-2
| Option | Erforderlich | Beschreibung |
|---|---|---|
--provider <source> | Ja* | Bekannte Provider-Quelle (z. B. linode/linode, hetznercloud/hcloud) |
--source <source> | Ja* | Benutzerdefinierte OpenTofu-Provider-Quelle (für unbekannte Provider) |
--token <token> | Ja | API-Token für den Cloud-Provider |
--region <region> | Nein | Standard-Region für neue Maschinen |
--type <type> | Nein | Standard-Instanztyp/-größe |
--image <image> | Nein | Standard-Betriebssystem-Image |
--ssh-user <user> | Nein | SSH-Benutzername (Standard: root) |
* Entweder --provider oder --source ist erforderlich. Verwenden Sie --provider für bekannte Provider (eingebaute Standardwerte). Verwenden Sie --source mit zusätzlichen --resource, --ipv4-output, --ssh-key-attr Flags für benutzerdefinierte Provider.
Eine Maschine provisionieren
rdc machine provision prod-2 --provider my-linode
Dieser einzelne Befehl:
- Erstellt eine VM beim Cloud-Provider über OpenTofu
- Wartet auf SSH-Konnektivität
- Registriert die Maschine in Ihrer Konfiguration
- Installiert renet und alle Abhängigkeiten
- Konfiguriert Traefik-Proxy und Cloudflare DNS (erkennt automatisch die Basis-Domain von benachbarten Maschinen, oder geben Sie
--base-domainexplizit an)
| Option | Beschreibung |
|---|---|
--provider <name> | Name des Cloud-Providers (von add-provider) |
--region <region> | Überschreibt die Standard-Region des Providers |
--type <type> | Überschreibt den Standard-Instanztyp |
--image <image> | Überschreibt das Standard-Betriebssystem-Image |
--base-domain <domain> | Basis-Domain für die Infrastruktur. Wird automatisch von benachbarten Maschinen erkannt, falls nicht angegeben |
--no-infra | Infrastruktur-Konfiguration (Proxy und DNS) vollständig überspringen |
--debug | Zeigt detaillierte Provisionierungsausgabe |
Eine Maschine deprovisionieren
rdc machine deprovision prod-2
Zerstört die VM über OpenTofu und entfernt sie aus Ihrer Konfiguration. Erfordert eine Bestätigung, es sei denn --force wird verwendet. Funktioniert nur für Maschinen, die mit machine provision erstellt wurden.
Provider auflisten
rdc machine provider list
Standardwerte festlegen
Legen Sie Standardwerte fest, damit Sie sie nicht bei jedem Befehl angeben müssen:
rdc config field set --pointer /defaults/machine --new '"server-1"' # Standard-Maschine
rdc config set team my-team # Standard-Team für den Config-Store
Nach dem Festlegen einer Standard-Maschine können Sie -m server-1 bei Befehlen weglassen:
rdc repo create my-app -m my-server --size 10G
Mehrere Konfigurationen
Verwalten Sie mehrere Umgebungen mit benannten Konfigurationen:
# Separate Konfigurationen erstellen
rdc config init production --ssh-key ~/.ssh/id_prod
rdc config init staging --ssh-key ~/.ssh/id_staging
# Eine bestimmte Konfiguration verwenden
rdc repo list -m server-1 --config production
rdc repo list -m staging-1 --config staging
Alle Konfigurationen anzeigen:
rdc config list
Aktuelle Konfigurationsdetails anzeigen:
rdc config show