İçeriğe geç
Can Uğurlu
Geri dön

Bu blogu neden ve nasıl kurdum

Uzun süredir yazdığım notlar dağınık dosyalarda duruyordu. Bu blog, o notları tek yerde toplamak ve düzenli olarak yayımlamak için var.

Kimseyi bir şeye ikna etmek gibi bir amacı yok. Karşılaştığım problemi, denediğim yolları ve sonucu yazıyorum. Aynı problemi altı ay sonra ben yaşarsam buraya bakacağım.

Neden Astro

Blog içeriği statik. Statik içerik için sunucuda çalışan bir uygulamaya ihtiyaç yok. Astro varsayılan olarak sıfır JavaScript üretir, içeriği build sırasında HTML’e çevirir ve sonuç doğrudan bir CDN veya nginx üzerinden servis edilir.

Öne çıkan sebepler:

Tema: AstroPaper

Sıfırdan tema yazmak yerine AstroPaper üzerine kurdum. Zaten hazır gelen özellikler:

Üzerine yaptığım tek yapısal değişiklik Türkçe yerelleştirme oldu. Temayı bağımlılık olarak kurmak yerine repoya kopyaladım ve git geçmişini sildim. Karşılığı şu: yukarı akıştan gelen düzeltmeleri elle taşımam gerekiyor. Kazancı da şu: hiçbir dosya bana kapalı değil, tema API’si ile boğuşmuyorum.

Türkçeleştirme

AstroPaper’ın src/i18n/lang/ altında dil dosyaları var. tr.ts ekledim, astro.config.ts içindeki defaultLocale değerini tr yaptım ve tarih biçimlendirmesi için dayjs Türkçe locale’ini import ettim.

// astro.config.ts
i18n: {
  locales: ["tr"],
  defaultLocale: "tr",
  routing: { prefixDefaultLocale: false },
}

prefixDefaultLocale: false sayesinde URL’lerde /tr/ öneki yok. Site tek dilli, gereksiz bir segment taşımasına gerek yok.

Arayüz metinleri src/i18n/lang/tr.ts içinde tek dosyada duruyor ve tipi src/i18n/types.ts tarafından zorlanıyor. Bileşenin içine string yazmak mümkün ama yanlış; eksik anahtar astro check aşamasında patlıyor.

Tarih tarafında iki ayrı yol var. Yazı tarihleri dayjs ile Türkçe locale üzerinden biçimleniyor, arşiv sayfasındaki ay adları ise Intl.DateTimeFormat("tr") ile geliyor.

Deploy: Coolify

Vercel yerine kendi sunucumdaki Coolify üzerinde tutuyorum. Sebep basit: siteyi zaten var olan bir sunucuda barındırmak ek maliyet çıkarmıyor ve build ortamını tamamen kontrol ediyorum.

Akış şöyle:

  1. main branch’e push
  2. Coolify webhook’u yakalıyor
  3. Depodaki Dockerfile ile multi-stage build çalışıyor
  4. dist/ klasörü nginx imajına kopyalanıyor
  5. Container ayağa kalkıyor, Coolify TLS sertifikasını hallediyor

Sonuç: statik dosyaları servis eden küçük bir nginx container’ı. Çalışan bir Node süreci yok, patlayacak bir uygulama sunucusu yok, yamalanacak bir çalışma zamanı yok.

nginx.conf dosyasını da kendim yazdım. İçerik hash’li dosyalar bir yıllık immutable cache alıyor, HTML ise her istekte doğrulanıyor. Bu ikisini ters kurmak, deploy ettiğiniz değişikliğin bir hafta görünmemesi demek.

Bundan sonrası

Buraya çoğunlukla e-ticaret entegrasyonları, Shopify, Laravel ve altyapı tarafında karşılaştığım problemleri yazacağım.

Varsayılan format 500-900 kelimelik teknik not olacak. Tek problem, tek çözüm. Konu gerçekten geniş olduğunda uzun yazacağım, ama kelime hedefi tutturmak için değil.


Bu yazıyı paylaş:

Önceki Yazı
Coolify'da build exit code 137 ile neden ölüyor