Ubuntu 16.04, Ruby on Rails (4.2), Nginx & Capistrano 3

Este tutorial irá mostrar a você como preparar um servidor Ubuntu 16.04 para receber uma aplicação em Ruby on Rails. Essa aplicação será suportada pelo Nginx e o deploy dela será feito através da ferramenta Capistrano.

Neste tutorial irei utilizar o rbenv como gerênciador de versões Ruby. No futuro farei um tutorial específico para o RVM ao invés do rbenv.

Antes de iniciarmos, devo fazer algumas considerações a respeito deste tutorial. A primeira é que o Capistrano obtém os fontes da aplicação Rails através de um repositório GIT. O repositório GIT que utilizei é hospedado no GitHub, sendo um repositório público que não exige autenticação para operação git clone. Então caso você esteja utilizando um repositório GIT privado (como o bitbucket), você terá que adicionar as chaves SSH no seu servidor. Isto não será alvo deste tutorial. Você pode encontrar mais informações aqui: Capistrano – Authentication & Authorisation. O Segundo ponto é que este tutorial pode ser difícil de seguir se você estiver em uma máquina windows. Mesmo que você utilize o RailsInstaller for Windows em conjunto com o o bash do Git for Windows, algumas gems não existem pra windows, como por exemplo o kgio.

A idéia deste tutorial não é aprofundar em detalhes de configuração, Para isso existe um bom tutorial de configuração de Rails + Nginx + Azure aqui, porém ele está em inglês e até a data da publicação deste artigo era somente para ubuntu 12.04. Ao contrário daquele, este tutorial dá ênfase nos pontos em que tive problemas e gastei algum tempo para solucionar.

Os passos, ou macro-passos, para o funcionamento dessa aplicação podem ser resumidos como:

 

No servidor remoto

– Criar uma máquina virtual com Ubunto 16.04. Eu também criei um usuário chamado azureuser.

As cinco primeiras etapas estão automatizadas pelo script rbenv-install.sh, obtido no repositório: https://github.com/paulorodriguesxv/ror-starter-app.git

  1. Atualização e instalação de pacotes básicos no Ubuntu
  2. Instalação e configuração do rbenv
  3. Instalação e configuração do Ruby/Rails
  4. Instalação do bundler
  5. configurar o nginx
  6. criar um usuário para deploy
  7. configurar o sudoers para funcionamento com o usuário de deploy
  8. configurar o secrets.yml da aplicação Rails

 

Então vamos por a mão na massa:

No servidor, obtenha o repositório https://github.com/paulorodriguesxv/ror-starter-app.git e copie o arquivo rbenv-install.sh para a pasta raiz do seu usuário

$ git clone https://github.com/paulorodriguesxv/ror-starter-app.git

$ cp ror-starter-app/rbenv-install.sh .

$ chmod ou+x rbenv-install.sh 

$ ./rbenv-install.sh

Aguardar até o fim do processamento.

Terminado o processamento, instalar o servidor ssh:

$ sudo apt-get install openssh-server

 

Na sua máquina local obtenha a aplicação de exemplo: https://github.com/paulorodriguesxv/ror-starter-app.git

$ git clone https://github.com/paulorodriguesxv/ror-starter-app.git

acessar o diretório ror-starter-app e executar:

$ bundle install

Editar o arquivo config/deploy.rb e substitua o usuario do sistema se necessário <set :deploy_user, ‘azureuser’>. Este arquivo é o arquivo base de configuração do Capistrano. Os três parâmetros principais de configuração deste arquivo são:

:application é o nome da aplicação e será usado como nome da pasta de deploy no servidor remoto

:deploy_user é nome de um usuário existente no servidor remoto. No caso deste exemplo, é azureuser

:repo_url é o endereço do repositório do aplicativo. No nosso exemplo, um repositório do GitHub.

 

Editar o arquivo config/deploy/production.rb e substitua o endereço do servidor onde deploy será efetuado:

server ‘192.168.56.101’, user: ‘azureuser’, roles: %w{web app db}, primary: true

O Capistrano permite a criação de múltiplos estágios (dev, teste e produção, por exemplo). Neste tutorial vamos nos concentrar na produção.

Em teoria você deveria conseguir fazer o deploy já neste ponto, porém nem tudo funciona de primeira, e eu gastei um bom tempo até descobrir o motivo do deploy não funcionar. Por isso os últimos dois passos:

7 -configurar o sudoers para funcionamento com o usuário de deploy

8 – configurar o secrets.yml da aplicação Rails

O passo 7 já está está detalhado no site do Capistrano, e você pode conferir na seção Authorisation.

Após esta configuração já é possível fazer o deploy, mas a sua aplicação não conseguirá entrar no AR. Isto acontece porque é necessário configurar o secret_key. Para isso, no servidor onde o deploy será feito, na pasta do usuário de deploy, crie um arquivo .bash_profile que tenha o seguinte conteúdo:

a entrada SECRET_KEY_BASE é o que nos interessa, esta chave pode ser gerada através do comando:

RAILS_ENV=production rake secret

Mais detalhes sobre este item podem ser encontrados neste Gist

É importante não esquecer de remover a configuração default do nginx, caso contrário quando você acessar seu servidor pelo navegador você verá a página incial do nginx.

Agora vamos fazer o deploy. Execute na sua máquina:

$ cap production deploy:setup_config

Se tudo estiver certo, você terá feito a configuração inicial da aplicação no servidor de deploy.

Na sequência, fazermos o deploy

$ cap production deploy

E pronto, seu site rails deverá está no Ar.

 

É isso pessoal. Dúvidas podem ser deixadas aqui nos comentários.

0 comments on “Ubuntu 16.04, Ruby on Rails (4.2), Nginx & Capistrano 3Add yours →

Deixe uma resposta

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