Linguaggio Francoforte, Germania

Fai il deploy di .NET and ASP.NET Core su Nodion

Nodion riconosce .NET da un file di progetto, una solution o un global.json. Il buildpack .NET esegue dotnet publish -c Release con l'SDK previsto dal tuo progetto e avvia l'app pubblicata sul runtime ASP.NET Core, in ascolto sulla porta impostata da Nodion; l'SDK resta fuori dall'immagine di runtime. L'app gira a Francoforte, accanto a un database PostgreSQL gestito, se ti serve.

Fai il deploy su Nodion ›

da 1 EUR / mese

Fino a 15 € di credito di benvenuto alla registrazione

Riconosciuto da
*.csproj, *.fsproj, *.sln o global.json
Avvio
dotnet <App>.dll su http://0.0.0.0:$PORT
.NET
8, 9, 10 (predefinita)
Regione
EU Central (Francoforte)

Deploy di .NET and ASP.NET Core passo dopo passo

  1. Un progetto nella root, oppure DOTNET_PROJECT Nodion pubblica l'unico .csproj o .fsproj nella base directory, in modalità framework-dependent. Con più progetti, o con una solution i cui progetti stanno in sottocartelle, imposta DOTNET_PROJECT sul percorso del progetto web con il flag Build nella scheda Environment; nella root serve comunque un .sln o un global.json, perché Nodion riconosca .NET. Far puntare la base directory alla cartella del progetto funziona solo se il progetto non fa riferimento a progetti esterni a quella cartella, perché la build non vede nulla al di sopra di essa. Build variable
    DOTNET_PROJECT=src/MyApp.Web/MyApp.Web.csproj
  2. Lascia l'indirizzo a Nodion Nodion avvia l'app con ASPNETCORE_URLS=http://0.0.0.0:$PORT. Rimuovi gli URL scritti nel codice, come app.Run("http://localhost:5000"), e gli endpoint Kestrel in appsettings.json, che hanno la precedenza. Un'API senza una pagina su / ha bisogno di un endpoint per l'health check; imposta il suo percorso come percorso dell'health check nelle impostazioni dell'app. 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. Lascia AllowedHosts aperto per l'health check L'health check chiama ogni istanza usando il suo IP interno come host. Il valore predefinito del template, "AllowedHosts": "*", lo lascia passare. Con un elenco dei tuoi domini ASP.NET Core risponde 400 e la release non va mai online; mantieni *, oppure controlla gli host in un tuo middleware che salti il percorso dell'health check. appsettings.json
    {
      "AllowedHosts": "*"
    }
  4. Crea l'app e collega PostgreSQL Crea un'applicazione dal tuo repository nella regione EU Central, poi un database PostgreSQL nella stessa regione. Npgsql usa stringhe di connessione chiave-valore, non URL postgres:// come DATABASE_URL: quando colleghi il database nella scheda Environment, fai inserire automaticamente host, port, database, user e password con nomi tuoi e costruisci da questi la stringa di connessione. 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. Applica le migrazioni EF Core Nodion non esegue le migrazioni EF Core e l'immagine di runtime non contiene l'SDK, quindi dotnet ef non può girare come fase di release. Applicale all'avvio dell'app con Database.Migrate(), che va bene per una singola istanza, oppure passa a un Dockerfile che crea un migration bundle di EF Core e lo esegue come comando di release dell'app. Program.cs
    using (var scope = app.Services.CreateScope())
    {
        scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
    }

Da sapere

  • Versione dell'SDK e del runtimeLa versione di .NET arriva da global.json, altrimenti dal TargetFramework del progetto nella base directory, altrimenti è .NET 10, e l'immagine di runtime riceve il runtime ASP.NET Core della stessa versione. Nodion non legge i progetti nelle sottocartelle per scegliere la versione, quindi un'app net8.0 o net9.0 selezionata con DOTNET_PROJECT ha bisogno di un global.json con quella versione. Nodion installa l'SDK attuale di quella versione, che può appartenere a un feature band più recente, quindi lì imposta "rollForward": "latestFeature".
  • Impostazioni di produzioneNodion non imposta ASPNETCORE_ENVIRONMENT, quindi ASP.NET Core usa l'ambiente Production e legge appsettings.Production.json in aggiunta a appsettings.json. Tieni i segreti in variabili d'ambiente contrassegnate come segrete; ConnectionStrings__Default corrisponde a ConnectionStrings:Default.

Cosa gestisce Nodion per te

  • Deploy senza downtime Fai push sul tuo branch e Nodion crea una nuova release. Il traffico passa alle nuove istanze solo quando superano l'health check; una release fallita lascia attiva quella in esecuzione. Le app con un volume locale invece si riavviano, perché il disco appartiene a una sola istanza.
  • Database accanto all'app PostgreSQL, pgvector, MySQL, Valkey e ClickHouse gestiti, nella stessa regione. I database collegati arrivano come DATABASE_URL, REDIS_URL o CLICKHOUSE_URL.
  • Anteprime per ogni pull request Attiva le anteprime: ogni pull request del tuo repository riceve un'app dedicata, con un proprio URL e database nuovi e vuoti, creata automaticamente o manualmente. Le pull request dai fork e quelle dei bot vengono ignorate.
  • Worker, cron job e scalabilità Esegui i worker come processi aggiuntivi della stessa app, pianifica i job nella scheda Cron e scala ogni processo fino a 16 istanze.
  • Fase di release Con i buildpack, la riga release: del Procfile viene eseguita a ogni nuova build. Le app con Dockerfile, così come i redeploy e i rollback a un'immagine precedente, usano un comando di release impostato sull'app stessa, che ha anche la precedenza sulla riga del Procfile. Nei siti statici, la fase di release gira in un'immagine che contiene solo i file generati dalla build.
  • Log e metriche Nella dashboard trovi log di build, release e runtime, oltre alle metriche di CPU, memoria, disco e rete per ogni istanza.
  • Domini e HTTPS Un hostname predefinito con HTTPS dal primo deploy; i tuoi domini ricevono i certificati in automatico.

Per approfondire

.NET and ASP.NET Core su Nodion: domande e risposte

Perché il deploy della mia app ASP.NET Core non diventa mai pronto?

Di solito l'health check riceve un 400 per via di un AllowedHosts ristretto, un 404 su / in un progetto API, oppure nessuna risposta perché un URL scritto nel codice o un endpoint Kestrel fa ascoltare l'app altrove. Lascia AllowedHosts su *, imposta un percorso dell'health check come /healthz e lascia che sia ASPNETCORE_URLS a decidere l'indirizzo.

Posso fare il deploy di un'app Blazor?

Le app Blazor Server e il progetto server di una Blazor Web App girano come app ASP.NET Core; se il repository contiene più progetti, fai puntare DOTNET_PROJECT al progetto server. Un'app Blazor WebAssembly standalone non ha un server da avviare, quindi il buildpack .NET non può farne il deploy: ospitala in un progetto ASP.NET Core oppure usa un Dockerfile.

Nodion esegue le migrazioni EF Core?

No. Applicale all'avvio con Database.Migrate(), oppure crea un migration bundle di EF Core in un Dockerfile ed eseguilo come comando di release. Lo strumento dotnet ef richiede l'SDK, che non è presente nell'immagine di runtime del buildpack.

F# funziona?

Sì. Un .fsproj viene riconosciuto e pubblicato come un .csproj, quindi il deploy delle web app F# su ASP.NET Core funziona allo stesso modo.

Dove gira la mia app .NET and ASP.NET Core?

Nella regione EU Central a Francoforte, in Germania. La build, il registry, l'app e i suoi database, volumi, bucket, log e metriche restano in quella regione. L'API e il control plane di Nodion sono ospitati in Germania. Nodion GmbH ha sede a Stoccarda.

Posso usare .NET and ASP.NET Core in modo conforme al GDPR?

Nodion offre le basi per farlo: Nodion GmbH ha sede a Stoccarda, in Germania; nella regione di Francoforte l'app, i suoi database e i volumi girano in Germania; puoi sottoscrivere il DPA (accordo sul trattamento dei dati, art. 28 GDPR) in formato elettronico nella dashboard. La conformità del tuo utilizzo dipende anche da come configuri e usi l'app.

Quanto costa l'hosting di .NET and ASP.NET Core su Nodion?

Un'istanza dell'app costa da 1 EUR al mese. La configurazione mostrata nel riquadro costa 3.50 EUR al mese: App 2 EUR, PostgreSQL 1.50 EUR. I prezzi sono IVA esclusa e la fatturazione è al secondo. Puoi scegliere dimensioni più grandi o più istanze quando ti servono.

Posso usare un mio dominio per la mia app .NET and ASP.NET Core?

Sì. Ogni app riceve un hostname predefinito con HTTPS. Aggiungi il tuo dominio nella scheda Domains dell'app; il certificato TLS viene emesso e rinnovato automaticamente.

Dai al tuo agente un cloud tutto suo.

Fino a 15 € di credito quando ti registri.

Continua con GitHub

oppure con l'email

Resta aggiornato.

Novità sul prodotto, niente spam. Puoi annullare l'iscrizione quando vuoi.