Merhaba arkadaşlar, bu yazımda sizlere .NET Core API CircleCI ile Heroku Deployment konusundan bahsedeceğim.
Bir önceki yazımızda Circle CI entegrasyonu işlemlerimizi gerçekleştirmiştik. Docker File dosyamızı da oluşturarak HEROKU üzerine deployment işlemi yapacağımızdan kısaca bahsetmiştim. Bu yazıda da ilgili işlemlerimizi gerçekleştireceğiz.
Heroku Nedir?
Heroku bulut tabanlı platform servisi. 2007’de kurulan Heroku, o dönemde sadece Ruby dilini desteklerken; günümüzde Java, Node.js, Scala, Clojure, Python, PHP ile Go dilleri ve platformlarını desteklemektedir. Heroku, platformlarında işletim sistemi olarak Ubuntu’yu kullanmaktadır.
Vikipedi
Heroku ile projelerimizi ücretsiz olarak deploy edebiliriz. Aynı zamanda ücretli servis hizmeti de bulunmaktadır. Ücretli versiyonlarında da farklı özellikler de kullanılabilmektedir.
Heroku: https://www.heroku.com
Heroku’nun sitesine girdiğimizde bir üyelik oluşturmamız gerekmektedir.
Üyeliği oluşturup giriş yapıldıktan sonra dashboard ekranımız karşımıza gelmektedir. (https://dashboard.heroku.com)
Daha önceden bir proje oluşturduysak burada gösterimleri sağlanır.
Eğer bir uygulama yoksa, Yeni bir uygulama açacağız.
Sağ tarafta bulunan New > Create New App menüsüne tıklıyoruz.
Karşımıza çıkan ekranda da uygulama ismini yazıp, bölgesini seçiyoruz.
Heroku üzerinde projemizi oluşturduktan sonra aşağıdaki ekran karşımıza gelecektir.
Şimdi de Docker File dosyamızı aşağıdaki gibi oluşturuyoruz.
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["NetCoreApiSample/NetCoreApiSample.csproj", "NetCoreApiSample/"]
RUN dotnet restore "NetCoreApiSample/NetCoreApiSample.csproj"
COPY . .
WORKDIR "/src/NetCoreApiSample"
RUN dotnet build "NetCoreApiSample.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "NetCoreApiSample.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
CMD ASPNETCORE_URLS=http://*:$PORT dotnet NetCoreApiSample.dll
.NET Core 5.0 kullanacağımızı belirtiyoruz.
Release ve Publish işlemi için projemizin adını belirtiyoruz.
Son olarak da ASPNETCORE ile çalışacağımızı ve portumuzu belirtiyoruz.
Bu işlemlerden sonra da Heroku üzerinden API KEY değerimizi almamız gerekiyor. Çünkü Circle CI entegrasyonunu sağlarken config.yml dosyamızın içerisinde 3 adet environment değeri belirtmiştik. Bunları girmemiz gerekiyor.
Heroku üzerinden API KEY değerini almak için sağ tarafta bulunan kullanıcı menüsünden Account Settings sayfasına gidiyoruz.
Account Settings sayfasına gittikten sonra aşağıya doğru indiğimizde API KEY kısmı bulunmaktadır. Buradan API KEY değerini yoksa eğer GENERATE etmemiz gerekiyor.
API KEY değerimizi oluşturduktan sonra Circle CI adresine giderek burada oluşturduğumuz projenin Environment bilgilerini ayarlamamız gerekmektedir. Bunu sağlamak için de Projemizin sağ tarafında bulunan (…) butonuna tıklayarak Project Settings sayfasına gitmemiz gerekiyor.
Açılan ekranda bulunan sol menüden de Environment Variables sayfasına gidiyoruz.
Environment Variables sayfasında da config.yml dosyamızda oluşturduğumuz değerleri girmemiz gerekiyor.
Bu değerleri de girdikten sonra projemizde bir check-in işlemi gerçekleştirdiğimizde Circle CI ile projemiz derlenecek ve Docker bağlantısı ile de HEROKU üzerine deployment işlemi gerçekleşmiş olacaktır.
Deployment işlemlerinden sonra hata alınabilir bu hatayı da düzeltmek için API projemizdeki Startup dosyasına bazı eklemeler yapmamız gerekiyor.
services.AddHttpsRedirection(options => { options.HttpsPort = 443; })
.AddMvcCore()
.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader());
});
ConfigureServices metodu içerisinde HttpsPort bilgisini girmemiz ve CorsPolicy eklemesi yapıyoruz.
Daha sonra da yine ConfigureServices metodu içerisinde ForwardedHeaders değerlerini belirtiyoruz.
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
Configure metodu içerisinde de bu CorsPolicy ve ForwardedHeaders kullanımı sağlayacağımızı belirtiyoruz.
app.UseForwardedHeaders();
app.UseCors("CorsPolicy");
İlgili işlemleri de gerçekleştirdikten sonra check-in işlemi gerçekleştirdiğimizde projemiz tekrar derlenecek ve HEROKU üzerine deployment işlemi gerçekleştirilecektir.
Umarım faydalı olur 🙂
Bir sonraki yazıda görüşmek üzere…