Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
127 yazı bulundu
Artifact Repository ve Release Süreci: Feed'ler, Container Image Tag'leri, Hotfix Akışı ve Destek Politikası
DevOps SERİ 07

Artifact Repository ve Release Süreci: Feed'ler, Container Image Tag'leri, Hotfix Akışı ve Destek Politikası

Container registry'lerinde tag varsayılan olarak hareketli bir işaret; bu yüzden image'ı sürüm ve commit SHA'sıyla etiketle, OCI label'larıyla kaynağını işaretle ve digest ile deploy et. Bookstore API'sinde aynı tag'in iki farklı image'ı göstermesini, SDK'nın OCI label'larını ve digest çıktısını, cherry-pick'li 1.x hotfix'ini ve release branch'inde yayın workflow'unun olmaması tuzağını gösteriyor; artifact repository seçeneklerini, release cadence'ı ve destek politikası şablonunu ele alıyoruz.

14 Kas 2026 13 dk 2
Angular Kütüphanesini npm'e Yayınlamak: ng-packagr, peerDependencies, dist-tag'ler ve Trusted Publishing
DevOps SERİ 06

Angular Kütüphanesini npm'e Yayınlamak: ng-packagr, peerDependencies, dist-tag'ler ve Trusted Publishing

Angular kütüphanesini ng-packagr ile Angular Package Format'ta paketle, kaynak klasörünü değil dist çıktısını yayınla ve desteklediğin Angular aralığını peerDependencies ile beyan et. @bookstore/ui'de secondary entry point'i ve exports alanını kuruyor, peer aralığı karşılanmayınca ERESOLVE'u, npm 11'in tag'siz prerelease yayınını reddetmesini gösteriyor, dist-tag, deprecate ve trusted publishing workflow'unu ele alıyoruz.

14 Kas 2026 13 dk 2
NuGet Paketi Yayınlamak: dotnet pack, Paket Metadata'sı, Package Validation ve nuget.org Trusted Publishing
DevOps SERİ 05

NuGet Paketi Yayınlamak: dotnet pack, Paket Metadata'sı, Package Validation ve nuget.org Trusted Publishing

NuGet paketini metadata, README, lisans ve symbol paketiyle oluştur, EnablePackageValidation ile önceki sürümü baseline alıp kazara breaking change'i pack sırasında yakala, nuget.org'a ise uzun ömürlü API key yerine OIDC ile bir saatlik key veren trusted publishing ile yayınla. Bookstore.Contracts'ta isteğe bağlı parametrenin binary kırılmasını CP0002 ile, framework kaldırmayı PKV006 ile, aynı sürümün ikinci push'unu yerel sunucuda 409 Conflict ile gösteriyoruz.

14 Kas 2026 12 dk 2
Changelog ve Release Notes: Conventional Commits'ten Otomatik CHANGELOG'a, Deprecation Politikası
DevOps SERİ 04

Changelog ve Release Notes: Conventional Commits'ten Otomatik CHANGELOG'a, Deprecation Politikası

CHANGELOG'u Conventional Commits'ten otomatik üret, release notes'u ise elle yaz: araç sürümü ve değişiklik listesini mekanik olarak çıkarır, ama deprecation'ı, geçiş adımlarını ve destek takvimini bilmez. Bookstore.Contracts'ı commit-and-tag-version ile 1.1.0 ve 2.0.0'a taşıyor, [Obsolete] ve DiagnosticId ile bir sürüm önceden uyarıyor, 2.0 geçiş notunu yazıyor ve release-please manifest mode ile PR tabanlı alternatifi karşılaştırıyoruz.

14 Kas 2026 12 dk 2
Git'ten Sürüm Üretmek: MinVer, Nerdbank.GitVersioning ve GitVersion Karşılaştırması
DevOps SERİ 03

Git'ten Sürüm Üretmek: MinVer, Nerdbank.GitVersioning ve GitVersion Karşılaştırması

Sürümü Git'ten üretmenin üç yolu var: MinVer yalnız tag'e bakar, Nerdbank.GitVersioning version.json ile git height'ı birleştirir, GitVersion branch tipine göre hesaplar. Üçünü Bookstore.Contracts'ta aynı senaryoyla gerçek çıktılarla karşılaştırıyor; tag öneki, AssemblyVersion varsayılanları, GitVersion 6'daki config değişiklikleri ve CI'da fetch-depth: 0 gerektiren shallow clone tuzağını gösteriyoruz.

14 Kas 2026 12 dk 2
.NET ve Angular'da Sürüm Bilgisi: AssemblyVersion, FileVersion, InformationalVersion, Source Link ve /version Endpoint'i
DevOps SERİ 02

.NET ve Angular'da Sürüm Bilgisi: AssemblyVersion, FileVersion, InformationalVersion, Source Link ve /version Endpoint'i

.NET'te sürümü Version ile tek yerden ver, kütüphanede AssemblyVersion'ı major'a sabitle, FileVersion'a CI build numarasını koy ve InformationalVersion'ı .NET 8'den beri commit SHA'sını ekleyen SDK'ya bırak. Bookstore API'sinde /version endpoint'i, log satırı ve OpenTelemetry service.version ile sürümü görünür kılıyor; Angular'da define ile build'e sürüm gömüyor ve service worker ile yeni sürüm bildirimini Playwright'la deniyoruz.

14 Kas 2026 13 dk 2
Sürüm Numarası Ne Anlatır? SemVer 2.0.0, Pre-release, Build Metadata ve CalVer
DevOps SERİ 01

Sürüm Numarası Ne Anlatır? SemVer 2.0.0, Pre-release, Build Metadata ve CalVer

Sürüm numarası, kime söz verdiğine göre seçilir: paketler için SemVer 2.0.0 uyumluluk sözü verir, deploy edilen uygulamalar için CalVer ve build numarası "ne zaman, ne çıktı" sorusunu cevaplar. Pre-release ve build metadata sıralamasını NuGet.Versioning ve npm semver ile gerçek çıktılarla karşılaştırıyor, 0.x aralıklarını, breaking change türlerini, .NET ve Angular destek politikalarını ve Bookstore için karar tablosunu ele alıyoruz.

14 Kas 2026 13 dk 2
Certificate'ları İzlemek ve Kesintileri Önlemek: Envanter, Expiry Alert'leri, TLS Testleri ve Gerçek Olay Örnekleri
DevOps SERİ 08

Certificate'ları İzlemek ve Kesintileri Önlemek: Envanter, Expiry Alert'leri, TLS Testleri ve Gerçek Olay Örnekleri

Certificate kesintilerini önlemek için diskteki dosyayı değil, istemcinin gördüğü certificate'ı dışarıdan ölçersin: blackbox exporter'ın last_chain metric'ine ömre göre eşikli bir alarm, probe_success alarmı, CT log ve CAA ile envanter. Reload edilmemiş yenilemeyi, eksik intermediate'ı, yanlış SAN'ı, earliest_cert_expiry'yi yanıltan cross certificate'ı ve saat kaymasını laboratuvarda üretiyor, alarmları promtool ile, TLS config'ini testssl.sh ile test ediyoruz.

14 Kas 2026 15 dk 5
mTLS ve Internal Certificate'lar: ASP.NET Core'da Client Certificate Authentication ve Kendi CA'nı İşletmek
DevOps SERİ 07

mTLS ve Internal Certificate'lar: ASP.NET Core'da Client Certificate Authentication ve Kendi CA'nı İşletmek

mTLS'te istemci de bir certificate ve private key ile attığı imzayla kimliğini kanıtlar; public CA'lar client authentication EKU'sunu bıraktığı için bunun için offline root'lu kendi internal CA'n gerekir. ASP.NET Core'da AddCertificate ile CustomRootTrust, issuer ve CN tabanlı partner eşlemesi kuruyor, Kestrel'in TLS katmanındaki sessiz reddini, revocation'ı ve Nginx'in certificate'ı header ile iletmesinin private key olmadan nasıl taklit edilebildiğini gerçek koşularla görüyoruz.

14 Kas 2026 14 dk 6
HTTPS'i Zorunlu Kılmak: HTTP→HTTPS Redirect, HSTS'i Kademeli Açmak, Preload ve Mixed Content
DevOps SERİ 06

HTTPS'i Zorunlu Kılmak: HTTP→HTTPS Redirect, HSTS'i Kademeli Açmak, Preload ve Mixed Content

HTTPS'i zorunlu kılmak için redirect'i TLS'in bittiği katmanda yaparsın, API'lerde redirect yerine HTTP'yi 400 ile reddedersin ve HSTS'i 5 dakikadan bir yıla kademeli açarsın; includeSubDomains'ten önce alt domain envanteri şart. Proxy arkasında UseHttpsRedirection döngüsünü ve secure'suz cookie'yi, 301'in POST'u GET'e çevirmesini, HSTS'in HTTP-only alt domain'i kilitlemesini ve Angular build'indeki mutlak http:// URL'in mixed content olarak bloklanmasını gerçek koşularla görüyoruz.

14 Kas 2026 16 dk 6
Yönetilen Platformlarda Certificate: Caddy, Azure App Service, Key Vault, Front Door ve Kubernetes'te cert-manager
DevOps SERİ 05

Yönetilen Platformlarda Certificate: Caddy, Azure App Service, Key Vault, Front Door ve Kubernetes'te cert-manager

Managed platformlarda certificate'ı platform alır ve yeniler, ama her birinin seni yakalayacak bir sınırı vardır: Caddy /data volume'ü olmadan rate limit'e takılır, App Service managed certificate wildcard vermez, Front Door doğrudan CNAME ister, cert-manager her yenilemede key'i değiştirir. Caddy, cert-manager ve Envoy Gateway'i Pebble ile gerçek koşularla çalıştırıp pinning'in yenilemede nasıl kırıldığını görüyoruz.

14 Kas 2026 17 dk 5
.NET'te ve Kestrel'de Certificate: dev-certs, PEM/PFX Yükleme, SNI, Yenilemede Reload ve HttpClient Doğrulaması
DevOps SERİ 04

.NET'te ve Kestrel'de Certificate: dev-certs, PEM/PFX Yükleme, SNI, Yenilemede Reload ve HttpClient Doğrulaması

Kestrel, configuration'daki PEM veya PFX certificate'ını restart'sız yeniden yükler ama yalnızca Path'i izler, yaklaşık beş saniyede fark eder ve endpoint'i yeniden başlatır; root olmayan kullanıcıyla Certbot'un dosyalarını okuyamaz, bu yüzden bir deploy hook gerekir. dev-certs'in Linux'taki SSL_CERT_DIR ayarını, ServerCertificateSelector ile SNI'ı ve HttpClient'ta doğrulamayı kapatmadan CustomRootTrust ile internal CA'ya güvenmeyi gerçek koşularla görüyoruz.

14 Kas 2026 15 dk 7
Blog Haritası