Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 通过Gitolite和post接收钩子部署节点应用程序_Node.js_Unix_Deployment_Permissions_Gitolite - Fatal编程技术网

Node.js 通过Gitolite和post接收钩子部署节点应用程序

Node.js 通过Gitolite和post接收钩子部署节点应用程序,node.js,unix,deployment,permissions,gitolite,Node.js,Unix,Deployment,Permissions,Gitolite,我正在尝试使用Gitolite为节点应用程序提供一个相当简单的部署过程。我已经在我的服务器上安装了Gitolite并正在工作,我能够很好地推动它 Gitolite在一个名为git的用户下运行,我已经设置了一个节点用户,我希望用它来运行节点应用程序 我的计划是将Node应用程序推送到Gitolite,然后使用post-receive钩子脚本将应用程序文件移动到应用程序所在的目录,在本例中为/var/local/Node-apps/My-Node-app/。我创建了节点应用程序文件夹,如下所示: s

我正在尝试使用Gitolite为节点应用程序提供一个相当简单的部署过程。我已经在我的服务器上安装了Gitolite并正在工作,我能够很好地推动它

Gitolite在一个名为git的用户下运行,我已经设置了一个节点用户,我希望用它来运行节点应用程序

我的计划是将Node应用程序推送到Gitolite,然后使用post-receive钩子脚本将应用程序文件移动到应用程序所在的目录,在本例中为/var/local/Node-apps/My-Node-app/。我创建了节点应用程序文件夹,如下所示:

sudo mkdir -p /var/local/node-apps/my-node-app
sudo chown node /var/local/node-apps/my-node-app
remote: error: git checkout-index: unable to create file XXXX (Permission denied)
remote: fatal: cannot create directory at 'XXXX': Permission denied
问题是我是一个Unix noob,我没有足够的文件/文件夹权限和wotnot

/var/local/node-apps和/var/local/node-apps/my-node-app都是由节点用户拥有的,因此当git用户尝试签出到此位置时,我会收到一系列拒绝权限的错误。我在post receive中使用的命令是:

GIT_WORK_TREE=/var/local/node-apps/my-node-app git checkout -f
我会遇到这样的错误:

sudo mkdir -p /var/local/node-apps/my-node-app
sudo chown node /var/local/node-apps/my-node-app
remote: error: git checkout-index: unable to create file XXXX (Permission denied)
remote: fatal: cannot create directory at 'XXXX': Permission denied
解决这个问题的最佳方法是什么?我是否需要将git user password less sudo权限授予su作为节点用户?或者可以通过更改组和文件夹权限以某种方式解决此问题?还是完全不同的方法?我迷路了


谢谢

使用sudo肯定会奏效,至少有一个例子,将git命令包装到脚本中

接收后更改为:

用visudo更换sudoers


另一种方法是cron作业,因为节点用户定期获取数据,如果在目标repo中有新的提交拉取。

谢谢!在您引用的示例中,通过添加到sudoers文件,guy基本上解决了他的问题。在他的方法中有没有考虑安全性的问题?@在移植文件中引用的WimTutt脚本需要由root控制,以确保它不能被改变来做任何事情,而不是它应该做的事情。除此之外,你还有使用sudo通常的优点和缺点:啊,我明白了,这是有道理的。在他的例子中,他实际上在sudoers后面加了三行。git ALL=root NOPASSWD:/usr/local/sbin/prgetsimpleapspscom、git ALL=root NOPASSWD:/bin/sh和git ALL=root NOPASSWD:/bin/sh/usr/local/sbin/prgetsimpleapspscom。这三个都是必需的吗?@Wintamute我不直接测试,但我相信它们可能是必需的,这样脚本和git命令才能像sudo一样正确执行。我只是做了一个快速测试,所有的东西似乎都只使用了最后一行git all=root NOPASSWD:/bin/sh/usr/local/sbin/prgetsimpleapscom。我是否正确地认为,最后一行将git用户锁定为只能以root用户身份运行/bin/sh命令,而无需密码,并且只能使用参数/usr/local/sbin/prgetsimpleapscom?在这种情况下,从安全角度来看,尽量减少对sudoers的更改似乎是一个好主意?