Docker Deployment ArchitectureDocker Deployment ArchitectureDevelopment Environment(docker-compose.dev.yaml)SQL Server(mcr.microsoft.com/mssql/server:2022-latest)BiergartenDatabaseAPI Container(API.Core)Migrations(run-once)Seed(run-once)Mailpit(axllent/mailpit)Test Environment(docker-compose.test.yaml)SQL Server(isolated instance)BiergartenTest DatabaseMigrations(test)Seed(test)API.Specs(Integration Tests)unit.tests(Features.*.Tests, one container)Production Environment(docker-compose.prod.yaml)SQL Server(mcr.microsoft.com/mssql/server:2022-latest)Migrations(run-once)API Container(API.Core)Database-only Environment(docker-compose.db.yaml)SQL ServerMinimal Environment(docker-compose.min.yaml)SQL ServerMailpittest-results/(mounted volume)Environment:- ACCEPT_EULA=Y- SA_PASSWORD=***- MSSQL_PID=Developer Volumes:- biergarten-dev-data1433ASP.NET Core 108080:8080 (HTTP)8081:8081 (HTTPS)Environment:- ASPNETCORE_ENVIRONMENT=Development- DB_SERVER=sql-server- DB_NAME=Biergarten- DB_USER/PASSWORD- JWT_SECRET- SMTP_* (10+ variables) Health Check:/health endpointDatabase.MigrationsRuns: DbUp migrationsEnvironment:- CLEAR_DATABASE=falseDepends on: sql-serverDatabase.SeedCreates:- 100 test users- Location data (US/CA/MX)- test.user accountDepends on: migrations8025 (Web UI)1025 (SMTP)Local SMTP catcher for dev email testing.Environment:- MP_SMTP_AUTH_ACCEPT_ANY=1- MP_SMTP_AUTH_ALLOW_INSECURE=1Fresh instance each runCLEAR_DATABASE=true Volumes:- biergarten-test-data(ephemeral)1434Database.MigrationsDatabase.SeedMinimal seed:- test.user only- Essential dataReqnroll + xUnitTests:- Registration flow- Login flow- Validation rules- 404 handling Uses: TestApiFactoryMocks: Email servicesxUnit + MoqBuilds Dockerfile.tests, whichrestores/builds against Core.slnxthen runs `dotnet test` for everyFeatures/*.Tests project in turn:- Features.Auth.Tests- Features.Breweries.Tests- Features.UserManagement.Tests- Features.Emails.Tests Uses: Moq to mock each handler'srepository/service dependenciesNo real database neededProd Network (bridge: prodnet)Isolated from dev/test networks.Volumes: sqlserverdata-prod,nuget-cache-prodBiergartenDatabaseEnvironment:- ACCEPT_EULA=Y- SA_PASSWORD=***- MSSQL_PID=Express Volumes:- sqlserverdata-prodNo host port published.Database.MigrationsDepends on: sql-server (healthy)No seed step in production.ASP.NET Core 108080:8080 (HTTP)8081:8081 (HTTPS)Environment:- ASPNETCORE_ENVIRONMENT=Production- DB_SERVER/NAME/USER/PASSWORD- ACCESS/REFRESH/CONFIRMATION_TOKEN_SECRET- WEBSITE_BASE_URL Depends on: sql-server (healthy) -does not wait on migrations/seed.Same devnet volumes/images asdocker-compose.dev.yaml, minusapi.core and mailpit - for workingagainst the database withoutrunning the API.BiergartenDatabaseMigrations(run-once)Seed(run-once)Database + mailpit only, no APIcontainer - for frontend developmentagainst an API.Core process runoutside Docker.BiergartenDatabaseMigrations(run-once)8025 / 1025Seed(run-once)api-specs/results.trxFeatures.Auth.Tests.trxFeatures.Breweries.Tests.trxFeatures.UserManagement.Tests.trxFeatures.Emails.Tests.trxTRX formatReadable by:- Visual Studio- Azure DevOps- GitHub ActionsDeveloperDocker HostDev Network (bridge: biergarten-dev)Internal DNS:- sql-server (resolves to SQL container)- api (resolves to API container)Test Network (bridge: biergarten-test)All test components isolatedStartup Order:1. SQL Server (health check)2. Migrations (run-once)3. Seed (run-once)4. API (long-running)Test Execution:All tests run in parallelResults aggregated1. Run migrationsdepends_on2. Connect & servedepends_on1. Run migrationsdepends_on2. Seed datadepends_on1. Run migrationsdepends_on2. Seed datadepends_ondocker compose uphttp://localhost:80801. Run migrationsdepends_on2. Seed data3. Connect & serve4. SMTP_HOST/PORTdepends_ondepends_on1. Migratedepends_on2. Seed3. Integration testdepends_on for startupordering only (Moq mocks,no real connection)depends_ondepends_ondepends_onExport TRXExport TRX (one .trx per slice)