ASP.NET Core Uygulamasını Heroku ile Ücretsiz Yayınlamak

Bazen uygulamanızı yayınlamanız gerekir fakat elinizde bir sunucu yoktur. İşte tam bu tür durumlar için uygun olduğunu düşündüğüm bir çözümü sizlerle paylaşmak istedim.

Heroku’yu bilmeyenler için kısaca açıklamak gerekirse; uygulamalarımızı kolayca yayınlayabileceğimiz bir cloud platformu python, ruby, nodejs, php.. gibi bir sürü programlama diline doğrudan destek veriyor ve oldukça geliştirici dostu bir platform. dotnet platformuna doğrudan destek vermesede docker üzerinde uygulamamızı yayınlayabiliyoruz. (dahası: https://www.heroku.com/what)

Herokunun fiyatlandırması yukarıdaki gibi. Biz bu yazıda ücretsiz sürümü kullanacağız. Ücretsiz sürümde uygulamızın ayda 1000 saat açık kalmasını sağlayabiliyoruz ve 30 dk boyunca istek almazsa uyku konumua geçiyor.

Ana konuya giriş yapmadan önce biraz senaryomuzdan söz etmek istiyorum. Sene olmuş 2019 continuous integration olmadan uygulama olmaz diye düşündüğüm için basit ve ücretsiz bir çözüm olan circleci servisini kullanmayı uygun gördüm. Kodlarımızı github üzerinde git repomuzda barındırağız ve her commit attığımızda circleci servisi tetiklenerek yeni bir release oluşturup oluşan bu release’i heroku’ya deploy edecek ve yeni sürümümüz zahmetsizce yayına alınmış olacak.

 

1-) Heroku uygulamasının oluşturulması

https://dashboard.heroku.com/new-app linkini ziyaret ettiğimizde karşımızıda App name ve Choose a region olmak üzere 2 tane input çıkıyor. App name’e uygulama adımızı giriyoruz ben bu örnek için netcore-demo adını uygun gördüm ve region olarak yakınlığından dolayı Europe seçiyorum.

 

2-) Yeni bir ASP.NET Core Projesi Oluşturulması

dotnet new mvc komutunu kullanarak yeni bir asp.net core mvc projesi oluşturuyorum ve ardından docker build için Dockerfile dosyamı ve circleci için .circleci klasörü içerine bir config.yml dosyası oluşturuyorum. Finalde projem aşağıdaki gibi görünüyor. (Dockerfile ve .circleci/config.yml içeriklerini yazının sonundaki github reposunda bulabilirsiniz.)

 

3-) Projenin github üzerindeki repoya pushlanması

Oluşturduğumuz asp.net core mvc projesini github üzerindeki bir git reposuna pushlamamız gerek bunun için bir repository oluşturup projemizi buraya pushluyoruz. ( github yardımı için https://help.github.com/en/articles/adding-an-existing-project-to-github-using-the-command-line )

4-) CircleCI kurulumu

CircleCI’a https://circleci.com/vcs-authorize/ adresinden github ile login olduktan sonra sol menüden Add Project diyoruz. Açılan sayfadan ilgili repomuzu bulup (ben heroku-dotnet-core seçtim) yanındaki Set Up Project butonuna basıyoruz. Açılan sayfadaki sağ altta bulunan Start Building butonuna bastıktan sonra işlemimiz tamamlanmış oluyor. 

Şimdide circleci’ın herokuya bağlanabilmesi için bazı tokenlar eklemiz gerekli bunun için sol menüden building sekmesine giriyoruz ve fail olan ilk buildimizi açıyoruz açılan sayfadaki sağ üstte bulunan çark işaretine (project settings) basıyoruz. Açılan sayfadaki build settings altındaki environment variable linkine tıklıyoruz. Sonuç olarak https://circleci.com/gh/ismkdc/heroku-dotnet-core/edit#env-vars şeklinde bir urlde olmanız lazım. Eğer bulamadıysanız https://circleci.com/gh/kullanıcı-adınız/proje-adınız/edit#env-vars şeklinde direk linke gidebiliriz.

Buraya eklemeniz gereken 3 adet değişken bulunuyor;

1.si HEROKU_USERNAME değişkeni. Bu değişkene değer olarak heroku kullanıcı adımızı yazıyoruz. (ayrı bir kullanıcı adı belirtmediysek mail adresimiz)

2.si HEROKU_APP_NAME bu değişenede heroku üzerinde oluşturduğumuz uygulamanın adını yazıyoruz.

3.sü HEROKU_API_KEY bu değişkende de heroku api keyini girmemiz gerek bu keye https://dashboard.heroku.com/account linkinden erişebiliriz. (sayfanın alt taraflarında API Key olarak bulunuyor Reveal butonu ile görünür hale getirilebilir.)

Şimdi tekrar build edebiliriz. Build etmek için sol menüden builds sekmesine gidip son fail olan builde tıklayıp sağ üste bulunan Rerun workflow butonuna basıyoruz ve build işlemimiz tekrar başlıyor.

Build işlemi bittikten sonra heroku üzerinden uygulamamızı ziyaret edip sağ üste bulunan Open App butonuyla url’imizi ziyaret edebiliriz.

 

ve sonuç…

 

Uygulamamızı başarılı bir şekilde yayınlamayı başardık :) artık her commit atıp pushladığımızda circleci bizim için uygulamızı build edip release alacak ardından bu release’i herokuya deploy edecek.

 

Uygulamanın kaynak kodları: https://github.com/ismkdc/heroku-dotnet-core