Linux Üzerinde ASP.NET Core Barındırmaya İlişkin Eksiksiz Kılavuz
Kestrel ve Nginx kullanarak Linux üzerinde ASP.NET Core uygulamalarının güvenli ve optimum şekilde dağıtımı için adımlar ve önemli ipuçları.

Linux Üzerinde ASP.NET Core Barındırmaya İlişkin Eksiksiz Kılavuz

Bu makale, ASP.NET Core uygulamalarını Linux üzerinde nasıl barındıracağınızı öğretecektir. .NET çalışma ortamını nasıl kuracağınızı, Kestrel ve Nginx'i nasıl yapılandıracağınızı ve güvenlik, optimizasyon ve ölçeklenebilirlik konularını nasıl ele alacağınızı öğreneceksiniz.
0 Hisse senetleri
0
0
0
0

 

ASP.NET Core'u Linux Üzerinde Barındırmak — Neden ve Ne Zaman?

ASP.NET Core, *Kestrel* ile Linux üzerinde sorunsuz çalışır ve barındırma için bu platformu seçmek, aşağıdakiler de dahil olmak üzere önemli avantajlar sağlayabilir: Maliyet düşürme, açık kaynaklı araçlarla uyumluluk ve konteynerleştirme kolaylığı Bu seçenek web siteleri, API'ler, arka plan hizmetleri ve oyunlar ve alım satım gibi gecikmeye duyarlı uygulamalar için uygundur.

 

Önkoşullar ve sunucu seçimi

 

Linux dağıtımı ve .NET sürümü

Önerilen dağıtımlar şunlardır: Ubuntu LTS (20.04/22.04), Debian (11/12), Ve CentOS Stream veya Rocky/Alma Bunlar üretim amaçlıdır. Sıkı güvenlik önlemlerinin alındığı ortamlar için tasarlanmıştır. RHEL Resmi Microsoft çalışma ortamını ve SDK'sını kullanın (örneğin .NET 6/7/8).

 

Donanım kaynakları ve hizmet türü

Web siteleri ve hafif API'ler için genellikle 1-2 sanal işlemci, 1-4 GB RAM ve NVMe SSD Yeter. İş ve yoğun uygulamalar için 4+ sanal işlemci ve 8+ GB RAM Ve yüksek hızlı bir ağa ihtiyaçları var.

Düşük ping ile alım satım ve oyun oynamak için Bir borsaya veya bölgesel veri merkezine yakın yerel bir VPS seçmek en iyisidir. Şirketimizin 85'ten fazla küresel lokasyonu bulunmaktadır, bu da en yakın veri merkezini seçmeyi kolaylaştırır.

Yapay zeka/çıkarım veya görüntü oluşturma için grafik sunucuları (GPU) kullanın; şirketimiz yüksek hızlı ağa sahip GPU Bulut hizmeti ve bilgi işlem sunucusu sağlamaktadır.

Saldırılara karşı korunmak için, DDoS saldırılarına karşı koruma sağlayan bir sunucu ve BGP ile CDN içeren bir ağ kullanmayı düşünün.

 

Temel kurulum ve yapılandırma (.NET çalışma ortamı) — Ubuntu örneği

Resmi Microsoft çalışma ortamını yüklemek için, depoyu ekleyin ve ardından çalışma ortamını yükleyin:

sudo apt update
wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y dotnet-runtime-7.0

Ardından güvenli bir hizmet kullanıcısı ve uygulama dizini oluşturun:

sudo useradd -r -s /usr/sbin/nologin aspnetuser
sudo mkdir -p /var/www/myapp
sudo chown aspnetuser:aspnetuser /var/www/myapp

 

Konteyner gerektirmeyen dağıtım — Kestrel + systemd + Nginx

 

Uygulamayı yayınlayın ve systemd'yi yapılandırın.

Uygulamayı derleyin ve uygulama dizini yoluna yayınlayın:

dotnet publish -c Release -o /var/www/myapp

systemd için örnek birim dosyası /etc/systemd/system/myapp.service Yer:

[Unit]
Description=My ASP.NET Core App
After=network.target

[Service]
WorkingDirectory=/var/www/myapp
ExecStart=/usr/bin/dotnet /var/www/myapp/MyApp.dll
Restart=always
# Safe User/Group
User=aspnetuser
Group=aspnetuser
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target

Hizmeti etkinleştirme ve çalıştırma:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f

 

Nginx'i ters proxy olarak yapılandırma (SSL sonlandırma)

Nginx ve Certbot'u kurun:

sudo apt install -y nginx certbot python3-certbot-nginx

Örnek Nginx yapılandırması /etc/nginx/sites-available/myapp Yer:

server {
    listen 80;
    server_name example.com www.example.com;

    location / {
        proxy_pass         http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Ücretsiz SSL sertifikası edinin:

sudo certbot --nginx -d example.com -d www.example.com

 

Docker ve Docker Compose ile Dağıtım

Küçük ve optimize edilmiş bir imaj oluşturmak için örnek çok adımlı Dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app

FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS runtime
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Örnek docker-compose.yml dosyası (nginx-proxy veya Traefik de kullanabilirsiniz):

version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000"
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
  nginx:
    image: nginx:stable
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./certs:/etc/letsencrypt

CI/CD için, GitLab CI veya GitHub Actions kullanarak imajları oluşturun, test edin ve kayıt defterine dağıtın, ardından sunucuya çekin. Şirketimiz özel ekipler için GitLab barındırma hizmeti sunmaktadır.

 

Güvenlik ve en iyi uygulamalar

 

Ağ ve güvenlik duvarı

Yalnızca gerekli portları (80/443) açın ve SSH erişimini gerekli adreslerle sınırlandırın.

sudo ufw allow 80,443/tcp
sudo ufw allow from 203.0.113.0/24 to any port 22 proto tcp  # مثال
sudo ufw enable

 

TLS ve Güçlendirme

 

Saldırılar ve koruma

SSH'i korumak ve Nginx'te hız sınırlaması uygulamak için fail2ban kullanın. Hassas uygulamalar için DDoS saldırılarına karşı koruma sağlayan sunucular kullanın; şirketimiz BGP ile birlikte DDoS saldırılarına karşı koruma ve CDN paketleri sunmaktadır.

 

SELinux / AppArmor

SELinux'un etkinleştirildiği dağıtımlarda (RHEL/CentOS), dosyalar ve portlar için bağlamların doğru şekilde ayarlandığından emin olun. Diğer dağıtımlarda, profil oluşturma için AppArmor kullanın; kalıcı kapatma önerilmez.

 

Performans optimizasyonu ve izleme

 

Kestrel ayarları ve bağlantı ayarları

Ters proxy katmanında HTTP/2 ve Keep-Alive kullanın. Kestrel'in sınırlamalarını göz önünde bulundurun. appsettings.json (Örneğin, Limits.MaxConcurrentConnections, MaxRequestBodySize) değerlerini ayarlayın.

Yanıtları sıkıştırmak için yanıt sıkıştırma (Brotli/Gzip) kullanın:

Hizmetler.AddResponseCompression(seçenekler => { seçenekler.EnableForHttps = true; });

 

Önbellek ve toplantılar

Yatay ölçeklendirmeyi sağlamak için dağıtılmış önbellek ve oturum durumu için Redis kullanın. Sunucu yükünü azaltmak için statik içerik için CDN kullanın.

 

İzleme ve kayıt tutma

Yapılandırılmış günlük kaydını Serilog veya Microsoft.Extensions.Logging ile birleştirin ve ELK/Graylog'a gönderin. Metrikler için dotnet-counters, Prometheus exporter (dotnet_exporter) ve Grafana kullanın. Application Insights gibi APM'ler izleme için faydalıdır.

 

Konumları karşılaştırmak ve uygulamaya göre doğru olanı seçmek

Alım satım işlemleri için düşük ping ve istikrar önemlidir; borsalara veya özel ağlara yakın bir konum seçin. Oyun oynamak için ise bölgesel sunucular ve yüksek hızlı ağa sahip oyun VPS'leri önerilir.

Yapay zeka ve render işlemleri için NVMe ve yüksek bant genişliğine sahip GPU bulut ve işlem sunucuları kullanın. Web siteleri ve uygulamalar için, ana kullanıcılara yakın konum ve daha iyi kullanılabilirlik için CDN ve çok bölgeli ağ kombinasyonu önerilir. Şirketimiz 85'ten fazla küresel lokasyon ve CDN ve BGP ağı sunmaktadır.

 

Yüksek ölçeklenebilirlik ve kullanılabilirlik

Katman 7 yük dengeleyici (Nginx/HAProxy/Cloud LB) veya veri merkezi yük dengeleyici kullanın. Oturumları Redis'te veya paylaşımlı bir veritabanında saklayın. Otomatik ölçeklendirme için konteynerleri ve sanal makineleri yataylaştırın; Kubernetes'te HPA kullanın. Küresel trafik dağıtımı için BGP anycast ve CDN kullanın.

 

Sıkça karşılaşılan hata düzeltmeleri

Sık rastlanan vakalar ve muayene yöntemleri:

  • 502 Hatalı Ağ Geçidi: systemd'yi kontrol edin. journalctl -u myappyerel liman ile ss -tlnp ve dosya izinleri.
  • SSL Sorunu: Kontrol Edin certbot renewSertifika klasörüne erişim ve Nginx'te doğru şekilde referans gösterme.
  • Dosya/İzin Hataları: Hizmet kullanıcısı için doğru sahip/grup bilgilerini kontrol edin.
  • Beklenmeyen yavaşlama: CPU veya GC darboğazlarını bulmak için dotnet-counters ve profiler kullanın.

 

Üretim (DevOps) için pratik ipuçları

  • Docker imajını küçültmek için çok aşamalı Docker derlemeleri kullanın.
  • Sırları bir sır yöneticisinde saklayın (Vault, GitLab CI sırları).
  • Orkestratör için sağlık uç noktalarını yazın ve canlılık/hazırlık durumunu yapılandırın.
  • GitLab CI veya GitHub Actions kullanarak derleme/test/dağıtım otomasyonu gerçekleştirin.

 

Özet ve hizmet teklifleri

ASP.NET Core'u Linux üzerinde barındırmak, web ve API uygulamaları için **ölçeklenebilir, güvenli ve genişletilebilir** bir seçenektir. Yüksek performans ve kullanılabilirlik için, uygulamayı Kestrel + Nginx ile veya bir orkestratör içeren bir konteynerde dağıtmanız, TLS ve güvenlik önlemlerini ciddiye almanız, durum için Redis/DB kullanmanız ve statik içerik için bir CDN kullanmanız önerilir.

85'ten fazla küresel lokasyon, GPU Bulut, bilgi işlem ve özel sunucular, işlem ve oyun VPS'leri, DDoS saldırılarına karşı koruma altyapısı, GitLab barındırma, CDN ve BGP ağı ile şirketimiz, farklı planlarla ASP.NET Core uygulamaları için barındırma ve destek çözümleri sunmaktadır.

Ayrıca Şunları da Beğenebilirsiniz