HTTPS automático para tu app con una bandera — sin nginx, sin certbot
El servidor incorporado de Synsema emite y renueva los certificados de Let's Encrypt por su cuenta. Una bandera convierte el archivo que corrés en desarrollo en un sitio HTTPS de producción, con HTTP/2, HSTS y www → apex.
La lista de siempre para poner un servicio chico en producción: instalar nginx, escribir la configuración del sitio, instalar certbot, correrlo una vez, agregar un cron para renovar, recargar nginx después de cada renovación y acordarse de todo esto en el próximo servidor. El servidor de Synsema hace la lista entera solo, porque TLS y ACME son parte del runtime y no de un proxy inverso que ponés adelante.
El mismo archivo, en desarrollo y en producción§
Nada en el programa dice "producción". En desarrollo lo corrés pelado:
synsema serve app.syn # http://127.0.0.1:8080
Y en producción corrés el mismo archivo con banderas:
synsema serve app.syn --port 443 --domain example.com --tls-auto you@example.com
--tls-auto es el interruptor. El servidor pide un certificado a Let's Encrypt, responde el desafío HTTP-01 en el :80, guarda el certificado en ~/.synsema/certs/ y un hilo en segundo plano lo renueva cuando quedan menos de 30 días. El :80 además redirige todo lo demás a HTTPS. Se exige TLS 1.2+, HSTS está prendido y HTTP/2 se negocia por ALPN.
Un certificado para el apex y el www§
Pasale una lista a --domain (o a domain en el archivo) y obtenés un único certificado SAN. Para canonicalizar www al apex, dale a www su propio host virtual cuyo único trabajo sea redirigir:
require serve(443)
serve on 443
tls auto "you@example.com"
domain ["example.com", "www.example.com"]
host "www.example.com"
route "GET /"
give redirect("https://example.com/")
route "GET /*path"
give redirect("https://example.com/" + params.path)
static "/assets" from "./static"
route "GET /"
give render("pages/home.html", {"title": "Home"})
Cada nombre de la lista tiene que resolver al servidor y ser alcanzable en el :80, o el pedido falla ruidosamente al arrancar en vez de quedar funcionando a medias.
Lo que no tuviste que escribir§
Ninguna configuración de nginx, ningún timer de certbot, ningún hook de recarga, ninguna cabecera de proxy que reenviar. El certificado es por host (SNI), así que varios sitios pueden compartir un proceso. Y si igual querés algo adelante, el servidor también habla proxy inverso (proxy to) y transporta SSE y WebSockets a través de él.
Probalo en diez minutos: instalá Synsema, apuntá un dominio a tu servidor y corré el segundo comando de arriba. La página completa de despliegue — systemd, Docker, Kubernetes — está en la documentación.