Sprache Frankfurt, Deutschland

.NET and ASP.NET Core auf Nodion deployen

Nodion erkennt .NET an einer Projektdatei, einer Solution oder einer global.json. Das .NET-Buildpack führt dotnet publish -c Release mit dem SDK aus, auf das dein Projekt zielt, und startet die veröffentlichte App auf der ASP.NET-Core-Runtime, gebunden an den Port, den Nodion setzt; das SDK kommt nicht ins Run-Image. Die App läuft in Frankfurt, auf Wunsch neben einer Managed PostgreSQL-Datenbank.

Auf Nodion deployen ›

ab 1 EUR / Monat

Bis zu 15 € Guthaben beim Registrieren

Erkannt an
*.csproj, *.fsproj, *.sln oder global.json
Start
dotnet <App>.dll auf http://0.0.0.0:$PORT
.NET
8, 9, 10 (Standard)
Region
EU Central (Frankfurt)

.NET and ASP.NET Core Schritt für Schritt deployen

  1. Ein Projekt im Root, sonst DOTNET_PROJECT Nodion veröffentlicht die eine .csproj oder .fsproj im Base Directory, Framework-abhängig. Bei mehreren Projekten oder einer Solution mit Projekten in Unterordnern setzt du auf dem Tab Environment DOTNET_PROJECT mit dem Häkchen Build auf den Pfad des Web-Projekts; im Root braucht es dann trotzdem eine .sln oder global.json, damit Nodion .NET erkennt. Das Base Directory auf den Projektordner zu setzen, klappt nur, wenn das Projekt keine Projekte außerhalb davon referenziert, denn der Build sieht nichts oberhalb dieses Ordners. Build variable
    DOTNET_PROJECT=src/MyApp.Web/MyApp.Web.csproj
  2. Die Adresse Nodion überlassen Nodion startet die App mit ASPNETCORE_URLS=http://0.0.0.0:$PORT. Entferne fest eingetragene URLs wie app.Run("http://localhost:5000") und Kestrel-Endpoints in der appsettings.json, denn die haben Vorrang. Eine API ohne Seite unter / braucht einen Health-Endpoint; seinen Pfad trägst du in den App-Einstellungen als Health-Check-Pfad ein. Program.cs
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddHealthChecks();
    
    var app = builder.Build();
    app.MapHealthChecks("/healthz");
    app.MapGet("/", () => "Hello from Nodion");
    
    app.Run();
  3. AllowedHosts für den Health Check offen lassen Der Health Check ruft jede Instanz mit ihrer internen IP als Host auf. Der Template-Standard "AllowedHosts": "*" lässt ihn durch. Eine Liste deiner Domains lässt ASP.NET Core mit 400 antworten, und das Release geht nie live; bleib bei * oder prüf Hosts in einer eigenen Middleware, die den Health-Check-Pfad auslässt. appsettings.json
    {
      "AllowedHosts": "*"
    }
  4. App anlegen und PostgreSQL anhängen Lege eine Application aus deinem Repository in der Region EU Central an, dann eine PostgreSQL-Datenbank in derselben Region. Npgsql arbeitet mit Key-Value-Connection-Strings, nicht mit postgres://-URLs wie DATABASE_URL. Lass dir beim Anhängen auf dem Tab Environment deshalb host, port, database, user und password unter eigenen Namen injizieren und bau daraus den Connection String. Program.cs
    var cs = new Npgsql.NpgsqlConnectionStringBuilder
    {
        Host = builder.Configuration["DB_HOST"],
        Port = int.Parse(builder.Configuration["DB_PORT"] ?? "5432"),
        Database = builder.Configuration["DB_NAME"],
        Username = builder.Configuration["DB_USER"],
        Password = builder.Configuration["DB_PASSWORD"],
    }.ConnectionString;
    builder.Services.AddDbContext<AppDbContext>(o => o.UseNpgsql(cs));
  5. EF-Core-Migrationen anwenden Nodion führt keine EF-Core-Migrationen aus, und im Run-Image steckt kein SDK, dotnet ef kann also nicht als Release-Schritt laufen. Wende sie beim Start der App mit Database.Migrate() an, das passt für eine einzelne Instanz, oder wechsel zu einem Dockerfile, das ein EF-Core-Migration-Bundle baut und es als Release Command der App ausführt. Program.cs
    using (var scope = app.Services.CreateScope())
    {
        scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
    }

Gut zu wissen

  • SDK- und Runtime-VersionDie .NET-Version kommt aus der global.json, sonst aus dem TargetFramework des Projekts im Base Directory, sonst .NET 10, und das Run-Image bekommt die ASP.NET-Core-Runtime derselben Version. Ein Projekt im Unterordner wird dafür nicht gelesen; eine net8.0- oder net9.0-App, die du per DOTNET_PROJECT auswählst, braucht also eine global.json mit dieser Version. Nodion installiert das aktuelle SDK dieser Version, das ein neueres Feature Band sein kann; setz dort deshalb "rollForward": "latestFeature".
  • Production-EinstellungenNodion setzt ASPNETCORE_ENVIRONMENT nicht, ASP.NET Core läuft also als Production und liest appsettings.Production.json zusätzlich zur appsettings.json. Secrets gehören in Environment-Variablen, die als Secret markiert sind; ConnectionStrings__Default wird zu ConnectionStrings:Default.

Was Nodion für dich betreibt

  • Deploys ohne Downtime Push auf deinen Branch und Nodion baut ein neues Release. Der Traffic wechselt erst, wenn die neuen Instanzen ihren Health Check bestehen; ein fehlgeschlagenes Release lässt das laufende stehen. Apps mit lokalem Volume starten stattdessen neu, weil die Disk zu einer Instanz gehört.
  • Datenbanken neben der App Managed PostgreSQL, pgvector, MySQL, Valkey und ClickHouse in derselben Region. Angehängte Datenbanken kommen als DATABASE_URL, REDIS_URL oder CLICKHOUSE_URL in die App.
  • Previews pro Pull Request Schalte Previews ein, und Pull Requests aus deinem Repository bekommen eine eigene App mit eigener URL und frischen, leeren Datenbanken, automatisch oder per Hand angelegt. Forks und Bot-Pull-Requests werden übersprungen.
  • Worker, Cron Jobs und Skalierung Worker laufen als weitere Prozesse derselben App, Jobs planst du auf dem Tab Cron, und jeden Prozess skalierst du auf bis zu 16 Instanzen.
  • Release-Schritt Mit Buildpacks läuft eine release:-Zeile in der Procfile bei jedem neuen Build. Dockerfile-Apps sowie Redeploys und Rollbacks auf ein früheres Image nutzen einen Release Command, der an der App selbst gesetzt ist; er hat auch Vorrang vor der Procfile-Zeile. Bei statischen Sites läuft ein Release-Schritt in einem Image, das nur die gebauten Dateien enthält.
  • Logs und Metriken Build-, Release- und Laufzeit-Logs sowie CPU-, Speicher-, Disk- und Netzwerk-Metriken für jede Instanz im Dashboard.
  • Domains und HTTPS Ein Default-Hostname mit HTTPS ab dem ersten Deploy; deine eigenen Domains bekommen automatisch Zertifikate.

Weiterlesen

.NET and ASP.NET Core auf Nodion: Fragen und Antworten

Warum wird mein ASP.NET-Core-Deploy nie bereit?

Meist bekommt der Health Check eine 400 wegen eingeschränkter AllowedHosts, eine 404 auf / in einem API-Projekt oder gar keine Antwort, weil eine fest eingetragene URL oder ein Kestrel-Endpoint die App woanders lauschen lässt. Lass AllowedHosts auf *, setz einen Health-Check-Pfad wie /healthz und überlass die Adresse ASPNETCORE_URLS.

Kann ich eine Blazor-App deployen?

Blazor-Server-Apps und das Server-Projekt einer Blazor Web App laufen als ASP.NET-Core-Apps; hat das Repository mehrere Projekte, zeigt DOTNET_PROJECT auf das Server-Projekt. Eine eigenständige Blazor-WebAssembly-App hat keinen Server zum Starten, das .NET-Buildpack kann sie also nicht deployen: Hoste sie in einem ASP.NET-Core-Projekt oder nimm ein Dockerfile.

Führt Nodion EF-Core-Migrationen aus?

Nein. Wende sie beim Start mit Database.Migrate() an, oder bau in einem Dockerfile ein EF-Core-Migration-Bundle und führ es als Release Command aus. Das Tool dotnet ef braucht das SDK, und das steckt nicht im Run-Image des Buildpacks.

Funktioniert F#?

Ja. Eine .fsproj wird genauso erkannt und veröffentlicht wie eine .csproj, F#-Web-Apps auf ASP.NET Core deployst du also auf demselben Weg.

Wo läuft meine .NET and ASP.NET Core-App?

In der Region EU Central in Frankfurt. Build, Registry, die App und ihre Datenbanken, Volumes, Buckets, Logs und Metriken bleiben in dieser Region, API und Control Plane von Nodion werden in Deutschland gehostet. Die Nodion GmbH hat ihren Sitz in Stuttgart.

Kann ich .NET and ASP.NET Core DSGVO-konform betreiben?

Nodion schafft die Voraussetzungen dafür: Die Nodion GmbH hat ihren Sitz in Stuttgart, in der Region Frankfurt laufen App, Datenbanken und Volumes in Deutschland, und den Auftragsverarbeitungsvertrag (AVV) nach Art. 28 DSGVO schließt du im Dashboard elektronisch ab. Ob dein Einsatz DSGVO-konform ist, hängt auch davon ab, wie du die App konfigurierst und nutzt.

Was kostet .NET and ASP.NET Core-Hosting auf Nodion?

Eine App-Instanz gibt es ab 1 EUR im Monat. Das Setup im Kostenkasten kostet 3.50 EUR im Monat: App 2 EUR, PostgreSQL 1.50 EUR. Preise sind netto, Abrechnung pro Sekunde, größere Varianten oder mehr Instanzen wählst du jederzeit.

Kann ich eine eigene Domain für meine .NET and ASP.NET Core-App nutzen?

Ja. Jede App bekommt einen Default-Hostnamen mit HTTPS. Deine eigene Domain nimmst du auf dem Tab Domains dazu, das TLS-Zertifikat wird automatisch ausgestellt und erneuert.

Gibt es Support auf Deutsch?

Ja. Nodion ist ein deutsches Unternehmen mit Sitz in Stuttgart, der Support antwortet auf Deutsch und auf Englisch.

Gib deinem Agenten eine Cloud.

Bis zu 15 € Guthaben beim Registrieren.

Weiter mit GitHub

oder per E-Mail

Bleib auf dem Laufenden.

Produktnews, kein Spam. Jederzeit abbestellen.