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:
- tarafından
PRE_BUILD_SCRIPT_PATH
belirtilirse özel betik çalıştırın. - NuGet bağımlılıklarını geri yüklemek için komutunu çalıştırın
dotnet restore
. - Üretim için ikili oluşturmak üzere komutunu çalıştırın
dotnet publish
. - tarafından
POST_BUILD_SCRIPT_PATH
belirtilirse ö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-For
X-Forwarded-Proto
için ara yazılımı ForwardedHeadersOptionsStartup.ConfigureServices
ile 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.Configure
UseForwardedHeaders 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.
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: