TLDR; farklı yerlerdeki blog yazılarımı tek bir mecraya topluyorum. Framework olarak hugo, hosting için ise netlify kullanıyorum.
Yaptığım geliştirmeleri, öğrenme süreçlerimi ve çözdüğüm problemleri bir yerlere yazmayı her zaman faydalı bulmuşumdur. Şimdiye kadar yazılarımı, biraz wordpress, biraz medium ve biraz da github pages ile yönettiğim blog sayfalarında yayınlıyordum. Bundan sonra yazdıklarımı, tüm eski yazılarımı da alıp, kendi yönettiğim tek bir blog altında yayınlamaya karar verdim.
Neden en baştan bu işi tek bir yerde yapmadım derseniz, biraz maymun iştahlılık, biraz da üşengeçlikten. Temel sebep şudur ki, yazılar arttıkça, yönetmek de zorlaşıyor. Artık bu işi sistematik bir hale getirip, mevcut yazıları da ortak bir blog’a toplamanın vakti geldi.
Blog’um için bazı kriterlerim var:
Kısacası ihtiyacım, kullanımı kolay bir static site generator ve bir de hosting. Alan adım zaten hazır, selcukcihan.com bana ait. Blog’u da blog.selcukcihan.com’dan yayınlayacağım.
Kodları ve yazılarımı git ile versiyonlayıp, github üzerinde saklıyorum.
Blog’u bir web uygulaması olarak düşündüğümüzde, veritabanı olmayacak ve sadece statik html/js/css gibi kaynaklar kullanılacak. Bu yüzden, basit bir web sunucusu işimi görecek. Alternatifler arasında, AWS, GCP ve Netlify var. Lafı uzatmadan, bunlar arasında ihtiyacımı en kolay ve ucuza gören açık ara netlify. Geçenlerde reactjs ile yaptığım bir tetris uygulamasını netlify üzerinden sunmam sadece beş dakikamı aldı. Hugo için de resmî tutorial’ı takip ederek hallettim işimi.
Blog’u oluşturmak için pek çok framework var. Mesela: jekyll, gatsby ve hugo. Bu üçlü arasında, jekyll ile bir deneyimim oldu, selcukcihan.com kişisel sayfamı jekyll ile hazırladım ve github pages ile host ettim. Fakat son zamanlarda hugo çok sık karşıma çıkmaya başladı, ben de karşılaştırmada hugo’ya biraz torpil geçtim. Burada detaylı bir karşılaştırma yapmayacağım, zaten karşılaştırma yapacak kadar da hakim değilim hiçbirine. Fakat hugo ile ilgili genel söylem şu yönde, her şey hazır geliyor (ruby on rails mantığı, ihtiyaç olan her şeyi dahil etmişler). Mesela gatsby’de bir şeyler yapmak için mutlaka ek plugin’ler kurmak gerekiyor, fakat hugo’da en baştan beri ihtiyaç duyduğunuz her şey pakete dahil geliyor.
Hugo ile hello world diyebileceğimiz çıplak blog’u aşağıdaki gibi oluşturdum.
Hugo’yu kurdum:
brew install hugo
Blog’u oluşturdum:
hugo new site defter
Git repo’su oluşturdum:
cd defter && git init
.gitignore
dosyası oluşturdum. public klasörü, build klasörü gibi, bunu git’e eklemek istemiyoruz. Bu klasörde, netlfiy üzerinden sunacağımız dosyalar bulunacak. Buradaki tüm dosyalar hugo’nun otomatik olarak oluşturacağı dosyalar.
# .gitignore dosyasının içeriği
/public
.DS_Store
Netlify için deployment tercihlerimi netlify.toml dosyasının içine koydum:
[build]
publish = "public"
command = "hugo --gc --minify"
[context.production.environment]
HUGO_VERSION = "0.59.1"
HUGO_ENV = "production"
HUGO_ENABLEGITINFO = "true"
Tema kurdum:
git submodule add https://github.com/vividvilla/ezhil.git themes/ezhil
İlk blog yazımı ekledim:
hugo new posts/bloglari-birlestir.md
Oluşturulan boş markdown dosyasını düzenleyerek, içeriğimi ekledim.
Kendi bilgisayarımda blog uygulamasını ayağa kaldırıp, çalıştığını gördüm:
hugo server -D
Değişikliklerimi git repo’ma commitledim:
git add . && git commit -m "Hugo ile blog ekle"
Github’da remote repo oluşturdum ve değişikliklerimi push ettim:
git remote add origin https://github.com/selcukcihan/defter.git
git push -u origin master
Netlify üzerinden, yeni siteyi oluşturmaya başladım. Continuous deployment olarak github’ı seçip, github’daki repo için netlify’a izin verdim.
Deploy site diyerek, blog’umu yayınlamaya başladım.
Set up a custom domain ile blog.selcukcihan.com’dan yayınlanmasını sağladım:
Markdown ile yazdığım blog yazılarımda imaj kullanmak için şunları yaptım:
static
klasörü altındaki tüm dosyaları, hugo tarafından public
klasörüne olduğu gibi kopyalanır ve imajlar için burası en uygun klasördür.
Bu klasör çok karışmasın diye, imajları static/img/blog-yazisi
şeklinde bir klasör hiyerarşisinde saklıyorum.
Örnek vermek gerekirse, bu yazı için klasörü aşağıdaki gibi oluşturdum:
mkdir static/img/bloglari-birlestir
Klasör hiyerarşisi bu şekildeyken, imajlara /img/bloglari-birlestir/imaj.png
şeklinde erişebiliyorsunuz.