Linguaggio Francoforte, Germania
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.
*.csproj, *.fsproj, *.sln o global.jsondotnet <App>.dll su http://0.0.0.0:$PORT.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 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(); "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": "*"
} 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)); 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();
} 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".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.DATABASE_URL, REDIS_URL o CLICKHOUSE_URL. 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. 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.
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.
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.
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.
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.
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.
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.
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.
Fino a 15 € di credito quando ti registri.
oppure con l'email
Novità sul prodotto, niente spam. Puoi annullare l'iscrizione quando vuoi.
Iscrizione completata.