Centos:基於Git的代碼自動部署


關於在Centos上使用Git做代碼管理和自動部署的方案,網上已經有不少教程了。近幾天在部署環境的時候碰了不少坑,很大部分都是由於權限太亂導致的,這里詳細寫一下流程。

 

1. 自動部署原理

先講實現方法和原理。Git服務和倉庫都是在服務器上的,服務器上的Web目錄和本地都有完整的代碼。Git有個叫hook的機制,可以在代碼更新時執行回調(執行一段shell)。一般執行流程是開發完成后,通過git push將代碼傳到服務器git倉庫上,這時git hook自動到Web目錄git pull,將Web目錄下的代碼更新。這樣就完成了自動部署。

 

2. 配置用戶

本例Centos版本為7.0,,以apache作服務器。若沒有安裝git或apache,先安裝:

# yum install httpd
# yum install git

修改git用戶權限(執行命令權限、用戶目錄、組、改密碼):

# usermod git -s /bin/bash -d /home/git -g apache
# passwd git

如果安裝完git后沒有git用戶,把以上一句 usermod 改成 useradd 就行了。以上命令設置了git用戶的家目錄和組,把git歸屬到apache組是因為需要git管理網站目錄的文件,同組方便操作。這里要注意的是網上很多教程使用/bin/git-shell作為命令權限,但個人認為不推薦,因為后續還要使用git用戶做一些操作,需要基本的shell命令。

 

3. 創建倉庫和網站代碼

使用git用戶身份,新建git倉庫:

# su git
$ git init --bare ~/repo/website.git

以上表示在git用戶的家目錄repo文件夾中,建立website.git倉庫。

到網站目錄(/var/www/html),克隆一份website代碼:

$ cd /var/www/html
$ git clone ~repo/website.git

這樣網站目錄就有一份倉庫的完整代碼。

接下來寫hook文件:

$ cd ~/repo/website.git/hooks
$ vim post-receive

在post-receive鈎子文件里寫以下內容[1]:

#!/bin/sh
unset GIT_DIR
cd /var/www/html/website
git pull

編輯后保存退出。以上命令表示cd到網站目錄,並git pull更新。隨后還要把post-receive改成可執行:

$ chmod 775 post-receive

可以看到,以上大部分命令都是以git身份執行的,是因為涉及很多文件操作,如果用其他用戶執行則要改權限,以及chown把文件歸屬給git用戶。

 

最后最后,完成所有操作,才把git的命令權限改回去(用root身份):

# usermod -s /bin/git-shell

git用戶專門管理git的所有事務,而不能用於登錄系統。至於公鑰密鑰的配置,請自行參考其他資料。

如果要防止.git被訪問,httpd.conf加入以下限制:

<Files ~ "\.git">
    Require all denied
</Files>

附上git倉庫的地址,用於遠程開發克隆,把serverHost換成服務器地址:

git@serverHost:~/repo/website.git

 

參考資料及引用:

[1] git hook分類:CSDN博客. git鈎子. http://blog.csdn.net/hongchangfirst/article/details/46693237


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM