← Zurück zum Blog
C# Blazor DevOps

Von der Idee zum Deploy: Mein Weg mit DigiFlow

DigiFlow begann als Schulprojekt im Modul 295 und wurde zu einer vollständigen Webanwendung für Projektverwaltung. Der Weg von der ersten Idee bis zum Live-Deployment auf Render hat mir mehr über Software Engineering beigebracht als jedes Tutorial.

Die Ausgangslage

Die Aufgabe im Modul 295 war klar: Eine Backend-Anwendung planen, entwickeln, testen und deployen. Ich wollte über das Minimum hinausgehen und eine Anwendung bauen, die ich selbst benutzen würde.

DigiFlow sollte Teams helfen, ihre digitalen Projekte zu verwalten -- mit Authentifizierung, Datenexport und einer sauberen Benutzeroberfläche.

Tech-Stack Entscheidung

Warum C# mit Blazor? Drei Gründe:

  • Full-Stack mit einer Sprache -- C# für Backend und Frontend, kein Context-Switch
  • Entity Framework -- ORM mit Migrations, spart enorm Zeit bei Datenbankänderungen
  • .NET-Ökosystem -- Dependency Injection, Middleware, Authentication sind built-in

Für die Datenbank habe ich SQLite gewählt -- leichtgewichtig, ideal für Prototyping und einfach auf Render zu deployen.

Architektur

Die Anwendung folgt dem Clean Architecture Pattern:

  • Domain Layer -- Entities und Business Logic
  • Application Layer -- Services, DTOs, Interfaces
  • Infrastructure Layer -- Entity Framework, externe APIs
  • Presentation Layer -- Blazor Server Components

Diese Trennung hat sich bezahlt gemacht, als ich die Datenbank-Migration von SQL Server auf SQLite durchführen musste -- nur der Infrastructure Layer war betroffen.

Features im Detail

Authentifizierung

Ich habe ASP.NET Identity implementiert mit Cookie-basierter Session-Verwaltung. Login, Registrierung und Passwort-Reset -- alles mit den built-in Security-Features von .NET.

Projektverwaltung

CRUD-Operationen für Projekte, Aufgaben und Teammitglieder. Jedes Projekt hat einen Status-Workflow (Entwurf → Aktiv → Abgeschlossen), der mit State Machine Pattern umgesetzt ist.

Datenexport

Export als CSV und PDF. Der PDF-Generator nutzt eine Template-Engine, die dynamisch Tabellen und Charts rendert. Ein Feature, das ich zuerst für unnötig hielt -- bis ich es selbst brauchte.

Deployment auf Render

Das Deployment war die grösste Herausforderung. Render unterstützt .NET-Apps, aber die Konfiguration erfordert einige Tricks:

  • Docker-Container mit Multi-Stage Build für kleine Image-Grösse
  • Environment Variables für Connection Strings und Secrets
  • Health Checks, damit Render weiss, wann die App bereit ist
  • Persistenter Storage für die SQLite-Datenbank

Lessons Learned

  • Migrations planen -- Datenbankänderungen müssen vorwärts- und rückwärtskompatibel sein
  • Error Handling zentralisieren -- Ein globaler Exception Handler spart Hunderte try-catch-Blöcke
  • Deployment von Tag 1 -- Ich hätte von Anfang an auf Render deployen sollen, nicht erst am Ende
  • Logging ist kein Luxus -- Structured Logging mit Serilog hat mir beim Debugging in Production Stunden gespart
DigiFlow ansehen Code auf GitHub