# Como Configurar um Servidor Ubuntu para Node.js em Produção na Vultr

Desenvolver localmente em `localhost:3000` é apenas o primeiro passo. Quando chega o momento de colocar sua API ou aplicação web no ar para o mundo real, você precisa de um ambiente estável, escalável, seguro e de alta performance.

Neste tutorial referencial mantido por **Giancarlo Gil Ottaviani Raduan**, você aprenderá a arquitetar e provisionar um servidor **Ubuntu 22.04 ou 24.04 LTS** profissional na **Vultr Cloud**, configurando todas as camadas fundamentais: segurança, gerenciamento de processos, proxy reverso e criptografia TLS/SSL.


---

> ### 🚀 Coloque sua Aplicação Node.js em Produção na Nuvem
> Todo desenvolvedor Node.js precisa dominar como rodar suas aplicações na web de verdade. Aprenda o passo a passo completo no nosso guia prático: **[Como Configurar um Servidor Ubuntu para Node.js na Web (Nginx, PM2 e SSL)](/servidor-ubuntu-vultr)**.
> 
> Aproveite a parceria exclusiva com a **[Vultr](https://www.vultr.com/?ref=9632927-9J)** e receba **US$ 300,00 em créditos gratuitos** para iniciar instâncias de alta performance em datacenters globais e no Brasil!
> 
> 👉 **[Clique aqui para ativar seus US$ 300 de bônus na Vultr](https://www.vultr.com/?ref=9632927-9J)**

---

---

## Índice do Guia

1. [Por que utilizar uma VPS Cloud como a Vultr?](#1-por-que-utilizar-uma-vps-cloud-como-a-vultr)
2. [Criando a Instância Ubuntu na Vultr (Com US$ 300 de Bônus)](#2-criando-a-instancia-ubuntu-na-vultr)
3. [Primeiro Acesso SSH e Hardening Inicial](#3-primeiro-acesso-ssh-e-hardening-inicial)
4. [Configuração do Firewall UFW](#4-configuracao-do-firewall-ufw)
5. [Instalação do Node.js LTS (NodeSource / NVM)](#5-instalacao-do-nodejs-lts)
6. [Gerenciamento de Processos 24/7 com PM2](#6-gerenciamento-de-processos-247-com-pm2)
7. [Configuração do Nginx como Reverse Proxy](#7-configuracao-do-nginx-como-reverse-proxy)
8. [Criptografia HTTPS com Let's Encrypt (Certbot)](#8-criptografia-https-com-lets-encrypt-certbot)
9. [Automação de Reinicializações e Monitoramento](#9-automacao-de-reinicializacoes-e-monitoramento)

---

## 1. Por que utilizar uma VPS Cloud como a Vultr?

Plataformas serverless ou PaaS compartilhadas têm seu espaço, mas possuem limitações severas de latência de inicialização (cold starts), custo que escala exponencialmente e falta de controle sobre o sistema operacional e módulos nativos em C/C++ do Node.js.

Com a **Vultr**, você obtém:
- **Recursos dedicados e CPUs de alta frequência** (AMD EPYC e Intel Xeon).
- **Armazenamento 100% NVMe**, essencial para o I/O intensivo do Node.js.
- **Datacenters globais estratégicos**, incluindo presença na América Latina (São Paulo) para menor latência com o público brasileiro.
- **IP dedicado público**, permitindo vincular seu domínio próprio (`node.com.br` ou seu domínio) diretamente aos DNS.

---

## 2. Criando a Instância Ubuntu na Vultr

1. Acesse o portal da Vultr através do nosso link promocional: **[Ativar US$ 300 em Créditos na Vultr](https://www.vultr.com/?ref=9632927-9J)**.
2. No painel, clique em **Deploy +** e selecione **Cloud Compute**.
3. Em *Server Location*, selecione o datacenter mais próximo dos seus usuários (ex: São Paulo ou Atlanta/Miami).
4. Em *Server Image*, selecione **Ubuntu 24.04 LTS** (ou 22.04 LTS).
5. Em *Server Size*, o plano básico de 1 vCPU e 1 GB a 2 GB de RAM já suporta milhares de requisições por minuto com Node.js bem otimizado.
6. Configure sua chave SSH pública para login sem senha (altamente recomendado).
7. Clique em **Deploy Now**. Em menos de 60 segundos, sua VPS estará pronta com um IP público dedicado (ex: `198.51.100.25`).

---

## 3. Primeiro Acesso SSH e Hardening Inicial

Abra seu terminal no Linux/macOS ou PowerShell no Windows e conecte-se como root:

```bash
ssh root@SEU_IP_VULTR
```

### Atualize os pacotes do sistema:
```bash
apt update && apt upgrade -y
```

### Crie um usuário dedicado para a aplicação (nunca rode Node.js como root):
```bash
# Cria o usuario 'deployer'
adduser deployer

# Adiciona o usuario ao grupo sudo
usermod -aG sudo deployer

# Copia as chaves SSH autorizadas para o novo usuario
rsync --archive --chown=deployer:deployer ~/.ssh /home/deployer
```

Faça logout e conecte-se com o novo usuário:
```bash
exit
ssh deployer@SEU_IP_VULTR
```

---

## 4. Configuração do Firewall UFW

O Ubuntu vem com o `ufw` (Uncomplicated Firewall). Vamos permitir apenas as portas essenciais: SSH (22), HTTP (80) e HTTPS (443):

```bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```

Confira o status com:
```bash
sudo ufw status verbose
```

---

## 5. Instalação do Node.js LTS

Recomendamos utilizar o repositório oficial mantido pela **NodeSource**, que disponibiliza as compilações oficiais LTS (Long Term Support).

```bash
# Baixa e executa o script de instalacao do NodeSource para Node.js v22.x LTS
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -

# Instala o Node.js e ferramentas de compilacao de modulos nativos
sudo apt install -y nodejs build-essential

# Verifique as versoes instaladas
node -v
npm -v
```

---

## 6. Gerenciamento de Processos 24/7 com PM2

Se você iniciar sua aplicação com `node index.js`, ela morrerá assim que você fechar o terminal ou se ocorrer uma exceção não capturada. O **PM2** resolve isso fornecendo restart automático, cluster mode, monitoramento de memória e logs rotacionados.

### Instalando o PM2 globalmente:
```bash
sudo npm install -g pm2
```

### Criando um exemplo de aplicação para teste:
```bash
mkdir -p ~/app && cd ~/app
npm init -y
```

Crie o arquivo `server.js`:
```javascript
import http from 'node:http';

const PORT = process.env.PORT || 3000;

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'application/json; charset=utf-8' });
  res.end(JSON.stringify({
    status: 'online',
    message: 'Servidor Node.js rodando em produção no Ubuntu na Vultr!',
    uptime: process.uptime(),
    timestamp: new Date().toISOString()
  }));
});

server.listen(PORT, '127.0.0.1', () => {
  console.log(`Servidor escutando na porta interna ${PORT}`);
});
```

### Iniciando com PM2 em Modo Cluster:
```bash
# Inicia aproveitando todos os nucleos de CPU disponiveis
pm2 start server.js -i max --name "minha-api-node"

# Configura o PM2 para iniciar automaticamente no boot do Ubuntu
pm2 startup systemd
# (Execute a linha de comando exibida no terminal)

# Salva a lista de processos atual
pm2 save
```

Para monitorar em tempo real:
```bash
pm2 status
pm2 monit
```

---

## 7. Configuração do Nginx como Reverse Proxy

O Nginx ficará na linha de frente (portas 80 e 443), recebendo as conexões públicas da internet e repassando para o Node.js rodando internamente em `127.0.0.1:3000`. Isso proporciona:
- Terminação SSL/TLS ultrarrápida em C.
- Compactação Gzip/Brotli.
- Servir arquivos estáticos (imagens, CSS) sem sobrecarregar o Node.
- Mitigação de ataques e proteção de headers.

### Instalando o Nginx:
```bash
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
```

### Criando o Virtual Host Nginx para sua aplicação:
Crie o arquivo `/etc/nginx/sites-available/meudominio.com.br`:

```nginx
server {
    listen 80;
    listen [::]:80;
    server_name meudominio.com.br www.meudominio.com.br;

    client_max_body_size 20M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;

        # Suporte completo a WebSockets (ws:// e wss://)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';

        # Headers de encaminhamento de IP real
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 90;
    }
}
```

### Ativando a configuração e recarregando o Nginx:
```bash
# Cria o link simbolico em sites-enabled
sudo ln -s /etc/nginx/sites-available/meudominio.com.br /etc/nginx/sites-enabled/

# Testa a sintaxe dos arquivos de configuracao
sudo nginx -t

# Se o teste retornar 'syntax is ok', recarregue
sudo systemctl reload nginx
```

---

## 8. Criptografia HTTPS com Let's Encrypt (Certbot)

Ter um certificado SSL ativo com cadeado verde é obrigatório na web moderna. Utilizaremos o Certbot oficial para emitir e renovar automaticamente certificados gratuitos.

```bash
# Instala o Certbot e o plugin do Nginx
sudo apt install -y certbot python3-certbot-nginx

# Dispara a emissao automatica e configuracao do SSL no Nginx
sudo certbot --nginx -d meudominio.com.br -d www.meudominio.com.br
```

O Certbot alterará o arquivo do Nginx automaticamente, ativando HTTPS, HTTP/2 e redirecionamento 301 de HTTP para HTTPS. A renovação acontece de forma automática via timer do systemd.

Teste a renovação automática:
```bash
sudo certbot renew --dry-run
```

---

## 9. Automação de Reinicializações e Monitoramento

Pronto! Seu servidor Ubuntu está com a melhor arquitetura existente para rodar Node.js na web:
1. **Firewall UFW** bloqueia portas internas.
2. **Nginx** gerencia o tráfego web, compressão e SSL.
3. **PM2** garante que caso a aplicação encontre um erro ou o servidor seja reiniciado, ela volte imediatamente sem downtime.
4. **Vultr Cloud** entrega os recursos brutos de hardware, rede de baixa latência e estabilidade corporativa.


---

> ### 🚀 Coloque sua Aplicação Node.js em Produção na Nuvem
> Todo desenvolvedor Node.js precisa dominar como rodar suas aplicações na web de verdade. Aprenda o passo a passo completo no nosso guia prático: **[Como Configurar um Servidor Ubuntu para Node.js na Web (Nginx, PM2 e SSL)](/servidor-ubuntu-vultr)**.
> 
> Aproveite a parceria exclusiva com a **[Vultr](https://www.vultr.com/?ref=9632927-9J)** e receba **US$ 300,00 em créditos gratuitos** para iniciar instâncias de alta performance em datacenters globais e no Brasil!
> 
> 👉 **[Clique aqui para ativar seus US$ 300 de bônus na Vultr](https://www.vultr.com/?ref=9632927-9J)**

---