Caddy Server ile Asp.NET Core Çalıştırma

Selamlar. Bu yazıda Caddy Server ile Asp.NET Core Çalıştırma hakkında bilgiler vermeye çalışacağım. Son yazıda Spotify ve JavaScript yetkilendirmesi hakkında. yazmıştım. Kişisel bilgisayarımda Linux dağıtımı bulunuyor. Bu yazı Linux dağıtımı baz alınarak anlatılacak olsa da aynı yönergeleri uygulamanız mümkün. Hemen başlayalım:

Caddy Server ile Asp.NET Core Çalıştırma

Caddy Server ile Asp.NET Core Çalıştırma İşlemine Başlamadan Önce

Yazıya başlamadan önce dotnet kurulu olmalı ve bu yazı MySQL, MSSQL vb. data eklemeyi içermeyecektir. Proxy konularında kafası karışan arkadaşlar var ise nasıl çalıştığını bu sayede görecekler. Ayrıca Caddy basit bir dokümantasyona sahip olduğu için de kafa karışıklığı yaşanmayacak.

Dotnet Core Kurulumu

Öncelikle çoğu kişinin Ubuntu kullandığını varsayıyorum. Bu nedenden dolayı bu linkteki yönergeleri uygulayacağız. Linki verdim isterseniz kullandığınız dağıtımı seçip adımları tamamlayabilirsiniz. Microsoft'un imzasını kaydediyoruz.

curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
sudo mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg

Microsoft'un kaynak depolarını ekleyelim:

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-ubuntu-zesty-prod zesty main" > /etc/apt/sources.list.d/dotnetdev.list'

Yukarıdaki adım işletim sisteminize göre değişiklik gösterir. Son adım olarak sistemi güncelleyelim ve Dotnet Core kurulumunu yapalım:

sudo apt-get update
sudo apt-get install dotnet-sdk-2.0.2

Kurulum için konsola dotnet komutunu vermeniz yeterlidir.

Caddy Kurulumu

Caddy için bu adrese gidelim. Ben http.cors ve http.expires modüllerini seçerek indireceğim. Hatta istersek cgi vs. seçebiliriz. Ama basit olsun diyorsak şunu kullanabiliriz:

curl https://getcaddy.com | bash -s personal http.cors,http.expires

Parola ekranından sonra caddy kurulumu tamamlandı. Zaten ufak tefek bir şey olmasından dolayı çok da uzun sürmüyor. 5-10 saniye.

Ardından caddy'nin binary dosyasını var altında www klasörünün içine kopyalayalım. Eğer yoksa www klasörünü oluşturun.

sudo cp /usr/local/bin/caddy /var/www/caddy

Asp.NET Core Projesi Oluşturma

Data işlemleri yapmayacağız. Bu nedenle şu anda sadece basit bir proje açalım. Şu komutları sırasıyla kullanalım:

sudo mkdir /var/www/mvcsitesi
cd /var/www/mvcsitesi
dotnet new mvc

dotnet run

Artık projemiz 5000 portunda çalışır durumda. Buraya kadar bir şey anlatmadım çünkü yazının konusu Caddy üzerinden sistemin nasıl ayağa kalkacağı ile alakalı.

Servislerin Yazımı

Geldik bir diğer önemli konuya. Hem Caddy hem de Dotnet uygulaması için systemd üzerinde çalışacak iki adet servis yazacağız. Buradan aslında Caddy'nin proxy görevi gördüğünü de anlıyor olacağız.

MVC Projesinin Servisi:

sudo nano /etc/systemd/system/mvcsitesi.service

[Unit]
Description=MVC Sitemiz

[Service]
WorkingDirectory=/var/www/mvcsitesi
ExecStart=/usr/bin/dotnet /var/www/mvcsitesi/bin/Debug/netcoreapp2.0/mvcsitesi.dll
Restart=no
RestartSec=10                                          
SyslogIdentifier=mvcsitesi
User=root
Environment=ASPNETCORE_ENVIRONMENT=Production 

[Install]
WantedBy=multi-user.target

Caddy İçin Servis Yazımı

sudo nano /etc/systemd/system/caddy.service

[Unit]
Description=Caddy webserver
Documentation=https://caddyserver.com/
After=network.target

[Service]
User=root
WorkingDirectory=/var/www
LimitNOFILE=4096
ExecStart=/var/www/caddy -log stdout -agree=true -email [email protected] -conf=/var/www/Caddyfile
Restart=on-failure
StartLimitInterval=600

[Install]
WantedBy=multi-user.target

Ardından Caddy için izinleri verelim ki sonradan problem yaşamamış oluruz.

sudo setcap cap_net_bind_service=+ep /var/www/caddy

Ardından www klasörünün altına bir adet Caddyfile oluşturalım. Burada sitelerimizi tanıtacağız. Eğer canlıda çalışıyorsanız aşağıdaki gibi adresinizi belirtin. Yoksa localhost yazın.

mvcsitesi.com {
    proxy / localhost:8000 {
        transparent
    }
    gzip
}

Buradaki transparent şunu sağlıyormuş:

header_upstream Host {host}
header_upstream X-Real-IP {remote}
header_upstream X-Forwarded-For {remote}
header_upstream X-Forwarded-Proto {scheme}

Şimdi az önce yazdığımız servisleri tek tek başlatalım.

systemctl restart mvcsitesi

Burada bize prompt ile parola sorabilir. Ardından caddy server'ı servis olarak başlatalım:

systemctl restart caddy

Sistemin çalışıp çalışmadığını anlamak için adres satırına http://localhost yazalım. Kontrolü böyle sağlamış oluruz. Avantajı şu 80 portu caddy üzerinden sunulurken esas oğlan 5000 portu ise gizlenmiş durumda oluyor.  Bir diğer kontrol yöntemi ise şöyle oluyor:

Bunun aslında bir proxy olduğunu direkt olarak dotnet core projelerini çalıştıran bir yapısı olmadığını yazı sonuna ekleyeyim. Daha fazla bilgi almak için resmi sitedeki dokümantasyona göz atabilirsiniz:

https://caddyserver.com/docs

Okuduğunuz için teşekkür ederim. Bir de son olarak bu yöntemle django, bottle ve flask projelerini ayağa kaldırdım. Hani olur da nasıl deploy ediyorduk ya diye düşünüyorsanız basit olarak işinizi görüyor. Belki onun için de bir yazı yazarım. Bu yazıda Caddy Server ile Asp.NET Core Çalıştırma hakkında bilgi sahibi olduk.