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
262 yazı bulundu
Terraform'da Sorun Giderme: Plan'ı Okumak, TF_LOG, Provider Hataları, State Kilidi, "Already Exists" ve Drift
DevOps SERİ 14

Terraform'da Sorun Giderme: Plan'ı Okumak, TF_LOG, Provider Hataları, State Kilidi, "Already Exists" ve Drift

Terraform'da sorun gidermenin ilk adımı hatanın hangi aşamada (init, plan ya da apply) çıktığına bakmak ve plan'daki notları okumaktır. Plan'ı metin ve JSON olarak okuyor, TF_LOG ile provider'ın içine bakıyor, lock file uyumsuzluğunu, "already exists" hatasını, kilitli state'i, provider'ın göremediği drift'i, cycle hatasını ve -target'ı gerçek çıktılarla inceliyor; Azure'da soft-delete'te bekleyen Key Vault vakasını çözüyoruz.

15 Kas 2026 13 dk 6
Terraform Built-in Function'ları ve Expression Kalıpları: String, Collection, Encoding, Filesystem ve Network Fonksiyonları, for, Splat ve terraform console
DevOps SERİ 13

Terraform Built-in Function'ları ve Expression Kalıpları: String, Collection, Encoding, Filesystem ve Network Fonksiyonları, for, Splat ve terraform console

Terraform expression'larını rahat yazmanın yolu, 119 built-in fonksiyonu aileleriyle tanımak ve her ifadeyi önce terraform console'da denemektir. String, collection, encoding, filesystem ve network fonksiyonlarını, for ve splat'i, optional() varsayılanlarını ve AzureRM'in provider function'larını deniyor; Bookstore'da ortam başına subnet'i cidrsubnet ile, API ayarlarını da YAML'dan kuruyoruz.

15 Kas 2026 14 dk 7
Windows Container'ları: .NET Framework 4.8 ve IIS Uygulamasını Container'a Almak, Server Core, Nano Server ve Isolation Modları
DevOps SERİ 17

Windows Container'ları: .NET Framework 4.8 ve IIS Uygulamasını Container'a Almak, Server Core, Nano Server ve Isolation Modları

Bir .NET Framework 4.8 ve IIS uygulaması Windows container'ına girer, ama yalnız Windows host'ta ve image'ın Windows sürümü host'unkine uyduğunda çalışır. Bookstore'un eski back office'i için Server Core tabanlı Dockerfile'ı, web.config'i ortam değişkenleriyle güncelleyen configuration builder'ları, ServiceMonitor ve LogMonitor'ü, process ve Hyper-V isolation'ı, 2,6 GB'lık image'ı, çok işletim sistemli tag'leri ve AKS'teki Windows node pool'u ele alıyor, .NET 10'a taşıma kararını tartışıyoruz.

15 Kas 2026 14 dk 8
Dockerfile'ın Az Bilinen Instruction ve Bayrakları: Heredoc, SHELL, ADD'nin Git/URL Kaynakları, COPY --exclude/--parents/--link ve Build Check'ler
DevOps SERİ 16

Dockerfile'ın Az Bilinen Instruction ve Bayrakları: Heredoc, SHELL, ADD'nin Git/URL Kaynakları, COPY --exclude/--parents/--link ve Build Check'ler

Dockerfile'ın yeni bayrakları güvenli kullanılırsa build'i hem kısaltır hem sağlamlaştırır: heredoc'ta set -eu, ADD'de --checksum, COPY'de --parents ve --exclude, publish'te RUN --network=none. Frontend'in docker/dockerfile:1 tag'inin yazım günü 1.27.1'de kaldığını ve 1.29.0 ile davranışın nasıl değiştiğini gerçek çıktılarla gösteriyor, SHELL ile pipefail, ONBUILD, build check'ler ve hadolint'i Bookstore.Api'nin yeni Dockerfile'ında birleştiriyoruz.

15 Kas 2026 17 dk 8
Kubernetes'i Genişletmek: CRD, Controller ve Operator Pattern'i, ownerReferences ve Finalizer'lar
DevOps SERİ 22

Kubernetes'i Genişletmek: CRD, Controller ve Operator Pattern'i, ownerReferences ve Finalizer'lar

Kubernetes'i genişletmek, CRD ile yeni bir resource tipi tanımlayıp onu izleyen bir controller'ın desired state'i sürekli gerçeğe çevirmesi demek. Bookstore için bir Campaign CRD'si, CEL doğrulaması, ownerReferences ile garbage collection, .NET ve KubernetesClient ile yazılmış bir controller, finalizer yüzünden Terminating'de takılan namespace'in güvenli çözümü ve finalizer'ı zorla silmenin bıraktığı sahipsiz kaynak gerçek çıktılarla.

15 Kas 2026 14 dk 8
kubectl ile Verimli Çalışmak: Output Format'ları, jsonpath, custom-columns, Selector'lar, patch, events, k9s ve Plugin'ler
DevOps SERİ 21

kubectl ile Verimli Çalışmak: Output Format'ları, jsonpath, custom-columns, Selector'lar, patch, events, k9s ve Plugin'ler

kubectl'i verimli kullanmak, okurken custom-columns, jsonpath, selector ve events ile tam istediğin cevabı almak, değiştirirken de doğru patch türünü ve güvenlik kilitlerini seçmek demek. JSON patch'in index yüzünden yanlış değişkeni ezip pod'u çökertmesini, server-side apply çatışmasını, kubectl edit drift'ini, kuberc ile onaylı delete'i, krew, k9s ve stern'i gerçek çıktılarla görüyoruz.

15 Kas 2026 14 dk 10
Pod'lar Nereye Yerleşir? nodeSelector, Affinity/Anti-Affinity, Taint/Toleration, Topology Spread ve PriorityClass
DevOps SERİ 20

Pod'lar Nereye Yerleşir? nodeSelector, Affinity/Anti-Affinity, Taint/Toleration, Topology Spread ve PriorityClass

Pod'un hangi node'a gideceğini kube-scheduler filter ve score adımlarıyla seçer; zorunlu kurallar pod'u Pending bırakabilir, tercihler hiçbir şeyi garanti etmez. Zorunlu anti-affinity'nin rollout'u kilitlemesini, zone spread'in cordon'da takılmasını ve nodeTaintsPolicy: Honor ile çözülmesini, taint'li worker pool'unu, PriorityClass ile preemption'ı ve "0/3 nodes are available" mesajını gerçek çıktılarla okuyoruz.

15 Kas 2026 14 dk 10
SSH Derinlemesine: ~/.ssh/config, ProxyJump ile Bastion, Port Forwarding ile Uzak Veritabanına Bağlanmak ve Agent Forwarding Riski
DevOps SERİ 16

SSH Derinlemesine: ~/.ssh/config, ProxyJump ile Bastion, Port Forwarding ile Uzak Veritabanına Bağlanmak ve Agent Forwarding Riski

Bastion üzerinden private sunuculara ssh -A ile değil ProxyJump ile geç: agent forwarding açıkken bastion'da root olan biri senin key'inle veritabanı sunucusuna girebiliyor ve ControlPersist bu pencereyi dakikalarca açık tutuyor. ~/.ssh/config'in ilk-değer-kazanır kuralını, Match ve ControlMaster'ı, -L/-R/-D ile tünelleri, bastion'ı AllowTcpForwarding ve PermitOpen ile daraltmayı, FIDO2 key'leri ve SSH certificate'larını gerçek çıktılarla anlatıyoruz.

15 Kas 2026 12 dk 12
Dosya Bulmak, Arşivlemek ve Taşımak: find, xargs, tar, gzip/zstd, zip, rsync, diff ve Checksum
DevOps SERİ 15

Dosya Bulmak, Arşivlemek ve Taşımak: find, xargs, tar, gzip/zstd, zip, rsync, diff ve Checksum

find -mtime +7 sanıldığı gibi 7 günden eski dosyaları değil en az 8 günlükleri bulur; silmeden önce -print ile listeyi oku, -delete'i en sona yaz ve xargs'a dosya adlarını -print0 | xargs -0 ile ver. Bookstore'un release paketini tar --zstd ile hazırlamayı, gzip/xz/zstd farkını, rsync'te sondaki / ile --delete tuzağını ve paketi sha256sum, cmp ve diff ile doğrulamayı gerçek çıktılarla anlatıyoruz.

15 Kas 2026 13 dk 10
Sunucuda Dosya Düzenlemek: vim'in Temel Komutları, nano, sudoedit ve Config Dosyasını Güvenle Değiştirmek
DevOps SERİ 14

Sunucuda Dosya Düzenlemek: vim'in Temel Komutları, nano, sudoedit ve Config Dosyasını Güvenle Değiştirmek

Sunucuda config dosyasını sudo vim ile değil sudoedit ile düzenle, önce yedek al, diff -u ile farkı oku, nginx -t ya da sshd -t ile test et ve restart yerine reload kullan; hatalı config'le reload siteyi korur, restart kapatır. vim'in mode'larını ve temel komutlarını, nano'yu, sudo altında editörün neden nano'ya döndüğünü, CRLF ve .swp tuzaklarını ve /etc'yi etckeeper ile Git'te izlemeyi gerçek çıktılarla anlatıyoruz.

15 Kas 2026 14 dk 9
GitHub CLI ile Terminalden GitHub: gh pr, gh issue, gh run, gh api ve Extension'lar
DevOps SERİ 34

GitHub CLI ile Terminalden GitHub: gh pr, gh issue, gh run, gh api ve Extension'lar

GitHub CLI (gh) bir Git aracı değil, GitHub API'sine konuşan bir istemci; doğru scope'lu bir token'la pull request, issue, CI run'ları ve release'ler terminalden yönetilir. gh pr, gh issue, gh run, gh api, alias ve extension'ları, Bookstore'da PR'dan auto-merge'e iki satırlık akışı ve GH_HOST ile scope tuzaklarını anlatıyoruz.

15 Kas 2026 11 dk 10
Geçmişte Arama: git grep, git log -S/-G/-L, blame -w -C, ignoreRevsFile ve "Bu Satır Ne Zaman, Neden Değişti?"
DevOps SERİ 33

Geçmişte Arama: git grep, git log -S/-G/-L, blame -w -C, ignoreRevsFile ve "Bu Satır Ne Zaman, Neden Değişti?"

Bir satırı kimin, ne zaman, neden değiştirdiğini bulmak için blame'in ilk cevabı yetmez: git log -S metnin ortaya çıktığı commit'i, -G o satırların her değişimini, -L tek bir method'un geçmişini verir. Bookstore'daki kurumsal indirim hatasını git grep, pickaxe, blame -w -C ve .git-blame-ignore-revs ile Git 2.56'da izliyoruz.

15 Kas 2026 11 dk 10
Blog Haritası