@startuml deployment !theme plain skinparam backgroundColor #FFFFFF skinparam defaultFontName Arial skinparam linetype ortho title Docker Deployment Architecture ' External systems actor Developer cloud "Docker Host" as Host package "Development Environment\n(docker-compose.dev.yaml)" #E3F2FD { node "SQL Server\n(mcr.microsoft.com/mssql/server:2022-latest)" as DevDB { database "Biergarten\nDatabase" as DevDBInner { portin "1433" } note right Environment: - ACCEPT_EULA=Y - SA_PASSWORD=*** - MSSQL_PID=Developer Volumes: - biergarten-dev-data end note } node "API Container\n(API.Core)" as DevAPI { component "ASP.NET Core 10" as API1 portin "8080:8080 (HTTP)" as DevPort1 portin "8081:8081 (HTTPS)" as DevPort2 note right Environment: - ASPNETCORE_ENVIRONMENT=Development - DB_SERVER=sql-server - DB_NAME=Biergarten - DB_USER/PASSWORD - JWT_SECRET - SMTP_* (10+ variables) Health Check: /health endpoint end note } node "Migrations\n(run-once)" as DevMig { component "Database.Migrations" as Mig1 note bottom Runs: DbUp migrations Environment: - CLEAR_DATABASE=false Depends on: sql-server end note } node "Seed\n(run-once)" as DevSeed { component "Database.Seed" as Seed1 note bottom Creates: - 100 test users - Location data (US/CA/MX) - test.user account Depends on: migrations end note } } package "Test Environment\n(docker-compose.test.yaml)" #FFF3E0 { node "SQL Server\n(isolated instance)" as TestDB { database "Biergarten\nTest Database" as TestDBInner { portin "1434" } note right Fresh instance each run CLEAR_DATABASE=true Volumes: - biergarten-test-data (ephemeral) end note } node "Migrations\n(test)" as TestMig { component "Database.Migrations" } node "Seed\n(test)" as TestSeed { component "Database.Seed" note bottom Minimal seed: - test.user only - Essential data end note } node "API.Specs\n(Integration Tests)" as Specs { component "Reqnroll + xUnit" as SpecsComp note right Tests: - Registration flow - Login flow - Validation rules - 404 handling Uses: TestApiFactory Mocks: Email services end note } node "unit.tests\n(Features.*.Tests, one container)" as UnitTests { component "xUnit + Moq + DbMocker" as UnitComp note right Builds Dockerfile.tests, which restores/builds against Core.slnx then runs `dotnet test` for every Features/*.Tests project in turn: - Features.Auth.Tests - Features.Breweries.Tests - Features.UserManagement.Tests - Features.Emails.Tests Uses: Moq for handlers, DbMocker for repositories No real database needed end note } } folder "test-results/\n(mounted volume)" as Results { file "api-specs/\n results.trx" as Result1 file "Features.Auth.Tests.trx" as Result2 file "Features.Breweries.Tests.trx" as Result3 file "Features.UserManagement.Tests.trx" as Result4 file "Features.Emails.Tests.trx" as Result5 note bottom TRX format Readable by: - Visual Studio - Azure DevOps - GitHub Actions end note } ' External access Developer --> Host : docker compose up Host --> DevAPI : http://localhost:8080 ' Development dependencies DevMig --> DevDB : 1. Run migrations DevSeed --> DevDB : 2. Seed data DevAPI --> DevDB : 3. Connect & serve DevMig .up.> DevDB : depends_on DevSeed .up.> DevMig : depends_on DevAPI .up.> DevSeed : depends_on ' Test dependencies TestMig --> TestDB : 1. Migrate TestSeed --> TestDB : 2. Seed Specs --> TestDB : 3. Integration test UnitTests ..> TestDB : depends_on for startup\nordering only (Moq/DbMocker,\nno real connection) TestMig .up.> TestDB : depends_on TestSeed .up.> TestMig : depends_on Specs .up.> TestSeed : depends_on UnitTests .up.> TestSeed : depends_on ' Test results export Specs --> Results : Export TRX UnitTests --> Results : Export TRX (one .trx per slice) ' Network notes note bottom of DevDB Dev Network (bridge: biergarten-dev) Internal DNS: - sql-server (resolves to SQL container) - api (resolves to API container) end note note bottom of TestDB Test Network (bridge: biergarten-test) All test components isolated end note ' Startup sequence notes note top of DevMig Startup Order: 1. SQL Server (health check) 2. Migrations (run-once) 3. Seed (run-once) 4. API (long-running) end note note top of Specs Test Execution: All tests run in parallel Results aggregated end note ' Production note note as ProductionNote Production Deployment (not shown): Would include: • Azure SQL Database / AWS RDS • Azure Container Apps / ECS • Azure Key Vault for secrets • Application Insights / CloudWatch • Load balancer • HTTPS termination • CDN for static assets end note @enduml