Tutorial: Como implantar seu aplicativo Node.js na DigitalOcean com SSL

Este post é uma adaptação/tradução do post publicado originalmente por Jason Lengstorf, acesse o original clicando aqui.

Neste tutorial, vamos passo a passo, criar um servidor, implantar um aplicativo Node.js, protegendo (na faixa) com um certificado SSL e apontando um nome de domínio.

Levantar e configurar o servidor

Antes de podermos fazer qualquer coisa, precisamos de um servidor que possa ser acessado publicamente. Há muitas opções por aí, então não se sinta preso ao DigitalOcean – no entanto, para este tutorial, provavelmente será mais fácil de seguir se você estiver usando exatamente a mesma configuração.

Se você não tiver uma conta da DigitalOcean, poderá receber US $ 10 de crédito, o suficiente para executar este app por dois meses, inscrevendo-se usando este link: reivindique seus US $ 10 em crédito da DigitalOcean .

Crie um novo droplet no DigitalOcean

Para começar a criar uma conta no DigitalOcean , ou faça login na sua conta existente .

Uma vez que você está logado, clique no botão “Criar Droplet” no topo da tela.

nodejs-ssl-deploy-01
dashboard da DigitalOcean

Escolha a opção de US $ 5 / mês com o Ubuntu 16.04.1 x64. Selecione uma região mais próxima de seus usuários.

nodejs-ssl-deploy-02
criando um droplet DigitalOcean de $5/mês com ubuntu 16.04.1

Agora vamos adicionar sua chave SSH.

Como encontrar sua chave SSH

Primeiro, abra o Terminal 1 e verifique as chaves SSH existentes:

ls -la ~/.ssh

Se você já tiver configurado as chaves SSH, deverá ver um arquivo chamado id_rsa.pub. (Se houver um arquivo terminando .pub, é muito provável que seja uma chave SSH.)

Se você precisar criar uma chave SSH, use o guia do GitHub para se endireitar.

Para copiar sua chave SSH, use um dos seguintes comandos:

# This copies the key so you can paste with command + V
pbcopy < ~/.ssh/id_rsa.pub

# This prints it in the command line for manual copying
cat ~/.ssh/id_rsa.pub

Adicione a chave SSH a droplet

De volta à tela de criação de droplet da DigitalOcean, clique no botão “Nova chave SSH” e cole sua chave SSH no campo aberto.

nodejs-ssl-deploy-03
cole sua chave neste campo

Clique em “Adicionar chave SSH” para salvá-lo, em seguida, verifique se ele está selecionado, nomeie sua gota e aperte o botão “Criar” grande para colocar seu servidor online.

nodejs-ssl-deploy-04
Leva pelo menos um minuto para a droplet ser criada

Seu novo droplet exibirá seu endereço IP depois de configurado. Você pode clicar nele para copiar o IP para a sua área de transferência.

nodejs-ssl-deploy-05
clique no endereço IP para copiá-lo para sua área de transferência

 

Conecte-se ao servidor usando o SSH

Os droplets DigitalOcean são criados com um rootusuário e, como adicionamos nossas chaves SSH, podemos efetuar login sem uma senha. Como mágica!

# Make sure to replace the IP below with your server's IP address
ssh root@192.168.1.1

Você provavelmente será perguntado se deseja continuar se conectando na primeira vez que fizer login. Digite yespara continuar e você verá algo semelhante ao seguinte:

$ ssh root@138.68.11.65
The authenticity of host '138.68.11.65 (138.68.11.65)' can't be established.
ECDSA key fingerprint is SHA256:f1qsLkumkNyRNfDVgjJk2R7kRlonuce1IMoEVTL2sfE.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '138.68.11.65' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

0 packages can be updated.
0 updates are security updates.



The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.

root@nodejs-ssl-deploy:~#

Configure o servidor com segurança básica

Uma vez que estamos logados no servidor, precisamos ter algumas coisas configuradas para mantê-lo seguro.

Crie um usuário SSH

Primeiro, vamos adicionar um novo usuário com sudoprivilégios. Para fazer isso, execute o seguinte comando enquanto estiver conectado ao seu droplet:

# You can choose any username you want here.
adduser developer

Esse comando solicita uma senha e, em seguida, alguns detalhes opcionais adicionais.

Depois, podemos ver que nosso usuário foi criado executando id <your_username>, o que deve resultar em algo como o seguinte:

root@nodejs-ssl-deploy:~# id developer
uid=1000(developer) gid=1000(developer) groups=1000(developer)

Para executar alguns dos comandos no servidor, como reiniciar os serviços, precisamos adicionar nosso novo usuário ao sudogrupo. Faça isso executando o seguinte comando:

# Don't forget: use your own username here
usermod -aG sudo developer

Agora, se corrermos id developer, podemos ver que o sudogrupo foi aplicado.

root@nodejs-ssl-deploy:~# id developer
uid=1000(developer) gid=1000(developer) groups=1000(developer),27(sudo)

Adicione sua chave SSH para o novo usuário

Em seguida, precisamos adicionar nossa chave SSH ao novo usuário. Isso nos permite efetuar login sem uma senha, o que é importante porque estamos planejando desativar logins de senha para esse servidor.

# Become the new user
su - jason

# Create a new directory for SSH stuff
mkdir ~/.ssh

# Set the permissions to only allow this user into it
chmod 700 ~/.ssh

# Create a file for SSH keys
nano ~/.ssh/authorized_keys

nanoeditor nos permite copiar e colar sua chave SSH – a mesma que copiamos para DigitalOcean quando criamos o droplet – no novo arquivo e pressionar control + Xpara sair. Digite Ypara salvar o arquivo e pressione enterpara confirmar o nome do arquivo.

Podemos garantir que a chave SSH seja salva executando cat ~/.ssh/authorized_keys; se a chave SSH for impressa no terminal, ela será salva.

# Set the permissions to only allow this user to access it
chmod 600 ~/.ssh/authorized_keys

# Stop acting as the new user and become root again
exit

Desativar o login da senha

Como cada servidor tem uma rootconta padrão que é um alvo para ataques a servidores automatizados – e porque essa conta tem poder ilimitado dentro do servidor – é uma boa ideia garantir que ninguém possa usá-la.

Após o passo anterior, você deve estar logado no seu servidor como root.Vamos garantir que a nova conta funcione e tenha sudoacesso:

# Log out of the server as root
exit

# Log into your server as the new user
ssh jason@138.68.11.65

Por dentro, precisamos atualizar a configuração do SSH para desabilitar os logins de senha e desabilitar o login como um roottodo.

Para fazer isso, use o seguinte comando para abrir o arquivo de configuração SSH para edição:

sudo nano /etc/ssh/sshd_config

Dentro, você precisa atualizar duas configurações:

  1. Encontre PermitRootLogin yese mude paraPermitRootLogin no
  2. Encontre #PasswordAuthentication yese mude paraPasswordAuthentication no

Salve o arquivo pressionando control + Xe, em seguida Y, então enter.

Finalmente, reinicie o serviço SSH com este comando:

# Reloads the configuration we just changed
sudo systemctl reload sshd

Teste seu login abrindo uma nova guia no Terminal ( command + Tno Mac) e conectando-se ao seu servidor novamente.

Se fizermos login como nosso novo usuário, tudo funcionará como esperado. No entanto, se tentarmos efetuar login root, obteremos um erro:

$ ssh root@138.68.11.65
Permission denied (publickey).

Configurar firewall básico

Em seguida, vamos configurar um firewall simples. Vamos configurá-lo para negar todo o tráfego, exceto através de portas de tráfego padrão da Web ( 80para HTTP e 443HTTPS) e para permitir logins SSH.

Isso, pelo menos em teoria, deve eliminar muitos riscos de segurança em nosso servidor. (Mas, novamente – este não é um artigo de segurança; são apenas precauções básicas.)

Nós vamos executar três comandos para configurar o firewall – chamado ufw – e então vamos ativá-lo. Digite o seguinte enquanto estiver conectado ao servidor:

# Enable OpenSSH connections
sudo ufw allow OpenSSH

# Enable HTTP traffic
sudo ufw allow http

# Enable HTTPS traffic
sudo ufw allow https

# Turn the firewall on
sudo ufw enable

Para verificar o status do firewall, execute o sudo ufw statusque lhe dará o seguinte:

jason@nodejs-ssl-deploy:~$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
80                         ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
80 (v6)                    ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)  

Coloque seu aplicativo em funcionamento

Agora que o servidor está configurado, podemos instalar nosso aplicativo.

Instale o GIT

A fim de obter uma cópia do nosso aplicativo para este servidor, vamos usar o Git . Felizmente, o Ubuntu facilita muito a instalação de ferramentas comuns, então tudo que precisamos fazer é executar este comando:

sudo apt-get install git

Podemos validar que o Git foi instalado corretamente executando git --version:

jason@nodejs-ssl-deploy:~$ git --version
git version 2.7.4

Configurando o Node.Js

O Node.js é um pouco mais complexo que o Git, porque existem várias versões diferentes do Node que são usadas em ambientes de produção. Portanto, precisamos atualizar apt-getcom a versão correta para nosso aplicativo antes de instalá-lo.

Diga ao apt-get qual versão do node baixar

O pessoal da NodeSource facilitou muito a instalação da nossa versão do Node desejada. Para este tutorial, usaremos a versão 6.x.

Execute os seguintes comandos para baixar e executar o script de configuração:

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

Isso leva alguns segundos para ser concluído.

Intalando o Node.Js V6.X

Com o script NodeSource completo, podemos simplesmente usar apt-getpara instalar o Node.js:

sudo apt-get install nodejs

Quando estiver concluído, podemos verificar se nodeestá disponível executando node --version:

jason@nodejs-ssl-deploy:~$ node --version
v6.3.1

Clone do Aplicativo

Agora podemos clonar uma cópia do nosso aplicativo para o servidor – as coisas estão ficando realmente empolgantes agora.

Não importa onde você instala o aplicativo, então vamos criar um diretório apps na pasta inicial do nosso usuário e clonar o aplicativo em uma pasta com o nome do nosso domínio – isso torna muito fácil lembrar qual aplicativo é qual.

# Make sure you’re in your home folder
cd ~

# Create the new directory and move into it
mkdir apps
cd apps/

# Clone your app into a new directory named for your domain
git clone https://github.com/jlengstorf/tutorial-deploy-nodejs-ssl-digitalocean-app.git

NOTA: Certifique-se de substituir app.example.comcom o nome de domínio desejado.

Teste o aplicativo

Para garantir que seu aplicativo esteja instalado e funcionando, vá para a nova pasta e inicie-a:

# Move into the app directory
cd app.example.com

# Start the app
node app

Incrível – temos um aplicativo em execução. Agora só precisamos torná-lo acessível ao mundo exterior.

Podemos a exitpartir da sessão de teste (aquela em que acabamos de executar o curlcomando), e podemos parar o aplicativo em nossa outra sessão usando control + C.

Inicie seu aplicativo usando um gerenciador de processos

Simplesmente iniciar o aplicativo manualmente é tecnicamente suficiente para que o aplicativo seja implantado, mas se o servidor for reiniciado, isso significa que precisamos iniciar o aplicativo manualmente novamente.

E nos aplicativos de produção, queremos eliminar tantas etapas manuais, se não todas, para implantar o aplicativo. Então, vamos usar um gerenciador de processos chamado PM2 para executar nosso aplicativo. Isso também nos oferece benefícios como registros fáceis de acessar e uma maneira simples de iniciar, interromper e reiniciar o aplicativo.

O PM2 também nos permite iniciar o aplicativo automaticamente quando o servidor é reiniciado, o que significa uma coisa a menos com a qual precisamos nos preocupar.

Instale o PM2

Ao contrário das outras ferramentas que instalamos, pm2é um pacote Node. Nós o instalamos usando o comando npm, que é o gerenciador de pacotes padrão para o Node.js.

sudo npm install -g pm2

2 comentários em “Tutorial: Como implantar seu aplicativo Node.js na DigitalOcean com SSL

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.