Produktübersicht
Ein Server zwischen dem Netzwerk und Ihrer Anwendung.
Webship ist ein selbst gehosteter Rust Edge- und statischer Webserver. Eine Runtime beendet moderne Protokolle, wendet Edge-Richtlinien an, liefert Dateien aus und leitet Anwendungsanfragen weiter.
Moderne Transportmöglichkeiten
Akzeptieren Sie HTTP/1.1, HTTP/2 und HTTP/3 mit TLS 1.3 und einem optionalen WebTransport-Endpunkt.
Statische und weitergeleitete Bereitstellung
Statische Dateien mit Validatoren und vorkompilierten Sidecars ausliefern oder Anwendungsverkehr über begrenzte Upstream-Pools weiterleiten.
Sichere Standardwerte
Beginnen Sie mit aktiviertem WAF, DDoS-Kontrollen, Bot-Herausforderung, Sicherheits-Headern für Antworten, API-Schutz und Schutz von Punktdateien.
Beobachtbare Vorgänge
Verwenden Sie authentifizierte Statistiken, Prometheus-Metriken, Anfrage-IDs, sanfte Neustarts und die optionale MCP-Steuerungsebene.
Schneller Start
Vom Release-Binär zu einem gesunden Listener.
Starten Sie auf dem Loopback, validieren Sie alles vor dem Binden und überprüfen Sie die integrierte Gesundheitsantwort, bevor Sie öffentlichen Datenverkehr hinzufügen.
Dateien vorbereiten
Platzieren Sie die Release-Binärdatei, ihre TOML-Konfiguration, das statische Root-Verzeichnis und alle konfigurierten TLS-Zertifikats- und Schlüsseldateien auf dem Host.
Validieren und inspizieren
Führe beide Konfigurationsbefehle aus. Beheben Sie den ersten Fehler und überprüfen Sie das geschwärzte effektive Ergebnis vor dem Start.
Fang privat an
Starten Sie Webship mit der ausgewählten TOML-Datei. Fügen Sie ein vollständiges Zertifikatspaar oder automatisches TLS hinzu, wenn die Seite für sicheren öffentlichen Verkehr bereit ist.
Überprüfen Sie die Laufzeit
Ruf GET /health lokal an. Dann testet man statische Pfade, TLS, Proxy-Routen, Sicherheitsregeln und authentifizierte Überwachung.
listen = "127.0.0.1:4433"
workers = 4
root = "./public"/usr/local/bin/webship --check-config --config /etc/webship/production.toml
/usr/local/bin/webship --print-effective-config --config /etc/webship/production.toml/usr/local/bin/webship --config /etc/webship/production.toml
curl --http3-only --insecure https://127.0.0.1:4433/healthSchnellstartanleitung für KI-Agenten
Verbinden Sie einen KI-Agenten in fünf Zeilen mit Webship.
Verbinden Sie Claude Code, OpenAI, DeepSeek oder einen beliebigen kompatiblen MCP-Client über einen privaten SSH-Tunnel. Der Agent erhält eine authentifizierte Operationsoberfläche, ohne den öffentlichen Listener zu teilen oder Steuerungsanmeldeinformationen dem Internetverkehr auszusetzen.
{
"mcpServers": {
"webship": { "url": "https://localhost:19443/mcp",
"headers": { "Authorization": "Bearer <token>" } }
} }Statische Bereitstellung
Stellen Sie ein Verzeichnis mit protokollbewussten Standardeinstellungen bereit.
Setzen Sie ein Root global oder pro Seite. TLS-Seiten standardmäßig nur auf HTTP/3; Klartext-Seiten standardmäßig auf HTTP/1.1 und H2C. Überschreiben Sie HTTP/1.1, HTTP/2 und HTTP/3 unabhängig für jede Seite.
[[sites]]
domain = "app.example.com"
root = "/srv/app"
listen = "0.0.0.0:443"
[sites.protocols]
h1 = true
h2 = true
h3 = trueDer eingebaute Router unterstützt GET und HEAD, Byte-Range-Anfragen, bedingte Anfragen, Validatoren sowie .br-, .zst- und .gz-Sidecars. Dot-Dateipfade werden standardmäßig verweigert; .well-known bleibt verfügbar.
Anwendungsverkehr
Routen Sie Anfragen zu einem oder mehreren Upstreams.
Aktivieren Sie Reverse-Proxying, stimmen Sie einen Host und Pfad ab und definieren Sie dann eine endgültige bedingungslose Richtlinie. Webship unterstützt begrenzte Pools, Gesundheitsprüfungen, Lastenausgleich, Schaltkreise, sichere wiederholte Versuche ohne Body, WebSockets und Caching.
[reverse_proxy]
enabled = true
[[reverse_proxy.routes]]
domain = "app.example.com"
path_prefix = "/api"
strip_path_prefix = true
upstreams = ["127.0.0.1:8080", "127.0.0.1:8081"]
[[reverse_proxy.policies]]
name = "default"
hosts = []
path_prefixes = ["/"]
methods = []
max_body_bytes = 1048576
total_timeout_ms = 30000TLS und HTTP/3
Verwenden Sie manuelle Zertifikate oder lassen Sie Webship diese verwalten.
Webship 1.4.0 akzeptiert TLS 1.3 und ermöglicht jeder Seite, ihren Zertifikatmodus unabhängig auszuwählen. HTTP/3 verwendet den entsprechenden UDP-Listener; aktivieren Sie HTTP/1.1 oder HTTP/2, wenn die gleiche TLS-Site auch TCP-Kompatibilität benötigt.
listen = "0.0.0.0:443"
[automatic_tls]
enabled = true
directory_url = "https://acme-v02.api.letsencrypt.org/directory"
cache_dir = "/var/lib/webship/acme"
contacts = ["mailto:ops@example.com"]
accept_terms_of_service = true
[[sites]]
domain = "app.example.com"
root = "/srv/app"
certificate_mode = "per_site" # default public ACME certificate
[[sites]]
domain = "legacy.example.com"
root = "/srv/legacy"
certificate_mode = "shared" # legacy public multi-SAN certificateWebship 1.4.0 Zertifikatsarchitektur
Wählen Sie für jede Site unabhängig Vertrauen und Skalierung des Zertifikats.
Webship 1.4.0 verschiebt certificate_mode auf jeden [[sites]]-Eintrag. Öffentliche pro-Site ACME, öffentliche DNS-01-Flotten-Shards, die eingebettete private CA, das alte gemeinsam genutzte Zertifikat und manuelle Zertifikatsdateien können in einem selbständigen Prozess koexistieren.
pro_site — öffentliches Zertifikat
Der Standard. Bestellen Sie ein von Browsern vertrauenswürdiges öffentliches ACME-Zertifikat für den genauen Namen der Website mit TLS-ALPN-01.
Flotte — öffentliche DNS-01-Shards
Verwenden Sie die öffentliche DNS-01-Ausstellung für viele Dritt- und Viertstufig-Namen unter explizit registrierten Domains. Namen bleiben in stabilen, gebündelten Zertifikats-Shards.
eingebettet — private CA
Stellen Sie ein separates Zertifikat im Prozess von Webship's privater CA aus. Kein öffentliches ACME-Konto, DNS-Challenge, Registrar-Integration oder eingehender Port 443 ist erforderlich.
gemeinsam — alte Multi-SAN
Behalten Sie die alte öffentliche Multi-SAN-Gruppe für Bereitstellungen, die sie benötigen. Dies ist nicht die Standardeinstellung und bleibt den Begrenzungen der öffentlichen CA-Kennungen unterworfen.
[automatic_tls]
enabled = true
directory_url = "https://acme-v02.api.letsencrypt.org/directory"
cache_dir = "/var/lib/webship/acme"
contacts = ["mailto:ops@example.com"]
accept_terms_of_service = true
[automatic_tls.fleet]
shard_size = 64
batch_window_ms = 300000
weekly_certificate_limit = 50
emergency_certificate_reserve = 5
registered_domains = ["example.com"]
[automatic_tls.fleet.dns]
listen = "0.0.0.0:53"
nameservers = ["ns1.example.net"]
addresses = ["192.0.2.10"]
propagation_timeout_ms = 120000
resolver_url = "https://dns.google/resolve"
challenge_ttl_seconds = 900
[[sites]]
domain = "app.example.com"
root = "/srv/app"
certificate_mode = "fleet"
[[sites]]
domain = "media.app.example.com"
root = "/srv/media"
certificate_mode = "fleet"[automatic_tls]
enabled = true
cache_dir = "/var/lib/webship/acme"
[acme_ca]
state_dir = "/var/lib/webship/acme-ca"
leaf_validity_days = 90
[[sites]]
domain = "internal.example.com"
root = "/srv/internal"
certificate_mode = "embedded"Edge-Richtlinie
Halten Sie die sichere Basislinie intakt.
Webship aktiviert standardmäßig seine Hauptschutzschichten. Passen Sie die Limits an Ihre Arbeitslast an und validieren Sie nach jeder Regel- oder Header-Policy-Änderung.
[ddos]
enabled = true
mode = "normal"
requests_per_minute = 600
burst = 100
block_seconds = 300
[security.response_headers]
enabled = true
nosniff = true
frame_deny = true
referrer_no_referrer = true
hsts = "max-age=31536000; includeSubDomains"
content_security_policy = "default-src 'self'; frame-ancestors 'none'"Verwenden Sie den Normalmodus für regulären Traffic, unter_attack für strengere aktive Angriffserkennung und Lockdown, wenn nur noch Sondierungen und ausdrücklich erlaubte Pfade verfügbar sein sollen.
Private Diagnostik
Untersuchen Sie den Edge, ohne die Steuerungsebene offenzulegen.
Statistiken und Prometheus-Metriken laufen auf einem separaten authentifizierten Listener. Die Instrumentierung muss aktiviert sein, sobald einer der Endpunkte aktiv ist.
[observability]
instrumentation = true
stats = true
metrics = true
listen = "127.0.0.1:9090"
token = "replace-with-at-least-32-random-printable-ascii-characters"Sichere Operationen
Bewusst neu laden. Halten Sie die Rückrollfunktion bereit.
Konfigurations-Neuladen
Senden Sie SIGHUP nach dem Bearbeiten einer dateibasierten Konfiguration. Webship validiert den Ersatz, bevor er installiert wird, und behält die laufende Konfiguration bei, wenn die Validierung fehlschlägt.
Upgrade und Rollback
Installieren Sie das neue Binary neben der vorherigen Version, validieren Sie die Produktionskonfiguration damit und überprüfen Sie dann Gesundheit, TLS, Proxy und Metriken. Behalten Sie das vorherige Binary, bis alle Gates bestanden sind.
kill -HUP "$(pidof webship)"
/usr/local/bin/webship update --config /etc/webship/production.toml
sudo systemctl daemon-reload
sudo systemctl enable --now webship
sudo systemctl status webshipProfilgesteuerte Optimierung
Sammeln Sie zielnative Profile, ohne Training und Produktion zu verwechseln.
Jedes Webship 1.4.0-Ziel hat eine separate instrumentierte CLI zum Sammeln von zielnativen LLVM-Profil-Daten unter deinem repräsentativen Traffic. Verwende die genaue Version und das Ziel-Triple, teste die Routen und Protokolle, die relevant sind, und beende den Prozess ordnungsgemäß, damit jede .profraw-Datei geschrieben werden kann.
Wählen Sie das genaue Ziel
Laden Sie die PGO-Trainings-CLI herunter, deren Release-Version und Rust Zieltriple exakt der Runtime entsprechen, die Sie optimieren möchten. Überprüfen Sie zuerst deren veröffentlichten SHA-256.
Repräsentativen Verkehr erfassen
Setzen Sie LLVM_PROFILE_FILE auf ein beschreibbares Verzeichnis, starten Sie die Trainings-CLI mit einer validierten Kopie der echten Konfiguration, spielen Sie repräsentativen Direkt- und Reverse-Proxy-Verkehr ab, und stoppen Sie dann Webship ordnungsgemäß.
Rohe Profile zusammenführen
Verwenden Sie llvm-profdata aus der für die Veröffentlichung aufgezeichneten Compiler-Generation. Führen Sie jede ausgegebene .profraw-Datei zu einer einzelnen sparse webship.profdata-Datei zusammen.
Neu erstellen und prüfen
Wenden Sie das zusammengeführte Profil nur auf die genaue Quelle, den Compiler, den Kryptografie-Anbieter, den Funktionssatz und das Ziel an, die es erzeugt haben. Führen Sie Korrektheits- und Leistungstests vor der Freigabe durch.
mkdir -p ./profiles
export LLVM_PROFILE_FILE="$PWD/profiles/webship-%p-%m.profraw"
./webship-pgo-training-1.4.0-<target> --config ./webship.tomlNew-Item -ItemType Directory -Force ./profiles
$env:LLVM_PROFILE_FILE = "$PWD/profiles/webship-%p-%m.profraw"
.\webship-pgo-training-1.4.0-<target>.exe --config .\webship.tomlllvm-profdata merge -sparse ./profiles/*.profraw -o ./webship.profdataBefehlszeilenreferenz
Kleine Oberfläche, expliziter Start.
webship [OPTIONS] | webship update [OPTIONS]
-c, --config PATH- Wählen Sie die TOML-Datei aus. Falls sie nicht existiert, erstellt Webship sie mit einer privaten localhost-TLS-Identität.
--check-config- Überprüfen Sie die vollständige Konfiguration und beenden Sie, ohne Listener zu starten.
--print-effective-config- Drucken Sie die zusammengeführte effektive Konfiguration ohne Geheimnisse.
aktualisieren- Überprüfen Sie das signierte Community-Manifest, wählen Sie dieses exakte Plattformziel aus und installieren Sie eine neuere Version, falls eine vorhanden ist.
--help / --version- Drucken Sie die Befehls-Hilfe oder die installierte Webship-Version.
Häufige Fehlerarten
Beginnen Sie mit der Konfiguration und arbeiten Sie sich dann nach außen vor.
- Führen Sie --check-config aus und korrigieren Sie den zuerst gemeldeten Fehler; unbekannte TOML-Felder werden abgelehnt.
- Bestätigen Sie, dass die konfigurierten TCP- und UDP-Ports verfügbar und von der Firewall erlaubt sind.
- Stellen Sie sicher, dass das Zertifikat und der Schlüssel vorhanden sind, vom Dienstkonto gelesen werden können und ein passendes Paar bilden.
- Für automatisches TLS bestätigen Sie, dass jede konfigurierte Domain auf den Webship Host aufgelöst wird.
- Rufen Sie /health beim lokalen Anwendungslistener auf, bevor Sie Tests über DNS oder einen externen Ladepfad durchführen.
- Aktivieren Sie vorübergehend authentifizierte Beobachtbarkeit, wenn Laufzeitevidenz erforderlich ist.