ASP.NET Core (Blazor) Projesini AWS EC2 (Amazon Elastic Compute Cloud) Bulut Sunucuda Yayınlamak

post-thumb

Bu makalede ASP.NET Core projelerinizi AWS EC2 bulut sunucuda nasıl yayınlayabileceğiniz hakkında basit bir inceleme yapacağız.

Öncelikle bazı genel tanımlamalarla başlamanın uygun olacağını düşünüyorum.

AWS EC2 Nedir?

AWS EC2 (Amazon Elastic Compute Cloud), Amazon Web Services (AWS) tarafından sunulan ölçeklenebilir bulut bilişim hizmetidir. EC2, kullanıcıların sanal sunucular (instance'lar) oluşturmasına ve yönetmesine olanak tanır. Bu sanal sunucular, web uygulamaları çalıştırmak, veritabanları barındırmak veya çeşitli bulut tabanlı çözümler geliştirmek için kullanılabilir. AWS EC2, esnek ölçeklendirme ve ödeme seçenekleri sunar, bu da kullanıcıların ihtiyaçlarına göre kaynaklarını artırıp azaltmalarını sağlar. Böylece, işletmeler kendi veri merkezlerine yatırım yapmadan, yüksek performanslı ve güvenilir bir altyapı üzerinde uygulamalarını çalıştırabilirler.

SSH Nedir?

SSH (Secure Shell), bilgisayar ağları üzerinden güvenli iletişim sağlamak için kullanılan bir protokoldür. SSH, özellikle uzak sunuculara güvenli bir şekilde bağlanmak, komutlar yürütmek ve dosya transferi yapmak için yaygın olarak kullanılır. SSH, veri aktarımı sırasında tüm bilgileri şifreler, bu da kullanıcı adı, parola ve diğer hassas bilgilerin korunmasını sağlar. AWS EC2 gibi bulut tabanlı sunuculara erişim sağlamak için de SSH kullanılır, böylece kullanıcılar sunucularını güvenli bir şekilde yönetebilirler.

PEM Dosyası Nedir ve Ne İşe Yarar?

PEM Dosyası (Privacy-Enhanced Mail), kriptografik anahtarlar ve sertifikalar için yaygın olarak kullanılan bir dosya formatıdır. PEM dosyaları genellikle .pem uzantısına sahiptir ve Base64 kodlamasıyla metin biçiminde saklanır. AWS EC2 gibi bulut platformlarında, PEM dosyaları genellikle SSH üzerinden sunuculara bağlanmak için kullanılır. Bu dosya, EC2 instance'ınıza bağlanırken kimlik doğrulaması yapmak için gerekli olan özel anahtarı içerir. PEM dosyası, bağlantı sırasında şifrelenmiş iletişimin güvenli bir şekilde gerçekleştirilmesini sağlar ve yetkisiz erişimi engeller. EC2 instance'ınızı oluştururken bu dosyayı indirirsiniz ve daha sonra sunucunuza bağlanmak için kullanırsınız. Bu nedenle, PEM dosyanızı güvenli bir yerde saklamanız önemlidir.

Bu temel bilgilerden sonra eğer her şey hazırsa projemizi nasıl AWS EC2 bulut sunucuda yayınlayabileceğimizi adım adım inceleyelim.

1. Adım: .NET Core Projesini Publish Etme

İlk olarak, projenizin yayınlanabilir (publish) dosyalarını oluşturmanız gerekiyor. Bu işlem, projenizi yerel makinenizde derleyip, sunucuya aktarılabilir bir hale getirecektir.

  • Visual Studio Kullanarak:

    • Projenizi açın.
    • Build menüsünden Publish {ProjeAdı} seçeneğine tıklayın.
    • Yayınlama hedefi olarak Folder (Klasör) seçeneğini seçin.
    • Dosya yolunu belirleyin (örneğin: C:\Users\sinan\Desktop\Project).
    • Publish butonuna tıklayın.
  • .NET CLI Kullanarak:

    • Proje dizininize gidin.
    • Aşağıdaki komutu çalıştırarak publish dosyalarını oluşturun:
      dotnet publish -c Release -o C:\Users\sinan\Desktop\Project
      
    • Bu işlem tamamlandığında, projenizin yayınlanabilir dosyaları masaüstünüzdeki Project klasöründe olacaktır.

2. Adım: AWS EC2 Sunucusu İçin PEM Dosyasını Hazırlama

AWS EC2 sunucusuna SSH ile bağlanabilmek için .pem uzantılı bir dosyaya ihtiyacınız olacak. Bu dosya, EC2 instance'ınıza güvenli bir şekilde bağlanmanızı sağlayacak özel bir anahtardır.

  • PEM Dosyasını İndirme:

    • AWS Management Console'da EC2 instance'ınızı oluştururken "Key Pair" oluşturmanızı isteyecek. Bu aşamada bir PEM dosyası indireceksiniz. Bu dosyayı güvenli bir yerde saklayın çünkü tekrar indirme şansınız olmayacak.
  • PEM Dosyasını Doğru Yere Koyma:

    • İndirilen PEM dosyasını güvenli bir klasöre taşıyın. Örneğin: C:\Users\sinan\.ssh\sinan.pem.

3. Adım: AWS EC2 Sunucusuna SSH ile Bağlanma

Şimdi, PEM dosyasını kullanarak EC2 sunucunuza SSH ile bağlanabilirsiniz.

  • Windows Kullanıyorsanız:
    • CMD veya PowerShell'i açın.
    • Aşağıdaki komutu çalıştırarak EC2 sunucunuza bağlanın:
      ssh -i C:\Users\sinan\.ssh\sinan.pem ec2-user@your-ec2-ip
      
  • MacOS veya Linux Kullanıyorsanız:
    • Terminal'i açın.
    • Aşağıdaki komutu çalıştırarak EC2 sunucunuza bağlanın:
      ssh -i /path/to/your/sinan.pem ec2-user@your-ec2-ip
      
    • Not: your-ec2-ip yerine EC2 instance'ınızın gerçek IP adresini koymalısınız.

4. Adım: Yayınlanabilir Dosyaları EC2 Sunucusuna Kopyalama

Artık yayınlanabilir dosyalarınızı EC2 sunucusuna kopyalayabilirsiniz.

  • SCP Komutunu Kullanarak Dosyaları Kopyalama:
    • CMD, PowerShell veya Terminal'de aşağıdaki komutu çalıştırın:
      scp -i C:\Users\sinan\.ssh\sinan.pem -r C:\Users\sinan\Desktop\Project ec2-user@your-ec2-ip:/var/www/
      
    • Bu komut, yerel bilgisayarınızdaki Project klasörünü EC2 sunucusundaki /var/www/ dizinine kopyalar.

5. Adım: EC2 Sunucusunda Projeyi Çalıştırma

Sunucuda projenizi çalıştırarak yayına alabilirsiniz.

Uygulamanızı Manuel Olarak Çalıştırma:

    1. SSH ile EC2 sunucunuza bağlanın.
    2. Proje klasörünüze gidin:
      cd /var/www/Project
      
    3. Projeyi çalıştırın:
      dotnet PROJECT.WEB.dll --urls "http://0.0.0.0:5000"
      
    4. Tarayıcınızda http://your-ec2-ip:5000 adresine giderek uygulamanızın çalıştığını kontrol edin.

6. Adım: Uygulamayı Servis Olarak Ayarlama (Opsiyonel)

Uygulamanızın sürekli çalışmasını sağlamak için bir systemd servisi oluşturabilirsiniz.

  • Servis Dosyası Oluşturma:

    • SSH ile EC2 sunucunuza bağlıyken, şu komutları çalıştırarak bir servis dosyası oluşturun:
      sudo nano /etc/systemd/system/project.service
      
    • Aşağıdaki içeriği dosyaya yapıştırın:
      [Unit]
      Description=Project ASP.NET Core Web App
      After=network.target
      
      [Service]
      WorkingDirectory=/var/www/Project
      ExecStart=/usr/bin/dotnet /var/www/Project/PROJECT.WEB.dll
      Restart=always
      RestartSec=10
      SyslogIdentifier=project-app
      User=ec2-user
      Environment=ASPNETCORE_ENVIRONMENT=Production
      
      [Install]
      WantedBy=multi-user.target
      
    • Dosyayı kaydedin ve çıkın (CTRL + O, ENTER, CTRL + X).
    • Servisi başlatın
      sudo systemctl start project.service
      
    • Servisin her yeniden başlatmada otomatik çalışması için etkinleştirin:
      sudo systemctl enable project.service
      

7. Adım: Uygulamanızı Tarayıcıdan Test Edin

Uygulamanız artık yayında ve erişilebilir olmalı. Tarayıcınızda http://your-ec2-ip:5000 adresine giderek uygulamanızın doğru çalışıp çalışmadığını kontrol edin.

Bu adımları takip ederek ASP.NET Core projenizi AWS EC2 sunucusunda başarıyla yayınlayabilirsiniz.

 

Ek: PostgreSQL Veritabanı Yönetimi (Opsiyonel)

Bu bölümde, PostgreSQL kullanarak nasıl veritabanı yönetimi yapabileceğinizi anlatacağım. Benim tercihim PostgreSQL olduğu için bu şekilde anlatıyorum fakat dilediğiniz veritabanını kullanabilrsiniz. Bu adımlar, özellikle veritabanınızı sıfırlamanız gerektiğinde veya yeni bir veritabanı oluşturmak istediğinizde faydalı olabilir. Bu adımları EC2 sunucusunda PostgreSQL ile çalışıyorsanız takip edebilirsiniz.

1. PostgreSQL'e Bağlanmak

Öncelikle, EC2 sunucunuzda PostgreSQL veritabanına bağlanmanız gerekiyor. PostgreSQL'e bağlanmak için psql komut satırı aracını kullanabilirsiniz.

  • PostgreSQL'e root olarak bağlanmak:

    sudo -u postgres psql
  • Belirli bir kullanıcı adı ile bağlanmak:

    Eğer PostgreSQL'e farklı bir kullanıcı adıyla bağlanmak isterseniz, aşağıdaki komutu kullanın:

    psql -U your_username -d PROJECT
    
    your_username yerine kendi kullanıcı adınızı yazmayı unutmayın. Eğer şifre sorulursa, ilgili kullanıcının şifresini girin.

2. Mevcut Veritabanını Silmek

Veritabanınızı sıfırlamak isterseniz, önce mevcut veritabanını silmelisiniz. Aşağıdaki komut, belirtilen veritabanını siler:

DROP DATABASE IF EXISTS "PROJECT";

Bu komut, PROJECT adlı veritabanını siler. Eğer bu veritabanı mevcut değilse, hata vermez.

3. Yeni Veritabanı Oluşturmak

Yeni bir veritabanı oluşturmak için aşağıdaki SQL komutunu kullanabilirsiniz:

CREATE DATABASE "PROJECT";

Bu komut, PROJECT adında yeni bir veritabanı oluşturur.

4. PostgreSQL'den Çıkmak

Veritabanı işlemlerinizi tamamladıktan sonra PostgreSQL oturumunu kapatabilirsiniz. Bunu yapmak için aşağıdaki komutu kullanın:

\q

Bu komut sizi PostgreSQL oturumundan çıkarır ve terminale geri döner.

Adımların Özeti:

  1. PostgreSQL'e Bağlanın:

    • sudo -u postgres psql komutunu kullanarak PostgreSQL'e bağlanın.
    • Alternatif olarak, psql -U your_username -d PROJECT komutunu kullanarak belirli bir kullanıcı adı ile bağlanın.
  2. PROJECT Veritabanını Silin:

    • DROP DATABASE IF EXISTS "PROJECT"; komutunu kullanarak mevcut veritabanını silin.
  3. Yeni PROJECT  Veritabanı Oluşturun:

    • CREATE DATABASE "PROJECT"; komutunu kullanarak yeni bir veritabanı oluşturun.
  4. PostgreSQL'den Çıkın:

    • \q komutunu kullanarak PostgreSQL oturumunu kapatın.

Bu adımlar, PostgreSQL üzerinde veritabanı yönetimi yapmanızı sağlar ve EC2 sunucusunda veritabanınızı sıfırdan oluşturmanıza olanak tanır.

Bu adımları uygulamamın sebebi, veritabanımda oluşan "relation already exists" gibi hataları çözmekti. Projemde veritabanını en güncel sürümde tutmak için database migration özelliğini kullanıyorum. Ancak, bu işlem sırasında veritabanında zaten var olan tablolarla ilgili çakışma hataları alıyordum. Bu tür hatalar, genellikle bir tablonun veya veritabanı bileşeninin zaten mevcut olduğu durumlarda ortaya çıkar.

Bu sorunu çözmek için mevcut veritabanını tamamen sıfırlamam gerekti. Veritabanını sıfırlayarak, tüm yapıları baştan oluşturmak ve migration işlemlerini sorunsuz bir şekilde gerçekleştirmek mümkün oldu. Bu adımlar, veritabanını temiz bir sayfaya getirmeme ve potansiyel çakışmaları ortadan kaldırmama yardımcı oldu.

Kısaca, veritabanını sıfırlayarak oluşabilecek hata ve çakışmaları önlemek ve sorunsuz bir migration süreci sağlamak amacıyla bu işlemleri gerçekleştirdim.