(25-09-2019, Saat: 09:12)Tuğrul HELVACI Adlı Kullanıcıdan Alıntı: Özellikle; .Net Core'un şu anda 3.0 versiyonunda olduğunu ve bir ivme ile hareket ettiğini de hatırlatmam gerekiyor olabilir
.Net Core'u, tek cümleyle açıklayayım; "
Microsoft'un Linux ile imtihanı!"
Cross olarak tabir ettikleri bu mimaride geliştirilen bir web servisi, Linux sunucu üzerinde çalıştırmak için tabiri caiz ise kırk takla attırılıyor.
Bunun sebepleri;
1- Linux sunucu üzerinde bir çok bağımlılığının (ek servis ve paket ihtiyacı) olması,
2- "Temel Web uygulamasını başlatmak ve izlemek için systemd ve hizmet dosyası oluşturmayı kullanın." diyor msdn.
Detayına bakalım;
aşağıdaki komutu çalıştırın diyor.
sudo nano /etc/systemd/system/kestrel-helloapp.service
Yani sistem altında, service uzantılı bir dosya oluşturun diyor. (kestrel-helloapp.service)
Bu dosya içeriğine bakalım.
[Unit]
Description=Example .NET Web API App running on CentOS 7
[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=apache
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
3- Linux konfigürasyon dosyalarından farklı bir (Ini dosya yapısında) dosya olduğunu görüyoruz.
Şu satır umarım dikkatinizden kaçmamıştır.
ExecStart=/usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
Çalıştırılan ve servis denen uygulama bildiğimiz
dll dosyası.
Çalıştığı
platform Linux.
O zaman exe için de böyle bir eklenti yapsınlar. Böylece tüm dosyalarımızı Linux üzerinde çalıştırmış olalım! Bunun adına cross platform diyor msdn.
4- Dakika bir, gol bir; servis başlamadan kendimi nasıl kapatabilirim in yollarını arıyor.
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
Yani diyor ki "Dotnet servisi kilitlenirse servisi 10 saniye sonra yeniden başlatın". Türkçesi; bana güven olmaz, ara sıra donabilirim. Sen beni ısıt.
(Linux webModule olarak geliştirdiğim bir servis 6 aydır hiç resetlemedim. Çünkü .so uzantılı doğal Linux kütüphanesi)
KillSignal=SIGINT
Satırında bir emniyet kemeri kullanıyor (teşbihte hata olmaz: eşeği sağlam kazığa bağlıyor); eğer uygulama yeniden başlatılamaz ise, harici bir servisle ben seni sonlandırabileyim diyor. yani harici bir etki ile beni sonlandırabilir veya yeniden başlatabilirsiniz, diyor.
5- msdn'den devam edelim. Sonrasında aşağıdaki komutu çalıştırın diyor.
sudo systemctl enable kestrel-helloapp.service
Yani uygulamayı web servis olarak çalıştırmak için Linux üzerinde çalışan bir servis oluşturun ve bunu çalıştırın. Bir servisin çalışması bu ana servisin çalışmasına bağlı. (İlk maddede bahsetmiş olduğum bağımlılık.)
6- Linux file sistem yapısına aykırı bir dosya (dll), kestrel denilen farklı bir uygulamayla yayınlanıyor. Tabi bunun için bir de kestrel servisinin çalışması gerekiyor. Bunu nereden biliyorum? msdn de işlemin devamında bu servisin loglarını aşağıdaki servis üzerinden takip edebilirsiniz diyor.
sudo journalctl -fu kestrel-helloapp.service
Kaynaklar:
docs.microsoft.com - Apache ile Linux üzerinde ASP.NET Core barındırma
"ASP.NET Core ile geliştirilen web uygulamalarını çalışmak için Kestrel’i kullanılıyor" - Kaynak:https://www.minepla.net/2018/02/linux-uzerinde-aspnet-core-servis-olarak-calistirmak/
C#'çılar hiçbir zaman kral çıplak diyemedi.
Emin olun kısa bir süre sonra "eureka-buldum" diye haykırıp, "bu mimariden daha iyi bir teknoloji ürettik", deyip halihazırdaki bu sitemin yanlış bir sistem olduğunu yine söylemeyecekler.
Peki Rad Studio veya Delphi ile geliştirilen web servisin bu mimariden farkı ne? derseniz;
1- Delphi ile geliştirdiğimiz uygulamayı compile ettiğimizde .so uzantılı native Linux kütüphane dosyası oluşuyor.
2- Bu dosyayı Apache modul dizinine ( /usr/lib/apache2/modules/) taşıyoruz.
3- Linux modül dosyalarının yüklenmesi için gerekli olan modül yükleme konfigürasyon dosyasını oluşturup, modülü yükle diyoruz. (LoadModule algitsin_module /usr/lib/apache2/modules/libmod_algitsin.so ) Bu konfigürasyon her modül için zorunludur.
4- Son olarak bu modül dosyasını şu URL'e istekte bulunduğunda çalıştır diyoruz.
( <Location /algitsin>
SetHandler libmod_algitsin-handler
</Location>
)
PHP ile de bir servisi yayınlasanız yukarıda bahsetmiş olduğum son üç adımı gerçekleştirmeniz gerekiyor.
Yani Delphi, Linux hedef platform native bileşenleri ile web servisini çalıştırıyor. Herhangi bir servis veya paket bağımlılığı yok. Restart ihtiyacı yok. Çünkü sistemde bulunan tüm modül dosyaları, sistem tarafından yönetiliyor.
Önemli Not: Delphi ile bir Web Servisin nasıl yazılacağını
28 Eylül 2019 - Cumartesi günü sabah
saat 11:00 de başlayacak eğitim seminerimizde daha detaylı olarak öğrenebilirsiniz.