academia/docs/entregables/03-configuracion/DV-005-variables-entorno.md

3.0 KiB

DV-005: Variables de Entorno

Proyecto: Sistema de Registro de Estudiantes Fecha: 2026-01-07


1. Backend (.NET 10)

appsettings.json (Base)

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning",
      "HotChocolate": "Warning"
    }
  },
  "AllowedHosts": "*",
  "GraphQL": {
    "MaxExecutionDepth": 5,
    "MaxComplexity": 100
  }
}

appsettings.Development.json

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=localhost;Database=StudentEnrollment;User Id=sa;Password=Asde71.4Asde71.4;TrustServerCertificate=True"
  },
  "GraphQL": {
    "EnableIntrospection": true
  }
}

appsettings.Production.json.example

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=PROD_SERVER;Database=StudentEnrollment;User Id=app_user;Password=CHANGE_ME;Encrypt=True"
  },
  "GraphQL": {
    "EnableIntrospection": false
  }
}

2. User Secrets (Desarrollo Local)

# Inicializar secrets
cd src/backend/Host
dotnet user-secrets init

# Guardar connection string
dotnet user-secrets set "ConnectionStrings:DefaultConnection" \
  "Server=localhost;Database=StudentEnrollment;User Id=sa;Password=Asde71.4Asde71.4;TrustServerCertificate=True"

# Listar secrets
dotnet user-secrets list

# Remover
dotnet user-secrets remove "ConnectionStrings:DefaultConnection"

3. Frontend (Angular 21)

environment.ts (Desarrollo)

export const environment = {
  production: false,
  graphqlUrl: 'https://localhost:5001/graphql',
  apiTimeout: 30000,
};

environment.prod.ts (Producción)

export const environment = {
  production: true,
  graphqlUrl: '/graphql',
  apiTimeout: 15000,
};

4. Docker (.env)

.env.example

# Database
DB_PASSWORD=Asde71.4Asde71.4
DB_NAME=StudentEnrollment

# API
ASPNETCORE_ENVIRONMENT=Development
ASPNETCORE_URLS=http://+:5000

# Frontend
FRONTEND_URL=http://localhost:4200

docker-compose.yml (usando .env)

services:
  sqlserver:
    environment:
      - SA_PASSWORD=${DB_PASSWORD}

  api:
    environment:
      - ASPNETCORE_ENVIRONMENT=${ASPNETCORE_ENVIRONMENT}
      - ConnectionStrings__DefaultConnection=Server=sqlserver;Database=${DB_NAME};User Id=sa;Password=${DB_PASSWORD};TrustServerCertificate=True

5. Variables por Ambiente

Variable Desarrollo Producción
ConnectionString localhost Servidor prod
EnableIntrospection true false
LogLevel Debug Warning
CORS Origins localhost:4200 dominio.com
MaxExecutionDepth 10 5

6. Cargar Configuración

// Program.cs
var builder = WebApplication.CreateBuilder(args);

// Orden de carga (último gana):
// 1. appsettings.json
// 2. appsettings.{Environment}.json
// 3. User Secrets (solo Development)
// 4. Variables de entorno
// 5. Command line args

var connectionString = builder.Configuration
    .GetConnectionString("DefaultConnection");