Como implantar um aplicativo PostgreSQL do Rails 5.2 no AWS Elastic Beanstalk

Evrim Persembe Blocked Unblock Seguir Seguindo 27 de novembro

É oficial, usar Heroku para todos os meus projetos Rails até agora me estragou. Depois de receber alguns créditos da AWS graças a uma competição de arremesso, decidi implantar meu último projeto no Elastic Beanstalk (concorrente Heroku da AWS ). Tudo o que tenho a dizer é que sinto falta de Heroku.

Infelizmente, se você estiver em uma situação semelhante, aqui estão as instruções passo-a-passo para implantar seu aplicativo Rails 5.2 / PostgreSQL no Elastic Beanstalk.

Instalando o CLI do Elastic Beanstalk

Nós vamos usar o terminal neste tutorial. Vamos começar com a instalação da “Interface de linha de comando do Elastic Beanstalk”. Veja como fazer isso no macOS usando o Homebrew :

 brew instalar awsebcli 

Se você estiver usando outra plataforma, pesquise “como instalar o awsebcli na [sua plataforma]” para guiá-lo na direção certa.

Inicializando Pé de Feijão Elástico

Eu assumirei que você já tem uma conta da Amazon Web Services, se não for em frente e crie uma. Agora, entre no diretório do seu projeto e inicialize o Elastic Beanstalk:

 cd my_project 
eb init

Em seguida, o EB CLI fará algumas perguntas para inicializar o aplicativo Elastic Beanstalk. A parte de inicialização é simples. Se você ficar preso em qualquer lugar, você pode conferir a página “Configurar o EB CLI” da documentação.

Criando um novo ambiente

Como você já sabe, seu aplicativo pode ter muitos ambientes (pense neles como configurações diferentes). Por exemplo, você pode ter um ambiente de "produção". Esse é o ambiente que você usa para a versão do seu aplicativo voltada para o usuário. Mas você pode querer ter outro ambiente chamado "teste". É aí que você tenta novas versões do seu aplicativo, antes de enviá-lo ao ambiente de produção.

Podemos criar um ambiente usando o comando abaixo:

 eb create production 

Implantando no Elastic Beanstalk

Supondo que você esteja usando o Git, confirme suas alterações antes de implantar seu aplicativo. O EB CLI implanta seu último commit. Se você implantar antes de confirmar, implantará uma versão anterior do seu aplicativo.

Depois de confirmar suas alterações, implante usando o seguinte:

 eb deploy 

Até aí tudo bem, agora precisamos definir algumas coisas antes que nosso aplicativo realmente comece a funcionar.

Configurando a chave mestra

Você também pode usar o CLI para esse propósito, mas prefiro usar o painel da web para isso. Aqui está como:

  1. Vá para AWS, escolha "Serviços -> Elastic Beanstalk" e clique em seu ambiente.
  2. Abra a guia "Configuração" e clique em "Modificar" sob a caixa "Software".
  3. Em "Propriedades do ambiente", adicione uma nova chave denominada RAILS_MASTER_KEY . Defina seu valor para o conteúdo do seu arquivo "master.key". Você pode encontrar este arquivo no diretório “config” do seu aplicativo Rails.
  4. Clique no botão "Aplicar" na parte inferior da página.

Configurando um banco de dados PostgreSQL

O Elastic Beanstalk fornece uma maneira fácil de configurar um banco de dados, que você pode acessar através de “Configuração -> Banco de Dados”. Eu prefiro não usar isso porque se você precisar reconstruir seu ambiente Elastic Beanstalk, seu banco de dados será excluído. Então, vamos configurar o banco de dados separado do nosso ambiente Elastic Beanstalk.

Criando um banco de dados PostgreSQL no RDS

  1. Vá para a AWS, escolha "Serviços -> RDS".
  2. Escolha "Criar banco de dados".
  3. Escolha “PostgreSQL” e clique em “Next”.
  4. Selecione seu caso de uso, "Produção" ou "Dev / Teste" e clique em "Avançar".
  5. Aqui, você pode experimentar diferentes opções e ver quais são os custos mensais estimados. Acabe com algo que esteja dentro do seu orçamento. Você pode começar com uma instância db.t2.micro , nenhuma implantação multi-AZ e um SSD de propósito geral.
  6. Escolha um identificador de instância, isso é uma espécie de "namespace".
  7. Escolha um nome de usuário e senha, mantenha-os à mão por enquanto, clique em "Avançar".
  8. Na seção "Configurar configurações avançadas", o importante são os grupos de segurança. Selecione “Escolher grupos de segurança VPC existentes” e selecione o grupo de segurança que se parece com “… -AWSEBSecurityGroup-…”
  9. Escolha um nome de banco de dados, como my_app_production .
  10. Clique em "Criar banco de dados", isso vai demorar um pouco.

Permitindo o acesso ao banco de dados

Enquanto isso, vamos adicionar o acesso do Postgres ao seu grupo de segurança:

  1. Vá para a AWS, escolha "Serviços -> EC2".
  2. Clique em “Security Groups” no painel da esquerda.
  3. Escolha o grupo de segurança da seção anterior.
  4. Vá até a guia "Entrada" e clique em "Editar".
  5. Clique em “Add Rule”. Para “Type”, escolha “PostgreSQL” e para “Source” digite o ID do grupo de segurança ao qual você está adicionando esta regra. Deve estar bem acima da aba “Inbound” e deve parecer com o sg-* .
  6. Clique em "Salvar".

Configurando a configuração do banco de dados de produção

Agora, no seu diretório Rails, abra config/database.yml . Altere como tal:

 # ... 
 production: 
<<: *default
database: <%= ENV['RDS_DB_NAME'] %>
username: <%= ENV['RDS_USERNAME'] %>
password: <%= ENV['RDS_PASSWORD'] %>
host: <%= ENV['RDS_HOSTNAME'] %>
port: <%= ENV['RDS_PORT'] %>

Adicionando variáveis de ambiente relevantes ao Elastic Beanstalk

Nós dissemos ao Rails para obter as informações para o banco de dados de produção usando as variáveis de ambiente acima. Agora precisamos nos certificar de que o nosso ambiente Elastic Beanstalk inclua estas variáveis:

  1. Vá para AWS, escolha "Serviços -> Elastic Beanstalk" e clique em seu ambiente.
  2. Abra a guia "Configuração" e clique em "Modificar" sob a caixa "Software".
  3. Em "Propriedades do ambiente", adicione os seguintes pares de valores-chave:
  4. RDS_DB_NAME : Nome do banco de dados que você escolheu ao configurar seu banco de dados.
  5. RDS_USERNAME : Nome de usuário que você escolheu ao configurar seu banco de dados.
  6. RDS_PASSWORD : Senha que você escolheu ao configurar seu banco de dados.
  7. RDS_HOSTNAME : Vá para “Serviços -> RDS” e você pode encontrar essas informações na seção “Conectar” da página de informações da instância do seu banco de dados. É chamado de "Endpoint".
  8. RDS_PORT : Defina isso para 5432.
  9. Clique no botão "Aplicar" na parte inferior da página.

Depois disso, confirme seu diretório de aplicativos Rails novamente e execute o eb deploy . Você pode querer esperar alguns minutos antes de fazer isso, porque o Elastic Beanstalk faz algumas coisas em segundo plano depois de atualizar as variáveis de ambiente.

Após esses passos, seu aplicativo Rails “deveria” estar rodando.

Ainda não funciona?

Se houver algum problema, você pode acessar o ambiente do EB no painel da Web da AWS, clicar em "Registros" e escolher "Logs de solicitação -> Últimas 100 linhas" para ver os registros. Mas antes de fazer isso, eu recomendo tentar executar seu aplicativo Rails usando o ambiente de produção em sua máquina local usando o comando rails s RAILS_ENV=production .

Eu serei o primeiro a admitir que não sou a pessoa mais experiente quando se trata de implantação. Como eu disse, eu sempre usei Heroku no passado, e provavelmente vou usá-lo para meus projetos futuros também. Estas etapas funcionaram para mim depois de alguns dias coçando minha cabeça tentando configurar meu aplicativo Rails no Elastic Beanstalk, então eu queria compartilhar isso na esperança de economizar tempo para as pessoas que estão na mesma situação que eu. Então, leve tudo isso com um grão de sal e boa sorte!