Até agora, criamos uma nova instância AWS EC2 e a transformamos em uma tarefa no Capistrano3 até a configuração inicial da instância. Embora tenha sido difícil, finalmente chegamos ao ponto em que a instância EC2 estava pronta e tudo o que precisávamos fazer era instalar o middleware e as aplicações. Então, desta vez, gostaria de resumir o fluxo de implantação até agora.
Primeiro, prepare o servidor de implantação para rodar o Capistrano3. Inicie uma instância EC2, como um ambiente oficial Amazon Linux, pelo AWS Management Console, etc., faça login e instale o Capistrano31.
# Atualização delícia -y
# yum groupinstall -y "Ferramentas de Desenvolvimento"
# Versão openssl
OpenSSL 1.0.1h-fips 5 jun 2014
# Versão OpenSSL -D
OPENSSLDIR: "/etc/pki/tls"
# curl -L https://get.rvm.io | bash -s stable
# fonte /etc/profile.d/rvm.sh
# Lista de RVM
(※ Se os RVM Rubies forem exibidos, a instalação está concluída)
# Ruby -V
Ruby 2.0.0p451 (2014-02-24 revisão 45167) [x86_64-linux]
# Instalação RVM 2.0.0 -- --com-openssl-dir=/etc/pki/tls
# Ruby -V
Ruby 2.0.0p481 (2014-05-08 revisão 45883) [x86_64-linux]
# Trilhos de instalação gem --no-ri --no-rdoc
# Gem install capistrano
# Instalação de gemas capistrano_colors
# Instala a Gem capistrano-ext
# Instalação de GEMs sem trilhos - implantação
# Cap --v
(※ Cap Abortado! ~ Se for exibido, a instalação está completa)
# Instalação da GEM AWS-SDK
Crie um usuário para rodar o projeto de implantação no servidor de implantação. Dependendo do conteúdo da tarefa de implantação, é mais conveniente para o usuário-alvo ter permissões de sudo. Após criar um usuário, faça login novamente com esse usuário e crie um projeto para o Capistrano3 no diretório home.
$ sudo useradd -G roda deploy-user
$ sudo passwd deploy-user
$ sudo su - usuário de implantação
$ mkdir -m 755 cap3-project
$ CD cap3-project
$ cap install STAGES=test
Em seguida, defina o projeto de implantação "cap3-project". Primeiro, edite a configuração global "cap3-project/capfile" usada pelo projeto de implantação.
Capfile
# Carregar DSL e Montar Estágios
exigir 'capistrano/setup'
# Inclui tarefas padrão de implantação
exigir 'capistrano/implantação'
# Inclui tarefas de outras gemas incluídas no seu Gemfile
#
# Para documentação sobre esses, veja, por exemplo:
#
# https://github.com/capistrano/rvm
# https://github.com/capistrano/rbenv
# https://github.com/capistrano/chruby
# https://github.com/capistrano/bundler
# https://github.com/capistrano/rails
#
# exigir 'capistrano/rvm'
# Exigir 'capistrano/rbenv'
# exigir 'capistrano/chruby'
# exigir 'capistrano/agrupador'
# exigir 'capistrano/trilhos/ativos'
# exigem 'capistrano/trilhos/migrações'
# Carrega tarefas personalizadas de 'lib/capistrano/tasks', se você tiver alguma definida.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Rake::Task[:test].invoke
invocar :teste
Nesta implantação, não usaremos RVM, Rails, etc. para a tarefa, então não há necessidade de incluir módulos opcionais. Por enquanto, especificaremos apenas que o ambiente padrão de implantação é "test".
Em seguida, configure o arquivo do ambiente de implantação 'cap3-project/config/deploy/test.rb'.
config/deploy/test.rb
# Sintaxe de Papéis Simples
# ==================
# Suporta adição em massa de hosts para papéis, o servidor principal de cada grupo
# é considerado o primeiro, a menos que algum hospedeiro tenha o primário
# Propriedade definida. Não declare 'papel :todos', é um papel meta.
#role :app, %w{deploy@example.com}
#role :web, %w{deploy@example.com}
#role :d b, %w{deploy@example.com}
# Sintaxe Estendida do Servidor
# ======================
# Isso pode ser usado para inserir uma definição de servidor mais detalhada no
# lista de servidores. O segundo argumento é a, ou tipos pato, Hash e é
# usado para definir propriedades estendidas no servidor.
#server 'example.com', usuário: 'deploy', roles: %w{web app}, my_property: :my_value
# Opções Personalizadas de SSH
# ==================
# Você pode passar qualquer opção, mas lembre-se que a net/ssh entende um
# Conjunto limitado de opções, consulte[a documentação da net/ssh](http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start).
#
# Opções globais
# --------------
# set :ssh_options, {
# Chaves: %w(/home/rlisowski/.ssh/id_rsa),
# forward_agent: falso,
# auth_methods: %w(senha)
# }
#
# E/ou por servidor (sobrescrições globais)
# ------------------------------------
# servidor 'example.com',
# Usuário: 'user_name',
# roles: %w{web app},
# ssh_options: {
# usuário: 'user_name', # sobrepõe a configuração do usuário acima
# chaves: %w(/home/user_name/.ssh/id_rsa),
# forward_agent: falso,
# auth_methods: %W (senha da chave pública)
# # senha: 'por favor, use as chaves'
# }
Nesta implantação, as configurações de função e SSH para o ambiente de implantação são executadas dinamicamente durante a tarefa real, então todas as configurações padrão foram comentadas.
Depois, defina a entidade da tarefa de implantação.
config/deploy.rb
# configuração válida apenas para Capistrano 3.1
Trava '3.2.1'
## Configuração AWS ------------------------------------------------
# Carregando o AWS SDK para Ruby
Exigir 'AWS-SDK'
# Configurando para o AWS SDK
AWS.config({
:access_key_id => '<AWS_ACCESS_KEY_ID>',
:secret_access_key => '<AWS_SECRET_ACCESS_KEY>',
:região => 'ap-nordeste-1',
})
# SOU image_id
# Amazon Linux AMI 2014.03.2 (HVM)
Set: ami_image_id, 'ami-29dc9228'
# Número de Instâncias a Criar
Conjunto :instance_count, 2
# Tipo de Instância a Criar
Set :ec2_instance_type, 'T2.Micro'
# Criar Zonas de Disponibilidade
Conjunto :availability_zones, [ 'AP-Nordeste-1A', 'AP-Nordeste-1C' ]
# Criado subnet_id
Set :subnet_ids, [ '**Sub-net-******', 'Sub-net-********' ]
# Nome do Par de Chaves para Conjunto
Definir :key_pair_name, 'Deploy-Test'
# Arquivo de Chave Privada do Par de Chaves
definir :p file_chave_rivate, 'deploy-test.pem'
# Caminho de Armazenamento de Arquivos de Chave Privada (Lado Local)
# *Faça upload de /home/deploy-user/deploy-test.pem antecipadamente.
definir :p rivate_key_local_path, '/home/deploy-user/'
# ID de grupo de segurança a ser usado
Set :security_groups, [ 'SG-********', 'SG-********', 'SG-*****' ]
# ID do Núcleo
Set: kernel_id_name, 'Aki**-***'
# Informações da Tag
Defina :module, 'implante'
Definir :env, 'testar'
Set :Version, '1.0.0'
# Informações iniciais da conta do usuário (nova configuração de senha)
definir :d ef_account, 'ec2-user'
defina :d ef_password, 'PalavraPassa'
# Informações da Conta de Usuário de Manutenção
Definir :user_account, 'Deploy-User'
Definir :user_password, 'senha'
## Configurações Comuns para Projetos de Implantação ------------------------------------------------
# Nome do aplicativo para implantação
Set :Application, 'Nome da Application'
# Valor padrão para :format é :p retty
set: format, :p retty
# Nível de saída logarítmica
Set :log_level, :info
# Valor padrão para :p ty é falso
Configurado :p Obrigado, verdade
## Inicialização de Tarefas (Excluir Tarefas Padrão de Capistrano)
framework_tasks = [:começando, :começando, :atualizando, :atualizado, :p ublishing, :p ublished, :finalizando, :terminando]
framework_tasks.cada do |t|
Rake::Task["deploy:#{t}"].limpar
fim
Ancinho::Tarefa[:d eploy].limpar
## Tarefas de Implantação para Projetos
namespace :d eploy do
## Defina funções de processamento comuns no momento da implantação
def get_created_instances(info_type=nul)
# Função de recuperar informações para novas instâncias EC2 eletrificadas (retorna ID de instância por padrão)
created_instances_list = "CREATED_INSTANCES"
target_instances = []
ec2 = AWS::EC2.new
AWS.memoize faz
se File.existe? ( File.expand_path("~") + "/#{created_instances_list}" ) então
created_instances = File.read(File.expand_path("~") + "/#{created_instances_list}").chomp
ci = created_instances.gsub(/(\[|\s|\])/, "").split(",")
se info_type == "private_ip_address" então
target_instances = ec2.instances.select { |i| i.exists? && i.status == :executando && ci.include?( i.id) }.map(&:p rivate_ip_address)
elsif info_type == "dns_name" então
target_instances = ec2.instances.select { |i| i.exists? && i.status == :running && ci.include?( i.id) }.map(&:d ns_name)
senão
target_instances = ec2.instances.select { |i| i.exists? && i.status == :executando && ci.include?( i.id) }.map(&:id)
fim
retorno target_instances
senão
retorno zero
fim
fim
fim
def set_ssh_options(current_task="init")
# Definir as informações de conexão SSH para o cliente a ser implantado (o padrão é apenas primeiro acesso)
target_instances = get_created_instances("dns_name")
se current_task == "init" então
key_file_path = buscar(:p chave_rivate_local_caminho) + buscar(:p arquivo_chave_rivate)
ssh_user = fetch(:d ef_account)
Papel :first_time, target_instances
target_instances.each { |host|
servidor host, usuário: ssh_user, funções: %w{first_time}, ssh_options: { chaves: key_file_path, forward_agent: true }
}
senão
key_file_path = File.expand_path("~")+"/.ssh/#{fetch(:user_account)}_rsa"
ssh_user = buscar(:user_account)
Papel :Web, target_instances
target_instances.each { |host|
servidor host, usuário: ssh_user, funções: %w{web}, ssh_options: { chaves: key_file_path, forward_agent: false }
}
fim
fim
## Tarefas de Implantação
desc "Iniciar uma instância EC2 em cada zona de disponibilidade diferente."
Tarefa: create_instances fazer
run_locally
ec2 = AWS::EC2.new
created_instances = []
Cnt = 0
enquanto não < fetch(:instance_count) do
if cnt.even? then
current_az = fetch(:availability_zones)[0]
current_sn = fetch(:subnet_ids)[0]
else
current_az = fetch(:availability_zones)[1]
current_sn = fetch(:subnet_ids)[1]
end
info ": Instances launch start."
i = ec2.instances.create(
:image_id => buscar(:ami_image_id),
:monitoring_enabled => falso,
:availability_zone => current_az,
:subnet => current_sn,
:key_name => buscar(:key_pair_name),
:security_group_ids => buscar(:security_groups),
:d isable_api_termination => false,
:instance_type => buscar(:ec2_instance_type),
:count => 1,
:associate_public_ip_address => verdade
)
durma 3 enquanto eu.status == :p encerrando
i.tags["ModuleName"] = fetch(:module)
i.tags["EnviromentName"] = fetch(:env)
i.tags["Version"] = fetch(:version)
i.tags["Name"] = [ fetch(:module), fetch(:env), format("%02d", cnt+1) ].join("-")
created_instances < i.id
cnt += 1
end
execute "echo -n #{created_instances} > ~/CREATED_INSTANCES"
fim
fim
desc "Verifique o status de ativação das novas instâncias."
tarefa :verificar fazer
run_locally
def check_instance_status(instance_ids=[])
ec2 = AWS::EC2.new
AWS.memoize faz
EC2INFO = ec2.client.describe_instance_status({"instance_ids" => instance_ids})
sys_status = ec2info.instance_status_set.map { |i| i.system_status.details[0].status }
ins_status = ec2info.instance_status_set.map { |i| i.instance_status.details[0].status }
status = sys_status + ins_status
status de retorno.include? ("inicializando") ? falso : verdadeiro
fim
fim
início
target_instances = get_created_instances ("id")
raise ": Ainda não é criada todas as instâncias" se target_instances.comprimento < fetch(:instance_count)
if target_instances.length == fetch(:instance_count) then
# 全インスタンス起動後
chk_retry = 0
while !check_instance_status(target_instances) do
# インスタンスステータスが全てOKでない場合は15秒待つ(※30回リトライ)
info ": In preparation of the instance: Status check " + (chk_retry > 0 ? "(retentar #{chk_retry + 1} vezes)" : "")
Sono 15
se check_instance_status(target_instances) então
Intervalo
fim
chk_retry += 1
raise ": A instância ainda não está pronta. Por favor, execute a tarefa novamente após esperar um pouco." se chk_retry >= 30
fim
info ": Concluído pronto para implantar todas as instâncias."
fim
resgate => e
info e
Saída
fim
fim
fim
desc "Faz a configuração inicial em novas instâncias."
tarefa :init => :check fazer
# Configurações de Opção SSH
set_ssh_options("init")
run_locally
# Criar um par de chaves para autenticação de chave pública
target_dir = "~/.ssh"
if !test "[ -f #{target_dir}/#{fetch(:user_account)}_rsa ]"
if !test "[ -d #{target_dir} ]"
execute "mkdir -m 700 #{target_dir}"
fim
execute "cd #{target_dir}; ssh-keygen -t rsa -N \"\" -f #{target_dir}/#{fetch(:user_account)}_rsa"
fim
Set :p UBLIC_key_content, capture("cat #{target_dir}/#{fetch(:user_account)}_rsa.pub").chomp
Set :new_private_key_path, "#{target_dir}/#{fetch(:user_account)}_rsa"
fim
Sobre papéis(:first_time) Do
# Configuração inicial (crie automaticamente contêineres .ssh ao criar usuários)
if !test "[ -d /etc/skel/.ssh/ ]"
executar:sudo, "mkdir -m 700 /etc/skel/.ssh/; sudo touch /etc/skel/.ssh/authorized_keys; sudo chmod 600 /etc/skel/.ssh/authorized_keys"
fim
# Criar um novo usuário para manutenção
is_user = capture(:sudo, "cut -d: -f1 /etc/passwd").chomp.gsub(/(\r\n)/, ",").split(",")
se !is_user.include? (fetch(:user_account)) então
execute :sudo, "useradd -G wheel #{fetch(:user_account)}"
execute :sudo, "echo \"#{fetch(:user_account)}:#{fetch(:user_password)}\" | sudo chpasswd"
fim
# Conceder privilégios SSH a novos usuários com autenticação de chave pública
auth_keys = "/home/#{fetch(:user_account)}/.ssh/authorized_keys"
se capture(:sudo, "cat #{auth_keys}").chomp != fetch(:p oblic_key_content) então
execute :sudo, "echo \"#{fetch(:p UBLIC_key_content)}\" | sudo tee #{auth_keys}"
fim
# Mude o nome de host da nova instância
ec2 = AWS::EC2.new
AWS.memoize faz
current_private_ip = capture(:sudo, "ifconfig | grep 'inet addr' | cut -d ':' -f 2 | awk 'NR==1 { print $1 }'").chomp
instance_ids = ec2.instances.select { |i| i.exists? && i.status == :running && i.private_ip_address == current_private_ip }.map(&:id)
host_basename = ec2.instances[instance_ids[0]].tags["Name"]
se capture(:sudo, "hostname").chomp != host_basename.chomp então
executar:sudo, "echo \"#{host_basename}\" | sudo tee /proc/sys/kernel/hostname"
execute :sudo, "sed -i 's/\\(^HOSTNAME=\\).*/\\1#{host_basename}/' /etc/sysconfig/network"
execute :sudo, "nome do host #{host_basename}"
fim
fim
# Defina uma senha para o usuário padrão "ec2-user" e remova os privilégios do sudo
# Conceder privilégios sudo a novos usuários para manutenção
is_passwd = captura(:sudo, "corte -d: -f1,2 /etc/sombra").chomp.gsub(/(\r\n)/, ',').split(',')
se is_passwd.include? ("ec2-user:!!") então
execute :sudo, "echo \"ec2-user:#{fetch(:d ef_password)}\" | sudo chpasswd"
fim
execute :sudo, "sed -i s/ec2-user/#{fetch(:user_account)}/g /etc/sudoers.d/cloud-init"
info ": Inicia tarefa concluída."
fim
fim
desc "Atualizar os pacotes yum."
tarefa :update_packages =>:init do
# Configurações de Opção SSH
set_ssh_options("update_packages")
Sobre papéis(:web) fazer
info ": Atualizando pacotes yum."
deploy_log = captura(:sudo, "yum -y atualização")
pkg_updated = deploy_log.each_line.to_a
info ": " + pkg_updated.first.strip
info ": " + pkg_updated.last.strip
info ": Missão de implantação toda concluída."
#info deploy_log
fim
fim
depois de :create_instances, :update_packages
desc "Implantar a aplicação."
tarefa :principal
Sobre papéis(:web) fazer
# Indefinido
fim
fim
fim
Nesta implantação, funcionalizamos o processo de obter informações específicas sobre a instância EC2 criada e a definição de informações de acesso SSH, que são comuns a diferentes tarefas. A configuração das opções SSH é definida mudando o papel para o primeiro acesso e o próximo acesso subsequente2. Além disso, tentamos usar o método after da tarefa para que, quando a tarefa 'create_instances' seja executada, a implantação seja executada totalmente automaticamente até a tarefa 'update_packages'.3
Por fim, faça upload do arquivo de chave privada do par de chaves usado ao criar a instância EC2 para o diretório inicial do usuário de implantação como 'SCP'. Agora você está pronto para começar.
Agora, vamos realmente implantá-lo. Quando você inicia a tarefa de implantação, faz pelo caminho onde instalou o projeto.
$ CD ~/projeto cap3
Teste de implantação do limite $create_instances
O registro de resultados da implantação é o seguinte:
INFO: Início do lançamento das instâncias.
INFO: Início do lançamento das instâncias.
INFO[be335092] Rodando /usr/bin/env echo -n ["i-4dd6ec4b", "i-62ae0a7b"] > ~/CREATED_INSTANCES no localhost
INFO[be335092] Terminou em 0,003 segundos com status de saída 0 (bem-sucedido).
INFO: Em preparação para a instância: Verificação de status
INFO: Em preparação para a instância: Verificação de status (tentar 2 vezes)
INFO: Em preparação para a instância: Verificação de status (tente 3 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 4 vezes)
INFO: Em preparação para a instância: Verificação de status (tente 5 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 6 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 7 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 8 vezes)
INFO: Em preparação para a instância: Checagem de status (tente 9 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 10 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 11 vezes)
INFO: Em preparação para a instância: Verificação de status (tente 12 vezes)
INFO: Em preparação para a instância: Verificação de status (tente 13 vezes)
INFO: Em preparação para a instância: Verificação de status (tentar 14 vezes)
INFO: Pronta para implantar todas as instâncias.
INFO[35b9f350] Rodando /usr/bin/env sudo mkdir -m 700 /etc/skel/.ssh/; sudo touch /etc/skel/.ssh/authorized_keys; sudo chmod 600 /etc/skel/.ssh/authorized_keys em ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[35b9f350] Terminou em 0,069 segundos com status de saída 0 (bem-sucedido).
INFO[6443cc90] Rodando /usr/bin/env sudo useradd -G volante deploy-user no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[6443cc90] Terminou em 0,222 segundos com status de saída 0 (bem-sucedido).
INFO[b74993eb] Rodando /usr/bin/env sudo echo "deploy-user:password" | sudo chpasswd no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[b74993eb] Terminou em 0,070 segundos com status de saída 0 (bem-sucedido).
INFO[a3e11615] Running /usr/bin/env sudo echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgQ31X0qXm/eHXZCIecjv57C66cZ4ikLdprDhHZs+KV5/vK0B+/47cZCXaT7UEHdI+Bm3jNTPJoRE8iPzpkWB9L5Ks13tB7yJ5DGEIbFRe8d3kTa6Uwrj1HpL+i8hSZ7Bzbc4JvF5YULj97Ks13tB7yJ5DGEIbFRe8d3kTa6Uwrj1HpL+i8hSZ7Bzbc4JvF5YULj977 NfVAmpNvAqxF1mRWeuzcmevnsVNJ1nF6ePysNjiWmboepWl+MvIJ8xXLYPzrw8mO1kg7WEB0QxqGN5OsVZjjbmEMLliJ+xbOGfxI50FEa+k2445Y3nynBD9krx/1wayurEVn2t8jKWDn6XLSUJ41Ep43QkwFibwtcVBsfDSPIHVm6S3k9RzaAQWpN6qSrUiabk0yAOp deploy-user@devlab-deploy01" | sudo tee /home/deploy-user/.ssh/authorized_keys no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[a3e11615] Terminou em 0,035 segundos com status de saída 0 (bem-sucedido).
INFO[d2f6241f] Rodando /usr/bin/env sudo echo "deploy-test-02" | sudo tee /proc/sys/kernel/hostname no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[d2f6241f] Terminou em 0,024 segundos com status de saída 0 (bem-sucedido).
INFO[93fa8aa7] Rodando /usr/bin/env sudo sed -i 's/\(^HOSTNAME=\).*/\1deploy-test-02/' /etc/sysconfig/network na ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[93fa8aa7] Terminou em 0,021 segundos com status de saída 0 (bem-sucedido).
INFO[bd5146d3] Rodando /usr/bin/env sudo nome de host deploy-test-02 no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[bd5146d3] Terminou em 0,018 segundos com status de saída 0 (bem-sucedido).
INFO[e8a45be7] Rodando /usr/bin/env sudo echo "ec2-user:PassWord" | sudo chpasswd no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[e8a45be7] Terminou em 0,116 segundos com status de saída 0 (bem-sucedido).
INFO[e6bbbbda] Rodando /usr/bin/env sudo sed -i s/ec2-user/deploy-user/g /etc/sudoers.d/cloud-init no ec2-54-178-167-106.ap-northeast-1.compute.amazonaws.com
INFO[e6bbbbda] Terminou em 0,019 segundos com status de saída 0 (bem-sucedido).
INFO: Tarefa de início concluída.
INFO[e078eb47] Rodando /usr/bin/env sudo mkdir -m 700 /etc/skel/.ssh/; sudo touch /etc/skel/.ssh/authorized_keys; sudo chmod 600 /etc/skel/.ssh/authorized_keys em ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[e078eb47] Terminou em 0,065 segundos com status de saída 0 (bem-sucedido).
INFO[ded515dc] Rodando /usr/bin/env sudo useradd -G wheel deploy-user no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[ded515dc] Terminou em 0,323 segundos com status de saída 0 (bem-sucedido).
INFO[8927f2f0] Rodando /usr/bin/env sudo echo "deploy-user:password" | sudo chpasswd no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[8927f2f0] Terminou em 0,069 segundos com status de saída 0 (bem-sucedido).
INFO[51ed8060] Running /usr/bin/env sudo echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDgQ31X0qXm/eHXZCIecjv57C66cZ4ikLdprDhHZs+KV5/vK0B+/47cZCXaT7UEHdI+Bm3jNTPJoRE8iPzkWB9L5Ks13tB7yJ5DGEIbFRe8d3kTa6Uwrj1HpL+i8hSZ7Bzbc4JvF5YULj97NNfVAmpNvAqxF1mRWeuzcmevnsVNJ1nF6ePysNjiWmboepWl+MvIJ8xXLYPzrw8mO1kg7WEB0QxqGN5OsVZjjbmEMLliJ+xbOGfxI50FEa+k2445Y3nynBD9krx/1wayurEVn2t8jKWDn6XLSUJ41Ep43QkwFibwtcVBsfDSPIHVm6S3k9RzaAQWpN6qSrUiabk0yAOp deploy-user@devlab-deploy01" | sudo tee /home/deploy-user/.ssh/authorized_keys no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[51ed8060] Finalizou em 0,025 segundos com status de saída 0 (bem-sucedido).
INFO[8c5dc231] Rodando /usr/bin/env sudo echo "deploy-test-01" | sudo tee /proc/sys/kernel/hostname no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[8c5dc231] Terminou em 0,018 segundos com status de saída 0 (bem-sucedido).
INFO[5fc4603c] Rodando /usr/bin/env sudo sed -i 's/\(^HOSTNAME=\).*/\1deploy-test-01/' /etc/sysconfig/network na ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[5fc4603c] Terminou em 0,033 segundos com status de saída 0 (bem-sucedido).
INFO[9cdfbb66] Rodando /usr/bin/env sudo nome de host deploy-test-01 no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[9cdfbb66] Terminou em 0,015 segundos com status de saída 0 (bem-sucedido).
INFO[de94f658] Rodando /usr/bin/env sudo echo "ec2-user:PassWord" | sudo chpasswd no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[de94f658] Terminou em 0,052 segundos com status de saída 0 (bem-sucedido).
INFO[7ae1cd6c] Rodando /usr/bin/env sudo sed -i s/ec2-user/deploy-user/g /etc/sudoers.d/cloud-init no ec2-54-178-145-90.ap-northeast-1.compute.amazonaws.com
INFO[7ae1cd6c] Finalizou em 0,046 segundos com status de saída 0 (bem-sucedido).
INFO: Tarefa de início concluída.
INFO: Atualizando pacotes do yum.
INFO: Atualizando pacotes do yum.
INFO: Plugins carregados: prioridades, update-motd, upgrade-helper
INFO: Completo!
INFO: Missão de implantação toda concluída.
INFO: Plugins carregados: prioridades, update-motd, upgrade-helper
INFO: Completo!
INFO: Missão de implantação toda concluída.
Missão concluída.
Após implantar uma nova instância EC2 com o Capistrano3, se você não a implantar regularmente, seria melhor parar a instância do servidor de implantação ou pegar uma AMI e encerrá-la. O servidor de implantação só precisa ser usado para implantação, então é inútil incorrer em custos para essa instância.
Este é um exemplo de instalação via RVM. Existem muitas formas de instalar Ruby e Capistrano3, então por favor, altere conforme sua aplicação. ↩
Se você definir a opção SSH sem mudar o papel, o acesso SSH como usuário diferente será adicionado ao mesmo papel, então as informações do primeiro SSH que não podem mais ser acessadas para o segundo e subsequente SSH permanecerão, e a tarefa travará ao fazer uma conexão SSH desnecessariamente. ↩
Se o status da instância não mudar para OK por 15 segundos × 30 pesos na tarefa de verificar o lançamento da instância EC2 que você criou, a tarefa será suspensa ali. Nesse caso, você pode tentar novamente reimplantando a partir da tarefa 'deploy:update_packages'. ↩