Github Pages ile Statik Sayfa Sunmak
Bir web sayfası yapmak için ihtiyacınız olan çok az şey var. Bunlardan bir tanesi domain, ve bu
domaine gittiğimiz zaman içerik sunacak bir web sunucu. Bunun haricinde herhangi bir şeye
ihtiyacınız yok. Bu sayfa için konuşuacak olursak domainimiz sonradanogrendiklerim.com
ve web
sunucumuz Github Pages. Bu belgede sayfayı statik olarak nasıl sunduğumuzu
inceleyeceğiz.
Domain¶
Kişisel bir tercih olarak domainleri namecheap.com üzerinden almayı tercih ediyorum. Yıllardır kullanmakla birlikte arayüzleri ve sundukları müşteri desteğinden memnunum. Bu açıdan öncelikle tercih ettiğiniz yerden bir domain edinin.
Github Pages¶
Burada dikkat etmemiz gereken nokta tek bir hesabın ya da organizasyonun bir tane ana domaini
olabiliyor. Dolayısıyla kişisel hesapta bir sayfa varsa, buna ek olarak sayfa açamıyoruz. Benim
durumumda eren.github.io
reposunda erenturkay.com
tanımlı. Bu da tek bir statik sayfa anlamına
geliyor. Bu yüzden kişisel hesabıma bağlı sonradanogrendiklerim adlı ayrı bir
organizasyon açmak durumunda kaldım.
eren.github.com
Github Pages ilk açıldığında repo isimleri .github.com
bitmesi gerekiyordu. Bu sonrasında değişti ve artık .github.io
ile bitmesi gerekiyor.
Domaini aldıktan sonra organizasyon ya da ana hesabınızla aynı olan bir repo açın ve sonu
.github.io
ile bitsin. Örnek olarak ana kullanıcı adım olan eren
için
eren.github.io, organizasyon olan sonradanogrendiklerim
için
sonradanogrendiklerim.github.io gösterebiliriz.
Devamında docs/
dizini altında CNAME
adlı bir dosya oluşturun ve içerisine domaininizi yazın.
Sonradan öğrendiklerim için bu dosyanın içeriği sonradanogrendiklerim.com
. Bunun Github
içerisindeki ismi Custom Domain
. Kendi belgeleri daha uzun şekilde anlatmakta.
Buraya da bakmayı tercih edebilirsiniz.
CNAME dosyası
Bu dosyanın normalde reponun root dizininde olması gerekmekte. Burada docs/
dizini altına
koymamızın nedeni siteyi mkdocs
ile üretiyor olmamız. Eğer mkdocs
dosyalarının bulunduğu
src
branchi altında CNAME
dosyasını koyarsak bu dosya site üretildiğinde ana branch'e
gönderilemeyecek, dolayısıyla sayfamız çalışmayacaktır.
Statik Sayfa Testi¶
Biraz sonra denemek için repo içerisine index.html
koymak iyi bir fikir olabilir. Bu dosyayı
oluşturun ve içerisini dilediğiniz şekilde doldurun. Ben burayı aşağıdaki kod parçacığı ile
doldurmayı tercih ettim zira tarayıcı ile açtığımızda test sayfayı görebileyim.
Git ve Github üzerine
Daha önceden deneyimi olmayanlar git ve github kullanımı için başka makalelere göz atmaları gerekebilir. Terminolojik olarak konuşursak bu dosyaların sonuç itibariyle repo içerisinde push edilmiş halde bulunması gerekiyor. Mosh Hamedani'nin git başlangıç videosu ve Oh My Git! interaktif oyununu bu noktada iyi bir başlangıç olabilir.
DNS Yönlendirmesi¶
Domainimizi aldık, web sunucusu zaten hazırdı (github pages), gerekli ayarları yaptık ve artık
yönlendirmeye hazırız. Burada domaini aldığınız yerden A
kaydı olarak aşağıdakileri girdiğinizde
statik sayfaları sunmaya başlayabileceksiniz. Bu kayıtlar Github Pages sunucuları ve yukarıda
hesabımızla bağlantılı sayfaları sunuyorlar.
Bu noktada dikkat edilmesi gereken şey bu kayıtların APEX
olarak girilmesi, yani bu kayıtlar domainin köküne (root) kısmına girilmesi gerekmekte.
Yanlış kayıt
www.sonradanogrendiklerim.com
Doğru kayıt (APEX)
sonradanogrendiklerim.com
TTL değerleri kendini bulduğunda statik sayfanız böylelikle hazır olmuş olacak. Tebrikler.
CloudFlare NS Sunucuları (Opsiyonel)¶
Domain satın aldığınız servis DNS sunucu hizmeti de yüksek ihtimalle veriyor. Bu hizmeti
kullanabilirsiniz ancak kişisel olarak namecheap
sunucuları yerine CloudFlare
kullanmayı tercih
ediyorum. Belgenin bu bölümü sonralarda olsa da aslında domain alındıktan sonra yapılması
gerekmekte.
Satın alma işleminden sonra CloudFlare
üzerinde bir proje oluşturun ve NS sunucu isimlerini alın. sonradanogrendiklerim.com
projesi için CloudFlare aşağıdaki sunucuları kullanmamı istedi.
Devamında domain aldığınız yerde APEX kaydı olarak size verilen sunucuları girin. Bunları yaptıktan sonra domain kayıtlarınızı artık satın aldığınız yerden değil, CloudFlare üzerinden yapacaksınız.
MkDocs Material¶
Statik sayfamızı artık oluşturduk. Domaine eriştikten ve index.html
içerisindeki yazıları
gördükten sonra işimiz aslında bitiyor ama siteyi güncellememiz ve yeni yazılar eklememiz de
gerekmekte. İşte bu noktada MkDocs devreye giriyor.
Bu proje bir statik site oluşturma projesi. Yani siz başka bir şekilde ve yapıda yazılarınızı yazıyorsunuz ve sizin yerinize statik olarak web sayfası oluşturuyor. Bunu da kendi yöntemi ile Github Pages üzerinde sunuyorsunuz. Bu yöntem ile çok değişmeyecek web sayfalarını sadece domain ücreti ödeyerek gerçekleyebiliyorsunuz.
Ben hugo
, jekyll
, pelican
gibi bilindik projeleri denedikten sonra MkDocs ile rastlantısal bir
şekilde karşılaştım ve yazı yazmanın en kolay yolunun bu olduğuna karar verdim. Diğer projeler
başarılı olsalar da statik sayfa oluşturmayı kolaylaştırmak yerine statik sayfa için size birer
framework sunuyor ve geri kalanını size bırakıyor. Dolayısıyla öncelikle statik sayfalarınızı
oluşturmak, sonrasında yazılarınızı yazmak durumunda kalıyorsunuz. MkDocs bu noktada yine framework
sunuyor ancak material teması ile tek bir ayar dosyası ve dizin yapısı
ile sayfa oluşturmaya başlayabiliyorsunuz. Belki diğer projeler de bu şekilde kolay kullanılıyordur
ancak ben becerememişimdir.
Kurulum¶
Projenin kurulum sayfasından ilerleyebilirsiniz. Bu bir python
projesi ve pip
ile yükledikten sonra kullanabilirsiniz.
Ayarlar¶
O anki dizinde minimal ayar oluşturacaktır. Bütün yazılar docs/
dizini içerisinde yer alıyor ve
tek bir mkdocs.yml
ayar dosyası var. Material teması ve bu sayfanın ayarlarını örnek almak için github sayfasını ziyaret edebilirsiniz.
Kullanım¶
http://localhost:8000 üzerinden erişilecektir. Sayfayı geliştirme aşamasında bu yeterli olacaktır
ancak yayına alma noktasında mkdocs
belgeleri işimize yaramamakta. Bu belgede main
branch mkdocs
dizinini barındırmakta, yayına alırken gh-pages
branchı oluşturulmakta ve PR açılmakta.
Ben bunun yerine site dosyalarını src
branchi içerisinde tutup, oluşturulan siteyi direkt olarak
force push
ile gönderme taraftarıyım. Yani belgede yazan PR kısmını atlayıp, siteyi hemen
gönderiyoruz. Bunu aşağıdaki komutlar ile yapabilirsiniz:
.cache dizini
Bu sitenin ayar dosyasında social
eklentisi mevcut. Bu eklenti sosyal medyada paylaştığımız
linkler için resim üretmekte. Siteyi yayına alırken ürettiği resimleri tekrar üretmemek için
reponun kök dizininde .cache
adlı bir dizin kullanıyor. Yazdığımız yazı güncellendiğinde
ise tekrar üretmiyor. Dolayısıyla siteyi yayına almadan önce social
ile üretilen bütün
resimleri silip tekrar üretmesini sağlıyoruz.