Taal Frankfurt, Duitsland

Deploy .NET and ASP.NET Core op Nodion

Nodion herkent .NET aan een projectbestand, een solution of een global.json. Het .NET-buildpack draait dotnet publish -c Release met de SDK waarop je project is gericht en start de gepubliceerde app op de ASP.NET Core-runtime. De app luistert op de poort die Nodion instelt; de SDK blijft buiten de run-image. De app draait in Frankfurt, naast een managed PostgreSQL-database als je die nodig hebt.

Op Nodion deployen ›

vanaf 1 EUR / maand

Tot € 15 welkomsttegoed bij registratie

Herkend aan
*.csproj, *.fsproj, *.sln of global.json
Start
dotnet <App>.dll op http://0.0.0.0:$PORT
.NET
8, 9, 10 (standaard)
Regio
EU Central (Frankfurt)

.NET and ASP.NET Core stap voor stap deployen

  1. Eén project in de root, of DOTNET_PROJECT Nodion publiceert de ene .csproj of .fsproj in de Base directory, framework-dependent. Met meerdere projecten, of een solution waarvan de projecten in submappen staan, stel je op het tabblad Environment DOTNET_PROJECT met de vlag Build in op het pad van het webproject; de root heeft dan nog steeds een .sln of global.json nodig, zodat Nodion .NET herkent. De Base directory op de projectmap zetten werkt alleen als het project naar geen projecten buiten die map verwijst, want de build ziet niets boven die map. Build variable
    DOTNET_PROJECT=src/MyApp.Web/MyApp.Web.csproj
  2. Laat het adres aan Nodion over Nodion start de app met ASPNETCORE_URLS=http://0.0.0.0:$PORT. Verwijder hardgecodeerde URL's zoals app.Run("http://localhost:5000") en Kestrel-endpoints in appsettings.json, want die hebben voorrang. Een API zonder pagina op / heeft een health-endpoint nodig; stel het pad daarvan in de app-instellingen in als pad van de health check. 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. Houd AllowedHosts open voor de health check De health check roept elke instantie aan met het interne IP-adres van die instantie als host. De standaardwaarde uit de template, "AllowedHosts": "*", laat dat adres toe. Met een lijst van je domeinen antwoordt ASP.NET Core met 400 en gaat de release nooit live; houd * aan, of controleer hosts in je eigen middleware die het pad van de health check overslaat. appsettings.json
    {
      "AllowedHosts": "*"
    }
  4. Maak de app aan en koppel PostgreSQL Maak een applicatie aan vanuit je repository in de regio EU Central, en daarna een PostgreSQL-database in dezelfde regio. Npgsql gebruikt connectionstrings in key-value-formaat, geen postgres://-URL's zoals DATABASE_URL, dus injecteer bij het koppelen van de database op het tabblad Environment host, port, database, user en password onder je eigen namen en bouw daarmee de connectionstring. 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. Pas EF Core-migraties toe Nodion draait geen EF Core-migraties, en de run-image bevat geen SDK, dus dotnet ef kan niet als releasestap draaien. Pas ze toe bij het starten van de app met Database.Migrate(), wat prima is voor één instantie, of stap over op een Dockerfile die een migration bundle van EF Core bouwt en die als release command van de app draait. Program.cs
    using (var scope = app.Services.CreateScope())
    {
        scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
    }

Goed om te weten

  • SDK- en runtimeversieDe .NET-versielijn komt uit global.json, anders uit het TargetFramework van het project in de Base directory, anders is het .NET 10, en de run-image krijgt de ASP.NET Core-runtime van dezelfde lijn. Een project in een submap wordt hiervoor niet gelezen, dus een net8.0- of net9.0-app die je met DOTNET_PROJECT kiest, heeft een global.json met die versie nodig. Nodion installeert de actuele SDK van die lijn, die tot een nieuwere feature band kan horen, dus zet daar "rollForward": "latestFeature".
  • Productie-instellingenNodion stelt ASPNETCORE_ENVIRONMENT niet in, dus ASP.NET Core draait als Production en leest appsettings.Production.json bovenop appsettings.json. Bewaar secrets in omgevingsvariabelen die als secret zijn gemarkeerd; ConnectionStrings__Default wordt ConnectionStrings:Default.

Wat Nodion voor je regelt

  • Deploys zonder downtime Push naar je branch en Nodion bouwt een nieuwe release. Het verkeer schakelt over zodra de nieuwe instanties hun health check doorstaan; een mislukte release laat de draaiende versie staan. Apps met een lokaal volume herstarten in plaats daarvan, omdat de schijf bij één instantie hoort.
  • Databases naast de app Managed PostgreSQL, pgvector, MySQL, Valkey en ClickHouse in dezelfde regio. Gekoppelde databases komen binnen als DATABASE_URL, REDIS_URL of CLICKHOUSE_URL.
  • Previews per pull request Zet previews aan en pull requests uit je repository krijgen een eigen app met een eigen URL en nieuwe, lege databases, automatisch of handmatig aangemaakt. Forks en pull requests van bots worden overgeslagen.
  • Workers, cronjobs en schalen Draai workers als extra processen van dezelfde app, plan jobs op het tabblad Cron en schaal elk proces naar maximaal 16 instanties.
  • Releasestap Met buildpacks draait een release:-regel in het Procfile bij elke nieuwe build. Dockerfile-apps, en redeploys of rollbacks naar een eerdere image, gebruiken een releasecommando dat op de app zelf is ingesteld en dat ook voorrang heeft op de Procfile-regel. Bij statische sites draait een releasestap in een image die alleen de gebouwde bestanden bevat.
  • Logs en metrics Build-, release- en runtimelogs plus metrics voor CPU, geheugen, schijf en netwerk van elke instantie in het dashboard.
  • Domeinen en HTTPS Een standaardhostnaam met HTTPS vanaf de eerste deploy; je eigen domeinen krijgen automatisch certificaten.

Verder lezen

.NET and ASP.NET Core op Nodion: vragen en antwoorden

Waarom wordt mijn ASP.NET Core-deployment nooit klaar voor gebruik?

Meestal krijgt de health check een 400 door een beperkte AllowedHosts, een 404 op / in een API-project, of geen antwoord omdat een hardgecodeerde URL of een Kestrel-endpoint de app ergens anders laat luisteren. Houd AllowedHosts op *, stel een pad voor de health check in zoals /healthz en laat ASPNETCORE_URLS het adres bepalen.

Kan ik een Blazor-app deployen?

Blazor Server-apps en het serverproject van een Blazor Web App draaien als ASP.NET Core-apps; laat DOTNET_PROJECT naar het serverproject wijzen als de repository er meerdere heeft. Een standalone Blazor WebAssembly-app heeft geen server om te starten, dus het .NET-buildpack kan hem niet deployen: host hem in een ASP.NET Core-project of gebruik een Dockerfile.

Draait Nodion EF Core-migraties?

Nee. Pas ze toe bij het opstarten met Database.Migrate(), of bouw in een Dockerfile een migration bundle van EF Core en draai die als release command. De tool dotnet ef heeft de SDK nodig, en die zit niet in de run-image van het buildpack.

Werkt F#?

Ja. Een .fsproj wordt net zo herkend en gepubliceerd als een .csproj, dus F#-webapps op ASP.NET Core deploy je op dezelfde manier.

Waar draait mijn .NET and ASP.NET Core-app?

In de regio EU Central in Frankfurt, Duitsland. Build, registry, de app en de bijbehorende databases, volumes, buckets, logs en metrics blijven in die regio, en de API en het control plane van Nodion worden in Duitsland gehost. Nodion GmbH is gevestigd in Stuttgart.

Kan ik .NET and ASP.NET Core gebruiken volgens de AVG (GDPR)?

Nodion biedt hiervoor de basis: Nodion GmbH is gevestigd in Stuttgart (Duitsland). Kies je de regio Frankfurt, dan draaien de app, de databases en de volumes in Duitsland. De verwerkersovereenkomst (DPA, art. 28 AVG) sluit je elektronisch af in het dashboard. Of je configuratie aan de AVG voldoet, hangt ook af van hoe je de app instelt en gebruikt.

Wat kost het om .NET and ASP.NET Core op Nodion te draaien?

Een appinstantie kost vanaf 1 EUR per maand. De configuratie in het kostenoverzicht kost 3.50 EUR per maand: App 2 EUR, PostgreSQL 1.50 EUR. Prijzen zijn excl. btw en worden per seconde gefactureerd, en je kiest grotere formaten of meer instanties wanneer je ze nodig hebt.

Kan ik een eigen domein gebruiken voor mijn .NET and ASP.NET Core-app?

Ja. Elke app krijgt een standaardhostnaam met HTTPS. Voeg je eigen domein toe op het tabblad Domains van de app; het TLS-certificaat wordt automatisch uitgegeven en vernieuwd.

Geef je agent een cloud.

Ontvang tot € 15 welkomsttegoed bij je registratie.

Doorgaan met GitHub

of met e-mail

Blijf op de hoogte.

Productnieuws, geen spam. Je kunt je altijd weer afmelden.