23 Mayıs 2013

Hostgator Dedicated Sunucuya Git Kurmak

ile hasan

githubOfiste svn’i bırakıp git’e (Linus Torvalds’ın yazdığı bir versiyonlama sistemi) döndüğümüzden beri kişisel projelerimde de git kullanıyorum. Projelerimizi gitHub’un sunucularında depoluyoruz. Açık kodlu projeler için gitHub ücretsiz, özel projeler içinse aylık 7 dolardan başlayan fiyatları var. Listesi burada.

Yine ofiste tüm projelerimizi Amazon EC2 sunucularında host ediyoruz, bu sunucuları kendimiz açtığımız için içinde istediğimiz gibi at koşturabiliyor, git gibi ne lazımsa kurabiliyoruz. Kişisel projelerim için vaktiyle HostGator’u tercih etmiştim, şimdi taşınmaya vakit bulamadığım için çıkamıyorum, bir de WHM ve CPANEL’e yıllardır çok alıştım. Vazgeçmek istemiyorum.

Şu hususa açıklık getirelim: git sisteminde tuttuğumuz projelerimizi ekibimizdeki diğer geliştiriciler de indirip güncelleyebilsinler diye bir git sunucusunda tutuyoruz. Ayrıca projenin git’siz halini de ziyaretçilerin hizmetine sunmak üzere başka bir yerde web sunucusunda tutuyoruz. Tabi ki gerekli durumlarda bu iki sunucu sistem aynı makinede yer alabilir. Biz projeyi depolamak için gitHub’u, webe sunmak için Amazon’u tercih ediyoruz.

Peki madem öyle, web sunucumuzda git’e ne gerek var? Şunun için; projenin git’den arındırılmış (şart değil) bir halini -bu projenin en güncel hali de olabilir, herhangi bir versiyonu da-  web sunucusuna koyabilmek için “export” tabir ettiğimiz işlemi uygulamamız gerekiyor. Bunu ftp ile manuel olarak da yapabiliriz ama onun yerine projenin bir kopyasını web sunucu makinesine “yüklediğimizde” bu işlemi otomatik olarak yapabiliyoruz. Yani kısaca; kendi makinemizde projemizi güncelleyip “commit” attıktan (dosyaların bu halini versiyonla dedikten) sonra projeyi gitHub sunucusu ile senkron edebildiğimiz gibi web sunucumuzda oluşturduğumuz kopyası ile de senkron edebiliyoruz. Burada yapacağımız bir konfigürasyon neticesinde senkron işlemi sonrasında otomatik olarak istediğimiz klasöre projenin son versiyonunu export alabiliyoruz.

HostGator’un CentOS işletim sistemli sunucularında git kurulu gelmiyor. Eğer ssh erişiminiz varsa (ki dedicaded sunucularda bu var) git kurmak bir kaç dakikalık bir iş.  Önce bu kısmı halledelim.Root kullanıcınnız ile Hostgator sunucunuza ssh ile login olduktan sonra (root şart değil ama program kurabilecek yetkiye sahip bir kullanıcı olmanız gerekiyor)  yum paket yönetim sistemini güncelleyerek işe başlayabilirsiniz.

#yum -y upgrade

Sonrasında eğer yüklü değilse diye git için gerekli bazı kütüphaneleri yükleyelim;

#yum install gcc zlib-devel curl-devel

Git’in en son versiyonunu indirelim ve tar.gz formatında indirdiğimiz dosyayı açalım;

#wget http://git-core.googlecode.com/files/git-1.8.2.3.tar.gz

#tar zxvf git-1.8.2.3.tar.gz

Bu komut sonrasında tar.gz dosyayı açınca oluşturduğumuz klasöre girip sırayla alttaki komutları koşalım:

#cd git-1.8.2.3

#./configure –prefix=/usr/

#make

#make install

Artık git hazır. Buraya kadar olan kısımları şu adresteki yazıdan birebir kendi sunucumda uyarlayarak tecrübe edip burada kaleme aldım. Bundan sonraki kısmı Amazon EC2 sunucuları için daha önce firmamızın arge blogunda paylaşmıştım. Oradan da faydalanabilirsiniz. Ben her defasında oraya bakıyorum 🙂 Sadece referans verecektim ama içim elvermedi, buraya da yazalım…

Projenin web sunucusunda da bir kopyasını oluşturmak için sunucuya ssh ile bağlandıktan sonra home dizininizde (/home/kullanici_hesabi) şu adımları uygulayalım ;

 #mkdir projem.git

#cd projem.git

#git init --bare

Böylece projem.git klasörü içerisinde boş bir git projesi oluşturmuş olduk. Bu klasör içinde oluşan hooks klasöründe çeşitli çalıştırılabilir dosyalar bulunuyor. Touch ya da beğendiğiniz başka bir komutla post-receive adında bir dosya da biz oluşturalım ve çalıştırılabilir hale getirelim:

#cd hooks

#touch post-receive

#chmod +x post-receive

post-receive dosyasının içine şu komutları yazalım:

!/bin/sh

GIT_WORK_TREE=/home/kullanici_hesabi/public_html git checkout -f

Bu örnekte “kullanıcı_hesabi” diye yazdığım yer o sunucuda projeyi sunmak istediğiniz hosting hesabının klasörü olacak tabi.

Buraya kadar olan kısımla Hostgator üzerinde yapılacak işlemler tamamlandı. Hemen hatırlatalım; bu işlemleri root kullanıcısı ile yapıyorsak projem.git klasörünün kendisine ve içindekilere chown -R kullanici_hesabi:kullanici_hesabi şeklinde hangi kullanıcının hosting hesabına ait dosyalar olduğunu belirtmeliyiz. Yoksa export işlemi neticesinde webe açılacak dosyalar root’a ait görüneceği için webden bakılınca ziyaretçiye “Forbidden” uyarısı gelebilir.

Hostgator kısmını tamamladıktan sonra kendi makinemizde hostgatordaki proje kopyasını lokalimizdeki projenin “uzak”ta tutulan bir deposu olarak göstermeliyiz. Böyle dilediğimizde gitHub’la dilediğimizde bu Hostgator’daki depoyla senkron olabileceğiz. Hostgator’a senkron olduğumuzda yukarıda yaptığımız konfigürasyon neticesinde webe açık klasöre projemizden export alınacaktır.

Kendi makinemizde projemizin yer aldığı klasöre giderek şu adımları uygulayalım:

#cd /kendi/makinemdeki/proje/klasoru

#git remote add export_deposu ssh://kullanici_hesabi@hostgatgor_makinesi_adresi/home/kullanici_hesabi/projem.git

Artık Hostgator’daki depomuzu tanımladık. Buraya senkron olmak için aşağıdaki komutu koşmak kafi, gerisi kendiliğinden hallolacak;

#git push export_deposu master

bu ifadeden sonra ssh bağlantısı sağlanacağı için bizden parola isteyecektir. Akabinde dosyalarımız Hostgator’a yüklenecektir. Bu son komuttaki “master” ifadesi projemizin “master” branch’ını yani ana dal’ını ifade ediyor. Git’de projeye dilediğimiz kadar branch oluşturabileceğimizi de hatırlatıp yazımızı sonlandıralım…