Arşiv
Tarihe göre tüm yazılar.
Bu blogu neden ve nasıl kurdum
canugurlu.dev'i Astro ile kurdum: neden statik site seçtim, AstroPaper temasını nasıl Türkçeleştirdim ve siteyi Coolify üzerinde nasıl deploy ediyorum.
Coolify'da build exit code 137 ile neden ölüyor
Coolify'da build exit code 137 ile ölüyorsa sebep OOM. dmesg ve OOMKilled ile nasıl doğrulanır, build belleği neden runtime'dan farklı boyutlandırılır.
Statik site mi, SSR mi
Varsayılan statik olmalı, SSR'ı seçmek için bir sebep gerekir. Doğru soru içeriğin dinamikliği değil, yanıtın ziyaretçiye göre değişip değişmediğidir.
Entegrasyon logunu nereye yazmalı
Sipariş gönderilemedi yazan log satırı hiçbir şey anlatmaz. İstek ve cevabı correlation id'yle, redaksiyonla ve saklama süresiyle tabloya nasıl yazmalı.
LCP'yi bozan şey genelde font
Metin ağırlıklı sayfalarda LCP'yi geciktiren şey görsel değil, font zinciri. font-display, self-host, preload, subset ve fallback metrikleriyle çözüm sırası.
.env dosyasını sunucuya elle kopyalamayı bırakın
scp ile elle kopyalanan .env dosyası versiyonlanmaz, sunucuyla birlikte kaybolur. Platform enjeksiyonu, .env.example ve build/runtime ayrımıyla doğru kurulum.
Lock dosyasını commit'leyin
package.json bir aralık kaydeder, lock dosyası gerçek sonucu. Lock yoksa build makinesi siz test etmediğiniz bir sürümü kurar, hatayı üç hafta sonra bulursunuz.
GitHub Actions'ta cache ile build süresi
CI süresinin çoğu değişmeyen bağımlılığı yeniden kurmakla geçiyor. Doğru cache anahtarı, restore-keys ve Docker layer cache'i ile build dakikadan saniyeye iner.
MySQL'de utf8 değil utf8mb4 kullanın
MySQL'in utf8'i aslında utf8mb3, dört baytlık emoji'yi saklayamıyor. Düzeltme veritabanı, tablo, sütun ve bağlantının dördünde birden utf8mb4 gerektiriyor.
Shopify webhook'ta HMAC doğrulaması nasıl yapılır
X-Shopify-Hmac-Sha256 doğrulanmazsa URL'i öğrenen herkes sahte sipariş gönderir. Ham body, hash_equals ve doğrulamanın kuyruktan önce çalışması burada.
Cache-Control başlıklarını nginx'te doğru yazmak
Hash'li varlıklara immutable, HTML'e must-revalidate verilir. add_header'ın üst bloktan miras almaması, always parametresi ve gzip ayarı burada anlatılıyor.
Retry stratejisi: üstel geri çekilme ve jitter
Sabit aralıklı retry bir kesintiyi kendi kendine yarattığınız bir yığılmaya çeviriyor. Üstel geri çekilme, jitter ve retry bütçesi olmadan retry güvenli değil.
Tarihi UTC sakla, gösterimde çevir
Server, veritabanı ve uygulama saat dilimini karıştırmak, günün belirli saatlerinde çıkan hatalar üretir. Kural tek: UTC sakla, çevirmeyi gösterime bırak.
Queue worker'ı Supervisor ile çalıştırın
Terminalde php artisan queue:work çalıştırmak bir dağıtım değil. Worker çöktüğünde kimse fark etmez, Supervisor'ın autorestart ayarı bu boşluğu kapatır.
Liquid'de döngü maliyeti
Liquid Shopify'ın sunucusunda render olur, yavaş bir döngü cache ile gizlenemez. Nested for, all_products ve paginate kullanımı sayfa süresini belirler.
Docker imajınız neden 1,2 GB
Docker imajı şiştiğinde sebep genelde tek aşamalı dockerfile'dır. Build araçlarını runtime'dan ayırmadan imaj küçülmez, katman silip eklemek de işe yaramaz.
failed_jobs tablosuna bakmıyorsanız kuyruğunuz yok
Kuyruk kurmak worker çalıştırmak değil. Başarısız işleri kimse görmüyorsa kuyruk bir sistem değil, verinizin sessizce kaybolduğu bir kuyudur. Bildirim şart.
Shopify Admin API'de sayfalama ve maliyet
Shopify Admin API'de sayfa numarası yok, cursor var. GraphQL tarafında da istek sayısı değil sorgu maliyeti sayılıyor. İkisini bilmeden katalog çekilmiyor.
Sipariş durum eşlemesini tek yerde tutun
Her pazaryeri sipariş durumunu farklı adlandırıyor. Bu adları kodun içine dağıtırsanız üçüncü entegrasyonda yirmi ayrı dosyaya dokunmak zorunda kalırsınız.
Pazaryeri stok senkronunda hız limiti
Beş bin ürünü tek tek güncellerseniz hız limitine takılırsınız. Çözüm daha hızlı istek atmak değil, daha az istek atmak. Toplu uç nokta ve delta senkron.
Webhook'u önce kabul edin, sonra işleyin
Webhook endpoint'i iş yapmaz, iş kaydeder. Shopify 5 saniyede cevap bekler; işi request içinde yaparsanız timeout alır ve aynı olayı tekrar tekrar gönderir.