Gogs ile Kişisel GitHub-benzeri Depo Kurmak

 

Versiyonlama ve kod deponuz için, ya da emekleyen projeleriniz için özel bir depo mu istiyorsunuz? Buna ekstra para vermek içinizden gelmiyor mu? Self-hosted servislere meraklı mısınız, size daha mı çok güven veriyor? GitHub ‘daki kodunuzun bir kopyasını yerel tutmak mı istiyorsunuz? Sadece Git iyi güzel, ama hoş bir arayüzün, kullanım kolaylığının, ekstra fonksiyonların eksikliği hissediliyor mu sizde de? Demek ki kendi GitHub ‘unuzu kendiniz kurmanın vakti gelmiş. Üstelik -hemen hemen- tüm avantajlarıyla birlikte!

Bu işi yapabilen birden çok yazılım var, tüm ihtiyacımız olan ise 7/24 açık bir sunucu. İlla dışarıdan bir hizmete gerek yok, ben bunun için kendi Raspberry Pi sunucularımı kullanıyorum. GitLab ve Gogs, self-hosted GitHub kurmak isteyenler için iki büyük alternatif, ikisi de hızlı gelişiyor ve kendi çapında popüler. GitLab bu işte fonksiyonel anlamda sanki bir adım daha önde, ama konu RasPi gücünde bir sunucuda bu işi yapmaya gelince Gogs ‘un eline kimselerin su dökebileceğini sanmıyorum, üstelik son derece de temiz arayüzlü ve stabil. Bu sebeple ben Gogs ‘u tercih ettim ve tercihimden çok memnun kaldım, herkese de öneriyorum.

Peki Gogs ile neler yapabiliyoruz? Gogs son derece kolay şekilde GIT depoları oluşturmaya ve paylaştırmaya imkan tanıyor, çok sayıda kullanıcının aynı anda kullanması mümkün, sosyal araçları da buna hazır. Elbette bu depoları ve commit kayıtlarını görselleştirebiliyor, diff (fark) alabiliyor, dosyaları görüntüleyebiliyor, kolayca paylaşmaya da imkan tanıyor. Sadece bunlar da değil, diğer Git depolarında -misal GitHub- tuttuğunuz kodunuz için yansı depolar oluşturup belli aralıklarla yedekleyebiliyor, depolarınız için Issue Tracker (Kayıt Takibi) sunabiliyor, kodun belli bir durumundan Release oluşturmanıza imkan tanıyor ve muhtemelen benim sayamadığım daha bir çok işi yapıyor. Daha da güzeli, bütün bunları Raspberry Pi 2 üzerinde ışık hızında, hiçbir yavaşlama olmaksızın yapıyor. Daha ne isteyebilirsiniz ki bir Git sunucusundan? Bana kalırsa self-host etmeye istekli her geliştiricinin alet çantasında çoktan yerini almasını gereken bir çözüm Gogs, desteklerinizi de bekliyor. Türkçe dil desteğinin de Crowdin.com üzerinde topluluk desteğiyle sağlanmaya çalışıldığını ve yardımcı olabileceğinizi belirtmekte fayda var. (Henüz %30 civarı bitmiş çevirinin, bu haliyle resmi diller arasında yer almıyor)

Gogs ‘un geliştirilmesi ben bu satırları yazarken süratle devam ediyordu, adından ipucunu alabileceğiniz üzere Go dilinde geliştiriliyor. Fonksiyonel eksikleri olmasına rağmen stabil çalışması, temiz arayüzü ve hızıyla bitmiş bir ürün hissini çok iyi veriyor, ki özgür yazılım projelerin genellikle aşil topuğu burası olur. Gelecek major sürümde benim farkına vardığım tek eksiklik olan Wiki fonksiyonunun da eklenmesi planlanıyor, ihtiyacınız varsa şimdilik bunun için ayrı bir depo, veya DokuWiki gibi hafif bir çözüm değerlendirebilirsiniz.

İlginizi çektiyse gelelim Raspberry Pi üzerinde biraz zahmetli kurulumu ve birkaç ufak tefek ayarına:

  • Aslında bütün bu işleri çok güzel yapan bir betik var Internet ‘te, ancak güvenilmedik kaynaktan betik çalıştırmanın felakete davet olduğunu düşündüğümden ben kullanmadım, Kolayına kaçmak isterseniz benim de faydalandığım kurulumu da anlatan şu linki takip edebilirsiniz: http://blog.meinside.pe.kr/Gogs-on-Raspberry-Pi/
  • Anlatırken Raspbian ‘ı hali hazırda kurduğunuzu ve temel Linux terminal bilginiz olduğunu varsayıyorum.
  • Öncelikle Go kurulumunu yapacağız ve ihtiyacımız olan bazı paketleri kuracağız, şununla başlıyoruz: sudo apt-get install -y git gcc libc6-dev
  • Bu yazı yazılırken son sürüm 1.5 idi, daha yeni sürümler çıktıysa https://go.googlesource.com/go/+refs adresinden kontrol edip alttaki komutlarda ufak dokunuşlar yapmanız gerekebilir.
  • Aşağıdaki komutları ardı ardına çalıştırıyoruz. Açıklaması: İlk üç komutla Go için bootstrap çekip, inşa ediyoruz. Sonraki üç komutta son sürümü indirip inşa ediyor, daha sonrasında kuruyor ve nihayetinde bootstrap klasörünü siliyoruz.
git clone -b "release-branch.go1.4" "https://go.googlesource.com/go" "/tmp/go-bootstrap"
cd /tmp/go-bootstrap/src
./make.bash
git clone -b "release-branch.go1.5" "https://go.googlesource.com/go" "/tmp/go-release-branch.go1.5"
cd /tmp/go-release-branch.go1.5/src
GOROOT_BOOTSTRAP=/tmp/go-bootstrap ./make.bash
cd ../..
sudo mv "/tmp/go-release-branch.go1.5" "/opt/go-release-branch.go1.5"
sudo chown -R "$USER" "/opt/go-release-branch.go1.5"
sudo ln -sfn "/opt/go-release-branch.go1.5" "/opt/go"
rm -rf /tmp/go-bootstrap/
  • Depoyu saklayacağımız bir klasör oluşturuyoruz, mesela: mkdir ~/git
  • Şimdi profil dosyamıza şunu ekliyoruz, Bash için bu dosya ev klasöründeki .bashrc dosyası.
if [ -d /opt/go/bin ]; then
 export GOROOT=/opt/go
 export GOPATH=$HOME/srcs/go
 export PATH=$PATH:$GOROOT/bin
 fi
 
  • Terminali kapatıp yeniden açıyoruz ki değişikliklerimiz yer alsın.
  • Eğer bir MySQL veya PostgreSQL kurulumumuz varsa sorun yok, yoksa bunlardan birini kurmak gerekecek. O kısmın anlatımı Internet ‘te her yerde mevcut. Ya da SQLite tercih edilebiliyor.
  • Sade kurulum için: go get -u -tags “cert” github.com/gogits/gogs
  • Yukarıdaki komutun “tags” kısmına “sqlite”, “rdis” veya “memcache” ekleyerek ihtiyacınız varsa bunları isteyebilirsiniz. Ben Memcache ile kurdum ve performanstan çok memnun kaldım, fark yaratıp yaratmadığını denemedim ancak.
  • cd $GOPATH/src/github.com/gogits/gogs yapıyoruz
  • go build komutuyla inşaata başlıyoruz.
  • MySQL veritabanımızda bir gogs kullanıcısı ve ona tanımlı bir veritabanı oluşturuyoruz.
  • Hala aynı klasördeysek, mkdir -p custom/conf yapıyoruz.
  • cp conf/app.ini custom/conf/app.ini ile varsayılan konfigürasyonu yeni yerine kopyalıyoruz.
  • nano custom/conf/app.ini yaparak bu dosyayı düzenleyebiliriz artık.
  • ROOT kısmına az önce  verdiğimiz depo klasörünün konumu gelmeli.
[repository]
ROOT = /home/kullaniciadi/git
  • Veritabanı ayarlarına geçiyoruz. DB_TYPEHOST, NAME, USER, PASSWD buradaki en önemli opsiyonlar.
[database]
; Either "mysql", "postgres" or "sqlite3", it's your choice
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gogs
USER = gogs
PASSWD = SIFRE_BURAYA
; For "postgres" only, either "disable", "require" or "verify-full"
SSL_MODE = disable
; For "sqlite3" only
PATH = data/gogs.db
  • RUN_MODE anahtarını “prod” olarak değiştiriyoruz.
  • Sunucu ayarları için HTTP_PORTROOT_URL, PROTOCOL kısımlarını değiştiriyoruz.
PROTOCOL = http
DOMAIN = alanadim.com
ROOT_URL = http://alanadim.com:portum/
    • SSH özelliğini kapatmak isterseniz -ben güvenmeyip kapattım- DISABLE_SSH anahtarını TRUE yapıyorsunuz.
    • Güvenliğiniz için SECRET_KEY anahtarını rastgele bir kombinasyonla değiştiriyorsunuz.
    • Deponuza isim vermek için APP_NAME anahtarını değiştiriyorsunuz.
    • Konfigürasyon tamam! Tabii bunlar basit kısmıydı, isterseniz ayarlayabileceğiniz çok sayıda özellik mevcut.
    • Son olarak sertifika oluşturmanız önerilmiş, HTTPS kullanmayacaksanız muhtemelen gerek olmayacak bu kısma, yine de:
mkdir -p cd $GOPATH/src/github.com/gogits/gogs/custom/https
$ cd $GOPATH/src/github.com/gogits/gogs/custom/https
$ ../../gogs cert -ca=true -duration=8760h0m0s -host=alanadim.com
    • Hepsi bittiyse, Voila! Deneyelim bakalım çalışıyor mu:
cd $GOPATH/src/github.com/gogits/gogs
./gogs web
  • Çalıştıysa tamamdır! Ancak her seferinde elle başlatmak istemiyorsak servis olarak eklemekte fayda var, bunun için hazır bir betik oluşturulmuş ancak bende çalışmadı, bunun yerine kullandığım Monitoring yazılımı Monit ‘e -ya da tercihinize göre cron ‘a veya kendi servis yöneticinize- şöyle basit bir betikle kötü bir hack ekleyebilirsiniz:
#!/bin/bash
cd /home/kullaniciadi/srcs/go/src/github.com/gogits/gogs
/usr/bin/sudo -u kullaniciadi ./gogs web
  • Çirkin oldu ama en azından artık otomatik başlıyor olmalı.
  • Şimdi ilk kullanıcımızı depomuza kayıt edebiliriz, otomatik olarak yönetici olarak eklenecektir. Daha sonra eğer herkesin deponuza kayıt olup kodunuzu görmesini (halka açık olmayı) istemiyorsanız DISABLE_REGISTRATION ve REQUIRE_SIGNIN_VIEW anahtarlarını True yaparak kayıtları sadece yönetici yapacak şekilde, ve kayıt olmayanların hiçbir şey göremeyeceği şekilde ayarlayabilirsiniz deponuzu.
  • oAuth ayarlarıyla oynayarak isterseniz GitHub ve Google gibi servislerden oturum açılmasına izin vermeniz mümkün. Ben kendi kullanımımda ihtiyaç duymadığımdan denemedim bunu.
  • Memcache kurulumunuz varsa, performans açısından ADAPTER anahtarını “memcache” yapıp HOST anahtarında IP ve PORTu belirterek memcacheden faydalanabilirsiniz.

Hepsi bu kadar!

Yorum Yazın