---
# System prepended metadata

title: Untitled

---

### Implementação servidor Nginx + Capistrano + Puma em modo producação 

### Envio de chave ( Sua máquina)
```bash
ssh-copy-id -i ~/.ssh/mykey xspdo@ip_novo_servidor
# Ou
# Dentro do servidor adicione
vim /home/xspdo/.ssh/autorized_keys # insira sua chave e salve
```


#### Bibliotecas
Instalação das bibliotecas necessárias.

```bash
sudo apt-get -y install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev nginx mongodb
```
#### Usuario / Chave
Adição de usuário e geração da chave 
```bash
# Crie usuário para deploy
sudo adduser deploy 
sudo su deploy
# Chave pública
cd ~./ssh
ssh-keygen -t rsa
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
# Adicione a chave a uma conta do gitlab com permissão de acesso ao projetos
cat ~/.ssh/id_rsa.pub
```

#### Ruby 2.4.4 (RVM)
Instalação do ruby versão 2.4.4 através do rvm

```bash
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash
source /home/deploy/.rvm/scripts/rvm
rvm install 2.4.4 && rvm use --default 2.4.4
# Adicione o flag para não geração de doc e auto-update do rvm
echo "gem: --no-document" > ~/.gemrc
echo rvm_autoupdate_flag=2 >> ~/.rvmrc
```

#### NodeJS  
Instalação nodejs 8.11.1 ( NVM não trabalhou corretamente com capistrano! então siga rigorasamente as etapas abaixo)
```bash
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
npm install yarn -g
```
### Restore a base 
Atenção! procedimento deve ser feito apenas no servidor alpha!
```bash
# Função para puxar arquivo do Gdriver
function gdrive_download () {
   CONFIRM=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=$1" -O- | sed -rn 's/.*confirm=([0-9A-Za-z_]+).*/\1\n/p')
   wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$CONFIRM&id=$1" -O $2
   rm -rf /tmp/cookies.txt
 }
# Download do arquivo
gdrive_download 1BzSzp87KfCRfChS72y5WR9eEza-VZ3iQ dump.tar.bz2

# Descompacte
tar xjvf dump.tar.bz2

# Restaure a base
mongorestore -d decision_makers_development decision_makers_development/
```
### Pastas e Arquivos de configurações
```bash
# Diretório base capistrano
mkdir -vp /var/www/ruby/app_front/shared/{tmp,config/environments}

cd var/www/ruby/app_front/shared/
# Puxe as configurações do production
scp deploy@app.speedio.com.br:/var/www/ruby/app_front/shared/config/* .
cd config/enviroments/
scp deploy@app.speedio.com.br:/var/www/ruby/app_front/shared/config/environments/* .
cd -

# Modifique mongoid.yml para seu cenârio
vim mongoid.yml
```

#### Nginx 
Configuração do servidor nginx
```bash
cd ~
sudo mv /etc/nginx/sites-available/default ~/default_bkp
# Arquivo principal nginx
sudo cat <<EOF > /etc/nginx/nginx.conf
user deploy;
worker_processes auto;
pid /run/nginx.pid;

env PATH;

events {
  worker_connections 768;
}

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 70;
  types_hash_max_size 2048;

  ssl_session_cache   shared:SSL:10m;
  ssl_session_timeout 10m;

  include /etc/nginx/mime.types;
  default_type application/octet-stream;

  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;

  gzip on;
  gzip_disable "msie6";

  # include /etc/nginx/conf.d/*.conf;
  include /etc/nginx/sites-enabled/speedio.conf;
}
EOF

# Speedio.conf com redicionamento http para https
sudo cat <<EOF > /etc/nginx/sites-enabled/speedio.conf
upstream app {
  server unix:///var/www/ruby/app_front/shared/tmp/sockets/puma.sock fail_timeout=0;
}
server {

  listen 80 default_server;

  server_name _;

  return 301 https://$host$request_uri;

}

server {

  listen 443 ssl;

  sendfile off;

  server_name alpha.speedio.com.br;
  
  ssl_certificate /etc/letsencrypt/live/alpha.speedio.com.br/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/alpha.speedio.com.br/privkey.pem; # managed by Certbot


  root /example_site/current/public;

  try_files $uri/index.html $uri @app;

  location @app {
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_read_timeout 30;
    proxy_connect_timeout 60;
    proxy_redirect off;
    proxy_pass http://app;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 4G;
  keepalive_timeout 10;
}
EOF
```
#### LetEncrypt  
Instalação certbot e adição do certificado ssl no nginx

```bash
sudo add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-nginx
sudo certbot --nginx -d alpha.speedio.com.br # troque pelo nome do servidor 
```

#### Permissões (IMPORTANTE!)
Configure corretamente as permissões dos arquivos para 711 e mude o dono dos arquivos para o usuário `deploy`
```bash
chmod -R 711 /var/www/
chown -r deploy:deploy /var/www/
# qualquer outro usuário que tentar acessar irá ter problemas
# Exemplos:
xspdo@alpha-server-2:/var/www$ ls
ls: cannot open directory '.': Permission denied
```
### Restart o nginx
```bash
service nginx restart
```

### Finalização
Na sua máquina entre no diretório do projeto e execute
```bash
cap alpha deploy
cap alpha puma:restart
```


