İlk önce terminal üzerinden .NET Core sdk'sını ve runtime'ını kuralım:

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2
sudo apt-get install aspnetcore-runtime-2.2

Şimdi ise projemizi yayınlayalım:

dotnet publish --configuration Release

Projemizin dosyaları şu dizinde bulunacak, "bin/Release/<framework_adi>/Publish"

Uygulamayı test edelim:

Komut satırından uygulamayı çalıştırın: dotnet <uygulama_adi>.dll. Bir tarayıcıda, uygulamanın Linux üzerinde varsayılan olarak http://localhost:5000 adresinde çalışıyor olmalı.

Nginx'i kuralım:

sudo apt-get install nginx
sudo service nginx start
sudo service nginx status

Ve config dosyalarını düzeltelim:

sudo nano /etc/nginx/sites-available/default

aşağıdaki şekilde düzeltelim:

server 
{
   listen 81; 
   location / 
   {      
      proxy_pass http://localhost: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;
   }
}

Yaptığımız değişiklikleri kaydedelim:

sudo nginx -t
sudo nginx -s reload

Nginx'in yazılacak WebAPI servisi özelinde ilgili Kestrel Process'ini ayağa kaldıracağını bilmesi gerekiyor. IIS'in Worker Process çalışma modeline benzer bir yaklaşım olarak düşünelim. Bunun için service uzantılı bir dosya yazmak lazım.

sudo gedit /etc/systemd/system/kestrel-<proje-adi>.service

Şu şekilde dosyayı düzenleyelim:

[Unit]
Description=BaseWebAPI(Standard Asp.Net Web API 2.0 project) on NGinx
 
[Service]
WorkingDirectory=/var/www/<Proje-Klasörü>
ExecStart=/usr/bin/dotnet/ /var/www/<Proje-Klasörü>/<Proje-Adi>.dll
Restart=always
RestartSec=30
SyslogIdentifier=dotnet-<Proje-Adi>
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
 
[Install]
WantedBy=multi-user.target

Ve son olarak servislerimizi çalıştıralım:

sudo systemctl enable kestrel-baseapi.service
sudo systemctl start kestrel-baseapi.service

Bu da nginx'i yeniden çalıştırıyor:

sudo service nginx restart

İşte bu kadar, sitemiz yayında :)