以root身份运行capistrano 3自定义安装脚本

时间:2014-05-12 07:10:50

标签: capistrano capistrano3

我已经让capistrano 3作为非root用户以无密码部署完美运行。

我现在要做的是设置安装脚本,安装upstart服务,sudoers.d文件并在服务器上安装一些依赖项。

这样我只需在production.rb文件中输入用户和主机即可安装新服务器并运行cap production setupserver

问题是我创建的设置脚本需要以root身份运行。

但由于它是一次性的事情,我只想询问用户root密码并在服务器上运行几项任务。

as :root命令无效,因为它使用su -c

我可以要求输入密码,如此处所示 http://capistranorb.com/documentation/faq/how-can-i-get-capistrano-to-prompt-for-a-password/

有关如何覆盖production.rb文件中指定的用户的任何建议吗?

以及如何传递所要求的密码?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这应该通过使用户变量来解决您的问题:

set :current_user, Proc.new { current_user = Capistrano::CLI.ui.ask "Enter deploy user" }

if current_user.present?
   set :user, "#{current_user}"
end

它会做什么会在为用户运行命令之前询问您,然后将此用户分配给production.rb:user,然后您就可以在设置上控制它。

答案 1 :(得分:0)

我最终解决它的方法是为同一台服务器添加另一个角色。

role :app, 'theappuser@myserver'
role :install, 'root@myserver', :no_release => true

然后做这样的事情

desc 'Install nginx'
task :install do
  on roles(:install) do
    require 'erb'
    template = ERB.new(File.new('deploy/templates/nginx.conf.erb').read).result(binding)
    upload! StringIO.new(template), "/etc/nginx/conf.d/#{fetch(:domain)}.conf"
  end

  on roles(:app) do
    invoke 'nginx:restart'
  end
end