Deployment 具有普通用户的Capistrano部署

Deployment 具有普通用户的Capistrano部署,deployment,capistrano,Deployment,Capistrano,我试图设置Capistrano来进行部署,但我现在偶然发现了Capistrano用户的一个常见假设:您通过SSH连接到远程主机的用户将有权写入部署目录 在这里,管理员是普通用户,但有一个区别:他们可以使用sudo。起初,我认为这就足够了,因为有一些配置与sudo相关,但似乎事实并非如此 有办法解决这个问题吗?创建由执行部署的每个人共享的用户不是一个可接受的解决方案 编辑:为了说明这一点,在不调用sudo的情况下不应该执行任何部署操作——sudo是检查是否允许用户部署的网关点,它应该是一个强制检查

我试图设置Capistrano来进行部署,但我现在偶然发现了Capistrano用户的一个常见假设:您通过SSH连接到远程主机的用户将有权写入部署目录

在这里,管理员是普通用户,但有一个区别:他们可以使用sudo。起初,我认为这就足够了,因为有一些配置与sudo相关,但似乎事实并非如此

有办法解决这个问题吗?创建由执行部署的每个人共享的用户不是一个可接受的解决方案

编辑:为了说明这一点,在不调用sudo的情况下不应该执行任何部署操作——sudo是检查是否允许用户部署的网关点,它应该是一个强制检查点


目前接受的答案不符合这一标准。它通过向用户授予额外的权限来绕过sudo。无论如何,我接受它,因为我得出的结论是,Capistrano在这方面已经彻底崩溃。

我假设您正在部署Linux发行版。解决问题的最简单方法是创建一个组(例如部署者),并添加每个应该有权部署到该组的用户。创建组并且用户在组中后,更改部署路径上的所有权和权限

根据发行版的不同,语法会略有不同。这是针对ubuntu/debian的:

创建组:

$sudo groupadd部署人员

将用户添加到组:

$sudo usermod-a-G部署人员daniel

最后一个参数是用户名

接下来,更新部署路径的所有权:

$sudo chown-R root:deployers/deploy/to/path/

的语法为:。这里我假设当前拥有路径的用户是root。任何用户都应该拥有目录的更新

最后,更改部署路径上的权限:

$sudo chmod-R 0766/deploy/to/path/


这将允许部署者组中的用户读取和写入
/deploy/to/path

下的所有文件和目录。我认为我不会得到比这更好的结果,所以我将接受这个答案,尽管它仍然不符合我的基本前提:用户是普通的——他们对普通用户没有任何区别,除了能够sudo。这意味着,正如我应该明确指出的,所有部署都必须要求sudo'ing。你所说的“对普通用户没有任何区别”是什么意思?这意味着可以部署的用户和不能部署的用户之间没有区别。Sudo可以区分它们,而不是其他任何人。您如何配置Sudo?您是否在sudoers文件中明确列出了它们?另外,您可以显示您试图部署到的路径上的权限吗?是的,我在sudoers文件中明确地拥有这些权限。路径上的权限是
www-data:www-data
644
。您找到解决此问题的方法了吗?@pl1nk No。正如我所说,我认为Capistrano在这方面根本不存在。目前,我做的是相反的:为应用程序创建一个用户,并将授权部署的每个人的公钥添加到其授权密钥中。此外,我在面料方面基本上抛弃了Capistrano,这是一种更好的记录方式,即使功能不太强大。