Azure App Service için ASP.NET Core uygulaması yapılandırma

Not

.NET Framework'da ASP.NET için bkz. Azure App Service için ASP.NET uygulaması yapılandırma. ASP.NET Core uygulamanız özel bir Windows veya Linux kapsayıcısında çalışıyorsa bkz. Azure App Service için özel kapsayıcı yapılandırma.

ASP.NET Core uygulamaların derlenmiş ikili dosyalar olarak Azure App Service dağıtılması gerekir. Visual Studio yayımlama aracı çözümü oluşturur ve derlenmiş ikili dosyaları doğrudan dağıtırken, App Service dağıtım altyapısı önce kod deposunu dağıtır ve ardından ikili dosyaları derler.

Bu kılavuz, ASP.NET Core geliştiricileri için temel kavramlar ve yönergeler sağlar. daha önce Azure App Service kullanmadıysanız ASP.NET Core hızlı başlangıcı izleyin ve önce SQL Veritabanı öğreticiyle ASP.NET Core.

Desteklenen .NET Core çalışma zamanı sürümlerini göster

App Service'da, Windows örneklerinde desteklenen tüm .NET Core sürümleri zaten yüklüdür. Kullanabileceğiniz .NET Core çalışma zamanı ve SDK sürümlerini göstermek için adresine gidin https://<app-name>.scm.azurewebsites.net/DebugConsole ve tarayıcı tabanlı konsolda aşağıdaki komutu çalıştırın:

dotnet --info

.NET Core sürümünü göster

Geçerli .NET Core sürümünü göstermek için Cloud Shell aşağıdaki komutu çalıştırın:

az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion

Desteklenen tüm .NET Core sürümlerini göstermek için Cloud Shell aşağıdaki komutu çalıştırın:

az webapp list-runtimes --os linux | grep DOTNET

.NET Core sürümünü ayarlama

ASP.NET Core projenizin proje dosyasında hedef çerçeveyi ayarlayın. Daha fazla bilgi için bkz. .NET Core belgelerinde kullanılacak .NET Core sürümünü seçme .

.NET Core sürümünü 3.1 olarak ayarlamak için Cloud Shell aşağıdaki komutu çalıştırın:

az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|3.1"

Derleme otomasyonlarını özelleştirme

Uygulamanızı Git kullanarak veya derleme otomasyonu etkinleştirilmiş zip paketleri kullanarak dağıtırsanız, derleme otomasyonu App Service aşağıdaki sırayla adım adım ilerler:

  1. tarafından PRE_BUILD_SCRIPT_PATHbelirtilirse özel betik çalıştırın.
  2. NuGet bağımlılıklarını geri yüklemek için komutunu çalıştırın dotnet restore .
  3. Üretim için ikili oluşturmak üzere komutunu çalıştırın dotnet publish .
  4. tarafından POST_BUILD_SCRIPT_PATHbelirtilirse özel betik çalıştırın.

PRE_BUILD_COMMAND ve POST_BUILD_COMMAND varsayılan olarak boş olan ortam değişkenleridir. Derleme öncesi komutları çalıştırmak için öğesini tanımlayın PRE_BUILD_COMMAND. Derleme sonrası komutları çalıştırmak için öğesini tanımlayın POST_BUILD_COMMAND.

Aşağıdaki örnek, virgülle ayrılmış bir komut dizisinin iki değişkenini belirtir.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"

Derleme otomasyonlarını özelleştirmeye yönelik diğer ortam değişkenleri için bkz. Oryx yapılandırması.

App Service'ın Linux'ta ASP.NET Core uygulamaları nasıl çalıştırıp oluşturduğu hakkında daha fazla bilgi için Oryx belgelerine bakın: .NET Core uygulamaları nasıl algılanıp oluşturulur?

Ortam değişkenlerine erişme

App Service'te uygulama kodunuzun dışında uygulama ayarlarını düzenleyebilirsiniz. Ardından standart ASP.NET Core bağımlılık ekleme desenini kullanarak bunlara herhangi bir sınıfta erişebilirsiniz:

using Microsoft.Extensions.Configuration;

namespace SomeNamespace 
{
    public class SomeClass
    {
        private IConfiguration _configuration;
    
        public SomeClass(IConfiguration configuration)
        {
            _configuration = configuration;
        }
    
        public SomeMethod()
        {
            // retrieve nested App Service app setting
            var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
            // retrieve App Service connection string
            var myConnString = _configuration.GetConnectionString("MyDbConnection");
        }
    }
}

Örneğin, App Service ve appsettings.json dosyasında aynı adla bir uygulama ayarı yapılandırırsanız, App Service değeri appsettings.json değerinden önceliklidir. Yerel appsettings.json değeri uygulamada yerel olarak hata ayıklamanıza olanak tanır, ancak App Service değeri uygulamayı üretim ayarlarıyla üretim ortamında çalıştırmanıza olanak tanır. Bağlantı dizeleri aynı şekilde çalışır. Bu şekilde uygulama gizli dizilerinizi kod deponuzun dışında tutabilir ve kodunuzu değiştirmeden uygun değerlere erişebilirsiniz.

Not

appsettings.json dosyasındaki hiyerarşik yapılandırma verilerine Linux'ta .NET Core'a standart olarak sunulan (çift alt çizgi) sınırlayıcı kullanılarak __ erişildiğini unutmayın. App Service'de belirli bir hiyerarşik yapılandırma ayarını geçersiz kılmak için, uygulama ayarı adını anahtarda aynı sınırlandırılmış biçimle ayarlayın. Cloud Shell aşağıdaki örneği çalıştırabilirsiniz:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"

Not

appsettings.json dosyasındaki hiyerarşik yapılandırma verilerine .NET Core için standart sınırlayıcı kullanılarak : erişildiğini unutmayın. App Service'de belirli bir hiyerarşik yapılandırma ayarını geçersiz kılmak için, uygulama ayarı adını anahtarda aynı sınırlandırılmış biçimle ayarlayın. Cloud Shell aşağıdaki örneği çalıştırabilirsiniz:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"

Çok projeli çözümleri dağıtma

Visual Studio çözümü birden çok proje içerdiğinde, Visual Studio yayımlama işlemi zaten dağıtılacak projeyi seçmeyi içerir. Git gibi App Service dağıtım altyapısına veya derleme otomasyonu etkinleştirilmiş ZIP dağıtımıyla dağıtım yaptığınızda, App Service dağıtım altyapısı App Service uygulaması olarak bulduğu ilk Web Sitesini veya Web Uygulaması Projesini seçer. Uygulama ayarını belirterek PROJECT hangi proje App Service kullanılacağını belirtebilirsiniz. Örneğin, Cloud Shell aşağıdaki komutu çalıştırın:

az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"

Tanılama günlüklerine erişim

ASP.NET Core, App Service için yerleşik bir günlük sağlayıcısı sağlar. Projenizin Program.cs dosyasında , aşağıdaki örnekte gösterildiği gibi uzantı yöntemi aracılığıyla ConfigureLogging sağlayıcıyı uygulamanıza ekleyin:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging(logging =>
        {
            logging.AddAzureWebAppDiagnostics();
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

Ardından , standart .NET Core düzeniyle günlükleri yapılandırabilir ve oluşturabilirsiniz.

App Service’te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için şu komutu Cloud Shell’de çalıştırarak tanılama günlüğüne kaydetmeyi açın:

az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose

--level için olası değerler: Error, Warning, Info ve Verbose. Her düzey kendisinden önceki düzeyi içerir. Örneğin: Error yalnızca hata iletilerini içerir, Verbose ise tüm iletileri içerir.

Tanılama günlüğüne kaydetme açıldıktan sonra günlük akışını görmek için şu komutu çalıştırın:

az webapp log tail --resource-group <resource-group-name> --name <app-name>

Konsol günlüklerini hemen görmüyorsanız, 30 saniye içinde yeniden kontrol edin.

Not

Ayrıca, tarayıcıdan https://<app-name>.scm.azurewebsites.net/api/logs/docker adresine giderek günlük dosyalarını inceleyebilirsiniz.

Günlük akışını dilediğiniz zaman durdurmak için Ctrl+C yazın.

App Service ASP.NET Core uygulamalarında sorun giderme hakkında daha fazla bilgi için bkz. Azure App Service ve IIS'de ASP.NET Core sorunlarını giderme

Ayrıntılı özel durumları alma sayfası

ASP.NET Core uygulamanız Visual Studio hata ayıklayıcısında bir özel durum oluşturduğunda, tarayıcı ayrıntılı bir özel durum sayfası görüntüler, ancak App Service bu sayfa genel bir HTTP 500 hatasıyla değiştirilir veya İsteğiniz işlenirken bir hata oluştu. App Service'da ayrıntılı özel durum sayfasını görüntülemek için, Cloud Shell aşağıdaki komutu çalıştırarak uygulama ayarını uygulamanıza ekleyinASPNETCORE_ENVIRONMENT.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"

HTTPS oturumlarını algılama

App Service'de TLS/SSL sonlandırma ağ yük dengeleyicilerinde gerçekleşir, bu nedenle tüm HTTPS istekleri şifrelenmemiş HTTP istekleri olarak uygulamanıza ulaşır. Uygulama mantığınızın kullanıcı isteklerinin şifrelenip şifrelenmediğini bilmesi gerekiyorsa, Startup.cs'de İletilen Üst Bilgiler Ara Yazılımını yapılandırın:

  • ve üst bilgilerini içinde iletmek X-Forwarded-ForX-Forwarded-Proto için ara yazılımı ForwardedHeadersOptionsStartup.ConfigureServicesile yapılandırın.
  • Ara yazılımların App Service yük dengeleyiciye güvenebilmesi için bilinen ağlara özel IP adresi aralıkları ekleyin.
  • Diğer ara yazılımları çağırmadan önce içinde Startup.ConfigureUseForwardedHeaders yöntemini çağırın.

Üç öğeyi de bir araya getirerek kodunuz aşağıdaki örneğe benzer:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.Configure<ForwardedHeadersOptions>(options =>
    {
        options.ForwardedHeaders =
            ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        // These three subnets encapsulate the applicable Azure subnets. At the moment, it's not possible to narrow it down further.
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:192.168.0.0"), 112));
        options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:172.16.0.0"), 108));
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseForwardedHeaders();

    ...

    app.UseMvc();
}

Daha fazla bilgi için bkz. ASP.NET Core'u ara sunucular ve yük dengeleyicilerle çalışacak şekilde yapılandırma.

Tarayıcıda SSH oturumu açma

Kapsayıcınızda doğrudan SSH oturumu başlatabilmek için uygulamanızın çalışıyor olması gerekir.

Aşağıdaki URL'yi tarayıcınıza yapıştırın ve <app-name> yerine kendi uygulamanızın adını yazın:

https://<app-name>.scm.azurewebsites.net/webssh/host

Kimlik doğrulamasından geçmediyseniz bağlantıyı kurabilmek için Azure aboneliğinizle kimliğinizi doğrulamanız gerekir. Kimliğiniz doğrulandıktan sonra kapsayıcınızda komut çalıştırmak için kullanabileceğiniz tarayıcı içi kabuk ortamını görürsünüz.

SSH bağlantısı

Not

/home dizininin dışında yaptığınız değişiklikler kapsayıcıda depolanır ve uygulama yeniden başlatıldığında kalıcı olmaz.

Yerel makinenizden uzak SSH oturumu açmak için bkz. Uzak kabuktan SSH oturumu açma.

Günlüklerde robots933456

Kapsayıcı günlüklerinde şu iletiyi görebilirsiniz:

2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"

Bu iletiyi güvenle yoksayabilirsiniz. /robots933456.txt, App Service hizmetinin kapsayıcının istek sunmak için uygun olup olmadığını denetlemek için kullandığı işlevsiz bir URL'dir. 404 yanıtı, yolun var olmadığını belirtir ancak App Service bu sayede iyi ve isteklere yanıt vermeye uygun durumda olan kapsayıcıları belirler.

Sonraki adımlar

Veya daha fazla kaynağa bakın:

Ortam değişkenleri ve uygulama ayarları başvurusu