ubuntu 16.04 下搭建git服務器(gitosis+git-daemon+gitweb)

近期公司爲了方便管理項目,要搭建一個git服務器集中管理項目數據。通過請教同事,並在虛擬機上多次嘗試終於搭建成功,特意將搭建過程分享給跟我一樣的小白。


環境:

服務器端: git-server   192.168.92.128

客戶端:   git-client   192.168.92.129


服務器端:

    1、首先安裝git 與 openssh  (openssh 安裝過的,這步可以只安裝git就行)

    sinovo@git-server:~$ sudo apt-get install git-core openssh-server openssh-client

    image.png

        

    2、進入root權限,打開/etc/sudoers,將sinovo用戶加入到sudo權限中,他是gitosis的管理員

    sinovo@git-server:~$ sudo vim /etc/sudoers

    image.png


    3、生成一個祕鑰ssh-rsa-key

     sinovo@git-server:~$ ssh-keygen -t rsa

        一路回車即可,不要輸任何內容

        image.png ls

        查看生成的key

        結尾的 sinovo@git-server 是sinovo 在gitosis中的管理員身份

        sinovo@git-server:~$ ls .ssh

        sinovo@git-server:~$ cat .ssh/id_rsa.pub

        image.png 

        注意:  .ssh/id_rsa_gitosis.pub文件內容結尾的簽名:”sinovo@git-server”,這將是sinovo在gitosis中的管理員身份


        4、下載並安裝gitosis工具

        以sinovo身份執行以下操作:

        sinovo@git-server:~$ sudo apt-get install python python-setuptools

        image.png

        sinovo@git-server:~$ git clone https://github.com/tv42/gitosis.git

        image.png

        sinovo@git-server:~$ cd gitosis/

        sinovo@git-server:~/gitosis$ sudo python setup.py install

        image.png

        

        5、創建git用戶,用git用戶身份訪問其管理的所有git工程

        sinovo@git-server:~$ sudo useradd -m git

        sinovo@git-server:~$ sudo passwd git

        image.png

        gitosis默認所有git工程都放在/home/git/repositories/下。爲防止gitosis崩潰的影響,將/home/gitpot作爲所有git工程的根目錄,今後刪除git用戶時不會波及這些工程。

        sinovo@git-server:~$ sudo mkdir /home/gitpot
        sinovo@git-server:~$ sudo chown git.git -R /home/gitpot/
        sinovo@git-server:~$ ls /home/ -l

        image.png

       然後以git身份,建立/home/git/repositories爲指向/home/gitpot的超級鏈接。

        sinovo@git-server:~$ su - git
        git@git-server:~$ git config --global user.name "Gitadmin"
        git@git-server:~$ git config --global user.email [email protected]
        git@git-server:~$ ls -al
        git@git-server:~$ ln -s /home/gitpot ./repositories
        git@git-server:~$ ls -al 

       image.png 

     

       6、創建gitosis管理工程   

        以sinovo 身份執行以下命令:

        image.png

        如果是centos6.6的話 用這個路徑 sudo -H -u git /usr/bin/gitosis-init < ./gadmin\@128.pub

        以上如果沒有報錯就是OK了


       下載gitosis-admin.git工程,驗證sinovo作爲管理員,可以訪問這個“管理所有git工程”的git工程

       image.png   

        如果以上創建完成後沒有問題,可以通過keydir文件與 gitosis.conf查看用戶名及祕鑰文件

        image.png 


客戶端

        7、重複第 1 步和第 3 步,將生成的文件上傳至服務器共享文件夾 keys 下



服務器

        8、添加客戶端git-client上的用戶pdf,並新增一個test-git.git工程。

         首先將keys目錄下的祕鑰拷貝到gitosis-admin下,然後查看客戶端的祕鑰

        image.png

        將上傳的祕鑰拷貝到 keydir文件夾下並創新命名爲 key文件結尾的 pdf@git-client,然後將上傳的祕鑰刪除,只保留keydir下的         

        image.png

        編輯 gitosis.conf 將 pdf@git-client 添加進入gitosis管理組或新建一個測試組

        sinovo@git-server:~/gitosis-admin$ sudo vim gitosis.conf

        image.png      

        查看是否有更改

        sinovo@git-server:~/gitosis-admin$ git status

        我們可以看到 紅色部分的文件是我們做過更改動作的

        image.png

        提交更改

        sinovo@git-server:~/gitosis-admin$ git add gitosis.conf

        sinovo@git-server:~/gitosis-admin$ git add keydir/[email protected]

        sinovo@git-server:~/gitosis-admin$ git commit -m "Add test-git project."

        image.png

        

        sinovo將本地的修改提交到遠端:

        sinovo@git-server:~/gitosis-admin$ git remote -v 

        sinovo@git-server:~/gitosis-admin$ git branch -a

        sinovo@git-server:~/gitosis-admin$ git log

        sinovo@git-server:~/gitosis-admin$ git push origin master

        image.png


        以git身份創建一個空的test-git.git倉庫

        image.png

        /home/gitpot目錄下保存的都將是原始倉庫(—bare)


客戶端

        驗證其他新增用戶的訪問權限

        pdf@git-client:~$ git clone [email protected]:test-git.git

        image.png

       最後將新用戶合併至遠端,合並沒有問題則驗證通過 

       pdf@git-client:~$ cd test-git/

       pdf@git-client:~/test-git$ echo "Hello World! It's pdf comment." >hello.txt

       pdf@git-client:~/test-git$ git add hello.txt

       pdf@git-client:~/test-git$ git commit -m "Add hello.txt."

       pdf@git-client:~/test-git$ git status

       pdf@git-client:~/test-git$ git log

       pdf@git-client:~/test-git$ git branch

       pdf@git-client:~/test-git$ git remote -v

       pdf@git-client:~/test-git$ git push origin master   

       image.png

       下面以gadmin身份驗證修改和創建新分支的權限

        sinovo@git-server:~$ git clone [email protected]:test-git.git

        image.png

 

       sinovo@git-server:~/test-git$ echo "Welcome! I'm gadmin." >> hello.txt

       sinovo@git-server:~/test-git$ cat hello.txt

       sinovo@git-server:~/test-git$ git add hello.txt

       sinovo@git-server:~/test-git$ git commit -m "Add a comment into hello.txt."

       sinovo@git-server:~/test-git$ git log   
       sinovo@git-server:~/test-git$ git remote -v

       sinovo@git-server:~/test-git$ git branch -a

       sinovo@git-server:~/test-git$ git push origin master

        image.png

       sinovo@git-server:~/test-git$ git checkout -b test1

       sinovo@git-server:~/test-git$ echo "You can checkout new branch and merge into remote." >README

       sinovo@git-server:~/test-git$ git add README

       sinovo@git-server:~/test-git$ git commit -m "Add README."

       sinovo@git-server:~/test-git$ git branch -a

       sinovo@git-server:~/test-git$ git log

       sinovo@git-server:~/test-git$ git push origin test1:refs/heads/test1

       image.png


服務器端

    安裝並配置git-daemon

    git-daemon可以提供給局域網內任何人只讀訪問的權限。/home/git/repositoies/下所有git工程可任意下載。
    Ubuntu16.04不再使用git-daemon-run,啓用的是git-daemon-sysvinit。

    安裝git-daemon-sysvinit

    sinovo@git-server:~/test-git$ sudo apt-get install git-daemon-sysvini

    image.png

    修改git-daemon配置,將監聽的根目錄指向/home/gitpot。

    sinovo@git-server:~/test-git$ sudo vim /etc/default/git-daemon

    image.png

    重啓git-daemon服務,查看其監聽的端口(9418)狀態,證明服務已經正常運行 

    sinovo@git-server:~$ sudo service git-daemon restart

    sinovo@git-server:~$ sudo service git-daemon status

    image.png

    sinovo@git-server:~$ sudo lsof -i:9418

    image.png

    在客戶端以未註冊的用戶身份(root)下載git工程。使用的是git訪問

    image.png


服務器端

    安裝配置gitweb

    安裝apache

    sinovo@git-server:~$ sudo apt-get install apache2

    打開瀏覽器輸入192.168.92.128,出現以下頁面表示安裝成功

    image.png

   安裝gitweb

    sinovo@git-server:~$ sudo apt-get install libcgi-pm-perl gitweb

     建立超鏈接,使訪問192.168.92.128/gitweb ,由gitweb.cgi響應

     sinovo@git-server:~$ sudo ln -s /usr/share/gitweb /var/www/html/gitweb

    image.png

    將gitweb訪問的git工程根目錄指向/home/gitpot

    sinovo@git-server:~$ sudo vim /etc/gitweb.conf

    image.png

    修改apache的80端口網頁配置,使訪問192.168.92.128/gitweb 並啓用gitweb.cgi

    sinovo@git-server:~$ sudo vim /etc/apache2/sites-available/000-default.conf

    進入編輯頁面後在最後面追加以下內容,保存退出。然後重啓apache就OK了

    image.png

    sinovo@git-server:~$ sudo a2enmod cgid

    sinovo@git-server:~$ sudo /etc/init.d/apache2 restart

    image.png 

    

    最後驗證網頁是否有效

    瀏覽器輸入:192.168. 92.128/gitweb

    image.png 














        



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章