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:
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:
...
...
[email protected] node_modules/express
├── [email protected]
├── [email protected]
├── [email protected]
doctype html
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected] ([email protected])
├── [email protected] ([email protected])
└── [email protected] ([email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected], [email protected])
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çõesforever 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.