Ana Sayfa Hakkımda Dersler Blog Mikrofonda İletişim Projeler
Dersler DEPLOY · C#

Shared Hosting'de ASP.NET Core Deploy Rehberi

10 dk okuma · Emre Ulutabak
1
Shared hosting nedir?

Shared hosting, birden fazla müşterinin aynı fiziksel sunucuyu paylaştığı barındırma modelidir. Ucuz, kurulumu kolay — ama kısıtlı.

SSH erişimi yok, root yetkin yok, istediğin servisi kuramazsın. Dosya yönetimi FTP ile, uygulama yönetimi Plesk veya cPanel gibi paneller üzerinden yapılır.

ASP.NET Core uygulamalarını shared hosting'de çalıştırmak mümkün — ama birkaç önemli noktayı bilmek gerekir.

💡
Shared hosting'de hata ayıklamak zorlaşır. stdoutLogEnabled=true ile log alıp FTP'den çekmek en güvenilir yöntemdir.
2
Çoklu site yapısı

Büyük bir proje birden fazla ASP.NET Core uygulamasından oluşabilir. Her subdomain ayrı bir uygulama olabilir:

  • api.site.com — API projesi
  • app.site.com — kullanıcı paneli
  • manage.site.com — yönetim paneli
  • ops.site.com — operasyonel araçlar

Bu uygulamaların tümü aynı IIS app pool'u paylaşıyorsa, outofprocess zorunludur. Bir uygulamanın çökmesi diğerlerini etkilememeli.

Migration konusuna da dikkat etmek gerekir. Program.cs'te MigrateAsync() kullanıyorsan, ilk açılışta birkaç saniyelik gecikme yaşanabilir — bu normal.

3
Deploy öncesi kontrol listesi

Her deploy öncesi şu listeyi gözden geçirmek, sonradan saatlerce sürecek hata ayıklamayı önler:

  • appsettings.Production.json → CopyToPublishDirectory: Never
  • appsettings.Development.json → CopyToPublishDirectory: Never
  • private.key (varsa) → CopyToPublishDirectory: Always
  • web.config environmentVariables → tüm sırlar girildi mi?
  • hostingModel → outofprocess (shared hosting için)
  • stdoutLogEnabled → false (production'da kapalı)
  • Connection string → TrustServerCertificate=True var mı?
  • Migration → çalıştırıldı mı?
4
Gerçek hata senaryoları

Shared hosting'de production deploy yaparken karşılaşılan en yaygın hatalar ve çözümleri:

1. Plesk subscription plan çakışması
Yeni subscription oluştururken disk_space, mssql_dbase_space veya total_mboxes_quota kotaları çakışabilir. Çözüm: subscription planı olarak "hiçbiri" seç (Custom mod), kotaları tek tek Sınırsız yap.

2. Connection string key eşleşmemesi
GetConnectionString("database") yazıp env var'a ConnectionStrings__DefaultConnection koymak — eşleşmez, null döner, bağlantı kurulamaz. Key'in sonu C# kodu ile birebir aynı olmalı.

3. TrustServerCertificate eksikliği
Bağlantı kurulur ama login sırasında SqlException fırlar. Connection string'e TrustServerCertificate=True ekle.

4. appsettings.Production.json publish'e gitmiş
CopyToPublishDirectory=Never ayarı unutulmuşsa, bu dosya sunucuya gider. Sırların publish çıktısında olmaması için bu ayarı kontrol et.

💡
Hata mesajı "null reference" veya "connection refused" ise ilk bakacağın yer: key eşleşmesi ve TrustServerCertificate.
5
Production test adımları

Deploy tamamlandıktan sonra uygulamanın gerçekten çalışıp çalışmadığını doğrulamak için sıralı test adımları:

  • 1. Swagger / ana sayfa — site açılıyor mu? HTTP 200 geliyor mu?
  • 2. Ping endpoint — API varsa /api/ping gibi basit bir endpoint çağır. [AllowAnonymous] olmalı.
  • 3. DB bağlantısı — DB'ye bağlanan bir endpoint çağır. Hata dönüyorsa connection string veya TrustServerCertificate sorunu olabilir.
  • 4. Log kontrol — stdoutLogEnabled=true yap, bir istek gönder, log dosyasını FTP'den çek, kontrol et, tekrar false yap.
  • 5. Migration kontrolü — tablolar oluşmuş mu? DB'yi Plesk üzerinden kontrol edebilirsin.
💡
İlk deploy'da her adımı sırayla yap. Bir şey atladığında hangi adımda sorun olduğunu bulmak çok zaman alır.
6
Mini quiz
MİNİ QUIZ
Shared hosting'de 4 farklı ASP.NET Core uygulaması aynı IIS app pool'unu paylaşıyor. Bir uygulama çökerse ne olur?
Sadece o uygulama çöker, diğerleri etkilenmez (outofprocess modunda)
Tüm uygulamalar çöker (outofprocess modunda da)
IIS otomatik olarak yeniden başlatır, sorun olmaz
Sunucu tamamen kapanır