2018年3月31日 星期六

使用 Gitolite 架設 Git Server,並安裝 Gitweb

原文: http://soarlin.pixnet.net/blog/post/42810173-%E4%BD%BF%E7%94%A8-gitolite-%E6%9E%B6%E8%A8%AD-git-server%EF%BC%8C%E4%B8%A6%E5%AE%89%E8%A3%9D-gitweb

  總共參考了大約四篇文章的教學,最後總算成功的搞定
1. Linux 架設使用 SSH 共享存取的 Git Server
2. Linux 使用 Gitolite 架設 Git Server
3. [Linux] 使用 Git + Gitolite + Gitweb 架設 Git Server @ Ubuntu 12.04
4. Install git/gitolite/gitweb on Ubuntu 14.04

  底下就稍微紀錄一下自己的操作步驟:

第一步,在 Linux 環境下架設共享存取的 Git Server

系統套件安裝
  • sudo -s (切換帳號為root)
  • apt-get install git git-core
協同開發人員產生 SSH public key
  • mkdir .ssh
  • cd .ssh
  • ssh-keygen 
  • cat ~/.ssh/id_rsa.pub  or 上傳到 Server /tmp/目錄下統一保存
Git Server 的設定
  1. ssh 連線到 Server 上
  2. sudo -s (切換帳號為root)
  3. useradd -s /bin/bash -m -G sudo -d /home/git git (建立名為 git 的使用者,並給予 sudo 權限)
  4. su - git (切換到 git user,以下動作以 git 權限操作)
  5. 將開發人員的 public key 加入認證檔
  6. cat /tmp/user1.pub >> ~/.ssh/authorized_keys
  7. cat /tmp/user2.pub >> ~/.ssh/authorized_keys
  8. 或是將上一步,每位開發人員 cat 到的 public key 自行增加到 ~/.ssh/authorized_keys 檔案中

建立 Git Repository

  1. ssh 連線到 Server 上
  2. su git (切換到 git user,以下動作以 git 權限操作)
  3. mkdir -p ~/project_name.git
  4. cd ~/project_name.git
  5. git init --bare --shared

 

開發人員 clone 程式碼

  • git clone git@<網址 or IP>:/home/git/project_name.git

  以上作法是最基本的以 git 帳號來建立 Git Server,優點是適合人少的專案,架設步驟簡單快速;缺點是無法針對不同專案給予不同開發者存取權限,所以需要往下一步
 

第二步,使用 Gitolite 管理 Git Server

系統套件安裝
  • apt-get install gitolite
 
產生/收集 SSH Public Key
  • ssh 連線到 Server 上
  • su - git (切換到 git user,以下動作以 git 權限操作)
  • cd .ssh (若沒有該目錄,請先自行建立)
  • ssh-keygen -t rsa -f admin (產生名為 admin 的 public key)
  • 請所有人將各自的 public key 放到 /tmp/ 下,並且已各自名稱命名 (e.g. alex.pub, ben.pub, john.pub …)
  • 請注意,這裡有別於第一步是將開發人員的 public key 通通加入 authozied_keys 內,如果之後想改用 Gitolite 來控制,可以先把 authozied_keys 另行更名備份,避免與接下來安裝步驟有牴觸
 
Gitolite Server 架設
  • ssh 連線到 Server 上
  • su - git (切換到 git user,以下動作以 git 權限操作)
  • gl-setup ~/.ssh/admin.pub (匯入管理者的 Public key)
  • 這裡是將 git 這個帳號當作 Gitolite 的管理者,所以後續管理 repository 主要也是透過 git 這個帳號來管理
.
├── .gitolite/
├── .gitolite.rc
├── repositories/
│   ├── gitolite-admin.git
│   └── testing.git
├── .ssh
├── .vim
└── .vimrc

這時 git 帳號的 $HOME(家目錄)下,會產生

  • .gitolite/ 目錄
  • repositories/ 目錄
  • .gitolite.rc 設定檔

 
repositories/ 目錄下,有兩個專案

  • gitolite-admin.git (用來管理所有專案的主要專案)
  • testing.git (測試用專案)



建立專案
因為gitolite的專案管理,是透過在主專案(gitolite-admin.git)裡,改寫 config 檔案來設定,所以需要以管理者帳號
(剛剛使用 git 帳號,因為產生的 admin.pub,被設定為 gitolite 管理者的認證)
  • ssh 連線到 Server 上
  • su - git (切換到 git user,以下動作以 git 權限操作)
  • git clone git@localhost:gitolite-admin.git (抓主專案來修改設定)
  • cd gitolite-admin/
  • vim conf/gitolite.conf

範例:增加一個名為 ios_test 的專案,並設定 alex 為可存取的使用者,john 為可讀,加入以下幾行到 conf 檔中
※ 這邊需要先加入開發人緣,可以先參考下方教學來加入開發人緣

repo    ios_test
        RW      =   alex
        R       =   john

  • 修改完畢後,以一般 git 上 code 的流程處理
  • git add .
  • git commit -m "add ios_test project"
  • git push

順利的話,可以看到畫面上出現類似下面,建立 project 的訊息

Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 423 bytes | 0 bytes/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: creating ios_test...
remote: Initialized empty Git repository in /home/git/repositories/ios_test.git/
remote:
To git@localhost:gitolite-admin.git
   a37d282..62dffa9  master -> master
 
加入開發人員
在主專案中,加入開發人員的 public key 檔
  • ssh 連線到 Server 上
  • su - git (切換到 git user)
  • cd gitolite-admin/
  • cp -r /tmp/*.pub keydir/ (將之前收集的pub檔,複製到keydir目錄下)
  • git add -A
  • git commit -m "add developers public key"
  • git push


第三步,安裝 Gitweb 並整合 Gitolite
系統套件安裝
  • sudo apt-get install gitweb apache2
  • sudo usermod -a G git www-data (將 www-data 使用者加入git group)
 
Apache 2.4 與 Gitweb 設定
gitweb 安裝後,產生的設定是 Apache 2.2 的設定寫法,所以在2.4版需要做些修正
  • 調整 gitweb 設定檔位置
  • sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/conf-available/gitweb.conf
  • cd /etc/apache2/conf-enabled
  • sudo ln -s ../conf-available/gitweb.conf
 
  • 修正 gitweb conf 內容
  • sudo vim /etc/apache2/conf-enabled/gitweb.conf
Alias /gitweb /usr/share/gitweb
 
  Options +FollowSymLinks +ExecCGI
  AddHandler cgi-script .cgi
 
  • sudo a2enmod cgi (Apache 載入 cgi model)
  • sudo service apache2 restart

 
修正 Gitweb conf

  • sudo vim /etc/gitweb.conf , 修改下列黑字,增加藍字

$projectroot = "/home/git/repositories";
# Syntax highlighting
$feature{'highlight'}{'default'} = [1];
# 提供系統 loadavg check,若系統繁忙,逛 gitweb 只會看到 503 - The load average on the server is too high 訊息
$masload = 500;
$projects_list = $projectroot; # unmark this line
 
修正 Gitolite 部分
  • ssh 連線到 Server 上
  • su - git (切換到 git user)
  • vim .gitolite.rc
$REPO_UMASK = 0027; # change this value
$WEB_INTERFACE = "gitweb”;  # unmark this line
$GL_GITCONFIG_KEYS = "gitweb.owner gitweb.description .*”;   # change this value
 
建立專案設定檔修改部分 gitolite-admin/conf/gitolite.conf
  • 將所有專案加入 gitweb 與 daemon 兩個帳戶的讀取權限,才能讓 gitweb 讀取到專案資料
  • 原有的專案可以添加一些資訊,來透過 gitweb 顯示出來

加入部分
repo    @all
        R       =   gitweb daemon
 
專案描述部份
repo    testing
        RW+     =   @all
    config gitweb.owner         = "Project Owner Name"
    config gitweb.description   = "Project brief description"
    config gitweb.url           = git@:testing.git
 
  • 檢查 repositories 目錄權限可被讀取
  • sudo service apache2 restart (重啟 Apache)
  • 連線到 http://IP or 網址/gitweb

沒有留言: