Genbrugelig .NET 10 + Aspire skabelon til MAGS-projekter med:
- Blazor Web App (Interactive Auto — Server + WebAssembly)
- Web API med EF Core og PostgreSQL
- xUnit-tests (unit + integration)
- Aspire AppHost til lokal udvikling
- Docker Compose til Dokploy (Traefik-mønster som UptimeDaddy)
MAGS-Stack/
├── src/
│ ├── MAGS.Stack.AppHost/ # Aspire orchestrator
│ ├── MAGS.Stack.ServiceDefaults/
│ ├── MAGS.Stack.Api/ # Web API + PostgreSQL
│ ├── MAGS.Stack.Web/ # Blazor host
│ └── MAGS.Stack.Web.Client/ # Blazor WASM (Interactive Auto)
├── tests/
│ └── MAGS.Stack.Tests/
├── docker-compose.yml # Dokploy / prod
├── docker-compose.local.yml # Lokale host-porte
└── .env.example
- .NET 10 SDK
- Aspire CLI:
dotnet tool install -g aspire.cli - Docker (til Compose-deploy)
# Fra repo-roden
aspire runStarter PostgreSQL, API og Blazor-web med Aspire Dashboard og service discovery. API-kald fra web bruger https+http://api automatisk.
Alternativt fra AppHost-projektet:
dotnet run --project src/MAGS.Stack.AppHostcp .env.example .env
docker compose -f docker-compose.yml -f docker-compose.local.yml up --build| Service | URL |
|---|---|
| Web | http://localhost:5173 |
| API | http://localhost:8080 |
| Postgres | localhost:35432 |
Routing-kæde (som UptimeDaddy):
- Cloudflare wildcard
*.mercantec.tech→ tunnel - Tunnel ingress →
http://localhost:80 - Traefik (Dokploy) →
Host(<domæne>)→ container
cp .env.example .env
# Udfyld POSTGRES_PASSWORD, FRONTEND_DOMAIN, API_DOMAIN, CORS_ALLOWED_ORIGINS
docker compose up -d --buildKræver at dokploy-network findes på hosten. Kun magsstack-web og magsstack-api eksponeres via Traefik; Postgres er kun på det interne netværk.
dotnet test MAGS.Stack.slnGitHub Actions kører ved push/PR til main:
| Job | Indhold |
|---|---|
build-and-test |
dotnet restore, build (Release), test |
docker-compose-validate |
Validerer docker-compose.yml + docker-compose.local.yml |
Workflow: .github/workflows/ci.yml. Dependabot holder NuGet- og Actions-afhængigheder opdateret.
- Fork eller kopiér dette repo
- Omdøb
MAGS.Stack→MitProjekti solution, projektmapper og namespaces - Opdater domæner i
.env(FRONTEND_DOMAIN,API_DOMAIN) - Tilpas demo-entities og controllers i API
| Variabel | Beskrivelse |
|---|---|
POSTGRES_PASSWORD |
DB-kodeord (kun ved første volume-oprettelse) |
FRONTEND_DOMAIN |
Traefik Host for Blazor |
API_DOMAIN |
Traefik Host for API |
CORS_ALLOWED_ORIGINS |
Kommasepareret liste af tilladte Origins |
API_INTERNAL_URL |
Intern API-URL for web-containeren (http://magsstack-api:8080) |
Se .env.example for detaljer og advarsler om PostgreSQL-volume.
- Aspire (
aspire run) — lokal inner-loop med dashboard og automatisk Postgres - Håndskrevet Compose — prod/Dokploy med Traefik-labels og
dokploy-network(UptimeDaddy-mønster)
aspire publish bruges ikke til prod i denne skabelon; Compose vedligeholdes manuelt.
| Sti | Formål |
|---|---|
.ai/ |
Arkitektur- og udviklingsguide til AI-assistenter |
.cursor/rules/mags-stack.mdc |
Cursor-projektregel (alwaysApply) — hvordan man udvikler på stacken |