Как настроить capistrano для развертывания puma и nginx на одном сервере и повторного запуска на другом? - PullRequest
0 голосов
/ 27 сентября 2018

Я готовлю capistrano для развертывания приложения ruby ​​on rails в AWS.Серверы приложений будут находиться за хостом bastian.

У меня есть два сервера server1 и server2.Я хочу развернуть и запустить puma, nginx на сервере server1, а также запустить resque рабочих и планировщики resque на server2.Я знаю о ролях, и вот моя конфигурация до сих пор:

# deploy/production.rb
web_instances = [web-instance-ip]
worker_instances = [worker-instance-ip]
role :app, web_instances
role :web, web_instances
role :worker, worker_instances

set :deploy_user, ENV['DEPLOY_USER'] || 'ubuntu'
set :branch, 'master'
set :ssh_options, {
  forward_agent: true,
  keys: ENV['SSH_KEY_PATH'],
  proxy: Net::SSH::Proxy::Command.new("ssh -i '#{ENV['SSH_KEY_PATH']}' #{fetch(:deploy_user)}@#{ENV['BASTIAN_PUBLIC_IP']} -W %h:%p"),
}

set :puma_role, :app

Я не уверен, что я должен делать или как писать задачи, убедившись, что запуск пумы, перезапуск выполняется только на server1 и resque,Resque Scheduler Start Restart и т. д. обрабатывается только на server2.В то время как общие задачи, такие как извлечение последнего кода, установка комплекта и т. Д., Выполняются для каждого экземпляра?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Этого можно добиться с помощью role, чтобы ограничить количество задач, которые должны выполняться для каждого сервера, и некоторых хуков для запуска ваших пользовательских задач.Ваш файл deploy/production.rb будет выглядеть примерно так.

web_instances = [web-instance-ip]
worker_instances = [worker-instance-ip]
role :app, web_instances
role :web, web_instances
role :worker, worker_instances

set :deploy_user, ENV['DEPLOY_USER'] || 'ubuntu'
set :branch, 'master'
set :ssh_options, {
  forward_agent: true,
  keys: ENV['SSH_KEY_PATH'],
  proxy: Net::SSH::Proxy::Command.new("ssh -i '#{ENV['SSH_KEY_PATH']}' #{fetch(:deploy_user)}@#{ENV['BASTIAN_PUBLIC_IP']} -W %h:%p"),
}

# This will run on server with web role only
namespace :puma do
  task :restart do
    on roles(:web) do |host|
      with rails_env: fetch(:rails_env) do
        ** Your code to restart puma server **
      end
    end
  end
end

# This will run on server with worker role only
namespace :resque do
  task :restart do
    on roles(:worker) do |host|
      with rails_env: fetch(:rails_env) do
        ** Your code to restart resque server **
      end
    end
  end
end

after :deploy, 'puma:restart'
after :deploy, 'resque:restart'

Проверьте документы для получения дополнительной информации о командах и хуках для настройки вашего развертывания.

0 голосов
/ 27 сентября 2018

Предположим, вы определили роли следующим образом

role :puma_nginx_role, 'server1.com'
role :resque_role, 'server2.com'

Теперь определите грабли в вашем файле config / deploy.rb , например:

namespace :git do
  desc 'To push the code'
  task :push do
    execute "git push"
  end
end

Теперь, предполагая, что приведенный выше пример должен быть запущен на сервере server1, все, что вам нужно сделать, это

namespace :git do
  desc 'To push the code'
  task :push, :roles => [:puma_nginx_role] do
    execute "git push"
  end
end

Таким образом, ваша конфигурация capistrano говорит, что git: push должно бытьвыполняется для роли : puma_nginx_role , которая, в свою очередь, запускает его на server1.com .Вам нужно будет изменить задачи , чтобы запустить puma / nginx / resque и вносить изменения в зависимости от ролей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...