Como configurar um aplicativo Rails 4.2 no AWS com o Elbian Beanstalk e o PostgreSQL

Eu anteriormente postei instruções há um ano sobre como fazer isso em trilhos 4.1 em uma versão antiga do Elans Beanstalk. Esta é a versão atualizada.

A implantação de aplicativos Rails pode ser complicada. Para projetos simples, ferramentas como o Heroku podem ser perfeitas. É ótimo para protótipos de aplicativos e testar idéias diferentes sem muita dificuldade. No entanto, quando seu projeto se torna mais complicado e você quer ter um melhor controle de seus servidores, balanceadores de carga, trabalhadores, condições de escala automática, etc., você não terá a flexibilidade que deseja.

Existem muitos serviços que podem ser usados ??para obter um aplicativo Rails funcionando rapidamente, mantendo o controle total de sua infraestrutura. Uma opção razoável é o Elastic Beanstalk da Amazon. O serviço é apropriadamente descrito pela Amazon da seguinte forma:

O AWS Elastic Beanstalk torna ainda mais fácil para os desenvolvedores implantar rapidamente e gerenciar aplicativos na nuvem AWS. Os desenvolvedores simplesmente carregam sua aplicação e o Elastic Beanstalk administra automaticamente os detalhes de implementação do provisionamento de capacidade, balanceamento de carga, auto-dimensionamento e monitoramento de saúde de aplicativos.

Agora que a Amazon suporta o PostgreSQL via RDS com um aplicativo Rails totalmente gerenciado com versões anteriores, nunca foi tão fácil!

Você pode encontrar todo o código para esta postagem em github.com/jtescher/example-rails-4.2-lastic-beanstalk-blog

Se você ficar preso ou ter outras questões, a documentação para Elastic Beanstalk é muito boa.

Começando

Inscreva-se para uma conta AWS através das instruções no AWS Console e, em seguida, baixe as Ferramentas de linha de comando Elastic Beanstalk via Homebrew (ou aqui para PC).

 $ brew update 
$ brew install aws-elasticbeanstalk

Inicialize o aplicativo Rails

A versão mais atual dos trilhos no momento desta escrita é 4.2.1, então é isso que vamos usar agora.

 $ gem install rails -v 4.2.1 
$ rails novo blog
$ cd blog
$ git init && git add -A && git commit -m "Adicionar rails scaffold"

Scaffold a Post recurso

Nós estaremos criando um aplicativo de exemplo simples que permite manipular posts. Para gerar isso no uso do Rails:

 $ rails geram título do post do andaime: corpo da corda: texto 
$ bundle exec rake db: migrate
$ git add -A && git commit -am "Adicionar recurso de publicação"

Inicialize o aplicativo Elastic Beanstalk

Agora, podemos inicializar um novo aplicativo Beanstalk através do comando eb.

 $ eb init 

Eu escolheria as seguintes configurações, mas para uma descrição de cada opção, veja o exemplo AWS aqui .

 Selecione uma região padrão 
3) us-west-2: US West (Oregon)
 Selecione um aplicativo para usar 
[Criar nova aplicação]
 Digite o nome da aplicação 
blog
O blog de aplicativos foi criado.
 Parece que você está usando Ruby. Isso é correto? 
(y / n): y
 Selecione uma versão da plataforma. 
1) Ruby 2.2 (Puma)
 Deseja configurar SSH para suas instâncias? 
(y / n): n

Isto irá configurar um diretório .elasticbeanstalk na raiz do seu projeto e adicioná-lo ao seu arquivo .gitignore. Você não deseja que sua configuração seja armazenada em git porque pode haver informações privadas lá. Vamos cometer essas mudanças agora:

 $ git commit -am "Ignore elasticbeanstalk settings" 

Criando o ambiente Elastic Beanstalk

Você pode ter muitos ambientes por aplicação Elastic Beanstalk. Isso pode ser útil para ter tanto dev e ambientes de produção para o mesmo aplicativo.

Para criar um novo ambiente, execute o seguinte:

 $ eb create blog-env: 
 Criando o arquivo de versão do aplicativo "b303". 
Fazendo upload de blog / b303.zip para S3. Isso pode demorar um pouco.
Envio completo.
Detalhes do ambiente para: blog-env
Nome do aplicativo: blog
Região: us-west-2
Versão implementada: b303
ID do ambiente: e-g5mkeawrnz
Plataforma: 64 bits Amazon Linux 2015.03 v1.3.0 rodando Ruby 2.2 (Puma)
Nível: WebServer-Standard
CNAME: DESCONHECIDO
Atualizado: 2015-04-19 23: 38: 50.955000 + 00: 00
Status de impressão:
INFO: createEnvironment está começando.
INFO: usando elasticbeanstalk-us-west-2-83376862866 como balde de armazenamento Amazon S3 para dados de ambiente.
INFO: balanceador de carga criado chamado: awseb-eg-AWSEBLoa-7R0CSEMQ6W2M
INFO: grupo de segurança criado chamado: awseb-e-g5mkeawrnz-stack-AWSEBSecurityGroup-56IUD2ZYQ5FR
INFO: configuração de inicialização de Auto Escalada criada chamada: awseb-e-g5mkeawrnz-stack-AWSEBAutoScalingLaunchConfigurat ...
INFO: grupo de escala automática criado chamado: awseb-e-g5mkeawrnz-stack-AWSEBAutoScalingGroup-2URXDKL0NCIJ
INFO: aguardando instâncias EC2 para iniciar. Isso pode levar alguns minutos.
INFO: política de grupo de Auto escalada criada chamada: arn: aws: autoscaling: us-west-2: 833768628226: scalingPolicy: 02920f8b ...
INFO: política de grupo Auto escalação criada chamada: arn: aws: autoscaling: us-west-2: 833768628666: scalingPolicy: b143cea1 ...
INFO: criou o alarme CloudWatch chamado: awseb-e-g5mkeawrnz-stack-AWSEBCloudwatchAlarmHigh-APCUnlMHNIS1
INFO: criou o alarme CloudWatch chamado: awseb-e-g5mkeawrnz-stack-AWSEBCloudwatchAlarmLow-1UL48B2CC2OM8
INFO: Adicionou a instância EC2 'i-7f4b6eb7' ao grupo de escala automática 'awseb-e-g7mkeawrnz-stack-AWSEBAutoScalingGroup-2URX ...
INFO: Aplicação disponível em blog-env-zckzptpdgy.elasticbeanstalk.com.
INFO: ambiente com sucesso: blog-env

O ambiente agora deve estar em execução. Para ver o status e o URL:

 $ eb status 
Detalhes do ambiente para: blog-env
Nome do aplicativo: blog
Região: us-west-2
Versão implementada: b303
ID do ambiente: e-g5mkeawrn
Plataforma: 64 bits Amazon Linux 2015.03 v1.3.0 rodando Ruby 2.2
Nível: WebServer-Standard
CNAME: blog-env-zckzptpdg2.elasticbeanstalk.com
Atualizado: 2015-04-19 23: 51: 59.259000 + 00: 00
Status: pronto
Saúde: Verde

A última coisa que temos que fazer para criar o Rails é adicionar uma variável de ambiente SECRET_KEY_BASE .

Para gerar um novo uso de chave secreta:

 $ rake secret 
f655b5cfeb452e49d9182c6b5e6856704e6e1674082fa1e5f1a330782bad1833ba4cc30951e094f9250c87573dc0bbd3d46d37c5d79ff57 ...

Então, para adicionar o segredo ao seu ambiente de feijão de feijão elástico, use:

 $ eb setenv SECRET_KEY_BASE = f655b5cfeb452e49d9182c6b5e6856704e6e1674082fa1e5f1a330782bad1833ba4cc30951e094f9250 ... 

Agora, se você navegar para [YOUR-ENV] .elasticbeanstalk.com / posts, você deve ver sua visualização de índice de postagens:

Usando o PostgreSQL com Rails

Agora, nosso aplicativo está apenas usando o SQLite, que não é feito para uso de produção e não pode ser compartilhado entre instâncias. Podemos resolver isso adicionando o PostgreSQL ao seu aplicativo e ao seu ambiente Elastic Beanstalk.

Adicionando a gema pg

Abra seu Gemfile. Mova a jóia sqlite3 para o seu bloco de desenvolvimento e teste e adicione um grupo de produção com a gema pg nele. Depois, deve parecer algo assim:

 fonte 'https://rubygems.org' 

# Bundle Edge Rails em vez disso: gem 'rails', github: 'rails / rails'
gem 'rails', '4.2.1'
# Use SCSS para folhas de estilo
gem 'sass-rails', '~> 5.0'
# Use Uglifier como compressor para recursos de JavaScript
gem 'uglifier', '> = 1.3.0'
# Use o CoffeeScript para recursos e vistas do .coffee
gem 'coffee-rails', '~> 4.1.0'
# Veja https://github.com/rails/execjs#readme para mais tempos de execução suportados
# gem 'therubyracer', plataformas:: ruby
 # Use jquery como a biblioteca de JavaScript 
gem 'jquery-rails'
# Turbolinks faz os seguintes links em seu aplicativo da Web mais rápido. Leia mais: https://github.com/rails/turbolinks
gem 'turbolinks'
# Crie as APIs JSON com facilidade. Leia mais: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.0'
# bundle exec rake doc: trilhos gera a API em doc / api.
gem 'sdoc', '~> 0.4.0', grupo:: doc
 # Use ActiveModel has_secure_password 
# gem 'bcrypt', '~> 3.1.7'
 # Use Unicorn como o servidor de aplicativos 
# gem 'unicorn'
 # Use Capistrano para implantação 
# gem 'capistrano-rails', grupo:: desenvolvimento
 grupo: desenvolvimento,: teste fazer 
# Use sqlite3 como o banco de dados do registro ativo
gem 'sqlite3', '~> 1.3.10'
 # Ligue 'byebug' em qualquer parte do código para parar a execução e obter um console de depuração 
gem 'byebug'
 # Acesse um console IRB em páginas de exceção ou usando <% = console%> em visualizações 
gem 'web-console', '~> 2.0'
 # Spring acelera o desenvolvimento ao manter seu aplicativo executado em segundo plano. Leia mais: https://github.com/rails/spring 
gem 'primavera'
fim
 grupo: produção 
# Use o PostgreSQL como o banco de dados do Registro ativo
gem 'pg', '~> 0,18,1'
fim

Agora execute $ bundle install para instalar a jóia.

Configurando database.yml para trabalhar com RDS postgres

As credenciais de banco de dados nunca devem ser codificadas e o Beanstalk Elástico torna as configurações como variáveis ??de ambiente bastante simples. As variáveis ??RDS são configuradas e atualizadas automaticamente para que sua seção de produção de config / database.yml possa ser atualizada para o seguinte:

 Produção: 
<<: * padrão
adaptador: postgresql
codificação: unicode
banco de dados: <% = ENV ['RDS_DB_NAME']%>
nome de usuário: <% = ENV ['RDS_USERNAME']%>
senha: <% = ENV ['RDS_PASSWORD']%>
host: <% = ENV ['RDS_HOSTNAME']%>
porta: <% = ENV ['RDS_PORT']%>

Obtendo a gema pg para trabalhar em Elastic Beanstalk

Agora vamos adicionar o banco de dados ao nosso ambiente. Isso leva alguns passos, mas eu vou passar por você. Primeiro vá para a seção Elastic Beanstalk no console AWS: console.aws.amazon.com/elasticbeanstalk/?region=us-west-2 (Observe que a região é us-west-2, se você implantou em uma região diferente, verifique há.)

Agora, clique em blog-env e vá para a configuração no navegador esquerdo. Na parte inferior, você deve ver:

Agora, clique em "criar um novo banco de dados RDS", configure o DB Engine para "postgres" e crie um nome de usuário mestre e uma senha mestra.

Clique em "Salvar" e você terá uma instância do PostgreSQL totalmente funcional e as variáveis ??de ambiente terão sido adicionadas automaticamente ao seu ambiente Beanstalk.

Agora, para instalar a gema pg em seu servidor, o pacote postgresql93-devel yum é necessário. Configurar pacotes em instâncias Elastic Beanstalk é tão simples como deixar um arquivo .config formatado com YAML em uma pasta .ebextensions de nível superior.

 # .ebextensions / packages.config 
pacotes:
yum:
postgresql93-devel: []

Agora, cometer essa alteração e redistribuir o aplicativo.

 $ git add -A && git commit -am "Adicionar o PostgreSQL como banco de dados de produção" 
$ eb deploy

Uma vez feito isso, você pode recarregar a página / posts e ver seu aplicativo Rails totalmente gerenciado com os postgress! Hooray!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *