爲了給公司的服務器上搭建gitlab環境而且配置鉤子(實如今本地git push以後服務器自動git pull),整了很久,最後終於把問題解決了,下面是記錄安裝gitlab以後引起的一系列問題:php
首先搭建gitlab是參考了http://www.linuxidc.com/Linux/2016-06/131992.htm這篇文章,使用的是bitnami製做的一鍵安裝包,下載下來的是run格式的文件,須要先給這個文件執行權限:linux
chmod +x filename
filename是這個文件的名字nginx
安裝完gitlab之後,首先要作的是讓gitlab服務在linux服務器每次重啓的時候能夠自動的啓動git
一、在linux系統上設置開機自啓動腳本shell
編輯/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文件是沒有執行權限的,因此須要給它添加執行權限:apache
chmod +x /etc/rc.d/rc.local
以後系統每次從新啓動的時候都會自動的打開gitlab相關服務。安全
二、使用php的shell_exec()函數執行git pull服務器
首先,shell_exec()函數通常是被禁用的,解決方法,在php.ini中將disable_functions那一塊去掉shell_exec(),這樣函數就被解禁了。函數
修改php.ini配置以後讓nginx從新加載php.ini配置,我以前沒有用過nginx,用的都是apache,在apache上,直接service httpd restart就能從新加載全部配置了,php-fpm
可是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的目的徹底就是爲了配置鉤子。