Files
baby-nas/README.md
T

3.2 KiB

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

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

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:

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

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