2012-09-18 114 views
1

我正在嘗試使用Gitolite獲得一個相當簡單的部署過程,用於Node應用程序。我有Gitolite設置和在我的服務器上工作,我能夠推動它很好。通過Gitolite部署節點應用程序和post-receive鉤子

Gitolite正在用戶git下運行,我設置了一個node用戶,我希望用它來運行Node應用程序。

我的計劃是將Node應用程序推送到Gitolite,然後使用post-receive掛鉤腳本將應用程序文件移動到應用程序所在的目錄,本例中爲/var/local/node-apps/my-node-app/。我創建這樣的節點app文件夾:

sudo mkdir -p /var/local/node-apps/my-node-app 
sudo chown node /var/local/node-apps/my-node-app 

的問題是,我是一個Unix的小白,我沒有得到我的頭一輪的文件/文件夾的權限和wotnot。

/var/local/node-apps(也/var/local/node-apps/my-node-app)由node用戶所擁有的,所以當用戶git試圖結帳到這個位置,我得到了一堆許可被拒絕錯誤。我使用的是在後得到的命令是:

GIT_WORK_TREE=/var/local/node-apps/my-node-app git checkout -f 

而且我得到的錯誤是這樣的:

remote: error: git checkout-index: unable to create file XXXX (Permission denied) 
remote: fatal: cannot create directory at 'XXXX': Permission denied 

什麼是解決它的最好方法?我需要授予git用戶無密碼sudo權限su作爲node用戶嗎?或者可以通過更改組和文件夾權限以某種方式修復?或者完全不同的方法?我迷路了!

謝謝!

回答

0

使用sudo肯定會起作用,在「post-receive hook permission denied 「unable to create file」 error」中有一個示例,將git命令包裝在腳本中。

更改後接收到:

sudo sh /usr/local/sbin/prgetsimpleappscom 

與visudo命令改變sudoers文件

git ALL = (root) NOPASSWD: /bin/sh /usr/local/sbin/prgetsimpleappscom 

另一種方法將是一個cron作業爲node用戶定期獲取和(如果有新的提交)拉入目標倉庫。

+0

謝謝! 在你引用的例子中,這個人基本上通過添加sudoers文件來解決他的問題。用他的方法考慮是否有任何安全隱患? – WildService

+0

@Wintamute腳本(在'suoders'文件中引用)需要由root進行控制(爲了確保它不能被修改以執行其他任何操作)。除此之外,你有使用sudo通常的利弊:http://serverfault.com/questions/140633/security-issue-of-linux-sudo-command – VonC

+0

啊,我明白了,是有道理的。在他的例子中,他實際上追加了三行「sudoers」。 'git ALL =(root)NOPASSWD:/ usr/local/sbin/prgetsimpleappscom','git ALL =(root)NOPASSWD:/ bin/sh'和'git ALL =(root)NOPASSWD:/ bin/sh/usr/local/sbin中/ prgetsimpleappscom'。這三個都是必要的嗎? – WildService

相關問題