使用“部署”用户的写入权限

使用“部署”用户的写入权限

我目前刚接触 Chef 和 Capistrano。我使用 Capistrano 3.x 版本来部署 Rails 4 应用程序。

我已经使用 chef solo 成功启动了一台服务器。我使用的其中一个 cookbook 是 Nginx。

回到我的简单的 Rails 4 应用程序,我尝试运行此命令来检查我的部署状态:

cap production deploy:check

然而,它会引发一些错误:

DEBUG [05e580a4] Command: /usr/bin/env mkdir -pv /var/www/shared /var/www/releases
DEBUG [05e580a4]    mkdir: cannot create directory `/var/www': Permission denied
DEBUG [05e580a4]    mkdir: cannot create directory `/var/www': Permission denied

我在 Capistrano 中使用deploy用户,在我的 Chef 节点配置中,我指定了deploy用户。我也可以使用用户登录我的实例deploy

有没有适当的方法来解决 Chef 或 Capistrano 上的权限问题?

答案1

在您尝试运行 Capistrano 进行部署之前,您要部署到的目录应该已经存在,并且具有正确的所有权和权限。因此,您需要事先处理好这个问题,可能在您创建用户的同一个 chef 配方中。

答案2

目录多于Capistrano 部署到的基本目录必须可由 Capistrano 用户写入,因为 Capistrano 通常会创建该目录。

这里要注意样式/惯例。/var/www不适合用作应用程序的基目录。在许多操作系统和发行版中,/var/www它本身是由操作系统软件包创建和管理的,除了将典型的 Capistrano releases/current/shared 目录放在那里有点草率之外,如果升级或重新安装与 Web 服务器相关的软件包,它自己的权限可能会被恢复。我建议您在目录结构中添加另一层,例如

/var/www/ruby_apps

然后在你的厨师食谱中:

group 'deploy'

user 'deploy' do
  group 'deploy'
end

directory '/var/www/ruby_apps' do
  user 'deploy'
  group 'deploy'
end

现在假设您的应用程序名为squishy

在您的 Rails 应用程序中config/deploy.rb编辑:deploy_to以下行:

set :deploy_to, '/var/www/ruby_apps/squishy'

..现在 Capistrano 将能够创建和维护squishy目录和其下的所有内容,以及您想要在其下部署的任何其他应用程序ruby_apps

相关内容