Introdução: Por que o VPS é a Melhor Escolha para Produção
Desenvolver uma aplicação JavaScript no Node.js é apenas metade da batalha. A segunda parte, igualmente importante, é o deploy em um servidor de produção. Muitos desenvolvedores iniciantes usam serviços de hospedagem gratuitos (Heroku, Render, Vercel), mas para projetos sérios, um VPS (Servidor Virtual Privado) será necessário eventualmente.
Um VPS oferece controle total sobre o ambiente: você escolhe a versão do Node.js, configura o servidor web, gerencia processos e recursos. Neste artigo, vamos percorrer o processo passo a passo de deploy de uma aplicação JavaScript em um VPS usando ferramentas modernas: Nginx como proxy reverso, PM2 para gerenciamento de processos, Let's Encrypt para SSL e GitHub Actions para automação.
Passo 1: Preparação do Servidor e Instalação do Software Necessário
O primeiro passo é conectar-se ao seu VPS (geralmente via SSH) e instalar um conjunto básico de ferramentas. Vamos supor que você está usando Ubuntu 22.04 LTS.
# Atualizar pacotessudo apt update && sudo apt upgrade -y
# Instalar Node.js (recomendado via NodeSource)curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -sudo apt install -y nodejs
# Verificar versõesnode -vnpm -v
# Instalar Git (se ainda não estiver instalado)sudo apt install git -y
# Instalar Nginxsudo apt install nginx -yAlém disso, certifique-se de configurar um firewall básico (UFW):
sudo ufw allow OpenSSHsudu ufw allow 'Nginx Full'sudo ufw enablePasso 2: Clonando o Repositório e Configurando a Aplicação
Agora você precisa transferir o código da aplicação para o servidor. A maneira mais simples é clonar o repositório do GitHub/GitLab.
# Navegar para o diretório /var/www (padrão para projetos web)cd /var/www
# Clonar o repositório (substitua pela sua URL)sudo git clone https://github.com/seu-usuario/seu-repositorio.git myapp
# Dar permissões ao usuário atualsudo chown -R $USER:$USER /var/www/myapp
# Navegar para a pasta da aplicaçãocd /var/www/myapp
# Instalar dependênciasnpm install --productionCrie um arquivo .env para as variáveis de ambiente (porta, chaves de API, string de conexão do banco de dados):
# Exemplo .envPORT=3000NODE_ENV=productionDATABASE_URL=mongodb://localhost:27017/myappJWT_SECRET=sua-chave-secretaPasso 3: Configurando o PM2 para Gerenciamento de Processos
PM2 é um gerenciador de processos para Node.js que reinicia automaticamente a aplicação se ela falhar e a mantém em execução em segundo plano.
# Instalar PM2 globalmentesudo npm install -g pm2
# Iniciar a aplicação (se o ponto de entrada for app.js ou server.js)pm2 start app.js --name "myapp"
# Salvar a lista de processos para inicialização automática na reinicializaçãopm2 savepm2 startup systemdApós executar pm2 startup, você verá um comando que precisa ser executado com privilégios de root. Copie e execute-o.
Você pode verificar o status com o comando pm2 status. Se a aplicação estiver em execução, ela estará acessível em http://seu-ip:3000 (a porta do .env).
Passo 4: Configurando o Nginx como Proxy Reverso
O acesso direto ao Node.js pela porta 3000 não é uma boa prática. É melhor usar o Nginx como servidor proxy, que aceitará requisições na porta 80 (HTTP) e as encaminhará para sua aplicação.
Crie um arquivo de configuração para seu domínio (ou IP):
sudo nano /etc/nginx/sites-available/myappInsira o seguinte código:
server { listen 80; server_name seu-dominio.ru www.seu-dominio.ru;
location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connectio