Langage Francfort, Allemagne
Nodion reconnaît .NET à un fichier de projet, une solution ou un global.json. Le buildpack .NET exécute dotnet publish -c Release avec le SDK ciblé par votre projet et lance l'app publiée avec le runtime ASP.NET Core, sur le port défini par Nodion ; le SDK reste hors de l'image d'exécution. L'app tourne à Francfort, à côté d'une base de données PostgreSQL managée si vous en avez besoin.
*.csproj, *.fsproj, *.sln ou global.jsondotnet <App>.dll sur http://0.0.0.0:$PORT.csproj ou .fsproj du répertoire indiqué dans le champ Base directory, en mode dépendant du framework. Avec plusieurs projets, ou une solution dont les projets sont dans des sous-dossiers, définissez DOTNET_PROJECT sur le chemin du projet web dans l'onglet Environment, en cochant Build ; la racine a quand même besoin d'un .sln ou d'un global.json pour que Nodion détecte .NET. Faire pointer le champ Base directory vers le dossier du projet ne fonctionne que si ce projet ne référence aucun projet situé en dehors, car le build ne voit rien au-dessus de ce dossier. Build variable DOTNET_PROJECT=src/MyApp.Web/MyApp.Web.csproj ASPNETCORE_URLS=http://0.0.0.0:$PORT. Supprimez les URL codées en dur comme app.Run("http://localhost:5000") et les endpoints Kestrel dans appsettings.json, qui ont priorité sur cette variable. Une API sans page sur / a besoin d'un endpoint de health check ; définissez son chemin comme chemin du health check dans les paramètres de l'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": "*", le laisse passer. Avec une liste de vos domaines, ASP.NET Core répond 400 et la release n'est jamais mise en ligne ; gardez *, ou vérifiez les hôtes dans votre propre middleware en excluant le chemin du health check. appsettings.json {
"AllowedHosts": "*"
} postgres:// comme DATABASE_URL : en rattachant la base de données dans l'onglet Environment, injectez donc host, port, database, user et password sous vos propres noms et construisez la chaîne de connexion à partir de ces variables. 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 ne peut donc pas tourner comme étape de release. Appliquez-les au démarrage de l'app avec Database.Migrate(), ce qui convient pour une seule instance, ou passez à un Dockerfile qui construit un bundle de migration EF Core et l'exécute comme commande de release de l'app. Program.cs using (var scope = app.Services.CreateScope())
{
scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
} global.json, sinon du TargetFramework du projet situé dans le répertoire indiqué dans le champ Base directory, sinon c'est .NET 10 ; l'image d'exécution reçoit le runtime ASP.NET Core de la même branche. Un projet dans un sous-dossier n'est pas lu pour cela : une app net8.0 ou net9.0 sélectionnée avec DOTNET_PROJECT a donc besoin d'un global.json avec cette version. Nodion installe le SDK actuel de cette branche, qui peut appartenir à un feature band plus récent, donc définissez-y "rollForward": "latestFeature".ASPNETCORE_ENVIRONMENT : ASP.NET Core tourne donc en Production et lit appsettings.Production.json en plus de appsettings.json. Gardez les secrets dans des variables d'environnement marquées comme secrètes ; ConnectionStrings__Default correspond à ConnectionStrings:Default.DATABASE_URL, REDIS_URL ou CLICKHOUSE_URL. release: du Procfile s'exécute à chaque nouveau build. Les apps Dockerfile, ainsi que les redéploiements ou les rollbacks vers une image antérieure, utilisent une commande de release définie sur l'app elle-même, qui prime aussi sur la ligne du Procfile. Sur les sites statiques, l'étape de release s'exécute dans une image qui ne contient que les fichiers générés par le build. En général, le health check reçoit un 400 à cause d'un AllowedHosts restreint, un 404 sur / dans un projet d'API, ou aucune réponse parce qu'une URL codée en dur ou un endpoint Kestrel fait écouter l'app ailleurs. Gardez AllowedHosts à *, définissez un chemin de health check comme /healthz et laissez ASPNETCORE_URLS décider de l'adresse.
Les apps Blazor Server et le projet serveur d'une Blazor Web App tournent comme des apps ASP.NET Core ; si le dépôt contient plusieurs projets, faites pointer DOTNET_PROJECT vers le projet serveur. Une app Blazor WebAssembly autonome n'a pas de serveur à lancer, donc le buildpack .NET ne peut pas la déployer : hébergez-la dans un projet ASP.NET Core ou utilisez un Dockerfile.
Non. Appliquez-les au démarrage avec Database.Migrate(), ou construisez un bundle de migration EF Core dans un Dockerfile et exécutez-le comme commande de release. L'outil dotnet ef a besoin du SDK, qui n'est pas dans l'image d'exécution du buildpack.
Oui. Un .fsproj est détecté et publié comme un .csproj : les apps web F# sur ASP.NET Core se déploient donc de la même façon.
Dans la région EU Central, à Francfort (Allemagne). Le build, le registry, l'app et ses bases de données, volumes, buckets, logs et métriques restent dans cette région. L'API et le plan de contrôle de Nodion sont hébergés en Allemagne. Nodion GmbH a son siège à Stuttgart.
Nodion en pose les bases : Nodion GmbH a son siège à Stuttgart (Allemagne). Dans la région de Francfort, l'app, ses bases de données et ses volumes fonctionnent en Allemagne. Vous concluez le DPA (accord de traitement des données, art. 28 RGPD) par voie électronique dans le dashboard. La conformité de votre déploiement dépend aussi de la façon dont vous configurez et utilisez l'app.
Une instance d'app coûte à partir de 1 EUR par mois. La configuration présentée dans l'encadré des coûts revient à 3.50 EUR par mois : App 2 EUR, PostgreSQL 1.50 EUR. Les prix sont HT, avec une facturation à la seconde. Vous pouvez choisir des tailles plus grandes ou davantage d'instances dès que vous en avez besoin.
Oui. Chaque app reçoit un nom d'hôte par défaut avec HTTPS. Ajoutez votre propre domaine dans l'onglet Domains de l'app. Le certificat TLS est émis et renouvelé automatiquement.
Jusqu'à 15 € de crédit de bienvenue à l'inscription.
ou par e-mail
Les nouveautés du produit, sans spam. Désabonnez-vous à tout moment.
Inscription confirmée.