# 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)
```bash
curl -fsSL https://simple-wireguard.ruesdev.es/install.sh | bash
```
Después, túnel SSH y primer operador en `/setup`:
```bash
# 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`
(acceso por túnel SSH). Escribe el *estado deseado* en PostgreSQL.
- **agent** — proceso root. Único que toca WireGuard: reconcilia el estado
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
```bash
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`](docs/distribucion/README.md).
## Licencia
Privado. © RubenEspadaEs.