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.
brew install hugo
hugo new site defter
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
[build]
publish = "public"
command = "hugo --gc --minify"
[context.production.environment]
HUGO_VERSION = "0.59.1"
HUGO_ENV = "production"
HUGO_ENABLEGITINFO = "true"
git submodule add https://github.com/vividvilla/ezhil.git themes/ezhil
hugo new posts/bloglari-birlestir.md
```Oluşturulan boş markdown dosyasını düzenleyerek, içeriğimi ekledim.
8. Kendi bilgisayarımda blog uygulamasını ayağa kaldırıp, çalıştığını gördüm:
hugo server -D
9. Değişikliklerimi git repo'ma commitledim:
git add . && git commit -m “Hugo ile blog ekle”
10. Github'da remote repo oluşturdum ve değişikliklerimi *push* ettim:
![Github'da yeni repo oluşturma][1]
git remote add origin https://github.com/selcukcihan/defter.git git push -u origin master
11. [Netlify üzerinden](https://app.netlify.com/start), yeni siteyi oluşturmaya başladım. *Continuous deployment* olarak github'ı seçip, github'daki repo için netlify'a izin verdim.
![Netlify için github'daki repo'ya erişim izni ver][2]
12. *Deploy site* diyerek, blog'umu yayınlamaya başladım.
![Netlify üzerinden blog'u yayınla][3]
[1]: /img/bloglari-birlestir/github_create_repo.png
[2]: /img/bloglari-birlestir/github_netlify_permission.png
[3]: /img/bloglari-birlestir/netlify_deployment.png
[4]: /img/bloglari-birlestir/netlify_setup_custom_domain.png
[5]: /img/bloglari-birlestir/netlify_setup_custom_domain_2.png
13. *Set up a custom domain* ile blog.selcukcihan.com'dan yayınlanmasını sağladım:
![Github'da yeni repo oluşturma][4]
![Github'da yeni repo oluşturma][5]
## İmajlar
Markdown ile yazdığım blog yazılarımda imaj kullanmak için şunları yaptım:
1. `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
2. Klasör hiyerarşisi bu şekildeyken, imajlara `/img/bloglari-birlestir/imaj.png` şeklinde erişebiliyorsunuz.