SimpleWireguard
Panel de administración de un servidor WireGuard para un VPS de un solo operador. SPA (Preact) + API JSON (Hono) servidas por el mismo Bun.serve, empaquetadas como binario único auto-actualizable y desplegadas bajo systemd en Ubuntu 24.04.
Instalación (VPS Ubuntu 24.04, como root)
curl -fsSL https://simple-wireguard.ruesdev.es/install.sh | bash
Después, túnel SSH y primer operador en /setup:
# Usa el puerto que imprime install.sh al terminar (por defecto 9090; si estaba
# ocupado, suma 1000: 10090, 11090, …).
ssh -L 9090:localhost:9090 root@IP_DEL_VPS
# navegador → http://localhost:9090/setup
Arquitectura
Dos binarios, una base de datos como fuente de verdad:
- panel — SPA + API JSON. Sin privilegios. Escucha en
127.0.0.1:9090 - agent — proceso root. Único que toca WireGuard: reconcilia el estado
(acceso por túnel SSH). Escribe el *estado deseado* en PostgreSQL.
deseado de la BD, rinde wg*.conf, aplica con wg syncconf y refleja el estado observado (wg show) de vuelta. No hay HTTP entre panel y agent.
La BD (PostgreSQL del sistema) es la fuente de verdad; wg*.conf es un artefacto renderizado desde ella. Detalle de capas y convenciones en CLAUDE.md.
Desarrollo
bun install
./scripts/db-setup.sh # crea simplewireguard_dev y _test (PostgreSQL del sistema)
psql -d simplewireguard_dev -f schema.sql
cp .env.example .env # ajusta credenciales
bun run dev # panel con HMR en http://127.0.0.1:9090
bun run css # Tailwind en watch
bun test # unit + integración
bun run typecheck # bunx tsc --noEmit
bun run lint # bunx biome check .
"Terminado" = bun test en verde Y bun run typecheck en verde.
Distribución
Repo privado; el binario se compila bajo demanda y se sirve desde un subdominio propio con verificación de checksum/firma. Todo el montaje en docs/distribucion.
Licencia
Privado. © RubenEspadaEs.