mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-07-16 09:37:23 +00:00
221 lines
5.0 KiB
Plaintext
221 lines
5.0 KiB
Plaintext
@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
|
|
<b>Dev Network (bridge: biergarten-dev)</b>
|
|
Internal DNS:
|
|
- sql-server (resolves to SQL container)
|
|
- api (resolves to API container)
|
|
end note
|
|
|
|
note bottom of TestDB
|
|
<b>Test Network (bridge: biergarten-test)</b>
|
|
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
|
|
<b>Production Deployment (not shown):</b>
|
|
|
|
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
|