Levantar el backend localmente
Requisitos
- .NET 9 SDK
- Docker (para el stack completo con SQL Server + MySQL)
Arranque rápido
cd ABA-backend
dotnet restore abaproblem.csproj
dotnet build abaproblem.csproj -c Release # lo mismo que corre CI
dotnet run # carga .env si existe, nunca pisa una env var real
dotnet run por sí solo no levanta SQL Server ni MySQL — para eso hace falta el stack completo:
docker compose up --build
Esto levanta SQL Server, el backend y Nginx en un mismo docker-compose.yml pensado solo para
desarrollo local (nunca es lo que corre en producción — ver
CI/CD y Despliegue).
Variables de entorno
Copiá el archivo de ejemplo y completá los valores reales antes de arrancar:
cp .env.example .env
.env nunca se commitea — está en .gitignore y además hay un hook de pre-commit que escanea el
repo en busca de secretos antes de cada commit.
Scripts SQL: orden estricto
Los scripts de sql/ dependen unos de otros y deben ejecutarse en orden numérico contra la
instancia de SQL Server — correr uno fuera de orden falla porque referencia objetos que el
anterior todavía no creó. El primero define el esquema base; los siguientes agregan Stored
Procedures, triggers de seguridad, y cada módulo funcional (perfil de usuario, API keys, DNS,
sesiones, células socias) en el orden en que se fueron incorporando al proyecto.
Cuenta administrativa de MySQL
El backend se conecta al motor MySQL externo con una cuenta de privilegios mínimos — nunca
SUPER ni permisos globales sobre todas las bases (GRANT ALL PRIVILEGES ON *.*). Los permisos
exactos que necesita (crear/eliminar bases, crear usuarios, y re-otorgar permisos sobre las bases
que crea) están documentados en el README.md del repo del backend.
Verificación de arranque
El backend valida al arrancar que la clave de cifrado configurada coincide con el hash ya registrado en la base de control — si no coincide, el proceso lanza una excepción y no arranca en vez de operar silenciosamente con datos que no puede descifrar correctamente. Ver Cifrado y Claves para el detalle completo.