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

Not

.NET Framework'te ASP.NET için, Azure Uygulama Hizmeti'ne bir ASP.NET uygulaması yapılandırma hakkında bilgi için bkz Configure an ASP.NET app for Azure App Service. ASP.NET Core uygulamanız özel bir Windows veya Linux kapsayıcısında çalışıyorsa bkz: Azure Uygulama Hizmeti için özel kapsayıcı yapılandırma.

ASP.NET Core uygulamaları derlenmiş ikili dosyalar olarak Azure Uygulaması Hizmetine dağıtılmalıdır. Visual Studio yayımlama aracı çözümü oluşturur ve derlenmiş ikili dosyaları doğrudan dağıtır. App Service dağıtım motoru önce kod deposunu dağıtır ve ardından binaries dosyalarını derler.

Bu kılavuz, ASP.NET Core geliştiricileri için temel kavramlar ve yönergeler sağlar. Bu makale Azure App Service'i ilk kez kullanıyorsanız, önce ASP.NET web uygulaması dağıtma ve Azure App Service'e ASP.NET Core ve Azure SQL Veritabanı uygulaması dağıtma adımlarını izleyin.

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

App Service'te 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örmek için Kudu sitenize gidin.

Azure portalında uygulamanıza gidin ve Geliştirme Araçları> seçin. Git'i seçin. Kudu'da CMD veya PowerShell için hata ayıklama konsolu'nu seçin.

Tarayıcı tabanlı konsolda aşağıdaki komutu çalıştırın:

dotnet --info

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

Geçerli .NET Core sürümünü göstermek için Azure Cloud Shell'de 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'de 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 projeniz için proje dosyasında hedef çerçeveyi ayarlayın. Daha fazla bilgi için bkz. Kullanılacak .NET Core sürümünü seçme.

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

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

App Service'te eski çalışma zamanlarına ne olur?

Eski çalışma zamanları, bakım kuruluşu tarafından kullanım dışı bırakılır veya önemli güvenlik açıklarına sahiptir. Buna göre, portaldaki oluşturma ve yapılandırma sayfalarından kaldırılırlar. Süresi geçmiş bir çalışma zamanı portaldan gizlendiğinde, bu çalışma zamanını kullanmaya devam eden tüm uygulamalar çalışmaya devam eder.

Portalda artık gösterilmemiş bir eski çalışma zamanı sürümüne sahip bir uygulama oluşturmak istiyorsanız Azure CLI' yı, ARM şablonunu veya Bicep'i kullanın. Bu dağıtım alternatifleri, portaldan kaldırılan ancak hala desteklenmeye devam eden kullanım dışı çalışma zamanları oluşturmanıza olanak tanır.

Bir çalışma zamanı App Service platformundan tamamen kaldırılırsa, Azure aboneliği sahibiniz kaldırmadan önce bir e-posta bildirimi alır.

Derleme otomasyonunu kişiselleştirin

Uygulamanızı derleme otomasyonu etkin git veya ZIP paketleri kullanarak dağıtırsanız App Service derleme otomasyonu şu sırayı izler:

  1. PRE_BUILD_SCRIPT_PATH belirtilmişse özel betiği ç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 bir ikili dosya oluşturmak amacıyla dotnet publish komutunu çalıştırın.
  4. POST_BUILD_SCRIPT_PATH belirtilmişse özel betiği çalıştırın.

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

Aşağıdaki örnek, virgülle ayrılmış bir dizi komut için iki değişkeni 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ştirmek için kullanabileceğiniz diğer ortam değişkenleri için bkz. Oryx yapılandırması.

App Service'in Linux'ta ASP.NET Core uygulamalarını 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ı yapabilirsiniz. Daha sonra 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");
        }
    }
}

App Service ve appsettings.json içinde aynı adı taşıyan bir uygulama ayarı yapılandırırsanız, App Service değeri appsettings.json değerine göre önceliklidir. Yerel appsettings.json değeri kullanarak uygulamanın hatalarını yerel olarak ayıklayabilirsiniz. App Service değerini kullanarak, uygulamayı üretim ayarlarıyla üretim ortamında çalıştırabilirsiniz. Bağlantı dizesi aynı şekilde çalışır. Bu yöntemi kullanarak uygulama gizli dizilerinizi kod deponuzun dışında tutabilir ve kodunuzu değiştirmeden uygun değerlere erişebilirsiniz.

Not

Ayrıca, bağlantı sırları gerektirmeyen daha güvenli bağlantı seçeneklerini de göz önünde bulundurabilirsiniz. Daha fazla bilgi için bkz. Azure Uygulaması Hizmetinden Azure hizmetlerine ve veritabanlarına güvenli bağlantı.

içindeki appsettings.json Linux'ta standart olan (çift alt çizgi) sınırlayıcı kullanılarak __ .NET Core'a erişilir. App Service'te 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'de 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"

içindeki appsettings.json , : sınırlayıcı kullanılarak, .NET Core için standart olan erişilir. App Service'te 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. Aşağıdaki örneği Azure Cloud Shell'de çalıştırabilirsiniz:

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

Birden çok proje içeren çözümleri dağıtma

Visual Studio çözümü birden çok proje içerdiğinde, Visual Studio yayımlama işlemi dağıtılacak projeyi seçer. Git gibi App Service dağıtım altyapısına veya derleme otomasyonu etkin 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 App Service'in kullanması gereken projeyi belirtebilirsiniz. Örneğin, Cloud Shell'de 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 kaydetme sağlayıcısı sunar. Aşağıdaki örnekte gösterildiği gibi, projenizin program.cs dosyasında uzantı yöntemi aracılığıyla sağlayıcıyı ConfigureLogging uygulamanıza ekleyin:

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

Daha sonra günlükleri standart .NET Core düzeniyle yapılandırabilir ve oluşturabilirsiniz. Bakınız .NET Core ve ASP.NET Core'da Günlük Kaydı.

App Service'te uygulama kodunuzun içinden oluşturulan konsol günlüklerine erişmek için cloud shell aşağıdaki komutu çalıştırarak tanılama günlüğünü 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, Infove Verbose'dır. Her düzey kendisinden önceki düzeyi içerir. Örneğin, Error yalnızca hata iletilerini içerir. Verbose tüm iletileri içerir.

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

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

Konsol günlükleri hemen görünmüyorsa 30 saniye içinde yeniden denetleyin.

Günlük akışını istediğiniz zaman durdurmak için Ctrl+C'ye bası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 sayfasına erişme

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. App Service'te genel bir "HTTP 500" veya "İsteğiniz işlenirken bir hata oluştu" iletisi bu sayfanın yerini alır. App Service'te ayrıntılı özel durum sayfasını görüntülemek için ASPNETCORE_ENVIRONMENT aşağıdaki komutu çalıştırarak uygulama ayarını uygulamanıza ekleyin.

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

HTTPS oturumlarını algılama

App Service'te TLS sonlandırması ağ yük dengeleyicilerinde gerçekleşir. 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, içinde Startup.csİletilen Üst Bilgiler Ara Yazılımını yapılandırın:

  • Ara yazılımı, ForwardedHeadersOptions içinde X-Forwarded-For ve X-Forwarded-Proto üst bilgilerini iletmek için Startup.ConfigureServices ile yapılandırın.
  • Ara yazılımların App Service yük dengeleyicisine güvenebilmesi için bilinen ağlara özel IP adresi aralıkları ekleyin.
  • Diğer ara yazılımları çağırmadan önce UseForwardedHeaders'de Startup.Configure yöntemini başlatın.

Üç öğeyi bir araya getirdiğinizde 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.

URL'yi yeniden yazma veya yeniden yönlendirme

Url'yi yeniden yazmak veya yeniden yönlendirmek için ASP.NET Core'da URL yeniden yazma ara yazılımını kullanın.

Tarayıcıda SSH oturumu açma

Kapsayıcınızla doğrudan SSH oturumu açmak istiyorsanız uygulamanız çalışıyor olmalıdır.

az webapp ssh komutunu kullanın.

Kimliğiniz doğrulanmamışsa bağlanmak için Azure aboneliğinizle kimlik doğrulaması yapmanız gerekir. Kimliğiniz doğrulandığında, kapsayıcınızın içinde komutları çalıştırabileceğiniz bir tarayıcı içi kabuk görürsünüz.

SSH bağlantısı

Not

Dizin dışında /home yaptığınız tüm değişiklikler kapsayıcının kendisinde depolanır ve uygulama yeniden başlatma işleminin ötesinde kalıcı olmaz.

Yerel makinenizden uzaktan bir SSH oturumu açmak için, bkz. Uzaktan kabuk üzerinden SSH oturumu açma.

Günlüklerde robots933456 iletisini yoksay

Kapsayıcı günlüklerinde aşağıdaki 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 göz ardı edebilirsiniz. /robots933456.txt , sahte bir URL yoludur. App Service, kapsayıcının istekler için uygun olup olmadığını denetlemek için bunu kullanır. "404" hata yanıtı, yolun mevcut olmadığını gösterir ve App Service'e kapsayıcının iyi durumda olduğunu ve isteklere yanıt vermeye hazır olduğunu bildirir.