Como configurar um servidor Node.js

Neste post, estou assumindo que você já possui sua VPS instalada e configurada com o Ubuntu Server. Optei pelo Ubuntu, por ser uma distribuição super simples de configurar. Caso você não possua, aqui vai uma indicação:

  1. ClusterWeb – Internet Data Center

Após o jabá gratuito, o primeiro passo, é você facilitar futuros acessos a máquina, guardando sua chave pública (~/.ssh/id_rsa.pub).

O motivo deste procedimento é para você não precisar digitar sua senha toda as vezes que acessar a VPS.

SSH key

Se você utiliza Mac, aqui vai uma dica super simples para copiar sua chave:

cat ~/.ssh/id_rsa.pub | pbcopy

Com este comando, sua chave já estará no seu clipboard para colar no servidor. Com sua chave em mãos, vamos nos conectar à vps e executar os seguintes comandos:

ssh usuario@ip-de-sua-vps # Ele vai solicitar sua senha desta vez.
cd ~/.ssh # Caso o diretório .ssh não exista, você deve criá-lo: mkdir ~/.ssh
vi authorized_keys

Caso o arquivo não exista, digite touch authorized_keys. Em alguns casos você precisará utilizar sudo. Então, sudo touch authorized_keys esudo vi authorized_keys.

Com o arquivo aberto no terminal, digite a tecla i para entrar em modo de edição no vi. Com o modo de edição ativado, cole sua chave que já deve estar no seu clipboard. (cmd + v para macs) e (control + v) para Windows/Linux. Com sua chave colada, aperte esc para voltar ao modo de leitura e em seguida x para salvar e fechar ao mesmo tempo.

Pronto, ssh key copiada! Caso você tenha criado o arquivo authorized_keys, você vai precisar executar este comando para que o que fizemos tenha feito:

sudo chmod 444 ~/.ssh/authorized_keys

Esta forma de copiar a chave é bem manual, mas serve como aprendizado.

Outra forma muito útil de copiar sua chave é utilizando ssh-copy-id. Se você utiliza Ubuntu por exemplo é só utilizar o comando. Se você é usuário Mac, você pode instalar através do brew install ssh-copy-id. Para utilizar é muito simples:

ssh-copy-id [email protected]

Agora, da próxima vez que você acessar sua VPS ssh user@ip-de-sua-vps, não haverá necessidade de digitar sua senha.

Seguindo.. GIT!

Para nosso deploy, nós utilizaremos o GIT e o forever. Para isso, precisamos instalar o git na VPS. Para verificar se você já possui o git instalado, digitewhich git. Se você receber a mensagem “git not found”, vamos instalá-lo através do seguinte comando:

sudo apt-get install git

Provavelmente a instalação pedirá para você apertar Y para concordar em baixar os arquivos.

Com o GIT instalado, nos resta começar a brincar de instalar o NODE e logo menos, o forever para manter sua aplicação rodando em background.

Instalando o Node

Para instalar o node, vamos utilizar o apt-get, porém, os pacotes nem sempre estão atualizados como deveriam, então, para garantir que seja instalada a versão mais nova do node, vamos informar ao apt-get que desejamos um repositório específico para baixar o node:

sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs

Com o node instalado, vamos testar se funcionou digitando node --version. Pronto, você já deve estar com o node instalado e consequentemente o npm, já que o mesmo vem “built-in” já faz algum tempo.

Vamos ao exemplo! Finalmente, node!

Navegue até a pasta de seu usuário, Vamos clonar uma aplicação Express já existente para facilitar nosso trabalho.

cd ~
git clone https://github.com/djalmaaraujo/express-js-example-blog
cd express-js-example-blog

Se você tentar rodar node app.js, você vai receber alguns erros, uma vez que precisamos instalar as dependências. Para isso, vamos utilizar o “`npm install“. Depois de algum tempo e muito output, o final se parecerá com isso:

Pronto! Estamos prontos para rodar nossa primeira aplicação node em nossa VPS. Para isso, digite node app.js ou apenas node app. Com isso você receberá a seguinte mensagem:

Express server listening on port 3000

Agora, você deve acessar sua VPS no browser, http://ip-de-sua-vps:3000. Você verá a tela do express inicial:

Express
Welcome to Express

E agora?

Perfeito! Agora nós temos nossa aplicação rodando e já podemos efetuar testes. Mas ninguém gosta de acessar sites na porta 3000, correto? Para configurar nossa porta 80, nós faremos mais algumas coisas.

Por padrão, o Ubuntu server vem com porta 80 bloqueada em seu firewall e além disso, para não ter necessidade de ficar “cascavilhando” e brigando com firewall e etc, vamos manter nossa aplicação rodando na porta 3000 e redirecionar a porta 80. Assim, quando os usuários acessarem seu app, a porta 80 será redirecionada para a porta 3000 em background.

Não, seu browser não será redirecionado para :3000

Para isso vamos primeiro checar se o “ip forwarding” está ativado na máquina. cat /proc/sys/net/ipv4/ip_forward vai te dizer se está ativado ou não. Caso você receba 0, para habilitar utilize as seguintes instruções:

sudo vi /etc/sysctl.conf
net.ipv4.ip_forward # Descomente esta linha no arquivo aberto. Salve e feche o arquivo.
sudo sysctl -p /etc/sysctl.conf # Para ativar as modificações feitas no arquivo.
cat /proc/sys/net/ipv4/ip_forward # Para verificar se agora está ativado.

Com o “port forwarding” ativado, agora vamos ativar nosso redirecionamento da porta 80 para a porta 3000, utilizando iptables.

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

Como dito acima, por padrão a porta 80 é bloqueada no firewall, então vamos permitir conexões através desta porta:

sudo iptables -A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT

Reiniciando a aplicação

Vá até sua aplicação, inicie a mesma node app, e verifique agora no seu browser, que você pode acessar sua máquina através da porta 80.http://ip-de-sua-maquina. O output da aplicação continuará dizendolistening on port 3000, mas agora sua porta 80 está sendo redirecionada para a 3000.

Mais um passo para a vitória. Colocando a aplicação para rodar em background com forever

Vamos começar instalado o forever, através do npm.

[sudo] npm install forever -g

Para utilizar o forever é extremamente simples, apenas saiba o path de sua aplicação e digite o seguinte comando:

forever start /home/seuusuario/express-js-example-blog/app.js

Com isso, você terá o seguinte output:

warn:    --minUptime not set. Defaulting to: 1000ms
warn:    --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
info:    Forever processing file: app.js

Você percebeu que agora, seu console ficou livre para efetuar outras operações. Isso acontece devido ao forever colocar o processo do node em background.

Aqui vão algumas dicas para você interagir mais com o forever:

  • forever list Lista todas as suas aplicações iniciadas com o forever.
  • tail -f /path/para/o/log/fornecido.log Você pode verificar o log de sua aplicação em tempo real.
  • forever stopall Para todas as aplicações
  • forever stop ID Para uma aplicação específica. Para conseguir o id, digite forever list.

 

Up and running!

Seguindo todos estes passos, você terá sua VPS configurada para rodar suas aplicações node sem se preocupar em utilizar hosts de terceiros.

Existem diversas formas de se fazer setup de aplicações, e esta nem é a melhor, nem a pior, mas funciona. Se você estiver trabalhando em um projeto pequeno e que você não está preocupado em ter acesso root a máquina, eu recomendo fortemente que você utilize o Heroku para deploy de suas aplicações node/ruby/whatever.

Rolar para cima