Poupe até 53% em Servidores VPS, escolha agora. Oferta limitada.

Passo a passo para migrar aplicação Node.js do Heroku para VPS Ubuntu 22.04

10 min de leitura  ·  Guia técnico

Migrar aplicação Node.js do Heroku para VPS Ubuntu 22.04 é o processo de transferir uma aplicação JavaScript do servidor em nuvem Heroku para um servidor virtual privado com sistema Ubuntu. Para realizar esta migração sem downtime, siga estes passos:

  1. Preparar o ambiente Ubuntu 22.04 com Node.js e dependências
  2. Configurar Nginx como proxy reverso
  3. Transferir código fonte e configurar variáveis de ambiente
  4. Instalar e configurar PM2 para gerenciamento de processos
  5. Configurar SSL com Let's Encrypt
  6. Alterar registros DNS para apontar para o novo servidor

Pré-requisitos

  • VPS Ubuntu 22.04 LTS com acesso root via SSH
  • Aplicação Node.js funcionando no Heroku
  • Domínio configurado com acesso aos registros DNS
  • Heroku CLI instalado localmente
  • Git configurado no ambiente local
  • Conhecimento básico de linha de comando Linux

Preparando o ambiente Ubuntu 22.04 para Node.js

O primeiro passo para migrar Node.js do Heroku para VPS é preparar o ambiente do servidor. Conecte-se ao VPS via SSH e atualize o sistema:

sudo apt update && sudo apt upgrade -y

Instale o Node.js usando o NodeSource repository para obter a versão mais recente:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

Verifique se a instalação foi bem-sucedida:

node --version
npm --version

Output esperado:

v18.17.0
9.6.7

Instale dependências essenciais para compilação de módulos nativos:

sudo apt install -y build-essential git curl

Crie um usuário específico para a aplicação Node.js por questões de segurança:

sudo adduser nodeapp
sudo usermod -aG sudo nodeapp

Configurando Nginx como proxy reverso

A configuração do Nginx é fundamental para servir a aplicação Node.js em produção. Instale o Nginx:

sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

Crie um arquivo de configuração para sua aplicação:

sudo nano /etc/nginx/sites-available/meuapp

Adicione a seguinte configuração, substituindo seudominio.com pelo seu domínio:

server {
    listen 80;
    server_name seudominio.com www.seudominio.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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;
    }
}

Ative a configuração e remova o site padrão:

sudo ln -s /etc/nginx/sites-available/meuapp /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx

Transferindo código fonte e configurando variáveis de ambiente

Para transferir sua aplicação Node.js do Heroku para VPS, primeiro exporte as configurações do Heroku. No seu ambiente local, execute:

heroku config -a nome-da-sua-app

Output esperado:

DATABASE_URL: postgres://user:pass@host:5432/dbname
NODE_ENV: production
PORT: 3000

Clone o repositório da aplicação no VPS:

su - nodeapp
git clone https://github.com/seuusuario/sua-aplicacao.git
cd sua-aplicacao

Crie o arquivo de variáveis de ambiente:

nano .env

Adicione as variáveis exportadas do Heroku:

NODE_ENV=production
PORT=3000
DATABASE_URL=postgres://user:pass@host:5432/dbname

Atenção: Nunca commite o arquivo .env no repositório Git. Adicione-o ao .gitignore.

Instale as dependências da aplicação:

npm install --production

Teste se a aplicação inicia corretamente:

npm start

Instalando e configurando PM2 para gerenciamento de processos

O PM2 é essencial para manter aplicações Node.js rodando em produção no VPS. Instale o PM2 globalmente:

sudo npm install -g pm2

Crie um arquivo de configuração do PM2:

nano ecosystem.config.js

Configure o PM2 para sua aplicação:

module.exports = {
  apps: [{
    name: 'meuapp',
    script: './app.js',
    instances: 'max',
    exec_mode: 'cluster',
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    error_file: './logs/err.log',
    out_file: './logs/out.log',
    log_file: './logs/combined.log',
    time: true
  }]
};

Crie o diretório de logs e inicie a aplicação:

mkdir logs
pm2 start ecosystem.config.js
pm2 save
pm2 startup

Execute o comando gerado pelo PM2 startup como root para configurar o auto-start:

sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u nodeapp --hp /home/nodeapp

Verifique se a aplicação está rodando:

pm2 status

Configurando SSL com Let's Encrypt

A configuração de SSL gratuito é crucial para aplicações em produção. Instale o Certbot:

sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot

Crie um link simbólico para o comando certbot:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Obtenha o certificado SSL para seu domínio:

sudo certbot --nginx -d seudominio.com -d www.seudominio.com

O Certbot irá modificar automaticamente a configuração do Nginx. Verifique se a configuração está correta:

sudo nginx -t
sudo systemctl reload nginx

Configure a renovação automática do certificado:

sudo crontab -e

Adicione a linha para renovação automática:

0 12 * * * /usr/bin/certbot renew --quiet

Alterando registros DNS para completar a migração

O último passo da migração Node.js do Heroku para VPS é alterar os registros DNS. Acesse o painel de controle do seu provedor de domínio e altere o registro A:

  • Tipo: A
  • Nome: @ (ou deixe em branco)
  • Valor: IP do seu VPS
  • TTL: 300 (5 minutos)

Altere também o registro CNAME para www:

  • Tipo: CNAME
  • Nome: www
  • Valor: seudominio.com
  • TTL: 300

Aguarde a propagação DNS (5 a 30 minutos) e teste o acesso ao seu domínio. Monitore os logs da aplicação durante a transição:

pm2 logs meuapp

Para verificar se o DNS propagou completamente:

dig seudominio.com
nslookup seudominio.com

Problemas comuns e como resolver

Aplicação não inicia após migração

Causa: Variáveis de ambiente não configuradas corretamente ou dependências faltando.
Solução: Verifique o arquivo .env, compare com as variáveis do Heroku usando heroku config e reinstale dependências com npm install.

Erro 502 Bad Gateway no navegador

Causa: Aplicação Node.js não está rodando na porta configurada no Nginx ou PM2 não iniciou corretamente.
Solução: Verifique se a aplicação está rodando com pm2 status e confirme se a porta no Nginx corresponde à porta da aplicação.

SSL não funciona após configuração

Causa: Certificado não foi gerado corretamente ou configuração do Nginx está incorreta.
Solução: Execute sudo certbot certificates para verificar certificados válidos e sudo nginx -t para validar a configuração.

Performance inferior ao Heroku

Causa: Aplicação rodando em modo single-thread ou recursos do VPS insuficientes.
Solução: Configure o PM2 em modo cluster com instances: 'max' no ecosystem.config.js e monitore recursos com htop.

Perguntas frequentes sobre migração Node.js do Heroku para VPS

É possível migrar Node.js do Heroku para VPS sem downtime?

Sim, é possível migrar sem downtime usando estratégia de DNS switching. Configure primeiro o VPS completamente, teste a aplicação, depois altere os registros DNS para apontar para o novo servidor. O processo leva de 5 a 30 minutos dependendo da propagação DNS.

Quais são os principais benefícios de migrar do Heroku para VPS?

Os principais benefícios incluem redução de custos (até 70% menos), controle total sobre o ambiente, sem limitações de dyno hours, possibilidade de usar qualquer versão do Node.js, acesso root completo e capacidade de instalar dependências específicas do sistema.

Como garantir que as variáveis de ambiente sejam migradas corretamente?

Exporte as variáveis do Heroku usando 'heroku config' e recrie-as no VPS através de arquivo .env ou configuração do PM2. Nunca exponha credenciais em código fonte e sempre use arquivos de configuração separados para produção.

O PM2 é obrigatório para rodar Node.js em produção no VPS?

Embora não seja obrigatório, o PM2 é altamente recomendado para produção. Ele oferece restart automático em caso de crash, clustering para usar múltiplos cores da CPU, logs centralizados e monitoramento de recursos. Sem ele, você precisaria configurar manualmente systemd ou supervisor.

Como configurar SSL gratuito após a migração para VPS?

Use Let's Encrypt com Certbot para SSL gratuito. Instale o Certbot, configure o Nginx como proxy reverso, execute 'certbot --nginx -d seudominio.com' e configure renovação automática via cron. O processo é totalmente automatizado e o certificado renova a cada 90 dias.

Conclusão

  • Configure o ambiente Ubuntu 22.04 com Node.js, Nginx e PM2 antes de alterar o DNS
  • Use PM2 em modo cluster para aproveitar todos os cores da CPU e garantir alta disponibilidade
  • Monitore logs e performance após a migração para identificar possíveis otimizações

Leia também

Precisa de ajuda com migração para VPS?

A AviraHost oferece VPS Ubuntu 22.04 otimizados para aplicações Node.js com suporte técnico especializado. Nossa equipe pode auxiliar na migração e configuração do ambiente de produção.

Conheça nossos planos de VPS

  • 0 Os usuários acharam isso útil
  • nodejs, heroku, migracao, ubuntu, nginx, pm2, ssl, avirahost
Esta resposta foi útil?

Artigos Relacionados

Instalando painel de gerenciamento de hospedagem VirtualMin.

O virtualmin é um painel de gerenciamento de hospedagem de sites gratuito, que é suportado por...

Como usar a ferramenta oficial de acesso remoto do Windows no PC e celular

1. Pelo menu Iniciar, acesse os “Acessórios do Windows” e abra o “Conexão de Área de Trabalho...

Como acessar o painel de gerenciamento dos meus Serviços.

Para acessar o painel de gerenciamento do seu serviço basta seguir o passo á passo abaixo.   1....

Compreendendo o Servidor VPS: O que é e Como Funciona!

Um servidor VPS (Virtual Private Server) é uma solução de hospedagem na qual um servidor físico é...

Como trocar a senha do usuário root do servidor VPS ou Dedicado.

Para trocar a senha do usuário root em um servidor VPS da AviraHost, você pode seguir os...