Skip to main content

Levantar el backend localmente

Requisitos

  • .NET 9 SDK
  • Docker (para el stack completo con SQL Server + MySQL)

Arranque rápido

ABA-backend/
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:

Stack completo local
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.