Files
baby-nas/README.md
T

98 lines
3.2 KiB
Markdown

# nasctl
Sistema NAS monolítico en Go, gestionable vía interfaz web, distribuido como un único binario estático.
## Requisitos
- Go 1.22+
- Linux (para aplicar configuración Samba/NFS en producción)
## Requisitos de build
- Go 1.22+
- Node.js 18+ y npm (solo para compilar el frontend embebido)
## Build
```bash
make build # compila frontend (npm) + binario Go con assets embebidos
```
Binario generado en `bin/nasctl`. Si ya tienes `internal/web/dist` compilado, `make build-go` compila solo el binario.
## Ejecución local
```bash
make run
```
Levanta en `http://localhost:8080`. Credenciales iniciales por defecto `admin` / `admin` (cámbialas con las variables de entorno o tras el primer login).
Para desarrollo del frontend con hot-reload:
```bash
cd web && npm run dev # Vite en :5173, proxya /api a :8080
```
Variables de entorno útiles:
| Variable | Default | Descripción |
|----------|---------|-------------|
| `NASCTL_ADDR` | `:8080` | Dirección HTTP |
| `NASCTL_DB` | `/var/lib/nasctl/nasctl.db` | Ruta SQLite |
| `NASCTL_SMB_CONF` | `/etc/samba/smb.conf` | Destino de `smb.conf` generado |
| `NASCTL_EXPORTS` | `/etc/exports` | Destino de `/etc/exports` generado |
| `NASCTL_EXEC_SYSTEM` | `true` | Ejecutar comandos reales del sistema (reload servicios, `useradd`, `smbpasswd`...) |
| `NASCTL_ALLOWED_ROOTS` | (vacío) | Directorios raíz permitidos para paths de shares/exports, separados por coma |
| `NASCTL_ADMIN_USER` | `admin` | Usuario admin inicial (solo si no existe ninguno) |
| `NASCTL_ADMIN_PASSWORD` | `admin` | Contraseña admin inicial (solo si no existe ninguno) |
En desarrollo, `make run` usa `./.data/` y `NASCTL_EXEC_SYSTEM=false` (no toca el sistema real).
## API
Autenticación (cookie de sesión firmada, httpOnly):
- `POST /api/auth/login``{username, password}` → cookie de sesión
- `POST /api/auth/logout`
- `GET /api/auth/status`
El resto de endpoints requieren sesión válida:
- `GET /api/dirty` — módulos con cambios pendientes
- `POST /api/apply` — aplica configuración pendiente
- `GET /api/apply/log` — historial de aplicaciones
- `GET /api/system/status` — uso de disco y estado de servicios
- `GET/POST/PUT/DELETE /api/samba/shares` — CRUD de shares Samba
- `GET/POST/PUT/DELETE /api/nfs/exports` — CRUD de exports NFS
- `GET/POST/PUT/DELETE /api/users` — CRUD de usuarios del sistema
Todos los cambios marcan el módulo como dirty y NO se aplican al sistema hasta `POST /api/apply`.
## Flujo dirty → apply
1. Los cambios se guardan solo en SQLite.
2. Se marca el módulo correspondiente como dirty.
3. El usuario pulsa "Aplicar cambios" (`POST /api/apply`).
4. El motor regenera archivos de configuración desde templates y recarga servicios.
## Empaquetado
```bash
make package
```
Genera `dist/nasctl_0.1.0_amd64.deb`.
## Estado
Implementado: módulos Samba, NFS y usuarios (con flujo dirty→apply), autenticación web
(bcrypt + cookie de sesión firmada), validación de paths permitidos, dashboard con estado del
sistema y frontend React + Vite + Tailwind embebido en el binario.
## Próximas mejoras posibles
- Gestión de admins web desde la UI (cambio de contraseña)
- Polkit para delegar acciones puntuales sin correr como root
- Métricas e histórico más detallados en el dashboard