Back-End

10 jun, 2014

Rails em servidor Ubuntu – Nginx e Passenger

Publicidade

Com a popularização dos serviços da Amazon Web Services, nunca foi tão fácil e rápido criar uma máquina para validar seu projeto de final de semana ou a versão final de seu site.

Com todas as facilidades disponíveis “as a Service”, como CDNs e LoadBalancers, você ainda deve se preocupar com a instalação dos softwares necessários para a sua aplicação web. Essas configurações básicas é o que vamos descrever neste artigo.

A diferença básica entre o seu ambiente local com o ambiente web voltado para produção é que enquanto localmente o bom e velho WEBrick iniciado a partir da linha de comando: rails server dá conta tranquilamente do recado, em um ambiente de produção são necessários outros artifícios para conseguir extrair o máximo do servidor web. Como um bom servidor web e um módulo para conexão dos requests do servidor web a serem processados pelo código Ruby.

Atualizando o Ubuntu

A primeira coisa a fazer é atualizar as bibliotecas do Ubuntu. Tarefa bastante simples utilizando apt-get:

sudo apt-get update

Após a atualização das bibliotecas, o próximo passo será instalar o RVM.

Instalando o RVM

O RVM é uma ferramenta bastante útil seja em desenvolvimento e em produção.

Sua principal tarefa é permitir – e manter a sanidade – que você tenha instaladas várias versões do Ruby na máquina.

A organização é bastante simples e eficiente. Em um diretório específico, o RVM instala a versão do Ruby e em um subdiretório, as Gems que você possa supostamente vir a instalar para aquela versão do Ruby selecionada.

Instale o RVM executando na linha de comando:

curl -L get.rvm.io | bash -s stable

Após a instalação, carregue o rvm. Essa ação apenas é necessária uma vez:

source ~/.rvm/scripts/rvm

Após carregar o rvm na linha comando, é necessário verificar as dependências. Esse comando, além de verificar as dependências, alguns certificados.

source ~/.rvm/scripts/rvm

O RVM deve mostrar alguma instrução parecida com isto:

Additional Dependencies:
# For Ruby / Ruby HEAD (MRI, Rubinius, & REE), install the following:
  ruby: /usr/bin/apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Altere a instrução relacionada ao comando apt-get adicionando o comando rvmsudo no inicio da String. O seu novo comando ficará como este:

rvmsudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion

Instalando o Ruby

Agora que o RVM está devidamente instalado e configurado, podemos prosseguir com a instalação do Ruby.

Nesse caso, vou instalar a última versão do Ruby; para isso, basta executar o comando:

rvm install 2.1.2

Se você precisar instalar outra versão do Ruby, basta especificar a versão na linha de comando Por exemplo, para a instalar a última versão estável da 1.9.3:

rvm install 1.9.3

Instalando o Rails

Neste momento, você pode estar se questionando sobre a necessidade da instalação do Rails, uma vez que ele já está devidamente registrado no Gem file de sua aplicação, bastando um bundle install para que seja instalado no sistema.

No próximo passo, serão instalados o Passenger e o Nginx. Se o Rails estiver instalado no sistema, o instalador do Passenger irá apontar as variáveis passenger_root e passenger_ruby no arquivo de configuração do Nginx diretamente para o caminho correto.

Antes de instalar o Rails, execute o comando abaixo para se certificar de que todas as Gems e as bibliotecas necessárias para o Rails estão instaladas no servidor:

rvm rubygems current

Agora, sim, instale o Rails:

gem install rails

Instalando o Nginx e o Passenger

Até o momento, muitos devem estar pensando que esses passos foram os que todo mundo já faz em seu ambiente local.

Agora, vamos começar a tratar o servidor de forma realmente diferente, com a instalação de um servidor web e o módulo de comunicação entre o servidor web e seu código Ruby.

Instalando o Passenger

Pode parecer estranho, mas o primeiro passo para a instalação do servidor web não é a instalação do servidor web propriamente dita, e sim do módulo Rails.

O módulo rails que vamos utilizar é o Passenger. A instalação do Passenger é feita através do comando gem install:

gem install passenger

Instalando o Nginx

Após a instalação da Gem passenger, vamos direto ao ponto na instalação do Nginx. Esse procedimento é bastante complexo, pois exige algumas compilações de bibliotecas e código fonte. Se alguma biblioteca estiver faltando no seu sistema, o instalador acusará a falta e ainda lhe proverá o comando para a instalação dessas bibliotecas faltantes.

No processo de instalação, aceite os valores padrões.

rvmsudo passenger-install-nginx-module

A instalação pode ser um pouco demorada, dependendo do processador de sua máquina e da conexão de rede, mas no final você terá o Nginx instalado respondendo na port 80 de seu servidor. Você poderá testar acessando: http://IP_DO_SERVIDOR e você verá uma tela de boas-vindas do Nginx.

Instale os serviços para Nginx

Um problema nessa instalação é que ela não faz a instalação dos serviços de start/stop e restart do Nginx. Ou seja, iniciar, parar e reiniciar o Nginx neste ponto pode ser bastante chato.

Vamos deixar essa tarefa menos tediosa instalando os serviços que poderão ser acessados pelo comando:

sudo service nginx start|stop|restart

Execute os comandos na sequência:

wget -O init-deb.sh http://library.linode.com/assets/660-init-deb.sh

sudo mv init-deb.sh /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx

sudo /usr/sbin/update-rc.d -f nginx defaults

Pronto, agora você já pode comandar seu servidor Nginx utilizando os comandos:

  • sudo service nginx start
  • sudo service nginx stop
  • sudo service nginx restart

Instale o NodeJS

Este passo não é obrigatório, mas dependendo do que você vai fazer no seu servidor web, como criar um novo projeto Rails ou compilar assets no processo de deploy, pode ser necessária a instalação de alguma engine JavaScript.

Particularmente, eu gosto do NodeJS. Instalação via apt-get:

sudo apt-get install nodejs

Configure o NGINX

Apenas como exemplo, vamos criar um projeto Rails no diretório: /app/www/meusite_app utilizando o comando:

mkdir -r /app/www
cd /app/www

Crie e vá para o diretório:

mkdir -r /app/www/meusite_app
cd /app/www/meusite_app

Agora, crie o projeto Rails dentro deste diretório:

rails new meusite_app

A configuração do Nginx é feita dentro do arquivo nginx.conf, que fica em: /opt/nginx/conf.

Utilize o seu editor preferido (Vi) e abra o arquivo. Procure a entrada: “server {“

Acrescente as linhas dentro da chave server:

root /app/www/meusite_app/public;
passenger_enabled on;
rails_env development;

Sua entrada server deverá ficar parecida com isto:

server { 
listen       80;
server_name  localhost;
root /app/www/meusite_app/public;
passenger_enabled on;
rails_env development;
}

Agora, faça o restart do Nginx: sudo service nginx restart e acesse o seu site: http://IP_DO_SERVIDOR e veja a tela inicial do seu projeto Rails.

Referências