為了給公司的服務器上搭建gitlab環境並且配置鈎子(實現在本地git push之后服務器自動git pull),整了好久,最后終於把問題解決了,下面是記錄安裝gitlab之后引發的一系列問題:
首先搭建gitlab是參考了http://www.linuxidc.com/Linux/2016-06/131992.htm這篇文章,使用的是bitnami制作的一鍵安裝包,下載下來的是run格式的文件,需要先給這個文件執行權限:
chmod +x filename
filename是這個文件的名字
安裝完gitlab以后,首先要做的是讓gitlab服務在linux服務器每次重啟的時候可以自動的啟動
1、在linux系統上設置開機自啟動腳本
編輯/etc/rc.local這個文件,將需要開機執行的命令添加到這個文件中,我希望gitlab能開機執行,所以添加/opt/gitlab-7.0.0-0/ctlscript.sh start到該文件,但是這樣做以后,我重啟服務器后,發現這個腳本並沒有被執行,然后在網上找到一篇資料:http://soarwilldo.blog.51cto.com/5520138/1549656。原因是:/etc/rc.local是指向/etc/rc.d/rc.local的,但是默認情況下/etc/rc.d/rc.local文件是沒有執行權限的,所以需要給它添加執行權限:
chmod +x /etc/rc.d/rc.local
之后系統每次重新啟動的時候都會自動的打開gitlab相關服務。
2、使用php的shell_exec()函數執行git pull
首先,shell_exec()函數一般是被禁用的,解決方法,在php.ini中將disable_functions那一塊去掉shell_exec(),這樣函數就被解禁了。
修改php.ini配置之后讓nginx重新加載php.ini配置,我之前沒有用過nginx,用的都是apache,在apache上,直接service httpd restart就能重新加載所有配置了,
但是nginx不太一樣,在網上找了這個命令/usr/local/nginx/sbin/nginx -s reload,但是發現使用后並沒有重新載入php.ini,最后找到有效的方法:
使用的命令是
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
(最后發現這個命令也行)
service php-fpm restart
但是,光函數解禁了還沒有用,因為www用戶組使用這個函數有限制,也就是權限不夠,解決辦法是使用sudo來提高www用戶組的權限,
執行visudo(或者是 vi /etc/sudoers) , 為www用戶組賦予root權限,並且不需要密碼。
php代碼加上sudo
shell_exec("/usr/bin/sudo /usr/bin/git pull");
在本地push以后,發現還是沒有同步,查看日志,報錯信息:sudo:sorry,you must have a tty to run sudo
解決方法是輸入visodu,將Defaults requiretty這一行注釋掉

然后www用戶組就有了執行shell_exec函數的權限了,這樣就配置好了鈎子。
因為是公司的測試服務器,所以安全性不需要那么高,執行shell_exec的目的完全就是為了配置鈎子。
