我已经让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文件中指定的用户的任何建议吗?
以及如何传递所要求的密码?
答案 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