Resumen del producto
Un servidor entre la red y su aplicación.
Webship es un Rust de borde y servidor web estático autohospedado. Un runtime termina protocolos modernos, aplica políticas de borde, sirve archivos y realiza proxy de solicitudes de aplicaciones.
Transporte moderno
Acepta HTTP/1.1, HTTP/2 y HTTP/3, con TLS 1.3 y un endpoint opcional WebTransport.
Entrega estática y a través de proxy
Servir archivos estáticos con validadores y acompañantes precomprimidos, o enrutar el tráfico de la aplicación a través de grupos limitados de upstream.
Valores predeterminados seguros
Comienza con el WAF, controles DDoS, desafío de bots, cabeceras de seguridad de respuesta, API Shield y protección de archivos de puntos habilitada.
Operaciones observables
Utiliza estadísticas autenticadas, métricas de Prometheus, IDs de solicitud, recargas suaves y el plano de control opcional MCP.
Inicio rápido
Desde el binario de lanzamiento hasta un oyente saludable.
Inicia en loopback, valida todo antes de enlazar y verifica la respuesta de salud incorporada antes de agregar tráfico público.
Preparar archivos
Coloque el binario de la versión, su configuración TOML, la raíz estática y cualquier archivo de certificado y clave TLS configurados en el host.
Validar e inspeccionar
Ejecute ambos comandos de configuración. Corrija el primer error e inspeccione el resultado efectivo redactado antes del inicio.
Iniciar de forma privada
Inicie Webship con el archivo TOML seleccionado. Agregue un par completo de certificados o TLS automático cuando el sitio esté listo para tráfico público seguro.
Verifica el tiempo de ejecución
Llama a GET /health localmente. Luego prueba rutas estáticas, TLS, rutas de proxy, reglas de seguridad y monitoreo autenticado.
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/healthGuía de inicio rápido para agentes de IA
Conecta un agente de IA a Webship en cinco líneas.
Conecta Claude Code, OpenAI, DeepSeek o cualquier cliente compatible con MCP a través de un túnel SSH privado. El agente recibe una superficie de operaciones autenticada sin compartir el listener público ni exponer credenciales de control al tráfico de Internet.
{
"mcpServers": {
"webship": { "url": "https://localhost:19443/mcp",
"headers": { "Authorization": "Bearer <token>" } }
} }Entrega estática
Servir un directorio con valores predeterminados conscientes del protocolo.
Establece una raíz de manera global o por sitio. Los sitios TLS por defecto usan HTTP/3 solamente; los sitios en texto claro usan por defecto HTTP/1.1 y H2C. Sobrescribe HTTP/1.1, HTTP/2 y HTTP/3 de manera independiente para cada sitio.
[[sites]]
domain = "app.example.com"
root = "/srv/app"
listen = "0.0.0.0:443"
[sites.protocols]
h1 = true
h2 = true
h3 = trueEl router incorporado soporta GET y HEAD, rangos de bytes, solicitudes condicionales, validadores y archivos auxiliares .br, .zst y .gz. Por defecto se rechazan las rutas de archivos con punto (dot-files); .well-known permanece disponible.
Tráfico de la aplicación
Enrutar solicitudes a uno o más upstreams.
Habilita el proxy inverso, coincide con un host y ruta, y luego define una política final incondicional. Webship admite grupos limitados, comprobaciones de salud, balanceo de carga, disyuntores, reintentos seguros sin cuerpo, WebSockets y almacenamiento en caché.
[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 y HTTP/3
Utilice certificados manuales o deje que Webship los gestione.
Webship acepta TLS 1.3. HTTP/3 se ejecuta sobre el listener UDP correspondiente; activa HTTP/1.1 o HTTP/2 explícitamente cuando un sitio TLS también necesita compatibilidad con 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"Política de borde
Mantén la línea base de seguridad intacta.
Webship activa sus principales capas de protección por defecto. Ajuste los límites para su carga de trabajo y valide después de cada cambio de regla o política de encabezado.
[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'"Usa el modo normal para el tráfico regular, bajo_ataque para un manejo más estricto de ataques activos, y bloqueo cuando solo deberían permanecer disponibles las sondas y las rutas explícitamente permitidas.
Diagnósticos privados
Inspeccione el borde sin exponer el plano de control.
Las estadísticas y métricas de Prometheus se ejecutan en un receptor autenticado separado. La instrumentación debe estar habilitada siempre que cualquiera de los endpoints esté activo.
[observability]
instrumentation = true
stats = true
metrics = true
listen = "127.0.0.1:9090"
token = "replace-with-at-least-32-random-printable-ascii-characters"Operaciones seguras
Recargue deliberadamente. Mantenga cerca la reversión.
Recarga de configuración
Envíe SIGHUP después de editar una configuración respaldada por archivo. Webship valida el reemplazo antes de instalarlo y mantiene la configuración en ejecución cuando la validación falla.
Actualización y reversión
Instale el nuevo binario junto a la versión anterior, valide la configuración de producción con él, luego verifique la salud, TLS, proxy y métricas. Mantenga el binario anterior hasta que todas las pruebas se aprueben.
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 webshipReferencia de línea de comandos
Superficie pequeña, inicio explícito.
webship [OPTIONS] | webship update [OPTIONS]
-c, --config RUTA- Seleccione el archivo TOML. Si no existe, Webship lo crea con una identidad TLS privada de localhost.
--check-config- Valida la configuración completa y finaliza sin iniciar los listeners.
--print-efectivo-config- Imprima la configuración efectiva combinada con los secretos eliminados.
actualizar- Verifique el manifiesto de la comunidad firmado, seleccione este objetivo de plataforma exacto e instale una versión más reciente cuando exista.
--ayuda / --versión- Imprima la ayuda del comando o la versión instalada de Webship.
Modos de falla comunes
Comience con la configuración, luego expándase hacia afuera.
- Ejecute --check-config y corrija el primer error informado; los campos TOML desconocidos son rechazados.
- Confirme que los puertos TCP y UDP configurados estén disponibles y permitidos por el firewall.
- Confirme que el certificado y la clave existen, son legibles por la cuenta de servicio y forman un par coincidente.
- Para TLS automático, confirme que cada dominio configurado se resuelve al host Webship.
- Llame a /health en el oyente de la aplicación local antes de probar a través de DNS o una ruta de carga externa.
- Habilitar la observabilidad autenticada temporalmente cuando se requiera evidencia en tiempo de ejecución.