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
13 yazı bulundu
Geliştirici İçin Linux Lab'ı ve SSH: VM Kurmak, Key ile Bağlanmak ve Sunucuyu İlk Turda Tanımak
DevOps SERİ 01

Geliştirici İçin Linux Lab'ı ve SSH: VM Kurmak, Key ile Bağlanmak ve Sunucuyu İlk Turda Tanımak

Bir Linux sunucusuna şifre yerine ed25519 SSH key'iyle bağlanılır: key'i ssh-keygen ile üretir, ssh-copy-id ile sunucuya koyar, ~/.ssh/config'te bir alias tanımlarsın. Windows'ta karşılıklarıyla birlikte ssh-agent'ı, host key uyarısının neden ciddiye alınması gerektiğini, uname/df/free/ss ile ilk turu, rsync ile Bookstore.Api'yi taşımayı ve 127.0.0.1'e bind edilmiş bir uygulamaya SSH tüneliyle ulaşmayı gerçek çıktılarla gösteriyoruz.

14 Kas 2026 15 dk 2
Linux File System Hiyerarşisi: /etc, /var, /opt, /srv, /home, /proc ve "Her Şey Bir Dosya"
DevOps SERİ 02

Linux File System Hiyerarşisi: /etc, /var, /opt, /srv, /home, /proc ve "Her Şey Bir Dosya"

Linux'ta program /usr ya da /opt'ta, configuration /etc'de, değişen veri /var'da durur; Bookstore için bu /opt/bookstore/releases, /etc/bookstore, /var/log/bookstore ve /var/lib/bookstore demek. find, cp -a ve rm -r'yi, hard link ile symlink farkını, current symlink'ini çevirirken ln -sf'nin sessizce yanlış yere link açtığını, /proc/<pid> ile çalışan bir .NET process'ine dışarıdan bakmayı ve appsettings.production.json'un Linux'ta neden okunmadığını gerçek çıktılarla gösteriyoruz.

14 Kas 2026 13 dk 3
User, Group ve Permission'lar: rwx, chmod, chown, umask, sudo ve Service Kullanıcıları
DevOps SERİ 03

User, Group ve Permission'lar: rwx, chmod, chown, umask, sudo ve Service Kullanıcıları

Bir uygulamayı Linux'ta ne root ne de kendi kullanıcınla, yalnızca ona ait ve giriş yapamayan bir service kullanıcısıyla çalıştırırsın; Bookstore için bookstore kullanıcısı, release'leri yazan ayrı bir deploy kullanıcısı ve 640 izinli bir secrets.env. rwx'in dizindeki anlamını, chmod/chown/umask'ı, setgid dizini, sticky bit'i, ACL'i, visudo ile yalnızca tek komuta izin veren bir sudoers kuralını ve chmod 777 ile sudo kaynaklı tuzakları gerçek çıktılarla gösteriyoruz.

14 Kas 2026 14 dk 3
Process'ler ve Signal'ler: ps, top/htop, kill, nice, Process Ağacı ve Zombie'ler
DevOps SERİ 04

Process'ler ve Signal'ler: ps, top/htop, kill, nice, Process Ağacı ve Zombie'ler

Bir .NET uygulamasını Linux'ta SIGTERM ya da SIGINT ile kapatırsan yarıdaki istekleri bitirip temiz çıkar; SIGHUP ve SIGKILL ise onu anında öldürür (gerçek denemeyle). ps ve top çıktısını (VIRT/RES, STAT, load average) okumayı, process ağacını, jobs/fg/bg ile SSH kopunca hangi işlerin öldüğünü, nohup, disown ve setsid farkını, SigIgn'ı, nice/renice'i, /proc ve lsof ile açık dosyaları ve zombie'lerin neden kill ile ölmediğini gösteriyoruz.

14 Kas 2026 15 dk 4
systemd ile Service Yönetmek: systemctl, Unit Override'ları, Timer'lar ve Cron
DevOps SERİ 05

systemd ile Service Yönetmek: systemctl, Unit Override'ları, Timer'lar ve Cron

Bir service'in reboot'tan sonra kalkması için start yetmez, systemctl enable gerekir; Restart=always yalnızca çalışan service'in process'i ölünce devreye girer (gerçek reboot denemesiyle). Bookstore.Api'yi systemctl ile yönetmeyi, unit dosyalarının yerini, Nginx'e systemctl edit ile drop-in override eklemeyi, After/Wants/Requires farkını, systemd-analyze'ı, Persistent=true'lu gece yedeği timer'ını ve Ubuntu 24.04'te cron'un gerçek environment tuzaklarını gösteriyoruz.

14 Kas 2026 14 dk 3
Log Okumak 1: journalctl, /var/log ve logrotate
DevOps SERİ 06

Log Okumak 1: journalctl, /var/log ve logrotate

journalctl -u ile bir service'in log'unu okursun; -p err seviyeye, --since zamana, -b açılışa göre daraltır, kullanıcı adm grubunda değilse journal boş görünür. Bookstore.Api'nin log'larını journalctl filtreleriyle okumayı, AddSystemd'nin .NET log seviyelerini journal'a nasıl taşıdığını, persistent ve volatile journal farkını gerçek bir reboot'la, /var/log'daki auth.log, kern.log ve Nginx log'larını, logrotate'te create ile copytruncate farkını gösteriyoruz.

14 Kas 2026 18 dk 3
Log Okumak 2: Pipe, Redirection, grep, awk, sed, sort ve uniq ile Log'dan Cevap Çıkarmak
DevOps SERİ 07

Log Okumak 2: Pipe, Redirection, grep, awk, sed, sort ve uniq ile Log'dan Cevap Çıkarmak

Log'dan cevap çıkarmanın yolu küçük araçları pipe ile zincirlemektir: awk alanı çıkarır, grep filtreler, sort sıralar, uniq -c sayar. stdin/stdout/stderr ve redirection'ın temelinden sonra Bookstore'un gerçek Nginx access log'unda en çok istek atan IP'leri, dakika başına 5xx'i, en yavaş istekleri ve bir request id'nin uygulama log'undaki izini bulup uniq, regex ve locale tuzaklarını gösteriyoruz.

14 Kas 2026 14 dk 3
Network Komutları: ip, ss, ping, curl, dig, nc ile "Port Açık mı, Kim Dinliyor, Neden Ulaşamıyorum?"
DevOps SERİ 08

Network Komutları: ip, ss, ping, curl, dig, nc ile "Port Açık mı, Kim Dinliyor, Neden Ulaşamıyorum?"

Bir servise ulaşılamıyorsa katman katman ilerlersin: getent ile isim, ping ve nc -zv ile yol ve firewall (refused dinleyen yok, timeout paket düşüyor demek), ss -tlnp ile kim hangi adreste dinliyor, sonra curl ve error log. ip, ss, lsof, curl, traceroute, dig ve resolvectl'i Bookstore sunucusunda gösterip eski hosts kaydı, ufw ve yanlış port'un üst üste bindiği gerçek bir vakayı çözüyor, proxy ve IPv6 tuzaklarına bakıyoruz.

14 Kas 2026 14 dk 3
Paket Yönetimi: apt, Repository'ler, Güncellemeler ve Sunucuya .NET ile Node Kurmak
DevOps SERİ 09

Paket Yönetimi: apt, Repository'ler, Güncellemeler ve Sunucuya .NET ile Node Kurmak

Ubuntu 24.04'te .NET'i Ubuntu'nun kendi feed'inden kurar, packages.microsoft.com'u bir apt pin dosyasıyla dışarıda tutarsın; apt-cache policy her paketin nereden ve hangi öncelikle geldiğini gösterir. apt'nin temelini, deb822 ve Signed-By'ı, backports PPA'sını, NodeSource'u script'siz kurmayı, apt-mark hold'u, unattended-upgrades'i ve gerçek bir upgrade'de needrestart'ın Bookstore.Api'yi yeniden başlattığını gösteriyoruz.

14 Kas 2026 13 dk 3
Disk, Memory ve CPU: df, du, free, vmstat, iostat, OOM Killer ve "Disk Doldu" Vakası
DevOps SERİ 10

Disk, Memory ve CPU: df, du, free, vmstat, iostat, OOM Killer ve "Disk Doldu" Vakası

Açık bir log dosyasını rm ile silmek yer açmaz; process dosyayı tutar, lsof +L1 onu gösterir ve truncate alanı geri verir. Bookstore'un log diskinin dolduğu gerçek bir vakayla df, du ve inode'ları, free'de available sütununu ve page cache'i, OOM killer'ı ve systemd'nin MemoryMax sınırını, load average'ı core sayısıyla okumayı ve vmstat, pidstat, iostat ile CPU ile I/O beklemesini ayırmayı gösteriyoruz.

14 Kas 2026 16 dk 3
Sunucuyu Sertleştirmek: SSH Ayarları, ufw, Fail2ban, Otomatik Güncellemeler ve En Az Yetki
DevOps SERİ 11

Sunucuyu Sertleştirmek: SSH Ayarları, ufw, Fail2ban, Otomatik Güncellemeler ve En Az Yetki

Ubuntu'da şifreyle girişi kapatmak için ayarı /etc/ssh/sshd_config.d/ altında, cloud-init'in dosyasından önce okunan bir drop-in'e yazmak ve sshd -T ile doğrulamak gerekir; sshd ilk okuduğu değeri kullanır. Bookstore sunucusunda ikinci oturum kuralını, ufw'yi doğru sırayla açmayı, Docker'ın yayımlanan port'larda ufw'yi atlamasını, Fail2ban'ı ve systemd ile en az yetkiyi gerçek çıktılarla gösteriyoruz.

14 Kas 2026 16 dk 3
Sunucuda Sorun Giderme Playbook'u: "Site Açılmıyor"dan Root Cause'a Uçtan Uca
DevOps SERİ 12

Sunucuda Sorun Giderme Playbook'u: "Site Açılmıyor"dan Root Cause'a Uçtan Uca

Site açılmadığında önce kesintiyi bitir, sonra sebebi bul: uptime, dmesg, free, df, systemctl --failed, journalctl -p err, ss ve top ile 60 saniyede kaynakları ele, sonra Nginx error log'u ve journal ile hipotezi daralt. Lab'da ürettiğim üç Bookstore vakasıyla deploy sonrası crash loop ve 502'yi, CPU çalan bir yedek job'ını ve süresi dolmuş certificate'ı gerçek çıktılarla çözüyoruz.

14 Kas 2026 17 dk 2
Blog Haritası