2012-09-18 71 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

相关问题