Gambaran keseluruhan produk
Satu pelayan antara rangkaian dan aplikasi anda.
Webship ialah Rust tepi dan pelayan web statik yang hos sendiri. Satu runtime menamatkan protokol moden, menerapkan polisi tepi, menyajikan fail, dan memajukan permintaan aplikasi.
Pengangkutan moden
Terima HTTP/1.1, HTTP/2, dan HTTP/3, dengan TLS 1.3 dan titik akhir WebTransport pilihan.
Penghantaran statik dan proksi
Hidangkan fail statik dengan validator dan sidecar yang terkompresi terlebih dahulu, atau proxikan trafik aplikasi melalui kolam huluan yang terbatas.
Tetapan selamat
Mula dengan WAF, kawalan DDoS, cabaran bot, header keselamatan respons, Perisai API, dan perlindungan fail titik diaktifkan.
Operasi yang boleh diperhatikan
Gunakan statistik yang disahkan, metrik Prometheus, ID permintaan, muat semula secara teratur, dan kawalan MCP pilihan.
Mula pantas
Daripada binari pelepasan kepada pendengar yang sihat.
Mula pada loopback, sahkan segala-galanya sebelum mengikat, dan sahkan respons kesihatan terbina sebelum menambahkan lalu lintas awam.
Sediakan fail
Letakkan binari pelepasan, konfigurasi TOMLnya, akar statik, dan mana-mana fail sijil dan kunci TLS yang disediakan pada hos.
Sahkan dan periksa
Jalankan kedua-dua arahan konfigurasi. Betulkan ralat pertama dan periksa hasil berkesan yang disunting sebelum permulaan.
Mulakan secara peribadi
Mulakan Webship dengan fail TOML yang dipilih. Tambah pasangan sijil lengkap atau TLS automatik apabila laman web bersedia untuk trafik awam yang selamat.
Sahkan runtime
Panggil GET /health secara tempatan. Kemudian uji laluan statik, TLS, laluan proksi, peraturan keselamatan, dan pemantauan yang disahkan.
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/healthPanduan Mula Pantas untuk Ejen AI
Sambungkan ejen AI ke Webship dalam lima baris.
Sambungkan Claude Code, OpenAI, DeepSeek, atau mana-mana klien MCP yang serasi melalui terowong SSH peribadi. Ejen menerima permukaan operasi yang disahkan tanpa berkongsi pendengar awam atau mendedahkan kelayakan kawalan kepada trafik internet.
{
"mcpServers": {
"webship": { "url": "https://localhost:19443/mcp",
"headers": { "Authorization": "Bearer <token>" } }
} }Penghantaran statik
Melayani direktori dengan lalai yang menyedari protokol.
Tetapkan root secara global atau per tapak. Tapak TLS lalai kepada HTTP/3 sahaja; tapak teks jelas lalai kepada HTTP/1.1 dan H2C. Gantikan HTTP/1.1, HTTP/2, dan HTTP/3 secara bebas untuk setiap tapak.
[[sites]]
domain = "app.example.com"
root = "/srv/app"
listen = "0.0.0.0:443"
[sites.protocols]
h1 = true
h2 = true
h3 = truePenghala terbina dalam menyokong GET dan HEAD, julat bait, permintaan bersyarat, validator, serta fail sisi .br, .zst, dan .gz. Laluan fail titik ditolak secara lalai; .well-known kekal tersedia.
Lalu lintas aplikasi
Hantar permintaan ke satu atau lebih huluan.
Dayakan pemajuan proksi terbalik, padankan host dan laluan, kemudian tetapkan polisi muktamad tanpa syarat. Webship menyokong kolam terhad, pemeriksaan kesihatan, pengimbangan beban, pemutus litar, cubaan semula selamat tanpa badan, WebSockets, dan penimbunan.
[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 dan HTTP/3
Gunakan sijil manual atau biarkan Webship mengurusnya.
Webship 1.4.0 menerima TLS 1.3 dan membenarkan setiap laman memilih mod sijilnya secara bebas. HTTP/3 menggunakan pendengar UDP yang sepadan; aktifkan HTTP/1.1 atau HTTP/2 apabila laman TLS yang sama juga memerlukan keserasian TCP.
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 certificateSeni bina sijil Webship 1.4.0
Pilih kepercayaan sijil dan skala secara bebas untuk setiap laman.
Webship 1.4.0 memindahkan certificate_mode ke setiap entri [[sites]]. ACME awam setiap laman, serpihan armada DNS-01 awam, CA peribadi terbina dalam, sijil dikongsi warisan, dan fail sijil manual boleh wujud bersama dalam satu proses bersendirian.
setiap_laman — sijil awam
Lalai. Pesan satu sijil ACME awam yang dipercayai pelayar untuk nama tepat laman dengan TLS-ALPN-01.
armada — kepingan DNS-01 awam
Gunakan penerbitan DNS-01 awam untuk banyak nama peringkat ketiga dan keempat di bawah domain berdaftar yang jelas. Nama kekal dalam kepingan sijil berkumpulan yang stabil.
terbenam — CA peribadi
Keluarkan sijil berasingan dalam proses dari CA peribadi Webship. Tiada akaun ACME awam, cabaran DNS, integrasi pendaftar, atau port masuk 443 diperlukan.
bersama — multi-SAN warisan
Kekalkan kumpulan multi-SAN awam warisan untuk pengedaran yang memerlukannya. Ini bukan lalai dan tetap tertakluk kepada had pengecam CA awam.
[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"Polisi tepi
Kekalkan garis asas keselamatan.
Webship mengaktifkan lapisan perlindungan utamanya secara lalai. Laraskan had untuk beban kerja anda dan sahkan selepas setiap perubahan peraturan atau polisi tajuk.
[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'"Gunakan mod normal untuk trafik biasa, under_attack untuk pengendalian serangan aktif yang lebih ketat, dan lockdown apabila hanya probe dan laluan yang dibenarkan secara eksplisit yang harus tersedia.
Diagnostik peribadi
Periksa tepi tanpa mendedahkan pesawat kawalan.
Statistik dan metrik Prometheus dijalankan pada pendengar yang diautentikasi secara berasingan. Instrumentasi mesti diaktifkan setiap kali salah satu titik akhir aktif.
[observability]
instrumentation = true
stats = true
metrics = true
listen = "127.0.0.1:9090"
token = "replace-with-at-least-32-random-printable-ascii-characters"Operasi selamat
Muat semula dengan sengaja. Kekalkan kembali dengan dekat.
Muat semula konfigurasi
Hantar SIGHUP selepas mengedit konfigurasi berpandukan fail. Webship mengesahkan penggantian sebelum memasangnya dan mengekalkan konfigurasi yang sedang berjalan apabila pengesahan gagal.
Kemas kini dan kembalikan
Pasang binari baru di sebelah versi sebelumnya, sahkan konfigurasi pengeluaran dengannya, kemudian periksa kesihatan, TLS, proksi, dan metrik. Simpan binari sebelumnya sehingga setiap pintu lulus.
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 webshipPengoptimuman berpandukan profil
Kumpul profil sasaran-asli tanpa mengelirukan latihan dan pengeluaran.
Setiap Webship 1.4.0 sasaran mempunyai CLI yang bersenjatakan berasingan untuk mengumpul data profil LLVM asli sasaran di bawah trafik wakil anda. Gunakan versi dan triple sasaran yang tepat, gunakan laluan dan protokol yang penting, dan hentikan proses dengan cara yang betul supaya ia boleh mengosongkan setiap fail .profraw.
Pilih sasaran yang tepat
Muat turun CLI latihan PGO yang versi rilisan dan Rust target triplennya sepadan dengan tepat dengan runtime yang anda ingin optimalkan. Sahkan SHA-256 yang diterbitkan terlebih dahulu.
Tangkap trafik perwakilan
Tetapkan LLVM_PROFILE_FILE ke direktori yang boleh ditulis, mulakan CLI latihan dengan salinan konfigurasi sebenar yang disahkan, ulang semula trafik wakil langsung dan proksi terbalik, kemudian hentikan Webship dengan cara yang teratur.
Gabungkan profil mentah
Gunakan llvm-profdata dari generasi penyusun yang direkodkan untuk rilis. Gabungkan setiap fail .profraw yang dikeluarkan menjadi satu fail webship.profdata yang jarang.
Bina semula dan periksa
Terapkan profil yang digabungkan hanya pada sumber, penyusun, penyedia kripto, set ciri, dan sasaran yang tepat yang menghasilkannya. Jalankan pintu kebenaran dan prestasi sebelum promosi.
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.profdataRujukan baris arahan
Permukaan kecil, permulaan yang jelas.
webship [OPTIONS] | webship update [OPTIONS]
-c, --config PATH- Pilih fail TOML. Jika ia tidak wujud, Webship akan menciptanya dengan identiti TLS localhost peribadi.
--check-config- Sahkan konfigurasi lengkap dan keluar tanpa memulakan pendengar.
--print-effective-config- Cetak konfigurasi berkesan gabungan dengan rahsia dibuang.
kemaskini- Sahkan manifest komuniti yang ditandatangani, pilih sasaran platform yang tepat, dan pasang versi yang lebih baru apabila ada.
--help / --version- Cetak arahan bantuan atau versi Webship yang dipasang.
Mod kegagalan biasa
Mula dengan konfigurasi, kemudian bergerak ke luar.
- Jalankan --check-config dan betulkan ralat pertama yang dilaporkan; medan TOML yang tidak dikenali ditolak.
- Sahkan porta TCP dan UDP yang dikonfigurasi adalah tersedia dan dibenarkan oleh firewall.
- Sahkan sijil dan kunci wujud, boleh dibaca oleh akaun perkhidmatan, dan membentuk pasangan yang sepadan.
- Untuk TLS automatik, sahkan setiap domain yang dikonfigurasikan menyelesaikan kepada hos Webship.
- Panggil /health pada pendengar aplikasi tempatan sebelum menguji melalui DNS atau laluan beban luaran.
- Dayakan keterlihatan yang diautentikasi secara sementara apabila bukti masa nyata diperlukan.