DEV Community

Wanderson Alves Rodrigues
Wanderson Alves Rodrigues

Posted on • Updated on

Preparar servidor para deploy NodeJs

Vou apresentar como criar um servidor Ubuntu com NGINx para fazer deploy de aplicações escritas usando a plataforma NodeJs.

Alt Text

REQUISITO:

  • Ubuntu 18.04

1 - CRIAR USUÁRIO UBUNTU

Para começar vamos ter que criar um novo usuário chamado deploy.
Você pode fazer tudo com o usuário root porém não é recomendado.

adduser deploy
Enter fullscreen mode Exit fullscreen mode

Depois de executar o comando acima para criar um novo usuário será requisitado uma senha, informe da sua preferência.

Agora temos que adicionar uma permissão sudo ao novo usuário, para isso execute o comando abaixo:

usermod -aG sudo deploy
Enter fullscreen mode Exit fullscreen mode

2 - CONFIGURAR SSH

Caso você utilize ssh para acessar o servidor siga esse passo, entre no diretório /home/deploy:

cd /home/deploy
Enter fullscreen mode Exit fullscreen mode

No diretório deploy crie uma pasta chamada .ssh, como segue no comando abaixo:

mkdir .ssh
Enter fullscreen mode Exit fullscreen mode

Para mudar o dono da pasta .ssh, execute o comando:

chown deploy:deploy .ssh/
Enter fullscreen mode Exit fullscreen mode

Agora temos que copiar o ssh do root para o nosso usuário execute os comando:

cp ~/.ssh/authorized_keys /home/deploy/.ssh/
Enter fullscreen mode Exit fullscreen mode

Entre na pasta .ssh e execute o comando para mudar a permissão de authorozed_keys:

chown deploy:deploy authorized_keys
Enter fullscreen mode Exit fullscreen mode

3 - INSTALAR O NODEJS

Como nosso servidor não possui nodejs instalado vamos fazer isso, para essa demostração vou usar a versão 12.x do node.
Primeiramente temos que adicionar o pacote na lista:

curl -sl https://deb.nodesource.com/setup_12.x | sudo -E bash -
Enter fullscreen mode Exit fullscreen mode

Agora podemos executar o comando para instalar o node:

sudo apt-get install -y nodejs
Enter fullscreen mode Exit fullscreen mode

Para verificar se a instalação foi bem bem sucedido, execute:

node -v
npm -v
Enter fullscreen mode Exit fullscreen mode

4 - INSTALAR YARN

O yarn é um gerenciador de pacotes criado pelo Facebook, para mais detalhes acesse Yarn.
Para instalar o yarn no nosso servidor execute os comandos abaixo:

curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add

echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list

sudo apt update

sudo apt update && sudo apt install --no-install-recommends yarn
Enter fullscreen mode Exit fullscreen mode

Para finalizar verifique a versão, se aparecer o número da versão significa instalação realizada com sucesso:

yarn -v
Enter fullscreen mode Exit fullscreen mode

5 - ADICIONAR A APLICAÇÃO AO SERVIDOR

Para fins de teste eu criei uma API simples que recebe uma requisição get, vou usa-la para demostrar o deploy no servidor.

Dentro do diretório /home/deploy crie um nova pasta chamada app.

mkdir app
Enter fullscreen mode Exit fullscreen mode

Vamos clonar a aplicação do Github dentro da pasta app.

git clone https://github.com/wandealves/deploy.git
Enter fullscreen mode Exit fullscreen mode

6 - PROXY REVERSO DO NGINX

No servidor vamos usar o*NGINx* para requisições HTTP. Nginx (lê-se “engine x”) é um servidor leve de HTTP, proxy reverso, proxy de e-mail IMAP/POP3, feito por Igor Sysoev em 2005, sob licença BSD-like 2-clause.
Para mais detalhes acesse NGINx.
Instalar NGINx, para isso executa o comando:

sudo apt install nginx 
Enter fullscreen mode Exit fullscreen mode

Para acessar de fora do servidor temos que liberar a porta 80, para isso:

sudo ufw allow 80
Enter fullscreen mode Exit fullscreen mode

Se você acessar o ip do servidor vai ver a tela de boas vinda do NGINx.
Alt Text

Vamos configurar o NGINx para acessar nossa aplicação que roda na porta 3333.
Para isso vamos ter que criar um proxy reverso, ao invés de acessar ip:3333 vamos usar ip:80, onde a porta 80 não precisa ser informada ,para isso siga os passos.
Entre no diretório /etc/nginx/sites-available/ com o comando:

cd /etc/nginx/sites-available/
Enter fullscreen mode Exit fullscreen mode

Vamos fazer uma cópia do default para nossa nova configuração que vou chamar de nodedeploy.

sudo cp default nodedeploy
Enter fullscreen mode Exit fullscreen mode

Agora temos que editar o arquivo nodedeploy e deixa-lo com segue abaixo:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;

        location / {
                proxy_pass http://localhost:3333;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}
Enter fullscreen mode Exit fullscreen mode

Agora acesse o diretório /etc/nginx/sites-enabled/.

cd /etc/nginx/sites-enabled/
Enter fullscreen mode Exit fullscreen mode

Dentro do diretório sites-enabled temos que criar um link simbólico para nodedeploy que criamos no passo acima.

sudo ln -s /etc/nginx/sites-available/nodedeploy nodedeploy
Enter fullscreen mode Exit fullscreen mode

No esqueça de deletar o arquivo default do diretório sites-enabled.

sudo rm default
Enter fullscreen mode Exit fullscreen mode

Para saber se nossa configuração funcionou execute:

sudo nginx -t
Enter fullscreen mode Exit fullscreen mode

Se o resultado for igual o listado abaixo, as configurações estão corretas:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is succes
Enter fullscreen mode Exit fullscreen mode

Para finalizar a configuração do NGINx vamos reinicia-lo:

sudo service nginx reload

sudo service nginx restart
Enter fullscreen mode Exit fullscreen mode

7 - DEPLOY DA APLICAÇÃO

Se tentar acessar o ip do servidor vai receber uma mensagem de Bad Gateway, isso ocorre pois nossa aplicação encontra-se parada.

Acesse a pasta da aplicação em /home/deploy/app e vamos gerar o build da aplicação:

yarn

yarn build

node dist/server.js
Enter fullscreen mode Exit fullscreen mode

Ao executar o comando node a aplicação vai subir, agora se você acessar o ip do servidor vai ver o retorno da api.
Alt Text

Discussion (0)