Google Cloud Ücretsiz Deneme kullanarak website kurma – 8 (Asp.Net Core 3.1 proje)

Merhabalar,

Bir önceki yazımda Ubuntu kurduğumuz sanal makinemize ikinci bir domain adını nasıl ekleyebileceğimizi anlatmıştım. WordPress siteler için sorun yok bu şekilde yenisini ekleye ekleye devam edebilirsiniz. Ama ben artık Asp.Net Core ile site yapıp onu yayınlayacağım diyorsanız bazı düzenlemeler yapmamız gerekiyor. Bir önceki yazıma alttaki linkten ulaşabilirsiniz.

Google Cloud Ücretsiz Deneme kullanarak website kurma – 7 (Yeni bir site daha ekleme)

Burada öncelikle VestaCP hakkında bilmemiz gereken bir şeyler var.

VestaCP kurulumu yaparken hatırlayacağınız gibi WEB ayarlarında Advanced seçeneklerin içinde de varsayılan olarak yüklerken de Nginx ve Apache yi beraber kurmuştuk. Nginx ve Apache 2 bildiğiniz gibi web sunucularıdır. Sitelerimizi bunlar üzerinden yayınlarız. Mesela önceki yazılarımda WordPress olarak oluşturduğumuz sitemizi apache2 nin belirlediği klasörde barındırıyoruz. Yani aslında sunucuda apache2 üzerinde yayınlıyoruz.

Sunucumuza sitemiz için bir istek geldiğinde önce bu isteği nginx karşılıyor. Nginx de doğrudan apache2’nin sunucu içinde yayın yaptığı 8080 portuna iletiyor. Apache2 de domain adından çözüp hangi siteye istek yapıldığını algılayıp gelen isteğe dair işlemleri yapıyor isteğe cevap veriyor. Cevap da yine nginx (apache2 ->nginx -> kullanıcının tarayıcısı) üzerinden iletiliyor. Nginx gelen isteğin nereye yönlendirileceğine karar veriyor. Genel mantık bu.

Nginx in yaptığı bu işe Reverse Proxy deniyor. Vereceğim linkten daha fazla detay öğrenebilirsiniz. Nginx Reverse Proxy Nedir?

Asp.Net Core ile site yapmaya aşinaysanız Kestrel’i duymuşsunuzdur. Asp.Net Core ile sitemizi önceki Asp. Net Mvc uygulamalarında yaptığımız gibi sadece windows makinelerde çalışan IIS üzerinden yayınlamak yerine Linux, MacOs gibi işletim sistemleri olan sunucularda da yayınlayabiliyoruz. Yani Cross Platform oldu. Alttaki resimde Kestrel’in yerini görebilirsiniz.

Biz burada AspNet Core 3.1 uygulamamızı yayınlarken VestaCP ile yüklenmiş olan nginx ayarlarında düzenleme yapıp her zaman apache2 yerine domain adımıza bakarak Kestrel e yönlenmesini sağlayacağız. Buradan araya gireceğiz.

Hadi yapalım.

Neler yapmalıyız?

1. Asp.Net Core 3.1 sitemiz için VestaCP de domain oluşturmalıyız.

Bir önceki yazımda anlattığım işlemlerin aynısını yapacağız. Önceki yazım

Böylece apache2 ye yönlenecek şekilde nginx ve apache2 üzerindeki konfigurasyon dosyalarını VestaCP üzerinden oluşturmuş olacağız.

Daha öncede bahsettiğim gibi nginx doğrudan apache2 ye yönlenecek şekilde konfigurasyonu ayarlıyor. Biz burada nginx deki konfigurasyonu ubuntu nun terminal ekranını (nasıl açılacağından bahsetmiştim. Link) kullanarak kestrele yönlenecek şekilde değiştireceğiz ve apache konfigurasyonunu iptal etmiş olacağız.

Şimdi sadece VestaCP’de domain oluşturduktan konfigurasyon dosyalarının ubuntu da hangi dizinde (klasörde) oluştuğuyla alakalı bir resim ekleyeceğim. Düzenleme işlemini sonra yapacağız.

Ben asp.net core üzerinde yaptığım boş siteyi yenidenemesitem.xyz üzerinden yayınlayacağım. Domain adı olarak sadece yenidenemesitem.xyz yi ekledim.

Konfigurasyon dosyaları admin kullanıcısının ulaşabildiği klasörlerde oluşuyor. Bu yüzden,

sudo su root

komutu ile root kullanıcına geçiyoruz. Sonra,

cd ../admin/conf/web

komutu ile konfigurasyon dosyalarının bulunduğu klasöre ulaşıyoruz.

ls

komutu ile klasörü listeliyoruz ve VestaCP nin eklediğimiz domaine göre nginx ve apache2 tarafında oluşturduğu 2 adet konfigurasyon dosyasını yanyana görüyoruz. Ok işareti ile gösterdiğim nginx’e ait dosyada düzenleme yapacağız.

2. Asp.Net Core 3.1 sitemizi sunucuda bulunduracağımız klasörü belirlemeliyiz.

Araştırırken gördüğüm kadarıyla oluşturacağımız sitenin dosyalarını genellikle aşağıda belirttiğim klasör altında tutuyorlar.

/var/www/siteyeaitklasör

Önce terminal ekranında şu komutu çalıştırarak www klasörüne ulaşalım ve listeleyelim. (başta “/” olunca kök-root klasörden itibaren demek)

cd /var/www && ls

Burada sitemizin adında bir klasör oluşturalım ve listeyelim.

mkdir yenidenemesitem.xyz && ls

Yapacağımız işlem bitti şimdi sitemizi oluşturalım.

3. Asp.Net Core 3.1 sitemizi oluşturmalıyız.

Ben Visual Studio 2019 kullanıyorum. Sizde VS 2017 varsa ve güncellemelerini yaptıysanız büyük ihtimalle Core 3.1 ile proje ekleyebilirsiniz.

Visual Studio’yu açalım ve Create New Project diyelim. Aşağıdaki ekran açılacaktır. Burada Asp.Net Core Web Application’ı bulalım ve Next butonuna basalım.

Sonra proje adının ve bilgisayarınızda hangi klasörde bulunacağını belirlediğiniz ekran gelecek. Burada sitenizin adını ve istediğiniz klasörü belirtelim Create butonuna basalım.

Bundan sonra sitemizin proje şablonunu ve kullanacağımız framework versiyonunu belirleyeceğiz. Ben şablon olarak ne kadar site boş olsa da birkaç sayfa görünsün diye istediğimden Model-View-Controller olan şablonu seçiyorum. Framework olarak yukarıda gördüğünüz Asp.Net Core 3.1 i seçiyorum (Bu yoksa Core 3.1.1 SDK’yı kurmanız lazım. Windows için SDK – MacOs için SDK – Tüm 3.1 SDK larının yüklemelerin sayfası) ve Create butonuna basıyorum ve proje oluşuyor. Siz de aynısını yapın.

Güncelleme: Ben devam yazımı yazarken 3.1.200 versiyonu çıkmış. Ubuntuya bu yeni versiyon yüklendi. Sizin de yukarıdaki Tüm yüklemeler dediğim linkten 3.1.200 yüklemenizi ya da Visual Studio’nuzu son versiyonuna güncellemenizi yazıda anlattıklarımın düzgün çalışması açısından tavsiye ediyorum.

Bundan sonra projede yapılacak birkaç işlem var. Öncelikle sitenin yayınlanacağı Portu belirlemeliyiz. Kestrel varsayılan olarak 5000 portundan yayın yapar. Ben bunu değiştireceğim 1923 yapacağım.

Bunun için önce Program.cs dosyasını açalım ve aşağıdaki kodu ekleyelim.

webBuilder.UseUrls("http://localhost:1923");

Sonra Properties klasörü altındaki launchSettings.json dosyasını açıp aşağıdaki resimdeki gibi https için 1924, http için 1923 ve hazır oradayken ASPNETCORE_ENVIRONMENT ‘ı da Production yapalım.

Bundan sonra da yine kod kısmında Reverse Proxy sebebiyle yapmamız gereken bir kaç işlem var. Bunun için,

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();

kodlarını Startup.cs içerisindeki Configure metoduna ekliyoruz. Ancak aşağıdaki resimde de görebileceğiniz gibi app.UseAuthorization(); dan öncesine ekleyelim. ForwardedHeadersOptions sınıfı için namespaceler içerisine

using Microsoft.AspNetCore.HttpOverrides;

eklenmelidir.

Ben boş bir site için bu değişiklikleri yaptım. Sizin herhangi bir amaçla yapacağınız tüm sitelerde de bu işlemler yapılmalıdır.

4. Sitenin publish dosyalarının oluşturulması

Bunlardan sonra artık sitemizin publish (yayınlanması) dosyalarını hazırlamaya geldi. Burada dikkat etmemiz gereken şeyler var.

Önce publish ekranımızı açıyoruz. Projenin üzerinde sağ tıklayıp menüyü açıyoruz ve Publish… e tıklıyoruz.

Açılan ekranda Folder seçip Advanced butonuna tıklıyoruz.

Yeni açılan ekranda Deployment Mode -> Framework-Dependent ve Target Runtime -> linux-x64 seçmeliyiz.

Burada kısaca Deployment Mode u açıklayım. Bizim seçtiğimiz gibi Framework-Dependent seçersek sunucumuzda yukarıda belirttiğim .Net Core 3.1 SDK’nın yüklü olması gerekiyor. Diğer seçenek ise Self-Contained seçilirse publish dosyalarının içerisine sdk dosyalarını da ekliyor. Ama birden fazla siteyi Self-Contained olarak yüklersek her biri için SDK dosyalarını yükleyeceğinden sunucu da fazladan yer kaplayacaktır. Biz ise Framework-Dependent seçerek bir defa yüklüyoruz. Tüm siteler için ortak kullanılmasını sağlıyoruz. Sunucunuzdaki disk boyutunuza göre istediğinizi seçebilirsiniz.

Save butonuna basıp bir önceki ekrana geçiyor ve Create Profile diyerek Publish Profile oluşturuyoruz. Publish butonuna basıp seçilen klasörde publish dosyalarını oluşturuyoruz.

Biraz uzun oldu farkındayım. O yüzden bir sonraki yazımda son işlemleri tamamlayıp sitemizi yayınlayacağız. Herkese iyi günler.

Sonraki yazım için

 

2 Comments

  1. Disques yorum eklentisi isterük.
    Birde işlem sonrası sunucuya dosyaları gönderme kısmıda olsa.
    Ftp ile mi attık. yoksa remote publish i direkt ayarlayabilir miyiz gibi delice sorular geliyor insanın aklına.
    elinize sağlık efenim. takipteyiz.

    1. Sunucuya dosyaları gönderme işlemini bir sonraki devam yazım da anlattım. Konuyla alakalı 6. yazımda da FileZilla kullanarak sFTP ile profil oluşturup oradan dosyaları atıyorduk. Aynı şekilde yaptım. Remote Publish i de denedim aslında ama orada FTP ye izin veriyor görebildiğim kadarıyla. Visual Studio dan bağlantı yapmaya çalıştım ama bağlantı kurulurken sorun çıktı. Zannedersem sFTP istiyor. Fazla da üstelemedim. Devam yazımı da okumanı tavsiye ederim.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir