Język Frankfurt nad Menem, Niemcy

Wdróż .NET and ASP.NET Core na Nodion

Nodion rozpoznaje .NET po pliku projektu, pliku solution albo global.json. Buildpack .NET uruchamia dotnet publish -c Release z SDK wymaganym przez Twój projekt i startuje opublikowaną aplikację na runtime ASP.NET Core, nasłuchującą na porcie ustawionym przez Nodion; SDK nie trafia do obrazu uruchomieniowego (run image). Aplikacja działa we Frankfurcie nad Menem, obok zarządzanej bazy danych PostgreSQL, jeśli jej potrzebujesz.

Wdróż na Nodion ›

od 1 EUR / mies.

Do 15 € środków na start przy rejestracji

Wykrywane po
*.csproj, *.fsproj, *.sln lub global.json
Start
dotnet <App>.dll na http://0.0.0.0:$PORT
.NET
8, 9, 10 (domyślnie)
Region
EU Central (Frankfurt)

Wdróż .NET and ASP.NET Core krok po kroku

  1. Jeden projekt w katalogu głównym albo DOTNET_PROJECT Nodion publikuje jedyny plik .csproj lub .fsproj w katalogu Base directory, w trybie framework-dependent. Przy kilku projektach albo solution z projektami w podkatalogach ustaw w zakładce Environment DOTNET_PROJECT na ścieżkę projektu webowego, z zaznaczoną opcją Build; katalog główny nadal potrzebuje pliku .sln lub global.json, aby Nodion wykrył .NET. Ustawienie Base directory na katalog projektu działa tylko wtedy, gdy projekt nie odwołuje się do projektów spoza tego katalogu, bo build nie widzi niczego powyżej niego. Build variable
    DOTNET_PROJECT=src/MyApp.Web/MyApp.Web.csproj
  2. Pozwól Nodion ustawić adres Nodion uruchamia aplikację z ASPNETCORE_URLS=http://0.0.0.0:$PORT. Usuń zakodowane na sztywno adresy URL, takie jak app.Run("http://localhost:5000"), oraz endpointy Kestrel w appsettings.json, bo mają pierwszeństwo przed tą zmienną. API bez strony pod / potrzebuje endpointu do health checku; ustaw jego ścieżkę jako ścieżkę health checku w ustawieniach aplikacji. 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. Zostaw AllowedHosts otwarte dla health checku Health check wywołuje każdą instancję z jej wewnętrznym adresem IP jako hostem. Domyślna wartość z szablonu, "AllowedHosts": "*", przepuszcza taki adres. Przy liście Twoich domen ASP.NET Core odpowiada 400, a release nigdy nie przejmuje ruchu; zostaw * albo sprawdzaj hosty we własnym middleware, które pomija ścieżkę health checku. appsettings.json
    {
      "AllowedHosts": "*"
    }
  4. Utwórz aplikację i podłącz PostgreSQL Utwórz aplikację ze swojego repozytorium w regionie EU Central, a następnie bazę danych PostgreSQL w tym samym regionie. Npgsql używa ciągów połączenia (connection string) w formacie par klucz-wartość, a nie URL-i postgres:// takich jak DATABASE_URL, więc podłączając bazę danych w zakładce Environment, przekaż host, port, nazwę bazy danych, użytkownika i hasło jako zmienne o własnych nazwach i zbuduj z nich ciąg połączenia. 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. Zastosuj migracje EF Core Nodion nie uruchamia migracji EF Core, a obraz uruchomieniowy nie zawiera SDK, więc dotnet ef nie może działać jako krok release. Zastosuj je przy starcie aplikacji przez Database.Migrate(), co sprawdza się przy jednej instancji, albo przejdź na Dockerfile, który buduje migration bundle EF Core i uruchamia go jako polecenie release aplikacji. Program.cs
    using (var scope = app.Services.CreateScope())
    {
        scope.ServiceProvider.GetRequiredService<AppDbContext>().Database.Migrate();
    }

Warto wiedzieć

  • Wersja SDK i runtimeWersja .NET jest ustalana na podstawie global.json, a jeśli go nie ma, na podstawie TargetFramework projektu w katalogu Base directory, a jeśli i tego nie ma, używany jest .NET 10; obraz uruchomieniowy dostaje runtime ASP.NET Core z tej samej linii. Projekt w podkatalogu nie jest do tego odczytywany, więc aplikacja net8.0 lub net9.0 wybrana przez DOTNET_PROJECT potrzebuje global.json z tą wersją. Nodion instaluje aktualne SDK tej linii, które może należeć do nowszego feature bandu, więc ustaw tam "rollForward": "latestFeature".
  • Ustawienia produkcyjneNodion nie ustawia ASPNETCORE_ENVIRONMENT, więc ASP.NET Core działa jako Production i odczytuje appsettings.Production.json oprócz appsettings.json. Sekrety trzymaj w zmiennych środowiskowych oznaczonych jako sekret; ConnectionStrings__Default odpowiada ConnectionStrings:Default.

Czym Nodion zajmuje się za Ciebie

  • Wdrożenia bez przestojów Wypchnij zmiany do swojej gałęzi, a Nodion zbuduje nowy release. Ruch przełącza się, gdy nowe instancje przejdą health check; nieudany release nie wpływa na działającą wersję. Aplikacje z lokalnym wolumenem są natomiast uruchamiane ponownie, bo dysk należy do jednej instancji.
  • Bazy danych obok aplikacji Zarządzane PostgreSQL, pgvector, MySQL, Valkey i ClickHouse w tym samym regionie. Podłączone bazy danych trafiają do aplikacji jako DATABASE_URL, REDIS_URL lub CLICKHOUSE_URL.
  • Środowiska podglądu dla pull requestów Włącz środowiska podglądu, a każdy pull request z Twojego repozytorium dostanie własną aplikację z własnym adresem URL i nowymi, pustymi bazami danych, tworzoną automatycznie lub ręcznie. Forki i pull requesty od botów są pomijane.
  • Workery, zadania cron i skalowanie Uruchamiaj workery jako dodatkowe procesy tej samej aplikacji, planuj zadania w zakładce Cron i skaluj każdy proces do 16 instancji.
  • Etap release W przypadku buildpacków linia release: w Procfile uruchamia się przy każdym nowym buildzie. Aplikacje z Dockerfile, a także ponowne wdrożenia i rollbacki do wcześniejszego obrazu, korzystają z polecenia release ustawionego w samej aplikacji, które ma też pierwszeństwo przed linią z Procfile. W przypadku stron statycznych krok release działa w obrazie zawierającym tylko zbudowane pliki.
  • Logi i metryki W dashboardzie znajdziesz logi z builda, release'u i działania aplikacji oraz metryki CPU, pamięci, dysku i sieci dla każdej instancji.
  • Domeny i HTTPS Domyślna nazwa hosta z HTTPS od pierwszego wdrożenia; Twoje własne domeny automatycznie dostają certyfikaty.

Warto przeczytać

.NET and ASP.NET Core na Nodion: pytania i odpowiedzi

Dlaczego moje wdrożenie ASP.NET Core nigdy nie staje się gotowe?

Zwykle health check dostaje 400 przez ograniczone AllowedHosts, 404 na / w projekcie API albo nie dostaje odpowiedzi, bo zakodowany na sztywno URL lub endpoint Kestrel sprawia, że aplikacja nasłuchuje gdzie indziej. Zostaw AllowedHosts na *, ustaw ścieżkę health checku, na przykład /healthz, i pozwól, aby adres ustalała ASPNETCORE_URLS.

Czy mogę wdrożyć aplikację Blazor?

Aplikacje Blazor Server i projekt serwerowy Blazor Web App działają jako aplikacje ASP.NET Core; jeśli w repozytorium jest kilka projektów, wskaż w DOTNET_PROJECT projekt serwerowy. Samodzielna aplikacja Blazor WebAssembly nie ma serwera do uruchomienia, więc buildpack .NET nie może jej wdrożyć: osadź ją w projekcie ASP.NET Core albo użyj Dockerfile.

Czy Nodion uruchamia migracje EF Core?

Nie. Zastosuj je przy starcie przez Database.Migrate() albo zbuduj migration bundle EF Core w Dockerfile i uruchom go jako polecenie release. Narzędzie dotnet ef potrzebuje SDK, którego nie ma w obrazie uruchomieniowym buildpacka.

Czy F# działa?

Tak. Plik .fsproj jest wykrywany i publikowany tak samo jak .csproj, więc aplikacje webowe w F# na ASP.NET Core wdrażasz w ten sam sposób.

Gdzie działa moja aplikacja .NET and ASP.NET Core?

W regionie EU Central we Frankfurcie nad Menem (Niemcy). Build, rejestr, aplikacja oraz jej bazy danych, wolumeny, buckety, logi i metryki pozostają w tym regionie, a API i warstwa sterowania (control plane) Nodion są hostowane w Niemczech. Nodion GmbH ma siedzibę w Stuttgarcie.

Czy mogę wykorzystywać .NET and ASP.NET Core zgodnie z RODO?

Nodion zapewnia do tego podstawy: Nodion GmbH ma siedzibę w Stuttgarcie (Niemcy), w regionie Frankfurt nad Menem aplikacja, jej bazy danych i wolumeny działają w Niemczech, a umowę powierzenia przetwarzania danych (DPA, art. 28 RODO) zawierasz elektronicznie w dashboardzie. To, czy Twoje wdrożenie spełnia wymogi RODO, zależy też od tego, jak skonfigurujesz aplikację i jak z niej korzystasz.

Ile kosztuje uruchomienie .NET and ASP.NET Core na Nodion?

Instancja aplikacji kosztuje od 1 EUR miesięcznie. Konfiguracja z ramki kosztuje 3.50 EUR miesięcznie: Aplikacja 2 EUR, PostgreSQL 1.50 EUR. Ceny są podane netto, a rozliczenie następuje co do sekundy. Większe rozmiary lub więcej instancji możesz wybrać w dowolnym momencie.

Czy mogę użyć własnej domeny dla mojej aplikacji .NET and ASP.NET Core?

Tak. Każda aplikacja dostaje domyślną nazwę hosta z HTTPS. Własną domenę dodasz w zakładce Domains aplikacji, a certyfikat TLS jest wystawiany i odnawiany automatycznie.

Daj swojemu agentowi chmurę.

Zyskaj do 15 € środków na start przy rejestracji.

Kontynuuj z GitHub

lub przez e-mail

Bądź na bieżąco.

Nowości produktowe, bez spamu. Możesz zrezygnować w każdej chwili.