TL;DR Como configurar uma aplicação Rails usando Nginx + Unicorn + Upstart + RVM (gemset por aplicação).
Dependências: (TODO) Configuração de Servidor Nginx
Essas instruções são aplicáveis para o seguinte ambiente:
- Sistema Operacional: Ubuntu Server 12.04 beta2
- Servidor: AWS EC2 usando ESB AMI: ubuntu/images-milestone/ebs/ubuntu-precise-12.04-beta2-amd64-server-20120328 (ami-b5ea34dc)
Porém, você pode usar as instruções e adaptá-las conforme sua necessidade para outras versões do ubuntu ou para outras distrbuições.
OBS: as variáveis #{nome da variável} devem ser alteradas para os valores do seu ambiente
- Antes de qualquer procedimento, conecte no servidor via ssh. Como configurar? Acessar servidor via ssh
- Criar usuário da aplicação
$ sudo useradd -b /storage/var/www -m -N -G rvm,www-data -s /bin/bash #{nome da aplicação} $ sudo ln -s /storage/var/www/#{nome da aplicação} /var/www
- Acessar como o usuário e criar uma chave ssh
$ sudo su - #{nome da aplicação} $ ssh-keygen
-
Incluir o conteúdo do arquivo ~/.ssh/id_rsa.pub chave como deploy key (no github ou codeplane)
-
Clonar a aplicação. Se for migração, simplesmente copie o conteúdo para o diretório /var/www/#{nome da aplicação}/current.
$ sudo su - #{nome da aplicação} $ git clone #{endereço RW da aplicação} current/
-
Antes de começar, acessar como o usuário da aplicação:
$ sudo su - #{nome da aplicação}
-
Criar o arquivo de configuração do unicorn (colar o conteúdo do arquivo nº 2)
$ sudo vim current/config/unicorn.rb
-
Criar RVM RC. Caso já exista, substitua o conteúdo
* Acessar a pasta para dar "trust" para o RVM RC
```$ cd current```
* Adicionar unicorn ao Gemfile
```$ echo "gem 'unicorn'" >> Gemfile```
* Rodar bundler
```$ bundle```
* Configurar banco de dados (TODO Procedimento para criar o banco de dados) (colar o conteúdo do arquivo nº 3)
```$ vim config/database.yml```
* Iniciar unicorn
```$ unicorn_rails -c config/unicorn.rb -E production -D```
* Testar unicorn
```$ ps aux | grep #{nome da sua aplicação}```
* Se apareceu algum processo, está OK! Senão, olhe os arquivos log/unicorn.stderr.log e log/production.log para entender o que aconteceu.
* Encerrar sessão do usuário #{nome da aplicação}
``` $ exit```
### Configurar nginx
* Criar o arquivo de configuração (colar conteúdo do arquivo nº 4)
``` $ sudo vim /etc/nginx/sites-available/#{nome da aplicação} ```
* Criar link simbólico para habilitar aplicação
``` sudo ln -s /etc/nginx/sites-available/#{nome da aplicação} /etc/nginx/sites-enabled ```
* Recarregar configurações do nginx
``` $ sudo service nginx reload ```
* Teste o acesso acessando o domínio da aplicação pelo navegador. Lembre-se que você iniciou o unicorn anteriormente, se não está mais iniciado execute os dois últimos passos do processo de configuração do unicorn.
* Em caso de problemas veja o arquivo de log do nginx em /var/log/nginx/error.log
### Configurar upstart
* Criar wrapper do RVM para o comando unicorn_rails
``` $ rvmsudo rvm wrapper 1.9.3@#{nome da aplicação} #{nome da aplicação} unicorn_rails ```
* Criar o arquivo de configuração do upstart para a aplicação (colar o conteúdo do arquivo nº 5)
``` $ sudo vim /etc/init/unicorn_#{nome da aplicação}.conf```
* Parar o processo do unicorn que já estava rodando.
``` $ sudo kill -9 `cat /var/www/#{nome da aplicação}/current/tmp/pids/unicorn.pid` ```
* Iniciar processo pelo upstart
``` $ sudo start unicorn_#{nome da aplicação} ```
* Testar unicorn
```$ ps aux | grep #{nome da sua aplicação}```
* Se apareceu algum processo, está OK! Senão, olhe os arquivos /tmp/upstart_unicorn_#{nome da aplicação}.log /var/www/#{nome da aplicação}/log/unicorn.stderr.log e /var/www/#{nome da aplicação}/log/production.log para entender o que aconteceu.