- ASP.NET Core'u Linux Üzerinde Barındırmak — Neden ve Ne Zaman?
- Önkoşullar ve sunucu seçimi
- Temel kurulum ve yapılandırma (.NET çalışma ortamı) — Ubuntu örneği
- Konteyner gerektirmeyen dağıtım — Kestrel + systemd + Nginx
- Docker ve Docker Compose ile Dağıtım
- Güvenlik ve en iyi uygulamalar
- Performans optimizasyonu ve izleme
- Konumları karşılaştırmak ve uygulamaya göre doğru olanı seçmek
- Yüksek ölçeklenebilirlik ve kullanılabilirlik
- Sıkça karşılaşılan hata düzeltmeleri
- Üretim (DevOps) için pratik ipuçları
- Özet ve hizmet teklifleri
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.0Ardı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/myappsystemd 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.targetHizmeti 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/letsencryptCI/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 iless -tlnpve 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.









