Einrichtung eines Hostel-Servers
Der Server verwaltet die Warteschlange, die Benutzer, die Konfiguration und das SSH-Gateway.
Führen Sie einen Server für ein Team aus. Agenten und Personen verbinden sich von ihren eigenen
Computern aus (hostel-install).
1. Wählen Sie die Maschine und den TLS-Modus
- Ein Linux-Rechner mit systemd (amd64 oder arm64; 2 CPUs und 4 GB sind ausreichend), oder
ein Heimrechner, der permanent läuft. Das Repository dokumentiert nur den systemd-Dienst;
auf einem anderen Betriebssystem führen Sie
hostel server runmit Ihrem eigenen Service-Manager aus. - Eine HTTPS-Adresse, die von Clients erreicht werden kann. Die API und das Gateway teilen sich diese:
das Gateway akzeptiert SSH innerhalb eines WebSockets unter
/v1/gateway.
| TLS-Modus | Verwenden Sie ihn, wenn | Clients prüfen |
|---|---|---|
self-signed (Standard) | Keine Domain oder kein Proxy: eine IP-Adresse, ein LAN-Name, ein VPN-Name. Der Server stellt HTTPS mit seinem eigenen Zertifikat bereit. | Den gepinnten Schlüssel aus dem Einladungscode. |
off | Ein Proxy mit TLS befindet sich vor dem Server (Caddy, ein Cloud-Load-Balancer). | Das Zertifikat des Proxys auf die normale Weise. |
2. Installation
Als Administrator auf der Servermaschine:
curl -fsSL -o install.sh https://raw.githubusercontent.com/csansoon/hostel/main/install.sh
sudo sh install.sh --dir /usr/local/bin --server /opt/hostel
/opt/hostel/helpers enthält die Binärdateien für alle Räume (hostel-<os>-<arch>,
mise-<os>-<arch>). /opt/hostel/platforms enthält die Plattform-Skripte (nur ein
alter Server importiert sie; die Binärdatei hat die Standard-Plattformen).
3. Initialisierung
Führen Sie hostel server init als der Benutzer aus, der den Dienst ausführt (nicht root). In einem
Terminal fragt es nach dem Servernamen, den Adressen und Ihrem Namen, wenn die Flags sie nicht
angeben. Flags:
| Flag | Bedeutung |
|---|---|
--server-id | Der Name des Servers, [a-z0-9]{1,20} (Standard: vom Hostnamen). Er ist Teil der Namen von Räumen, die der Server erstellt. |
--listen | Die API-Adresse (Standard 127.0.0.1:7410). |
--tls | self-signed (Standard) oder off. |
--url | Eine Adresse, die Clients verwenden. Wiederholen Sie sie für mehrere. Einladungscodes enthalten sie. |
--user | Ihr Name für den ersten Administrator. |
--helper-dir | Die Binärdateien für die Räume: /opt/hostel/helpers nach install.sh --server /opt/hostel (Standard: data_dir/helpers). |
--config | Die zu schreibende Datei (Standard ~/.config/hostel/server.toml). |
Selbstsigniert, auf eigenem Port (TCP 7410 in der Firewall öffnen):
hostel server init --server-id demo --listen 0.0.0.0:7410 \
--url https://hostel.example.com:7410 --user "Alice Example" \
--helper-dir /opt/hostel/helpers
Hinter einem Proxy mit TLS:
hostel server init --server-id demo --tls off --listen 127.0.0.1:8000 \
--url https://hostel.example.com --user "Alice Example" \
--helper-dir /opt/hostel/helpers
Mit --tls off und einer https://-Adresse schreibt init auch
gateway_public = "wss://hostel.example.com/v1/gateway": Gäste und verbundene
Maschinen erreichen das SSH-Gateway durch den Proxy. Der Proxy muss
/v1/gateway (ein WebSocket) an den Server weiterleiten.
init schreibt server.toml, hostel.schema.json, das Datenverzeichnis
(~/.local/share/hostel: die Datenbank, server_ed25519, gateway_host_ed25519,
und das TLS-Zertifikat) und gibt den öffentlichen SSH-Schlüssel des Servers sowie die erste
Administrator-Einladung aus:
Verbinden Sie Ihren Computer als erster Administrator. Führen Sie dies auf Ihrem Computer aus:
hostel connect hostel1-...
Führen Sie diesen Befehl auf Ihrem eigenen Computer innerhalb von 24 Stunden aus (hostel-install).
4. Bearbeiten von server.toml
server.toml enthält nur die Schlüssel, die der Server benötigt, bevor er seine Datenbank öffnet:
server_id, listen, gateway_listen, gateway_public, tls,
public_urls, data_dir, helper_dir, platforms_dir. init schreibt
helper_dir (mit --helper-dir) und, hinter einem Proxy, gateway_public. Überprüfen Sie sie:
grep -E 'helper_dir|gateway_public' ~/.config/hostel/server.toml
hostel admin config check
Ohne helper_dir kann der Server den Räumen keinen Helper geben, und hostel machine join kann die Binärdatei nicht herunterladen. Ohne gateway_public hinter einem
Proxy schlägt jede Gast-SSH-Sitzung und jede beigetretene Maschine fehl.
Ein Caddy-Beispiel (Caddy leitet WebSocket-Upgrades ohne weitere Einstellungen weiter):
hostel.example.com {
reverse_proxy 127.0.0.1:8000
}
Mit tls = "self-signed" ist die Standardeinstellung für gateway_public /v1/gateway auf derselben
Adresse; setzen Sie es nicht. Überprüfen Sie die Datei (sie gibt jedes Problem und die effektiven Werte aus):
hostel admin config check
Eine Änderung von server.toml erfordert einen Neustart des Servers.
5. Der systemd-Dienst
/etc/systemd/system/hostel.service (ersetzen Sie alice durch den Benutzer, der init ausgeführt hat):
[Unit]
Description=Hostel server
After=network-online.target
Wants=network-online.target
[Service]
User=alice
ExecStart=/usr/local/bin/hostel server run
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now hostel
journalctl -u hostel -f
hostel server run --config <datei> wählt eine andere server.toml aus. Das Protokoll ist
JSON auf stderr. Wenn die Konfiguration ungültig ist, startet der Server nicht und
das Protokoll gibt den Grund an.
Für Namespace-Räume müssen die CLIs devbox und nsc im PATH des Dienstes sein
(hostel-rooms, Abschnitt "Namespace").
6. Die Konfiguration in der Datenbank
Alles andere (Anbieter, Maschinen, Plattformen und die Einstellungen) ist das Konfigurationsdokument in der Datenbank. Ein Administrator ändert es von jedem verbundenen Computer aus. Eine gültige Änderung wird sofort übernommen, ohne Neustart.
hostel config # Dokument anzeigen (Mitglieder sehen Secrets als ***)
hostel config edit # Ändern in $VISUAL / $EDITOR
hostel config apply file.toml # Ersetzen durch eine Datei (oder - für stdin)
hostel config history # Die Revisionen mit Benutzer und Zeit
hostel config settings # Die Einstellungen, die nicht Standard sind
hostel config settings set idle_timeout=20m
Einstellungen: idle_timeout (10m), poll_timeout (5m), limit_retry (2m),
port_process_offline (10m), intervals.scheduler (10s),
intervals.reconcile (5m), intervals.tunnel_check (30s),
intervals.presence (30s), mise.idiomatic_tools (["node", "python"]),
mise.github_token, mise.agent_device (true).
Der Server lehnt eine Änderung ab, wenn zuerst eine andere Revision kam (erneut bearbeiten) oder wenn
sie ungültig ist (der Fehler benennt den Schlüsselpfad). Maschinen und Anbieter:
hostel-rooms. Plattformen: hostel-platforms. Benutzer: hostel-users.
7. Einladungen auf der Servermaschine
Wenn sich niemand als Administrator anmelden kann, erstellen Sie eine Einladung auf der Servermaschine selbst (sie verwendet nicht die API):
hostel server invite # ein Administrator
hostel server invite --role member --name "Bob Example"
8. Backups
Der Zustand befindet sich im Datenverzeichnis (~/.local/share/hostel). Sichern Sie die Schlüssel
jeweils einmal (server_ed25519, gateway_host_ed25519, tls_cert.pem, tls_key.pem).
Sichern Sie die Datenbank mit SQLite, nicht mit einer Dateikopie:
sqlite3 ~/.local/share/hostel/hostel.db ".backup /var/backups/hostel.db"
- Verlorene Datenbank: Benutzer müssen sich erneut verbinden; On-Demand-Räume mit dieser
server_idwerden beim nächsten Abgleich zerstört. - Verlorener
server_ed25519: Setzen Sie den neuen öffentlichen Schlüssel (hostel admin pubkey) auf jede statische Maschine. - Verlorener TLS-Schlüssel (selbstsigniert): Jeder Client muss sich mit einem neuen Einladungscode erneut verbinden.
9. Update
curl -fsSL -o install.sh https://raw.githubusercontent.com/csansoon/hostel/main/install.sh
sudo sh install.sh --dir /usr/local/bin --server /opt/hostel
sudo systemctl restart hostel
Der Server sendet den neuen Helper vor der nächsten Leihe an jeden Raum.
Nächstes
- Räume hinzufügen:
hostel-rooms. - Personen einladen:
hostel-users.