Setup git server

   การติดตั้งระบบ git server อย่างง่ายใช้ซอฟต์แวร์ทั้งหมดประมาณนี้ (debian or ubuntu) + git + gitosis + ssh + apache + cgit
  • gitosis : ใช้สำหรับจัดการเรื่องสิทธิ์การเข้าใช้ repositories ผ่าน SSH
  • cgit : หน้าเว็บสำหรับ git repositories เขียนด้วยภาษาซี (cgi)
ssh-server: install
server:~$ sudo apt-get install openssh-server
gitosis: install
server:~$ sudo apt-get install git-core gitosis
server:~$ sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git
gitosis: config

   การเริ่มต้นใช้งาน gitosis เราจะต้องใช้ ssh-key (public) ของเราสำหรับเป็น admin ถ้ายังไม่มีต้องทำการ ssh-keygen  (จำ passphrase ให้ดี)ขึ้นมาจากนั้นก็ import เข้าไปใน gitosis
mylaptop:~$ scp ~/.ssh/id_rsa.pub prach@server:./
server:~$ sudo -H -u git gitosis-init < /home/prach/id_rsa.pub
server:~$ sudo chmod +x /home/git/repositories/gitosis-admin.git/hooks/post-update
   หลังจากขั้นตอนนี้เราจะสามารถ config gitosis ผ่านทาง git repo ได้ดังนี้
mylaptop:~$ git clone git@server:gitosis-admin.git
    ในไดเรกทอรี gitosis-admin ให้แก้ไขไฟล์ชื่อ gitosis.conf เพื่อเพิ่มกลุ่มและกำหนดข้อมูลสำหรับ repositories (จากตัวอย่างจะสร้าง repo ชื่อ foobar , โดยมีสมาชิกคือ prach@mail.com) ดังนี้
mylaptop:~$ cd gitosis-admin; editor gitosis.conf
[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = prachpub@gmail.com

[group developer]
writable = foobar
members = prachpub@gmail.com

mylaptop:~$ git commit -a -m 'add foobar repo'
mylaptop:~$ git push
   เมื่อ config gitosis เรียบร้อยแล้วเราก็จะสร้าง foobar repo ขึ้นมาดังนี้
mylaptop:~$ mkdir foobar; cd foobar; git init
mylaptop:~$ git remote add origin git@server:foobar.git
mylaptop:~$ echo 'hello' > x.txt
mylaptop:~$ git add x.txt
mylaptop:~$ git commit -a -m 'hello'
mylaptop:~$ git push origin master
   สำหรับ foobar สามารถ clone ผ่านทาง ssh ได้ดังนี้
mylaptop:~$ cd /tmp;git clone git@server:foobar.git

apache2: install
 server:~$ sudo apt-get install apache2
cgit: install
server:~$ git clone git://hjemli.net/pub/git/cgi
server:~$ cd cgit;git submodule init;git submodule update
server:~$ sudo apt-get  install libcurl4-openssl-dev build-essential
server:~$ sudo make
server:~$ sudo mkdir -p /var/www/cgit/{cgi-bin,css}
server:~$ sudo cp cgit /var/www/cgit/cgi-bin/cgit.cgi
server:~$ sudo cp {cgit.css,cgit.png} /var/www/cgit/css/
cgit: config

   ตัวอย่างการ config cgit
server:~$ sudo vim /etc/cgitrc
logo=/cgit-css/cgit.png
css=/cgit-css/cgit.css
enable-index-links=1
virtual-root=/git/

repo.url=foobar
repo.desc=Foobar repositories
repo.path=/home/git/repositories/foobar.git

   เพิ่ม config ของ apache ให้รัน cgit.cgi
server:~$ sudo vim /etc/apache2/conf.d/cgit.conf
 Alias /git "/var/www/cgit/cgi-bin"


      Options FollowSymLinks +ExecCGI
      AddHandler cgi-script .cgi
      DirectoryIndex cgit.cgi

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule ^.* /git/cgit.cgi/$0 [L,PT]


Alias /cgit-css "/var/www/cgit/css"

      AllowOverride None
      Options None
      Order allow,deny
      Allow from all
  จาก config ไฟล์ของ apache ต้องใช้ mod rewrite ด้วย
server:~$ sudo a2enmod rewrite
server:~$ sudo /etc/init.d/apache2 restart

   เปิด browser แล้วลองเรียกไปที่ http://server/git


Ref:

2 comments:

tum said...

เออ เขียนดีอะ

Prach Pongpanich said...

อิงจากหลายอันกว่าจะได้