É pessoal… Depois de zilhões de anos sem postar nada no blog, vou agora falar um pouco da instalação do Passenger 3 e RVM no CentOS, rodando com e sem proxy reverso no Apache2 (httpd).
Usei o CentOS 5.5 (Pois é… tive que usar) e não tinha interface gráfica (uma comodidade pra mim, já que se trata de servidor), então todos os comandos serão executados no terminal.
Caso estejam por trás de um proxy (que foi meu caso), execute os comandos
$ export http_proxy=seu_endereco_do_proxy
$ export https_proxy=seu_endereco_do_proxy_https
Segui os seguintes passos de instalação
- RVM
- Apache2 (No CentOS o nome do desgraçado é httpd…)
- Passenger (Instalei-o via gem e não usei o pacote que tem disponível pra CentOS, pois ele dependia do EPEL, que eu não tinha como baixar…
Instalação do RVM
Instalar as seguintes dependências :
$ yum install -y git curl curl-devel gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel
A rede do meu trabalho não tem acesso direto ao protocolo git, então tive que baixar via https assim:
$ mkdir -p ~/.rvm/src/ && cd ~/.rvm/src/ && rm -rf ./rvm/ && git clone https://github.com/wayneeseguin/rvm.git && cd rvm && ./install
Depois disso, temos que colocar no .bashrc a linha abaixo
[[ -s "$HOME/rvm/scripts/rvm" ]] && . "$HOME/rvm/scripts/rvm"
Feito isso, teste o rvm com o seguinte comando, sendo que ele tem que retornar rvm is a function
$ type rvm | head l
Instale agora as dependências para a instalação do ruby (1.9.2-p136, no caso)
$ rvm package install zlib
$ rvm package install openssl
E agora, instale o ruby 1.9.2
$ rvm install ruby-1.9.2-p136
Instalação do Apache2 (httpd)
Essa é a parte mais simples, pois o CentOS facilita isso pra você (pelo menos alguma coisa…)
$ yum install -y httpd
Depois para reiniciar o servidor é somente
Instalação do Passenger
O Passenger precisa de alguns pacotes .devel para compilar os fontes, então instale-os com o comando abaixo
$ yum install -y httpd-devel apr-devel apr-util-devel
Eu preferi instalar a gem do passenger no gemset global do meu ruby-1.9.2, para ficar disponível pra todos os gemsets e configuro isso lá no global.gems do rvm. Então depois de setado meu gemset para global, instalo o passenger e executo a instalação.
$ gem install passenger
$ passenger-install-apache2-module
Siga rigosoramente as instruções do instalador do Passenger, ele é bem auto-explicativo e te diz o que você tem que configurar no /etc/httpd/conf/httpd.conf. O próprio instalador te dirá as 3 linhas, com o LoadModule, PassengerRuby e PassengerRoot.
Ele também dirá como você configura seu VirtualHost para que a aplicação Rails funcione corretamente.
Eu adicionei dentro do VirtualHost, os caminhos do GEM_HOME e GEM_PATH com SetEnv, pois não consegui carregar o .rvmrc de dentro do projeto.
<VirtualHost *:80>
DocumentRoot caminho_do_public_do_seu_projeto
RailsEnv production
SetEnv GEM_HOME caminho_do_gemset_do_seu_projeto
SetEnv GEM_PATH caminho_do_gemset_do_seu_projeto:caminho_do_gemset_global
<Directory caminho_do_public_do_seu_projeto>
AllowOverride all
Options -MultiViews
</Directory>
</VirtualHost>
Configuração do Passenger em modo proxy
A configuração acima é para a mesma versão do ruby que o passenger foi instalado, no nosso caso, ruby 1.9.2. Caso você queira usar outra versão do ruby, você terá que usar Proxy Reverso, que a configuração do VirtualHost é diferente, pois você terá que iniciar a sua aplicação usando o passenger standalone, com o comando abaixo, dentro do diretório do projeto.
$ passenger start -a 127.0.0.1 -p 3000 -d
O Parâmetro -p é para indicar a porta, sendo a de sua escolha, o -d é pra iniciar o passenger standalone em modo deamonize, ou seja, em backgroud. Para parar o servidor, digite o comando abaixo no diretório do projeto.
$ passenger stop
Para maiores informações, use passenger start –help
Depois do servidor iniciado, falta só a configuração do Apache em modo de Proxy Reverso, que ele irá responder as requisições no endereço escolhido e redirecionar para a instância do passenger standalone.
A configuração do VirtualHost para proxy reverso é essa abaixo:
Essas configurações fiz em um servidor do Linode (Ubuntu 10.04) e um servidor do trabalho numa VM (CentOS 5.5), mudando somente que no Ubuntu, o Apache 2 é realmente Apache 2, não httpd.
NameVirtualHost seu_endereco.com:80
<VirtualHost seu_endereco.com:80>
DocumentRoot caminho_do_public_do_seu_projeto
PassengerEnabled off
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
</VirtualHost>
É isso.
Pedro, seguindo essas configurações eu posso ter várias aplicações rails em um único servidor?
Essa configuração é somente para uma aplicação, já que ele responderá qualquer requisição na porta 80, conforme está no VirtualHost.
Para usar mais de uma aplicação, use dentro do VirtualHost a tag ServerName, colocando nela, o endereço configurado no seu DNS.
Entendi, mas no meu caso eu tenho apenas um servidor que atualmente esta hospedando uma app rails na versão 2.3.x e ruby 1.8.7. A necessidade agora é colocar uma outra app Rails na versão 3.x e com o Ruby 1.9.x no mesmo servidor.
Só com proxy reverso mesmo. Teria que você subir a instância “na mão”, da mesma forma que parar ou reiniciar.
Parabéns era isso que eu precisava
principalmente a parte do GIT e o proxy maldito
tinha exportado somente http e não https
valeu
Cara show de bola, vou depois ver se existe alg para quem utiliza o Nginx.
Mai já vale com o Apache!!!
Cara, nunca testei com o nginx, posso fazer um teste depois e postar algo aqui