6 Yıllık WordPress’ten Git-Tabanlı Statik Mimariye: Foojay.io’nun Hugo, JBang ve Cloudflare Worker İle Yeniden İnşası
OpenJDK ekosisteminin merkezi topluluk platformu Foojay.io, 6 yıllık WordPress altyapısını terk ederek 2.250+ makale, 350+ yazar ve 13,8 milyon okunma verisini Hugo, JBang otomasyon betikleri, Pagefind ve Cloudflare Worker tabanlı sunucusuz (serverless) mimariye taşıdı.
Geleneksel İçerik Yönetim Sistemlerinden "Docs-as-Code" Paradigmasına Geçiş
Küresel Java ve OpenJDK ekosisteminin satıcıdan bağımsız (vendor-neutral) bilgi merkezi olan Foojay.io (Friends of OpenJDK), altı yıl boyunca üzerinde çalıştığı monolitik WordPress altyapısını tamamen terk ederek baştan aşağı yenilenmiş bir statik ve sunucusuz (serverless) mimariye geçiş yaptı. Java Champion Frank Delporte liderliğindeki topluluk mühendisliği ekibinin yaklaşık iki aylık çalışmasıyla tamamlanan bu dönüşüm, yalnızca görsel bir arayüz yenilemesi değil; yüksek trafikli geliştirici portallarının nasıl daha hızlı, güvenli ve sürdürülebilir inşa edilebileceğine dair modern bir yazılım mimarisi vaka analizidir.
Altı yıl içinde 2.250'den fazla derinlemesine teknik makale, 350'yi aşkın yazar profili, 13,8 milyondan fazla okunma kaydı, JUG (Java User Group) dizinleri, sürüm almanakları ve Foojay Podcast transkriptlerini barındıran platform; ilişkisel veritabanı sorguları, üçüncü taraf eklenti güncellemeleri ve dinamik PHP işleme maliyetleri nedeniyle giderek ağırlaşmıştı. Yeni mimari, geleneksel CMS yaklaşımını tamamen ortadan kaldırarak içeriği doğrudan kod gibi yöneten (Docs-as-Code) açık kaynaklı bir boru hattı kurmaktadır.
1. Mimari Dönüşümün Çekirdeği: WordPress'ten Hugo ve GitHub'a Göç
Yeni Foojay.io mimarisinin temelinde, Go diliyle geliştirilmiş yüksek performanslı statik site üreticisi Hugo ve tüm içeriğin barındırıldığı halka açık foojayio/website GitHub deposu yer alır.
Neden Monolitik CMS Terk Edildi?
Geliştirici toplulukları için işletilen teknik portallarda geleneksel veritabanı tabanlı CMS'ler üç temel darboğaz üretir:
- Saldırı Yüzeyi ve Eklenti Kırılganlığı: WordPress tabanlı sistemlerde yönetim paneli (
/wp-admin), XML-RPC uç noktaları ve onlarca üçüncü taraf eklenti sürekli yama yönetimi gerektirir. - TTFB (Time to First Byte) ve Önbellek Karmaşası: Her sayfa isteğinde veritabanı bağlantısı kurmak veya karmaşık önbellek geçersiz kılma (cache invalidation) kurallarını yönetmek, küresel ölçekte okuma hızını düşürür.
- Yazar Deneyimi Uyumsuzluğu: Yazılım mühendisleri ve Java katkıcıları için web tabanlı WYSIWYG editörlerinde kod blokları, diyagramlar ve sürüm güncellemeleri düzenlemek, kendi IDE'lerinde Markdown veya AsciiDoc yazmaya kıyasla çok daha verimsizdir.
| Mimari Katman | Eski Altyapı (WordPress CMS) | Yeni Altyapı (Hugo + GitHub + Edge) |
|---|---|---|
| İçerik Depolama | İlişkisel Veritabanı (MySQL / MariaDB) | Git Deposu (foojayio/website — Markdown & AsciiDoc) |
| Yayınlama Akışı | Web Admin Paneli ve Rol Tabanlı CMS Editörü | GitHub Pull Request (PR) + Otomatik CI/CD Doğrulaması |
| Otomasyon ve Veri Göçü | PHP Eklentileri ve Cron Görevleri | Saf Java Tabanlı JBang Betikleri + GitHub Actions |
| Arama Motoru | Sunucu Taraflı SQL LIKE / Tam Metin Sorguları |
Pagefind (Tarayıcı-İçi WebAssembly Statik İndeks) |
| Yorum Sistemi | Veritabanı Tablosu + Spam Filtre Eklentileri | GitHub Discussions (giscus) + Statik Tarihsel Arşiv |
| Okunma Sayacı & Analitik | Google Tag Manager + Ağır İzleme Betikleri | Çerezsiz, IP Kaydetmeyen Cloudflare Worker |
2. Saf Java İle Göç ve Otomasyon: JBang Betiklerinin Rolü
Bir Java topluluk platformunun altyapı göçünde en dikkat çekici mühendislik detaylarından biri, veri dönüştürme ve günlük otomasyon süreçlerinde Python veya Bash yerine doğrudan JBang kullanılarak yazılmış saf Java betiklerinin tercih edilmesidir.
Altı yıllık WordPress veritabanı dışa aktarımlarını (XML/JSON), bozuk HTML etiketlerini, yüzlerce yazar biyografisini ve binlerce görsel bağlantısını temizleyip Hugo'nun sayfa paketi (Page Bundle) yapısına dönüştürmek için JBang tabanlı veri işleme boru hatları kullanılmıştır.
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.fasterxml.jackson.core:jackson-databind:2.18.2
//DEPS com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.2
//JAVA 21+
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Map;
public class FoojayArticleNormalizer {
public static void main(String[] args) throws Exception {
ObjectMapper yamlMapper = new ObjectMapper(new YAMLFactory());
Path articleDir = Path.of("content/posts/2026-10-18-openjdk-jvm-deep-dive");
Files.createDirectories(articleDir);
Map<String, Object> frontMatter = Map.of(
"title", "OpenJDK Modern JIT Compiler Pipeline",
"authors", new String[]{"frank-delporte"},
"categories", new String[]{"OpenJDK", "JVM Internals"},
"url", "/today/openjdk-modern-jit-compiler-pipeline/"
);
String markdownBody = yamlMapper.writeValueAsString(frontMatter)
+ "---\n\n## Graal IR ve JIT Optimizasyonları\n\nİçerik doğrudan Git üzerinden yönetilir.\n";
Files.writeString(articleDir.resolve("index.md"), markdownBody);
}
}
Her makale artık kendi klasörü içinde bir index.md (veya AsciiDoc .adoc) dosyası ve aynı dizinde yer alan optimize edilmiş görsellerle (Page Bundle) saklanmaktadır. Yeni bir makale önerildiğinde veya mevcut bir teknik rehber güncellendiğinde:
- Yazar
foojayio/websitedeposuna bir Pull Request (PR) açar. - GitHub Actions üzerinde çalışan JBang doğrulayıcıları; yazar kimliğini, kategori taksonomisini, kırık bağlantıları ve ön-bilgi (front-matter) şemasını otomatik olarak denetler.
- PR onaylandığında Hugo saniyeler içinde tüm siteyi derleyerek statik varlıkları doğrudan CDN uç noktalarına dağıtır.
3. Sunucusuz (Serverless) Dinamik Yetenekler: Pagefind, Giscus ve Cloudflare Worker
Statik site mimarilerine geçişte en sık karşılaşılan soru; arama, yorumlar ve okunma istatistikleri gibi dinamik özelliklerin bir arka uç veritabanı olmadan nasıl korunacağıdır. Foojay.io bu sorunu üç modern bileşenle çözmüştür:
A. Pagefind İle Sıfır-Sunucu Tarayıcı İçi Arama
2.250'den fazla teknik makale ve podcast transkripti arasında anlık arama yapabilmek için sunucu taraflı Elasticsearch veya SQL sorguları yerine Pagefind tercih edilmiştir. Hugo derleme aşamasından hemen sonra çalışan Pagefind, tüm içeriği sıkıştırılmış statik parçalara (chunks) böler. Kullanıcı arama çubuğuna bir terim yazdığında, tarayıcı yalnızca ilgili indeks parçasını WebAssembly üzerinden belleğe yükler ve sunucuya hiçbir dinamik sorgu göndermeden milisaniyeler içinde sonuçları listeler.
B. GitHub Discussions (giscus) ve Tarihsel Yorum Arşivi
WordPress döneminden kalan binlerce değerli teknik yorum, veri kaybı yaşanmaması için makale sayfalarının altına statik arşiv olarak gömülmüştür. Yeni yorumlar içinse spam botlarının hedefi olan klasik form alanları yerine GitHub Discussions tabanlı giscus entegrasyonu devreye alınmıştır. Böylece her makalenin altındaki tartışma, doğrudan GitHub üzerindeki ilgili tartışma başlığıyla çift yönlü senkronize çalışır.
C. Reklam Engelleyicilere Takılmayan Çerezsiz Cloudflare Worker Sayacı
Geliştirici kitlesinin büyük çoğunluğu tarayıcılarında uBlock Origin, Brave Shields veya sıkı gizlilik filtreleri kullandığı için Google Tag Manager ve geleneksel analitik servisleri hem sayfa yükleme süresini şişirmekte hem de gerçek okunma verilerinin %40 ila %60 oranında eksik ölçülmesine yol açmaktadır.
Foojay.io ekibi, ağır izleme betiklerini tamamen kaldırarak Cloudflare Worker üzerinde çalışan, çerez (cookie) bırakmayan ve IP adresi kaydetmeyen minimalist bir okunma sayacı geliştirmiştir:
- Tarihsel Veri Korunumu: WordPress dönemindeki 13,8 milyonu aşkın okunma sayısı yeni KV/tablo yapısına eksiksiz aktarılmıştır.
- Sıfır Kişisel Veri (GDPR/KVKK Uyumlu): Sistem yalnızca
{ pageKey: string, views: integer }çiftini tutar; kullanıcı parmak izi veya oturum takibi yapmaz.
4. SEO Bütünlüğü, Java Almanac ve Bilgi Mimarisi
Altı yıllık bir teknik referans sitesini baştan aşağı yenilerken en büyük risk, binlerce dış bağlantının (backlink), yer iminin ve arama motoru indeksinin kırılmasıdır. Göç sürecinde tüm eski /today/... ve /blog/... kalıcı bağlantıları (permalinks) Hugo'nun url ve aliases yapılandırmalarıyla birebir eşleştirilmiştir.
Bununla birlikte platformun en çok başvurulan referans bölümleri de bilgi mimarisi açısından yeniden yapılandırılmıştır:
- Java Version Almanac: JDK 1.0'dan güncel JDK sürümlerine kadar tüm dil özelliklerini, API farklarını ve JEP bağlantılarını karşılaştıran etkileşimli sürüm rehberi.
- Foojay Podcast & Tam Transkriptler: Tüm podcast bölümleri aranabilir tam metin transkriptleriyle birlikte statik sayfa paketlerine dönüştürüldü.
- JUG Haritası ve Etkinlik Takvimi: Küresel Java Kullanıcı Grupları ve konferans takvimleri Git üzerinden topluluk PR'larıyla güncellenebilir hale getirildi.
5. Kurumsal Mühendislik Ekipleri İçin Mimari Çıkarımlar
Foojay.io'nun WordPress'ten Hugo, JBang ve Cloudflare Edge mimarisine geçişi; mühendislik blogları, geliştirici portalları ve teknik dokümantasyon platformları işleten ekipler için net bir referans modeli sunmaktadır:
- İçeriği Kod Gibi Versiyonlayın: Teknik makaleleri veritabanı tablolarına hapsetmek yerine Git depolarında Markdown/AsciiDoc olarak tutmak; kod inceleme (Code Review) kültürünü teknik yazarlığa taşır.
- Dinamik İhtiyaçları Uçta (Edge) Çözün: Tam teşekküllü bir uygulama sunucusunu sırf okunma sayacı veya arama için ayakta tutmak yerine Pagefind, Giscus ve hafif Edge Worker fonksiyonlarıyla sıfır-bakım (zero-maintenance) mimarisi kurun.
- Java'yı Betik Dili Olarak Konumlandırın: JBang sayesinde Java 21+ ekosisteminin tip güvenliği ve zengin kütüphane desteği, CI/CD boru hatlarında ve veri göçü otomasyonlarında karmaşık Bash/Python betiklerine güçlü bir alternatif oluşturmaktadır.
Yazılım mimarisi, mikroservis ekosistemleri ve üretken yapay zeka uygulamaları üzerine çalışıyorum. TastutanLabs çatısı altında geliştirici araçları ve SaaS ürünleri inşa ediyorum.
Bu analizin 6 kartlık görsel özetini Instagram'da inceleyin ve kaydedin
Her gün yazılım mimarisi, Java/JVM ve yapay zeka gelişmelerini kendi başına okunabilen 6 slaytlık Mini-Blog serileri halinde paylaşıyoruz.
Yorumlar (0)
Düşüncelerinizi Paylaşın
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Bu Kategorideki Diğer İncelemeler
JNI ve Python Köprülerine Veda: TornadoVM 7.2.0, Tensor Core (mma.sync) Entegrasyonu ve Saf Java ile GPU Üzerinde LLM Çıkarımı
Standart Java bayt kodunu çalışma zamanında NVIDIA PTX, OpenCL, SPIR-V ve Apple Metal çekirdeklerine derleyen TornadoVM 7.2.0 mimarisi, Project Panama sıfır-kopya bellek yönetimi ve jitLLM ile yerel GPU hızlandırma analizi.
P1 Seviyesi Derleyici Krizinden AI Donanım Hızlandırmasına: JDK 28’in Mimari Rotası, Babylon-Valhalla Sinerjisi ve JVM vs. Rust Performans Hesaplaşması
JDK 27 RC aşamasında yakalanan P1 seviyesi String bozulması hatasının anatomisi, Paul Sandoz’un çizdiği Project Babylon/Valhalla tabanlı AI vizyonu, JEP 545 ZGC ile JEP 540 JSON API'nin perde arkası ve Spring ekosisteminde AI destekli JVM vs. Rust kıyaslamalarının derinlemesine analizi.
Yıkmadan İnşa Etmek: OCX 2026 Işığında Jakarta EE 12, "Veri Çağı" Mimarisi ve Kurumsal Java'nın Evrimsel Modernizasyonu
Eclipse Foundation liderleri Ivar Grimstad ve Tanja Obradovic'in OCX 2026 oturumlarında ortaya koyduğu "kurumsal Java'yı bozmadan modernize etme" vizyonu; Jakarta EE 12'nin CDI 5.0 merkezli mimarisi, Jakarta Query 1.0 birleşik sorgu katmanı, Jakarta Data 1.1 dinamik kısıtlamaları ve Jakarta Agentic AI entegrasyonu ile derinlemesine inceleniyor.