2016-07-27

Ubuntu Git Server 架設

話說某日Firmware Engineers 請我幫他們架git server...

"什麼是git server?"

"問的好... 自己去google。"

他們說已拖了一年不是很急,一個月內架起來就好,就這樣,本著學習精神,玩起15年沒碰過的Linux。

這次選用Ubuntu 16.04練習,實際要架的Server是Ubuntu 14.04

google很多資料找不到完整的文章,拼拼湊湊領悟出其中的奧秘。

步驟如下:
1. 在Server跟Client(使用者的電腦)安裝git 套件與ssh套件
2. 在Server跟Client設定ssh自動登入驗證 (這是讓使用者操作git時不需要登入)
3. 初始化git環境並設定權限
4. 驗證結果

至於git server 何用,只知道是我們FW Engineer要用的程式版本控管工具。我不是使用者,細節留給大家去查,在此focus架設步驟。

在Server上安裝git 套件與ssh套件
sudo apt-get update
sudo apt-get install git-core
sudo apt-get install openssh-server

在Client(使用者機器)上安裝git 套件與ssh套件
sudo apt-get update
sudo apt-get install git-core   # install git on client
sudo apt-get install openssh-client

接下來是設定SSH自動登入,先在Server上建立一個git群組,然後新增使用者帳號,設定使用者的群組為git。
sudo groupadd git   # add a group named "git"
useradd -m -c "git user A" -G git gita       # Create a git user "gita" under group "git"
useradd -m -c "git user B" -G git gitb       # Create a git user "gitb" under group "git"

修改使用者的密碼後,在Server上登入為使用者,在預設目錄中新增 ~/.ssh的目錄夾
mkdir -p ~/.ssh/

接著請使用者在自己機器上產生RSA Key,把key傳到Server對應使用者的預設目錄~/.ssh內。以下是用連線方式傳到Server,也可以用USB把Key拷貝到Server的某處,再寫進入各使用者的~/.ssh/authorized_keys
cd ~/.ssh                # Login as end user and generate key
ssh-keygen -t rsa
ssh-add
scp -p  ~/.ssh/id_rsa.pub username@serverip:~/.ssh # Or move the key with USB

回Server端登入為使用者把key寫入
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

發現以下步驟可有可無,如果SSH連線有問題可以試試看
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
rm ~/.ssh/id_rsa.pub

SSH設定完成,請使用者試試看SSH連線要不要輸入密碼,如果沒有密碼提示代表成功。
ssh -p username@serverip # test the SSH

接著到Server端初始化git,假設我們git存放目錄是/home/gitRepository/,新增一個專案proj1.git測試用
mkdir -p /home/gitRepository/
mkdir -p /home/gitRepository/proj1.git # Create your first project
chown username:git -R /home/gitRespository/         # username可以是git群組內的任一使用者,主要是將擁有者的群組改為git,讓每個git群組的使用者有足夠的權限更新程式
chown username:git -R /home/gitRespository/*
chmod 775 -R /home/gitRepository/
chmod 775 -R /home/gitRepository/*
cd /home/gitRepository/
git init -- bare -- shared                                   # initialized git repository
cd /home/gitRepository/proj1.git                
git init -- bare -- shared                                   # 每開一個專案(不同的code base)要作一次init

終於到驗證的時刻...在使用者的機器上操作git指令看看是否成功,將某個專案載下來,新增一個test.txt檔,更新回git server。接著再將專案抓下來,看剛剛新增的test.txt是否在其中,如果有下載下來就大功告成囉
git config --global user.name "Your Name"   # first time setup
git config --global user.email "Your email"    # first time setup
git clone username@serverip:/home/gitRepository/proj1.git     # 將專案proj1拉來本機
# 在proj1裡新增一個小檔test.txt
git add test.txt                        # 加入git版本控制
git commit -m ‘init commit’   # 初次commit進git
git push origin master: master #更新回git SERVER


這個作法只適用小型群組,我們台灣Firmware Team只有兩人,設定不會造成負擔。如果多人可能就要找更好的工具作管理了。Ok, Done!



3 則留言:

  1. 好厲害喔 我架了很久都失敗
    可以寫信請教你嗎?

    回覆刪除
  2. 回覆
    1. 是啊, 之前網站的分享思緒都讓我覺得很凌亂, 所以把它整理起來.但我都是任務完成就忘了~~

      刪除