{"id":84966,"date":"2026-06-29T08:00:00","date_gmt":"2026-06-29T15:00:00","guid":{"rendered":"https:\/\/dhblog.dream.press\/blog\/?p=84966"},"modified":"2026-07-07T08:08:54","modified_gmt":"2026-07-07T15:08:54","slug":"como-executar-nodejs-em-um-vps-pt","status":"publish","type":"post","link":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/","title":{"rendered":"Como Executar Node.js em um VPS"},"content":{"rendered":"<div class=\"tldr-block\" style=\"display: none;\">\n\t<div class=\"svg\">\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 119.25 37.8\">\n\t<g>\n\t\t<g>\n\t\t\t<path fill=\"#ffffff\" d=\"M23.4,6.93h-8.1v24.57h-7.2V6.93H0V0h23.4v6.93Z\" \/>\n\t\t\t<path fill=\"#ffffff\" d=\"M45,24.57v6.93h-18.45V0h7.2v24.57h11.25Z\" \/>\n\t\t\t<path fill=\"#ffffff\"\n\t\t\t\td=\"M90.9,15.75c0,8.91-6.61,15.75-15.3,15.75h-12.6V0h12.6c8.68,0,15.3,6.84,15.3,15.75ZM83.97,15.75c0-5.4-3.42-8.82-8.37-8.82h-5.4v17.64h5.4c4.95,0,8.37-3.42,8.37-8.82Z\" \/>\n\t\t\t<path fill=\"#ffffff\"\n\t\t\t\td=\"M105.57,21.15h-3.42v10.35h-7.2V0h12.6c5.98,0,10.8,4.81,10.8,10.8,0,3.87-2.34,7.38-5.81,9.13l6.71,11.56h-7.74l-5.94-10.35ZM102.15,14.85h5.4c1.98,0,3.6-1.75,3.6-4.05s-1.62-4.05-3.6-4.05h-5.4v8.1Z\" \/>\n\t\t<\/g>\n\t\t<path\n\t\t\tfill=\"#0173ec\"\n\t\t\td=\"M53.97,37.8h-5.4l1.8-13.27h7.2l-3.6,13.27ZM49.02,12.55c0-2.34,1.93-4.27,4.27-4.27s4.27,1.94,4.27,4.27-1.93,4.27-4.27,4.27-4.27-1.94-4.27-4.27Z\"\n\t\t \/>\n\t<\/g>\n<\/svg>\n\t<\/div>\n\t<div class=\"tldr-wrap\">\n\t\t\n\n<p class=\"wp-block-paragraph\">Executar Node.js em um VPS significa instalar a vers\u00e3o LTS atual do Node.js (24.x &#8220;Krypton&#8221; em maio de 2026) em um servidor Linux que voc\u00ea controla, depois rodar seu aplicativo por tr\u00e1s de um gerenciador de processos e um proxy reverso com HTTPS. Voc\u00ea obt\u00e9m uma caixa sempre ativa que lida com conex\u00f5es de longa dura\u00e7\u00e3o, trabalhos em segundo plano e computa\u00e7\u00e3o pesada sem faturamento por fun\u00e7\u00e3o ou in\u00edcios lentos.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Configura\u00e7\u00e3o alvo:<\/strong> Ubuntu 24.04 LTS + Node 24 via NodeSource ou nvm + PM2 (ou systemd) + NGINX + Let&#8217;s Encrypt.<\/p>\n\n\n\n\n\t<\/div>\n<\/div>\n\n<p class=\"wp-block-paragraph\">Heroku encerrou seu plano gratuito e aumentou o limite m\u00ednimo. Vercel cobra por assento e encerra tarefas de longa dura\u00e7\u00e3o. Render e Railway ajustam o pre\u00e7o conforme o tr\u00e1fego.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Abrir a fatura mais recente do seu provedor de hospedagem. O aplicativo Node, um banco de dados Postgres e um cache Redis. Tr\u00eas itens, tr\u00eas conjuntos de avisos de excesso, uma conversa fren\u00e9tica no Slack no dia em que o marketing finalmente lan\u00e7a uma campanha.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Essa fatura \u00e9 o motivo pelo qual muitas equipes est\u00e3o reconsiderando o VPS. O <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/what-is-node-js\/\">Node.js<\/a> por si s\u00f3 n\u00e3o <em>se importa<\/em> onde ele \u00e9 executado. A \u00fanica coisa que o serverless protegia voc\u00ea era de descobrir o que acontece ap\u00f3s o \u2018npm start\u2019.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Vamos analisar um padr\u00e3o de configura\u00e7\u00e3o de produ\u00e7\u00e3o para <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/nodejs\/\">Node.js<\/a> em um servidor Linux que voc\u00ea controla. Se voc\u00ea pode acessar um servidor via SSH e ler um arquivo de configura\u00e7\u00e3o, ao final, voc\u00ea ter\u00e1 uma pilha de produ\u00e7\u00e3o que pode executar por anos com algumas horas de manuten\u00e7\u00e3o por m\u00eas.<\/p>\n\n\n<h2 id=\"h-when-does-running-node-js-on-a-vps-make-sense\" class=\"wp-block-heading\">Quando Faz Sentido Executar Node.js em um VPS?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Um VPS \u00e9 o lar certo para Node.js quando voc\u00ea tem um processo de longa dura\u00e7\u00e3o, uma pilha que deseja consolidar em uma \u00fanica fatura, ou uma fatura de tempo de execu\u00e7\u00e3o gerenciado que superou a conveni\u00eancia.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>De modo geral, existem tr\u00eas boas op\u00e7\u00f5es:<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Processos de Longa Dura\u00e7\u00e3o:<\/strong> Servidores WebSocket, trabalhadores de fila, agendadores de Cron Job, servidores MCP. Tudo que precisa <em>permanecer<\/em> em execu\u00e7\u00e3o e escuta. A maioria das plataformas serverless ainda otimiza em torno da execu\u00e7\u00e3o de curta dura\u00e7\u00e3o e ciclos de vida de solicita\u00e7\u00e3o. Um processo Node em um VPS simplesmente fica l\u00e1.<\/li>\n\n\n\n<li><strong>Consolida\u00e7\u00e3o de Custos:<\/strong> Aplicativo Node, <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/postgresql\/\">Postgres<\/a>, Redis, al\u00e9m de um pequeno trabalhador de constru\u00e7\u00e3o todos vivem na mesma caixa de 4 GB. Uma linha de fatura, n\u00e3o quatro.<\/li>\n\n\n\n<li><strong>Aplicativos que Superaram PaaS:<\/strong> Tempos de expira\u00e7\u00e3o de fun\u00e7\u00e3o no seu trabalho de gera\u00e7\u00e3o de PDF longo. Pre\u00e7os por assento em um time que finalmente contratou um quarto engenheiro. Uma fatura do <a target=\"_blank\" href=\"https:\/\/www.heroku.com\/pricing\/\">Heroku<\/a> ultrapassando $60 por m\u00eas por uma carga de trabalho que funciona bem em um VPS de $15.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\"><strong>E existem tr\u00eas <em>erros<\/em>:<\/strong><\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sites Est\u00e1ticos e Conte\u00fado SSG:<\/strong> Um export Next.js, um build Astro, um blog Gatsby. O n\u00edvel gratuito da Vercel \u00e9 a ferramenta certa. Um VPS \u00e9 exagero.<\/li>\n\n\n\n<li><strong>Cargas de Trabalho Esparsas e Orientadas por Eventos:<\/strong> AWS Lambda ou Cloudflare Workers custam centavos para um webhook que roda dez vezes ao dia. Um VPS custa o mesmo, esteja o aplicativo ocupado ou em repouso.<\/li>\n\n\n\n<li><strong>Aplica\u00e7\u00f5es em Tempo Real Escaladas Horizontalmente:<\/strong> Se o seu servidor WebSocket precisa distribuir para 100.000 conex\u00f5es simult\u00e2neas, um VPS n\u00e3o \u00e9 a resposta. Isso \u00e9 um cluster Kubernetes, uma infraestrutura de borda distribu\u00edda ou uma plataforma de tempo real gerenciada.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">JavaScript \u00e9 a linguagem mais usada na <a target=\"_blank\" href=\"https:\/\/survey.stackoverflow.co\/2025\/technology\">Pesquisa de Desenvolvedores do Stack Overflow de 2025<\/a>, e o Node.js continua sendo uma das formas padr\u00e3o dos desenvolvedores executarem JavaScript no backend. Isso representa muitas pessoas executando Node em algum lugar. Este artigo \u00e9 para a parcela delas que ficaria mais feliz executando-o em um servidor que controlam.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Eu vi equipes transferirem quatro servi\u00e7os Node de produ\u00e7\u00e3o do Heroku para um \u00fanico VPS de 4 GB, com a mesma garantia de uptime, um ter\u00e7o da conta e WebSockets de longa dura\u00e7\u00e3o que finalmente funcionaram sem necessidade de solu\u00e7\u00f5es alternativas.<\/p>\n\n\n<p class=\"wp-block-paragraph\">A migra\u00e7\u00e3o \u00e9 principalmente uma tarde de \u2018apt install,\u2019 um \u2018pm2 start,\u2019 e uma mudan\u00e7a de DNS.<\/p>\n\n\n<h2 id=\"h-what-vps-specs-does-node-js-actually-need\" class=\"wp-block-heading\">Quais Especifica\u00e7\u00f5es de VPS o Node.js Realmente Precisa?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">O Node.js por si s\u00f3 \u00e9 leve. Um servidor Express m\u00ednimo pode ficar bem abaixo de 100 MB de mem\u00f3ria residente. O conselho de que &#8220;Node s\u00f3 precisa de 1 GB&#8221; que voc\u00ea ainda encontra em blogs antigos \u00e9 tecnicamente verdadeiro e praticamente in\u00fatil. At\u00e9 o momento em que voc\u00ea adiciona Postgres, Redis, registros e um processo de implanta\u00e7\u00e3o que n\u00e3o \u00e9 mantido apenas com esperan\u00e7a, voc\u00ea j\u00e1 est\u00e1 ultrapassando isso em um dia tranquilo.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Dimensionamento realista para cargas de trabalho comuns:<\/p>\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Carga de Trabalho<\/strong><\/th><th><strong>RAM<\/strong><\/th><th><strong>vCPU<\/strong><\/th><th><strong>Armazenamento<\/strong><\/th><th><strong>Notas<\/strong><\/th><\/tr><\/thead><tbody><tr><td>API Express pequena, sem DB na caixa<\/td><td>2 GB<\/td><td>1-2<\/td><td>40 GB NVMe<\/td><td>Piso realista para uma aplica\u00e7\u00e3o em produ\u00e7\u00e3o<\/td><\/tr><tr><td>API Node + Postgres + Redis em uma caixa<\/td><td>4 GB<\/td><td>2<\/td><td>80 GB NVMe<\/td><td>O ponto ideal; a maioria das equipes chega aqui<\/td><\/tr><tr><td>Aplicativo pesado em SSR (Next.js, Nuxt, Remix)<\/td><td>8 GB<\/td><td>4<\/td><td>80 GB NVMe<\/td><td>A renderiza\u00e7\u00e3o SSR e as pipelines de constru\u00e7\u00e3o s\u00e3o onde vai a mem\u00f3ria<\/td><\/tr><tr><td>Aplicativo em tempo real\/WebSocket, escala moderada<\/td><td>8 GB<\/td><td>4<\/td><td>80 GB NVMe<\/td><td>Cada conex\u00e3o persistente consome mem\u00f3ria<\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">Alguns detalhes espec\u00edficos para definir antes de provisionar:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>O Armazenamento NVMe \u00e9 Mais Importante que o Tamanho Bruto do Disco:<\/strong> Aplicativos modernos Node tocam milhares de pequenos arquivos durante instala\u00e7\u00f5es, builds e inicializa\u00e7\u00f5es. Discos lentos pioram notavelmente as instala\u00e7\u00f5es de depend\u00eancias, inicializa\u00e7\u00f5es frias e reconstru\u00e7\u00f5es de SSR.<\/li>\n\n\n\n<li><strong>Virtualiza\u00e7\u00e3o KVM, n\u00e3o OpenVZ:<\/strong> Planos antigos baseados em OpenVZ compartilham um kernel com o host, o que pode significar vers\u00f5es de kernel desatualizadas e dores de cabe\u00e7a ocasionais de compatibilidade com runtimes mais novos. A maioria dos provedores de VPS respeit\u00e1veis s\u00e3o agora exclusivamente KVM, mas ainda vale a pena verificar.<\/li>\n\n\n\n<li><strong>Espa\u00e7o de Swap:<\/strong> Ative de 1-2 GB de swap em m\u00e1quinas menores. O heap V8 do Node pode variar intensamente durante a coleta de lixo. Sem swap, um pico transit\u00f3rio mata o processo. J\u00e1 vi uma m\u00e1quina de 4 GB dar OOM durante um deploy rotineiro porque algu\u00e9m desativou o swap pensando que era um anacronismo da era Docker.<\/li>\n\n\n\n<li><strong>Largura de Banda:<\/strong> A maioria dos planos modernos de VPS inclui de 1-4 TB de largura de banda mensal, suficiente para quase tudo, exceto hospedagem de v\u00eddeo. <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">Planos VPS Auto-Gerenciados<\/a> incluem largura de banda ilimitada, uma preocupa\u00e7\u00e3o a menos na planilha de planejamento de capacidade.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Um VPS de 4 GB custa cerca de $15 por m\u00eas na taxa de mercado. Isso \u00e9 50 centavos por dia, ou aproximadamente um caf\u00e9 do aeroporto a cada duas semanas. Comparado a pagar separadamente por runtimes de aplicativos, Postgres gerenciado e Redis em uma PaaS, a economia muda surpreendentemente r\u00e1pido.<\/p>\n\n\n<h2 id=\"h-which-node-js-version-should-you-install\" class=\"wp-block-heading\">Qual Vers\u00e3o do Node.js Voc\u00ea Deve Instalar?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Instale o <strong>Node.js 24 (codinome Krypton)<\/strong>. \u00c9 a vers\u00e3o LTS ativa atual, promovida em outubro de 2025 e suportada at\u00e9 abril de 2028 de acordo com o <a target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/about\/previous-releases\">cronograma de lan\u00e7amento oficial do Node.js<\/a>.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Muitos tutoriais ainda direcionam as pessoas para o Node 22. Esses guias n\u00e3o foram atualizados. Se voc\u00ea est\u00e1 iniciando uma nova implanta\u00e7\u00e3o hoje, fixe sua imagem CI e seu VPS para o Node 24.x.<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>Vers\u00e3o<\/strong><\/th><th><strong>Codinome<\/strong><\/th><th><strong>Status<\/strong><\/th><th><strong>EOL<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Node.js 26.x<\/td><td>(nenhum)<\/td><td>Atual<\/td><td>Avan\u00e7a para LTS no final de 2026<\/td><\/tr><tr><td>Node.js 24.x<\/td><td>Krypton<\/td><td>LTS Ativo<\/td><td>Abril de 2028<\/td><\/tr><tr><td>Node.js 22.x<\/td><td>Jod<\/td><td>LTS de Manuten\u00e7\u00e3o<\/td><td>Abril de 2027<\/td><\/tr><tr><td>Node.js 20.x<\/td><td>Iron<\/td><td>Fim de vida<\/td><td>Atingido EOL em 30 de abril de 2026. N\u00e3o use.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Algumas regras b\u00e1sicas:<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>N\u00e3o execute vers\u00f5es Current (n\u00e3o-LTS) em produ\u00e7\u00e3o: <\/strong>Node 26 existe para testar compatibilidade futura e novas funcionalidades de tempo de execu\u00e7\u00e3o, e n\u00e3o para o aplicativo do qual sua receita depende.<\/li>\n\n\n\n<li><strong>Node 22 \u00e9 a op\u00e7\u00e3o de fallback se uma depend\u00eancia cr\u00edtica ainda n\u00e3o for compat\u00edvel com Node 24: <\/strong>A maioria do ecossistema se estabilizou dentro de alguns meses ap\u00f3s a promo\u00e7\u00e3o LTS.<\/li>\n\n\n\n<li><strong>Fixe sua vers\u00e3o do Node em todos os lugares: <\/strong>Sua imagem CI, Dockerfile, .nvmrc e VPS de produ\u00e7\u00e3o devem estar todos alinhados. &#8220;Funciona no meu computador&#8221; torna-se caro rapidamente assim que m\u00f3dulos nativos entram na conversa.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">\ud83e\udd14<a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/bun-vs-node\/\"><strong>Considerando o Bun<\/strong><\/a><strong>?<\/strong> \u00c9 mais r\u00e1pido em algumas cargas de trabalho e genuinamente impressionante, mas o ecossistema ainda \u00e9 menor e o hist\u00f3rico de produ\u00e7\u00e3o \u00e9 mais curto do que o do Node. Para a maioria das equipes, o convencional vence.<\/p>\n\n\n<p class=\"wp-block-paragraph\">NodeSource, que mant\u00e9m os reposit\u00f3rios apt e yum de onde muitas equipes de produ\u00e7\u00e3o instalam o Node, destaca melhorias na linha 24.x, come\u00e7ando com um motor V8 mais novo. O Node 24 tamb\u00e9m agora conta com ferramentas maduras como node &#8211;watch integrado e um executor de testes nativo est\u00e1vel (node: test), ambos estabilizados nas linhas 20\u201322 e que continuam a partir daqui. Nada disso \u00e9 chamativo. Apenas remove um pouco do atrito operacional todos os meses.<\/p>\n\n\n<h2 id=\"h-how-do-you-install-node-js-on-a-vps\" class=\"wp-block-heading\">Como Instalar o Node.js em um VPS?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea tem dois caminhos de instala\u00e7\u00e3o realistas. Escolha com base em se o servidor executa um aplicativo Node ou v\u00e1rios.<\/p>\n\n\n<h3 id=\"h-nodesource-for-a-single-app-server\" class=\"wp-block-heading\">NodeSource Para Um Servidor De Aplica\u00e7\u00e3o \u00danica<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Este \u00e9 o caminho de produ\u00e7\u00e3o mais simples. Um script de configura\u00e7\u00e3o e um <strong><code>apt install<\/code><\/strong> fornecem a voc\u00ea a linha atual do Node 24 LTS como um pacote do sistema, e futuras atualiza\u00e7\u00f5es de seguran\u00e7a s\u00e3o realizadas atrav\u00e9s de upgrades normais de pacotes.<\/p>\n\n\n<p class=\"wp-block-paragraph\">No Ubuntu ou Debian:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>curl -fsSL https:\/\/deb.nodesource.com\/setup_24.x | bash -\napt install -y nodejs<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verifique a instala\u00e7\u00e3o:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>node -v\nnpm -v<\/code><\/pre>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"2560\" height=\"1344\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-scaled.webp\" alt=\"Comandos de terminal exibindo a vers\u00e3o 24.14.0 do Node.js e a vers\u00e3o 11.9.0 do npm instalados na DreamHost.\" class=\"wp-image-83813 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-scaled.webp 2560w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-300x158.webp 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1024x538.webp 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-768x403.webp 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1536x806.webp 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-2048x1075.webp 2048w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-600x315.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1200x630.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-730x383.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1460x767.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-784x412.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1568x823.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-877x460.webp 877w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/01_nodesource_for_a_single_app_server-1754x921.webp 1754w\" data-sizes=\"(max-width: 2560px) 100vw, 2560px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 2560px; --smush-placeholder-aspect-ratio: 2560\/1344;\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea deve ver uma vers\u00e3o Node 24.x.<\/p>\n\n\n<p class=\"wp-block-paragraph\">As instru\u00e7\u00f5es para distribui\u00e7\u00f5es da fam\u00edlia RHEL (yum\/dnf) est\u00e3o dispon\u00edveis no reposit\u00f3rio oficial de distribui\u00e7\u00f5es NodeSource.<\/p>\n\n\n<h3 id=\"h-nvm-for-per-project-version-switching\" class=\"wp-block-heading\">nvm para Altern\u00e2ncia de Vers\u00e3o Por Projeto<\/h3>\n\n\n<p class=\"wp-block-paragraph\"><a target=\"_blank\" href=\"https:\/\/github.com\/nvm-sh\/nvm\">nvm<\/a> (Gerenciador de Vers\u00e3o do Node) instala o Node em seu diret\u00f3rio pessoal e permite que diferentes projetos executem diferentes vers\u00f5es do Node. \u00datil se voc\u00ea hospedar m\u00faltiplos aplicativos no mesmo servidor ou n\u00e3o tiver acesso sudo.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Execute isso como seu usu\u00e1rio de aplicativo, n\u00e3o como Root:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.40.5\/install.sh | bash<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Recarregue seu shell e, em seguida, instale o Node 24:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>nvm install 24\nnvm use 24\nnvm alias default 24<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49Regra Importante: <\/strong>N\u00e3o use <code>sudo \u2018npm install -g\u2019<\/code> para depend\u00eancias de aplicativos.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Instala\u00e7\u00f5es globais s\u00e3o geralmente reservadas para ferramentas CLI de n\u00edvel de m\u00e1quina como pm2, typescript ou nodemon. As depend\u00eancias do seu aplicativo devem estar em package.json e devem ser instaladas a partir do diret\u00f3rio do projeto com npm ci.<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><strong>NodeSource<\/strong><\/th><th><strong>nvm<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Uma vers\u00e3o do Node por servidor<\/td><td>V\u00e1rias vers\u00f5es do Node por servidor<\/td><\/tr><tr><td>Instalado em todo o sistema, executa como qualquer usu\u00e1rio<\/td><td>Instalado por usu\u00e1rio<\/td><\/tr><tr><td>Atualiza\u00e7\u00f5es autom\u00e1ticas com <code>\u2018apt\u2019<\/code><\/td><td>Gerenciado manualmente<\/td><\/tr><tr><td>Requer <code>sudo<\/code><\/td><td>N\u00e3o requer <code>sudo<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea est\u00e1 em d\u00favida, comece com o NodeSource. A maioria dos servidores de produ\u00e7\u00e3o de prop\u00f3sito \u00fanico n\u00e3o precisa de troca de vers\u00e3o do Node por projeto.<\/p>\n\n\n<p class=\"wp-block-paragraph\">\ud83d\udc49<strong>Usu\u00e1rios do VPS Auto-Gerenciado da DreamHost: <\/strong>O aplicativo Node dispon\u00edvel no provisionamento vem com o Node 22 LTS \u2014 ainda com suporte at\u00e9 abril de 2027. Para executar o Node 24, use os passos do NodeSource ou nvm mencionados acima ap\u00f3s o provisionamento.<\/p>\n\n\n<h2 id=\"h-should-you-use-pm2-or-systemd-to-keep-your-app-running\" class=\"wp-block-heading\">Deveria Usar PM2 ou systemd Para Manter Sua Aplica\u00e7\u00e3o Funcionando?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Qualquer um funciona. A resposta honesta \u00e9 qual sua equipe se sente mais confort\u00e1vel utilizando. PM2 \u00e9 o caminho amig\u00e1vel para desenvolvedores. systemd \u00e9 o caminho nativo Unix. Ambos resolvem os mesmos tr\u00eas problemas: reiniciar em caso de falha, iniciar no boot e desligamento suave ao receber um \u2018SIGTERM\u2019.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea est\u00e1 come\u00e7ando do zero, aqui est\u00e1 como escolher:<\/p>\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th><strong>PM2<\/strong><\/th><th><strong>systemd<\/strong><\/th><\/tr><\/thead><tbody><tr><td>Tempo de Configura\u00e7\u00e3o<\/td><td>3 minutos<\/td><td>10 minutos<\/td><\/tr><tr><td>Modo Cluster (multi-core)<\/td><td>Integrado<\/td><td>N\u00e3o integrado (iniciar N unidades)<\/td><\/tr><tr><td>Rota\u00e7\u00e3o de Logs<\/td><td>M\u00f3dulo: <code>\u2018pm2-logrotate\u2019<\/code><\/td><td>Integrado via <code>\u2018journalctl\u2019<\/code><\/td><\/tr><tr><td>Recarga Sem Interrup\u00e7\u00e3o<\/td><td><code>\u2018pm2 reload\u2019<\/code><\/td><td>Normalmente manipulado manualmente com rein\u00edcios escalonados ou m\u00faltiplas unidades<\/td><\/tr><tr><td>Sobrecarga de Mem\u00f3ria (daemon)<\/td><td>Sobrecarga pequena de daemon<\/td><td>Nenhuma (sem daemon extra)<\/td><\/tr><tr><td>Melhor para<\/td><td>Caixa \u00fanica, loja JS, itera\u00e7\u00e3o r\u00e1pida<\/td><td>Caixas multi-aplicativos, conforto da equipe de opera\u00e7\u00f5es<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p class=\"wp-block-paragraph\">O <a target=\"_blank\" href=\"https:\/\/pm2.keymetrics.io\/docs\/usage\/quick-start\/\">in\u00edcio r\u00e1pido do PM2<\/a> \u00e9 exatamente isso, r\u00e1pido:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>npm install -g pm2\npm2 start app.js --name api\npm2 startup    # imprime o comando de inicializa\u00e7\u00e3o do systemd a ser executado\npm2 save       # salva a lista de processos atual<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">O PM2 ent\u00e3o se torna a \u00fanica coisa com a qual voc\u00ea conversa: &#8216;<code>pm2 logs<\/code>,&#8217; &#8216;<code>pm2 reload api<\/code>,&#8217; &#8216;<code>pm2 monit<\/code>.&#8217;<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49Tamb\u00e9m Vale Saber:<\/strong> \u2018<code>pm2 startup<\/code>\u2019 escreve uma unidade systemd, ent\u00e3o a configura\u00e7\u00e3o do PM2 <em>realmente<\/em> utiliza systemd por debaixo dos panos.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Uma unidade systemd m\u00ednima para gerenciamento direto do Node em \u2018\/etc\/systemd\/system\/api.service\u2019:<\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Unit]<br>Descri\u00e7\u00e3o=Minha API Node<br>Depois=network.target<\/code><\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Servi\u00e7o]<br>Type=simple<br>User=app<br>WorkingDirectory=\/var\/www\/api<br>ExecStart=\/usr\/bin\/node server.js<br>Restart=on-failure<br>RestartSec=5<br>Environment=NODE_ENV=production<br>StandardOutput=journal<br>StandardError=journal<\/code><\/p>\n\n\n<p class=\"wp-block-paragraph\"><code>[Install]<br>WantedBy=multi-user.target<\/code><br>Ent\u00e3o \u2018<code>systemctl enable --now api<\/code>.\u2019 Os registros est\u00e3o em \u2018<code>journalctl -u api -f<\/code>.\u2019<\/p>\n\n\n<p class=\"wp-block-paragraph\">Se voc\u00ea j\u00e1 est\u00e1 executando PM2 e est\u00e1 funcionando, n\u00e3o migre para systemd s\u00f3 porque algu\u00e9m no Hacker News disse isso. A mem\u00f3ria do daemon PM2 n\u00e3o \u00e9 o motivo pelo qual voc\u00ea migraria dele.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Migre quando tiver um motivo real, como rodar meia d\u00fazia de processos Node onde cada megabyte conta, ou integrar em um ambiente operacional onde todo outro servi\u00e7o \u00e9 uma unidade systemd, e o PM2 se destaca como o discrepante.<\/p>\n\n\n<h2 id=\"h-how-do-you-put-nginx-or-caddy-in-front-of-your-node-app\" class=\"wp-block-heading\">Como Colocar NGINX (ou Caddy) na Frente do Seu Aplicativo Node?<\/h2>\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1600\" height=\"1099\" data-src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node.webp\" alt=\"NGINX atua como proxy reverso entre as solicita\u00e7\u00f5es dos clientes e o backend do aplicativo Node.js.\" class=\"wp-image-83812 lazyload\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node.webp 1600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-300x206.webp 300w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1024x703.webp 1024w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-768x528.webp 768w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1536x1055.webp 1536w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-600x412.webp 600w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1200x824.webp 1200w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-730x501.webp 730w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1460x1003.webp 1460w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-784x539.webp 784w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-1568x1077.webp 1568w, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/02_how_nginx_sits_in_front_of_node-877x602.webp 877w\" data-sizes=\"(max-width: 1600px) 100vw, 1600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1600px; --smush-placeholder-aspect-ratio: 1600\/1099;\" \/><\/figure>\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea deseja um proxy reverso na frente do Node por cinco raz\u00f5es: t\u00e9rmino de HTTPS, compress\u00e3o gzip\/brotli, entrega de ativos est\u00e1ticos, execu\u00e7\u00e3o de m\u00faltiplos aplicativos na mesma m\u00e1quina e limita\u00e7\u00e3o de taxa mais f\u00e1cil. Node <em>pode<\/em> fazer todas essas coisas. NGINX e Caddy fazem-nas melhor, e eles n\u00e3o derrubam seu loop de eventos quando algo se comporta mal.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Escolha NGINX se algu\u00e9m da sua equipe j\u00e1 o conhece. Escolha Caddy se voc\u00ea quiser <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/ultimate-guide-ssl-tls\/\">HTTPS<\/a> em tr\u00eas linhas de configura\u00e7\u00e3o e estiver satisfeito com um ecossistema de configura\u00e7\u00e3o avan\u00e7ada menor.<\/p>\n\n\n<h3 id=\"h-minimal-nginx-config\" class=\"wp-block-heading\">Configura\u00e7\u00e3o M\u00ednima do NGINX<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Coloque este bloco de proxy em <strong>\/etc\/nginx\/sites-available\/api<\/strong>, crie um link simb\u00f3lico para <strong><code>sites-enabled<\/code><\/strong>, depois <strong><code>nginx -t &amp;&amp; systemctl reload nginx<\/code><\/strong>.<\/p>\n\n\n<pre class=\"wp-block-code\"><code>server {\n    listen 80;\n    server_name api.example.com;\n\n    location \/ {\n        proxy_pass http:\/\/127.0.0.1:3000;\n        proxy_http_version 1.1;\n        proxy_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection 'upgrade';\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_cache_bypass $http_upgrade;\n    }\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Os cabe\u00e7alhos \u2018Upgrade\u2019 e \u2018Connection\u2019 s\u00e3o as linhas de suporte do WebSocket. <a target=\"_blank\" href=\"https:\/\/nginx.org\/en\/docs\/http\/websocket.html\">Os pr\u00f3prios documentos do NGINX mencionam<\/a> que o Upgrade \u00e9 um cabe\u00e7alho de salto a salto, por isso precisa de tratamento expl\u00edcito ao fazer proxy do tr\u00e1fego WebSocket.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Deixe-os ativados se sua aplica\u00e7\u00e3o usa WebSockets agora ou poder\u00e1 usar mais tarde. Socket.IO, assinaturas GraphQL sobre WebSockets e um n\u00famero surpreendente de funcionalidades em tempo real &#8220;regulares&#8221; dependem desse handshake de atualiza\u00e7\u00e3o.<\/p>\n\n\n<p class=\"wp-block-paragraph\">O erro de produ\u00e7\u00e3o mais comum que vejo em configura\u00e7\u00f5es Node \u00e9 um servidor Socket.IO por tr\u00e1s de <a target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216431827-Nginx-overview\">NGINX<\/a> sem essas duas linhas. As conex\u00f5es falham intermitentemente, os desenvolvedores culpam o Socket.IO, e o problema real \u00e9 geralmente a configura\u00e7\u00e3o do proxy.<\/p>\n\n\n<h3 id=\"h-minimal-caddyfile\" class=\"wp-block-heading\">Caddyfile M\u00ednimo<\/h3>\n\n\n<p class=\"wp-block-paragraph\">A vers\u00e3o <a target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/quick-starts\/reverse-proxy\">Caddy reverse proxy quickstart<\/a> da mesma coisa:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>api.example.com {\n    reverse_proxy 127.0.0.1:3000\n}<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Esse \u00e9 o arquivo inteiro. Desde que o dom\u00ednio aponte para o servidor e as portas 80\/443 estejam acess\u00edveis, o Caddy provisiona e renova o HTTPS automaticamente. A documenta\u00e7\u00e3o do Caddy diz que o <a target=\"_blank\" href=\"https:\/\/caddyserver.com\/docs\/automatic-https\">provisionamento autom\u00e1tico de HTTPS<\/a> emite certificados TLS para os sites e os mant\u00e9m renovados; sua introdu\u00e7\u00e3o r\u00e1pida ao proxy reverso tamb\u00e9m indica que o HTTPS \u00e9 autom\u00e1tico quando o Caddy conhece o nome do host.<\/p>\n\n\n<h3 id=\"h-bind-node-to-localhost-not-0-0-0-0\" class=\"wp-block-heading\">Vincular N\u00f3 a localhost, N\u00e3o a 0.0.0.0<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Independentemente do proxy que escolheres, configura a tua aplica\u00e7\u00e3o Node para ouvir em 127.0.0.1:3000, n\u00e3o em 0.0.0.0:3000. A \u00fanica coisa que deve enfrentar a internet p\u00fablica num servidor Node \u00e9 o proxy. Emparelha isso com o UFW, o frontend comum de firewall do Ubuntu, para negar tudo exceto as portas 22, 80 e 443.<\/p>\n\n\n<pre class=\"wp-block-code\"><code>ufw default deny incoming\nufw allow 22\/tcp\nufw allow 80\/tcp\nufw allow 443\/tcp\nufw enable<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Se o SSH estiver em uma porta personalizada, permita essa porta antes de ativar o UFW.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Ligue-se ao localhost desde o primeiro dia. A reuni\u00e3o onde algu\u00e9m admite &#8220;o aplicativo estava exposto porque o Node se ligou a 0.0.0.0&#8221; n\u00e3o \u00e9 uma reuni\u00e3o que voc\u00ea deseja ter.<\/p>\n\n\n<h2 id=\"h-how-do-you-set-up-https-for-your-node-js-app\" class=\"wp-block-heading\">Como Configurar HTTPS Para Seu Aplicativo Node.js?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Use <a target=\"_blank\" href=\"https:\/\/help.dreamhost.com\/hc\/en-us\/articles\/216539558-Let-s-Encrypt-SSL-certificate-overview\">Let&#8217;s Encrypt<\/a>. \u00c9 gratuito, automatizado e confiado por todos os navegadores. Existem dois caminhos, dependendo de qual proxy voc\u00ea escolheu.<\/p>\n\n\n<h3 id=\"h-nginx-certbot\" class=\"wp-block-heading\">NGINX + Certbot<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Aponte um registro A para o IP do seu VPS e aguarde a propaga\u00e7\u00e3o do DNS.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Instale o Certbot:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>apt install certbot python3-certbot-nginx<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Execute:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>certbot --nginx -d api.example.com<\/code><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Certbot atualiza sua configura\u00e7\u00e3o do NGINX e recarrega o servidor automaticamente.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Nas vers\u00f5es modernas do Ubuntu, um temporizador systemd instalado pelo pacote Certbot cuida da renova\u00e7\u00e3o automaticamente.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Abra <strong>https:\/\/api.example.com<\/strong> e confirme o \u00edcone de cadeado.<\/p>\n\n\n<p class=\"wp-block-paragraph\">A <a target=\"_blank\" href=\"https:\/\/certbot.eff.org\/instructions?ws=nginx&amp;os=snap\">documenta\u00e7\u00e3o oficial do Certbot<\/a> tamb\u00e9m aborda o caminho de instala\u00e7\u00e3o baseado em snap se o pacote da sua distribui\u00e7\u00e3o estiver desatualizado.<\/p>\n\n\n<h3 id=\"h-caddy\" class=\"wp-block-heading\">Caddy<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Adicione o dom\u00ednio ao Caddyfile (o exemplo acima j\u00e1 o possui), depois reinicie o Caddy. Contanto que o dom\u00ednio seja resolvido corretamente e as portas 80\/443 estejam acess\u00edveis, o certificado \u00e9 provisionado automaticamente na primeira inicializa\u00e7\u00e3o. N\u00e3o h\u00e1 Certbot.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>N\u00e3o termine o TLS no pr\u00f3prio Node para produ\u00e7\u00e3o.<\/strong><\/p>\n\n\n<p class=\"wp-block-paragraph\">O m\u00f3dulo https do Node funciona perfeitamente, mas proxies reversos como NGINX e Caddy s\u00e3o projetados especificamente para a termina\u00e7\u00e3o TLS. Eles oferecem OCSP stapling, cifras modernas por padr\u00e3o, renova\u00e7\u00e3o autom\u00e1tica de certificados, suporte a HTTP\/2 e \u2014 no caso do Caddy \u2014 suporte a HTTP\/3 logo ap\u00f3s a instala\u00e7\u00e3o.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Conseguirias gerir tudo isso diretamente em Node? Com certeza. Apenas estarias a reconstruir infraestrutura que o teu proxy j\u00e1 resolve extremamente bem.<\/p>\n\n\n<h2 id=\"h-what-does-a-production-ready-node-js-setup-actually-look-like\" class=\"wp-block-heading\">Como \u00c9 Realmente Um Setup De Node.js Pronto Para Produ\u00e7\u00e3o?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Oito coisas mordem pessoas em produ\u00e7\u00e3o. A maioria delas n\u00e3o est\u00e1 nos tutoriais de instala\u00e7\u00e3o porque n\u00e3o se encaixam no arco &#8220;instalar Node, executar aplicativo&#8221;. Elas s\u00e3o a diferen\u00e7a entre um aplicativo que sobrevive ao segundo m\u00eas e um que n\u00e3o sobrevive.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>NODE_ENV=production:<\/strong> O passo mais esquecido. Em muitos frameworks e bibliotecas Node, ele desativa comportamentos exclusivos de desenvolvimento e habilita otimiza\u00e7\u00f5es de produ\u00e7\u00e3o. O Express, por exemplo, armazena em cache os templates de visualiza\u00e7\u00e3o compilados e retorna erros mais concisos em produ\u00e7\u00e3o \u2014 seus pr\u00f3prios documentos citam at\u00e9 uma melhoria de desempenho de 3x. Defina a \u2018env var\u2019 em todos os lugares.<\/li>\n\n\n\n<li><strong>Encerramento Gracioso:<\/strong> Quando o seu VPS reinicia ou o PM2 envia \u2018SIGTERM\u2019, seu aplicativo tem alguns segundos para drenar requisi\u00e7\u00f5es em andamento, fechar conex\u00f5es de banco de dados e sair de forma limpa. Configure um manipulador \u2018process.on(&#8216;SIGTERM&#8217;, &#8230;)\u2019. O tempo de desligamento padr\u00e3o do PM2 depende da configura\u00e7\u00e3o e do ambiente, ent\u00e3o n\u00e3o assuma que sempre ter\u00e1 muito tempo para limpar.<\/li>\n\n\n\n<li><strong>Rota\u00e7\u00e3o de Logs:<\/strong> O m\u00f3dulo \u2018pm2-logrotate\u2019 do PM2 cuida disso para o PM2. O jornal systemd cuida disso para unidades systemd diretas. Sem rota\u00e7\u00e3o, seus logs consomem o disco em um quarto do tempo que voc\u00ea esperaria.<\/li>\n\n\n\n<li><strong>Disciplina .env:<\/strong> Nunca cometa segredos, nunca os registre. Use \u2018dotenv\u2019 para desenvolvimento local. Na produ\u00e7\u00e3o, defina vari\u00e1veis de ambiente via \u2018Environment=\u2019 da sua unidade systemd ou seu arquivo de ecossistema PM2. O dia em que voc\u00ea \u2018console.log(process.env)\u2019 por acidente \u00e9 o dia em que voc\u00ea rotaciona todas as credenciais.<\/li>\n\n\n\n<li><strong>Um proxy reverso na frente do Node:<\/strong> Associe o Node ao localhost; deixe o NGINX ou o Caddy enfrentar a internet p\u00fablica.<\/li>\n\n\n\n<li><strong>Um firewall:<\/strong> UFW nega tudo exceto 22, 80, 443. Mudar o SSH para longe da porta 22 n\u00e3o impede um atacante determinado, mas reduz drasticamente o ru\u00eddo de for\u00e7a bruta automatizado e os registros de autentica\u00e7\u00e3o in\u00fateis.<\/li>\n\n\n\n<li><strong>Monitoramento:<\/strong> Um ponto de verifica\u00e7\u00e3o de sa\u00fade que sua ferramenta de monitoramento verifica a cada minuto. O PM2 possui fundamentos b\u00e1sicos. Para algo mais s\u00e9rio, use Prometheus e Grafana, ou utilize um servi\u00e7o de uptime hospedado como <a target=\"_blank\" href=\"https:\/\/betterstack.com\/\">Better Stack<\/a> ou <a target=\"_blank\" href=\"https:\/\/uptimerobot.com\/\">UptimeRobot<\/a>. Voc\u00ea quer saber que seu aplicativo est\u00e1 fora do ar <em>antes<\/em> de um cliente informar.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">Estimativa de manuten\u00e7\u00e3o para o stack acima: uma a tr\u00eas horas por m\u00eas.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Atualiza\u00e7\u00f5es do Apt, atualiza\u00e7\u00f5es ocasionais de depend\u00eancias e uma an\u00e1lise trimestral do volume de registros. Essa \u00e9 a troca pelo custo e pelos ganhos de controle.<\/p>\n\n\n<h2 id=\"h-when-is-a-vps-the-wrong-choice-for-node-js\" class=\"wp-block-heading\">Quando Um VPS \u00c9 A Escolha Errada Para Node.js?<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Um VPS \u00e9 a escolha errada quando sua carga de trabalho \u00e9 constru\u00edda para algo diferente. Seja honesto sobre qual lado voc\u00ea est\u00e1 antes de provisionar.<\/p>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sites est\u00e1ticos e conte\u00fado SSG:<\/strong> Exporta\u00e7\u00e3o Next.js, Astro, Gatsby e um blog Eleventy. Plataformas como Vercel, Netlify ou Cloudflare Pages oferecem hospedagem est\u00e1tica globalmente cacheada, implanta\u00e7\u00f5es baseadas em Git e reconstru\u00e7\u00f5es autom\u00e1ticas prontas para uso. Um VPS geralmente \u00e9 uma infraestrutura desnecess\u00e1ria para conte\u00fado puramente est\u00e1tico.<\/li>\n\n\n\n<li><strong>Cargas de trabalho espor\u00e1dicas e orientadas por eventos:<\/strong> Cloudflare Workers e AWS Lambda s\u00e3o econ\u00f4micos para webhooks que funcionam dez vezes por dia.&nbsp;<\/li>\n\n\n\n<li><strong>Aplicativos em tempo real que precisam de mais de 100.000 conex\u00f5es simult\u00e2neas:<\/strong> Um VPS n\u00e3o escala horizontalmente. Voc\u00ea precisar\u00e1 de orquestra\u00e7\u00e3o (Kubernetes, ECS, Nomad) ou de uma plataforma em tempo real gerenciada como Ably ou Pusher.<\/li>\n\n\n\n<li><strong>Cargas de trabalho regulamentadas com muitas exig\u00eancias de conformidade:<\/strong> HIPAA, PCI-DSS N\u00edvel 1, FedRAMP. Um PaaS gerenciado com certifica\u00e7\u00f5es de conformidade integradas economiza o trabalho de auditoria. A auto-hospedagem de conformidade em um VPS \u00e9 um projeto de v\u00e1rios trimestres que voc\u00ea provavelmente n\u00e3o quer.<\/li>\n\n\n\n<li><strong>Nenhum conforto com <\/strong><a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/blog\/linux-distros\/\"><strong>Linux<\/strong><\/a><strong> \u2014 e sem vontade de desenvolv\u00ea-lo:<\/strong> Plataformas como Render, Railway e DigitalOcean App Platform ficam em algum lugar entre a hospedagem VPS bruta e o PaaS totalmente gerenciado. Ferramentas como <a href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/dokploy\/\">Dokploy<\/a> adicionam fluxos de trabalho de implanta\u00e7\u00e3o ao estilo Heroku em cima de sua pr\u00f3pria infraestrutura VPS. Voc\u00ea ainda obt\u00e9m muitos dos benef\u00edcios de custo e controle sem precisar se aprofundar em iptables, internos do systemd ou depura\u00e7\u00e3o de proxy reverso \u00e0 1 da manh\u00e3.<\/li>\n\n\n<\/ul>\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o h\u00e1 vergonha em nenhuma dessas respostas. A melhor decis\u00e3o t\u00e9cnica \u00e9 aquela que corresponde \u00e0 sua carga de trabalho.<\/p>\n\n\n<h2 id=\"h-picking-your-node-stack-and-moving-in\" class=\"wp-block-heading\">Escolhendo Seu Node Stack e Mudando-se<\/h2>\n\n\n<p class=\"wp-block-paragraph\">Abre essa fatura de hospedagem mais uma vez.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Voc\u00ea est\u00e1 prestes a substituir uma quantidade surpreendente por uma \u00fanica fatura de VPS.<\/p>\n\n\n<p class=\"wp-block-paragraph\"><strong>\ud83d\udc49A pilha:<\/strong> Ubuntu 24.04 LTS, Node 24, PM2 (ou systemd), NGINX (ou Caddy), Let&#8217;s Encrypt via Certbot (ou integrado ao Caddy).<\/p>\n\n\n<p class=\"wp-block-paragraph\">Ative o menor plano de VPS que atenda \u00e0 RAM que voc\u00ea dimensionou, instale o Node, execute seu aplicativo em &#8216;127.0.0.1&#8217;, direcione o NGINX para ele e altere seu DNS.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Se o aplicativo sobrevive a uma implanta\u00e7\u00e3o, um rein\u00edcio e uma execu\u00e7\u00e3o noturna sem problemas, voc\u00ea j\u00e1 est\u00e1 quase l\u00e1.<\/p>\n\n\n<p class=\"wp-block-paragraph\">O resto \u00e9 manuten\u00e7\u00e3o. Uma ou duas horas por m\u00eas, a janela ocasional de &#8216;apt upgrade&#8217;, um aumento de depend\u00eancia trimestral. Esse \u00e9 o acordo que voc\u00ea fez quando trocou uma fatura por assento por uma fixa, e a Self-Managed VPS Stack 4 da DreamHost \u00e9 onde voc\u00ea pode come\u00e7ar.<\/p>\n\n\n\n<div class=\"article-cta-shared article-cta-small article-cta--product\">\n\t<div class=\"tr-img-wrap-outer jsLoading\"><img decoding=\"async\" class=\"js-img-lazy \" src=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/themes\/blog2018\/assets\/img\/lazy-loading-transparent.webp\" data-srcset=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/cta_image_a-877x522.webp 1x, https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/cta_image_a.webp 2x\"  \/><\/div>\n\n\t<a href='https:\/\/www.dreamhost.com\/hosting\/vps\/' class='link-top' target='_blank' rel='noopener noreferrer'>\n\t\t<span>VPS<\/span>\n\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 384 512\" width=\"15\"><path d=\"M342.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L274.7 256 105.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z\"\/><\/svg>\n\t<\/a>\n\n\t<div class=\"content-btm\">\n\t\t<h2 class=\"h2--md\">\n\t\t\tOwn Your Entire Stack. Apps, AI, Databases, and More.\n\t\t<\/h2>\n\t\t<p class=\"p--md\">\n\t\t\tKeep every credential and conversation on a server you control, with NVMe speed and unmetered bandwidth built in.\n\t\t<\/p>\n\n\t\t        <a\n            href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\"\n                        class=\"btn btn--white-outline btn--sm btn--round\"\n                                    target=\"_blank\"\n            rel=\"noopener noreferrer\"\n            >\n                            Explore VPS Hosting Plans                    <\/a>\n\n\t<\/div>\n<\/div>\n\n<h2 id=\"h-frequently-asked-questions-about-running-node-js-on-a-vps\" class=\"wp-block-heading\">Perguntas Frequentes Sobre a Execu\u00e7\u00e3o do Node.js em um VPS<\/h2>\n\n\n<h3 id=\"h-can-i-run-node-js-on-any-vps\" class=\"wp-block-heading\">Posso executar Node.js em qualquer VPS?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">A maioria dos planos modernos de VPS roda Node.js sem problemas. Planos VPS baseados em KVM com uma distribui\u00e7\u00e3o Linux de 64 bits s\u00e3o a op\u00e7\u00e3o padr\u00e3o mais segura para as vers\u00f5es atuais do Node.js.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Planos mais antigos baseados em OpenVZ \u00e0s vezes t\u00eam restri\u00e7\u00f5es de kernel que prejudicam as vers\u00f5es mais recentes do Node. Se voc\u00ea estiver escolhendo entre provedores, pergunte se eles s\u00e3o baseados em KVM.<\/p>\n\n\n<h3 id=\"h-how-much-ram-does-node-js-need-on-a-vps\" class=\"wp-block-heading\">Quanta RAM o Node.js precisa em um VPS?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Um servidor Express m\u00ednimo fica bem abaixo de 100 MB em ociosidade, mas um aplicativo de produ\u00e7\u00e3o realista com middleware, registro em log e um pool de conex\u00f5es geralmente opera na faixa de 150-300 MB.<\/p>\n\n\n<p class=\"wp-block-paragraph\">O m\u00ednimo realista para um aplicativo em produ\u00e7\u00e3o \u00e9 de 2 GB; o ponto ideal para uma pilha Node + Postgres + Redis \u00e9 de 4 GB. <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">DreamHost&#8217;s Self-Managed VPS<\/a> Stack 4 (4 GB) lida com a maioria das cargas de trabalho de produ\u00e7\u00e3o Node. Avance para a Stack 8 (8 GB) para aplicativos com SSR pesado ou em tempo real.<\/p>\n\n\n<h3 id=\"h-what-s-the-current-node-js-lts-version\" class=\"wp-block-heading\">Qual \u00e9 a vers\u00e3o LTS atual do Node.js?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">A vers\u00e3o LTS ativa atual \u00e9 o Node.js 24.x (&#8220;Krypton&#8221;), promovido em 28 de outubro de 2025 e suportado at\u00e9 abril de 2028. O Node.js 22.x (&#8220;Jod&#8221;) est\u00e1 em Manuten\u00e7\u00e3o LTS at\u00e9 abril de 2027, se uma depend\u00eancia exigir compatibilidade retroativa. <a target=\"_blank\" href=\"https:\/\/nodejs.org\/en\/blog\/release\/v26.0.0\">Node.js 26 foi lan\u00e7ado em 5 de maio de 2026<\/a>, como Atual e ser\u00e1 promovido a LTS em outubro de 2026.<\/p>\n\n\n<p class=\"wp-block-paragraph\">A maioria das equipes de produ\u00e7\u00e3o adere \u00e0s vers\u00f5es LTS, a menos que precisem especificamente de recursos de runtime mais recentes.<\/p>\n\n\n<h3 id=\"h-do-i-need-pm2-if-i-have-systemd\" class=\"wp-block-heading\">Preciso do PM2 se eu tenho systemd?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o, voc\u00ea n\u00e3o precisa de ambos. PM2 e systemd resolvem o mesmo problema: manter seu aplicativo Node funcionando atrav\u00e9s de falhas e reinicializa\u00e7\u00f5es. Muitas equipes focadas em Node escolhem o PM2 pelo clustering integrado, gerenciamento de logs e ferramentas de recarregamento.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Equipes que j\u00e1 utilizam unidades systemd para tudo escolhem systemd.<\/p>\n\n\n<h3 id=\"h-why-put-nginx-in-front-of-node-js\" class=\"wp-block-heading\">Por que colocar o NGINX na frente do Node.js?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">NGINX (ou Caddy) \u00e0 frente do Node.js centraliza a termina\u00e7\u00e3o TLS, compress\u00e3o, entrega de ativos est\u00e1ticos e limita\u00e7\u00e3o de taxa em software projetado especificamente para proxy e servi\u00e7o web.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Tamb\u00e9m permite que voc\u00ea execute m\u00faltiplos aplicativos Node no mesmo VPS sem conflitos de porta. Na produ\u00e7\u00e3o, o Node escuta no localhost; o NGINX fica voltado para a internet p\u00fablica.<\/p>\n\n\n<h3 id=\"h-is-node-js-on-a-vps-cheaper-than-heroku-or-vercel\" class=\"wp-block-heading\">O Node.js em um VPS \u00e9 mais barato que o Heroku ou Vercel?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Sim, frequentemente. Um VPS de 4 GB geralmente est\u00e1 na faixa de $15-$25 por m\u00eas a taxas de mercado e pode consolidar os custos de runtime de aplicativos, banco de dados e cache que s\u00e3o cobrados separadamente em muitas plataformas PaaS.<\/p>\n\n\n<p class=\"wp-block-paragraph\">O pre\u00e7o do Vercel Pro \u00e9 baseado em assentos, e as plataformas sem servidor ainda imp\u00f5em limites de dura\u00e7\u00e3o de execu\u00e7\u00e3o dependendo do tempo de execu\u00e7\u00e3o e do plano.<\/p>\n\n\n<p class=\"wp-block-paragraph\">O acordo \u00e9 que voc\u00ea mesmo gerencie as opera\u00e7\u00f5es, cerca de uma a tr\u00eas horas por m\u00eas.<\/p>\n\n\n<h3 id=\"h-can-i-run-multiple-node-apps-on-one-vps\" class=\"wp-block-heading\">Posso executar m\u00faltiplos aplicativos Node em um \u00fanico VPS?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">Sim, e \u00e9 a raz\u00e3o mais comum pela qual as equipes migram de PaaS para um VPS. Execute cada aplicativo em sua pr\u00f3pria porta interna (3000, 3001, 3002) e direcione o tr\u00e1fego com blocos de servidor NGINX por nome de host. PM2 gerencia todos eles como processos separados; systemd usa um arquivo de unidade por aplicativo.<\/p>\n\n\n<p class=\"wp-block-paragraph\">Um VPS de 4 GB geralmente pode lidar com v\u00e1rios servi\u00e7os leves de Node juntamente com uma pequena carga de trabalho de banco de dados.<\/p>\n\n\n<h3 id=\"h-can-i-run-node-js-on-dreamhost-shared-hosting\" class=\"wp-block-heading\">Posso Executar Node.js No Shared Hosting Da DreamHost?<\/h3>\n\n\n<p class=\"wp-block-paragraph\">N\u00e3o. Node.js necessita de processos persistentes, instala\u00e7\u00f5es de pacotes em n\u00edvel de Root e vincula\u00e7\u00e3o direta de porta, nenhum dos quais \u00e9 fornecido pelo Shared Hosting. Os <a target=\"_blank\" href=\"https:\/\/www.dreamhost.com\/hosting\/vps\/\">planos VPS Auto-Gerenciados da DreamHost<\/a> (Stack 4 e superiores) s\u00e3o adequados para cargas de trabalho Node com acesso total ao root, armazenamento NVMe e largura de banda ilimitada.<\/p>\n\n\n\n<p><script type=\"application\/ld+json\"><br \/>\n{<br \/>\n  \"@context\": \"https:\/\/schema.org\",<br \/>\n  \"@graph\": [<br \/>\n    {<br \/>\n      \"@type\": \"FAQPage\",<br \/>\n      \"mainEntity\": [<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Posso executar Node.js em qualquer VPS?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"A maioria dos planos modernos de VPS executa Node.js sem problemas. O requisito \u00e9 KVM (ou virtualiza\u00e7\u00e3o completa semelhante) e um kernel Linux de 64 bits. Planos mais antigos baseados em OpenVZ \u00e0s vezes t\u00eam restri\u00e7\u00f5es de kernel que quebram vers\u00f5es mais novas do Node. Se voc\u00ea est\u00e1 escolhendo entre provedores, pergunte se eles s\u00e3o baseados em KVM.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Quanta RAM o Node.js precisa em um VPS?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Um servidor Express m\u00ednimo funciona bem com menos de 100 MB, mas um aplicativo de produ\u00e7\u00e3o realista com middleware, registro em log e um pool de conex\u00f5es geralmente opera na faixa de 150-300 MB. O m\u00ednimo realista para um aplicativo de produ\u00e7\u00e3o \u00e9 de 2 GB; o ponto ideal para uma pilha Node + Postgres + Redis \u00e9 de 4 GB. O Stack 4 Auto-Gerenciado da DreamHost (4 GB) lida com a maioria das cargas de trabalho de produ\u00e7\u00e3o do Node. Passe para o Stack 8 (8 GB) para aplicativos com renderiza\u00e7\u00e3o no servidor ou em tempo real.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Qual \u00e9 a vers\u00e3o LTS atual do Node.js?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"O LTS Ativo atual \u00e9 o Node.js 24.x ('Krypton'), promovido em 28 de outubro de 2025 e com suporte at\u00e9 abril de 2028. O Node.js 22.x ('Jod') est\u00e1 em LTS de Manuten\u00e7\u00e3o at\u00e9 abril de 2027 se uma depend\u00eancia cr\u00edtica exigir compatibilidade com vers\u00f5es anteriores. O Node.js 26 foi lan\u00e7ado em 5 de maio de 2026 como Atual e promovido a LTS em outubro de 2026. N\u00e3o execute lan\u00e7amentos Atuais (n\u00e3o LTS) em produ\u00e7\u00e3o.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Preciso do PM2 se tenho systemd?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"N\u00e3o, voc\u00ea n\u00e3o precisa de ambos. PM2 e systemd resolvem o mesmo problema, mantendo seu aplicativo Node em execu\u00e7\u00e3o atrav\u00e9s de falhas e reinicializa\u00e7\u00f5es. A maioria das equipes escolhe PM2 pelos conveni\u00eancias de modo de cluster, rota\u00e7\u00e3o de log e recarga sem tempo de inatividade. Equipes que j\u00e1 gerenciam unidades systemd para tudo mais escolhem systemd. Use o que sua equipe estiver mais confort\u00e1vel.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Por que colocar NGINX na frente do Node.js?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"NGINX (ou Caddy) na frente do Node.js lida com a termina\u00e7\u00e3o TLS, compress\u00e3o gzip e brotli, servindo ativos est\u00e1ticos e limita\u00e7\u00e3o de taxa mais eficientemente do que o pr\u00f3prio Node. Ele tamb\u00e9m permite executar v\u00e1rios aplicativos Node no mesmo VPS sem conflitos de porta. Em produ\u00e7\u00e3o, o Node escuta em localhost; NGINX enfrenta a internet p\u00fablica. Este \u00e9 o padr\u00e3o de produ\u00e7\u00e3o, n\u00e3o uma otimiza\u00e7\u00e3o opcional.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"O Node.js em um VPS \u00e9 mais barato que Heroku ou Vercel?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Sim, frequentemente. Um VPS de 4 GB custa na faixa de $15-$25 por m\u00eas e substitui um dyno Heroku Basic mais Heroku Postgres mais Heroku Redis que frequentemente custa entre $25-$60 por m\u00eas. Vercel Pro come\u00e7a em $20 por assento com timeouts de fun\u00e7\u00e3o. A troca \u00e9 que voc\u00ea lida com as opera\u00e7\u00f5es por si pr\u00f3prio, cerca de uma a tr\u00eas horas por m\u00eas de manuten\u00e7\u00e3o.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Posso executar v\u00e1rios aplicativos Node em um VPS?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"Sim, e \u00e9 o motivo mais comum pelo qual as equipes migram de PaaS para um VPS. Execute cada aplicativo em sua pr\u00f3pria porta interna (3000, 3001, 3002) e direcione o tr\u00e1fego com blocos de servidor NGINX com base no nome do host. PM2 gerencia todos eles como processos separados; systemd usaria um arquivo de unidade por aplicativo. Um VPS de 4 GB executa confortavelmente tr\u00eas ou quatro pequenos servi\u00e7os Node mais um banco de dados.\"<br \/>\n          }<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"Question\",<br \/>\n          \"name\": \"Posso executar Node.js no Shared Hosting da DreamHost?\",<br \/>\n          \"acceptedAnswer\": {<br \/>\n            \"@type\": \"Answer\",<br \/>\n            \"text\": \"N\u00e3o. Node.js precisa de processos persistentes, instala\u00e7\u00f5es de pacotes no n\u00edvel de root e vincula\u00e7\u00e3o direta de porta, nenhum dos quais o Shared Hosting fornece. Os planos VPS Auto-Gerenciados da DreamHost (Stack 4 e acima) se encaixam em cargas de trabalho do Node com acesso completo ao root, armazenamento NVMe e largura de banda ilimitada.\"<br \/>\n          }<br \/>\n        }<br \/>\n      ]<br \/>\n    },<br \/>\n    {<br \/>\n      \"@type\": \"HowTo\",<br \/>\n      \"name\": \"Como Executar Node.js em um VPS\",<br \/>\n      \"step\": [<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Instale o Node.js 24 LTS\",<br \/>\n          \"text\": \"No Ubuntu ou Debian, execute: curl -fsSL https:\/\/deb.nodesource.com\/setup_24.x | bash -, depois apt instale -y nodejs. Verifique com node -v. Use nvm em vez disso se precisar trocar a vers\u00e3o por projeto.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Configure um gerenciador de processos\",<br \/>\n          \"text\": \"Instale PM2 com npm install -g pm2, ent\u00e3o pm2 start app.js --name api, pm2 startup, pm2 save. Ou escreva uma unidade systemd em \/etc\/systemd\/system\/api.service e execute systemctl enable --now api.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Instale NGINX e configure um proxy reverso\",<br \/>\n          \"text\": \"Instale NGINX com apt install nginx. Crie um bloco de servidor em \/etc\/nginx\/sites-available\/api com proxy_pass http:\/\/127.0.0.1:3000 e os cabe\u00e7alhos de atualiza\u00e7\u00e3o WebSocket. Crie um link simb\u00f3lico para sites-enabled e recarregue.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Vincule Node a localhost e habilite um firewall\",<br \/>\n          \"text\": \"Configure seu aplicativo Node para escutar em 127.0.0.1:3000 em vez de 0.0.0.0:3000. Habilite UFW com padr\u00e3o de negar entrada, ent\u00e3o permita as portas 22, 80 e 443.\"<br \/>\n        },<br \/>\n        {<br \/>\n          \"@type\": \"HowToStep\",<br \/>\n          \"name\": \"Configure HTTPS com Let's Encrypt\",<br \/>\n          \"text\": \"Aponte um registro A para o IP do seu VPS. Instale Certbot com apt install certbot python3-certbot-nginx, ent\u00e3o execute certbot --nginx -d seudominio.com. Certbot instala um timer systemd que renova o certificado automaticamente.\"<br \/>\n        }<br \/>\n      ]<br \/>\n    }<br \/>\n  ]<br \/>\n}<br \/>\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Run Node.js Num VPS Com Controle Total: Sem In\u00edcios A Frio, Sem Timeouts De Fun\u00e7\u00e3o, Sem Contas Por Assento. LTS Atual, PM2 Vs. Systemd, NGINX Com Let\u2019s Encrypt.<\/p>\n","protected":false},"author":2,"featured_media":83811,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_yoast_wpseo_opengraph-title":"Como Executar Node.js em um VPS - DreamHost","_yoast_wpseo_opengraph-description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","_yoast_wpseo_twitter-title":"Como Executar Node.js em um VPS - DreamHost","_yoast_wpseo_twitter-description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","toc_headlines":"[[\"h-when-does-running-node-js-on-a-vps-make-sense\",\"Quando Faz Sentido Executar Node.js em um VPS?\"],[\"h-what-vps-specs-does-node-js-actually-need\",\"Quais Especifica\u00e7\u00f5es de VPS o Node.js Realmente Precisa?\"],[\"h-which-node-js-version-should-you-install\",\"Qual Vers\u00e3o do Node.js Voc\u00ea Deve Instalar?\"],[\"h-how-do-you-install-node-js-on-a-vps\",\"Como Instalar o Node.js em um VPS?\"],[\"h-should-you-use-pm2-or-systemd-to-keep-your-app-running\",\"Deveria Usar PM2 ou systemd Para Manter Sua Aplica\u00e7\u00e3o Funcionando?\"],[\"h-how-do-you-put-nginx-or-caddy-in-front-of-your-node-app\",\"Como Colocar NGINX (ou Caddy) na Frente do Seu Aplicativo Node?\"],[\"h-how-do-you-set-up-https-for-your-node-js-app\",\"Como Configurar HTTPS Para Seu Aplicativo Node.js?\"],[\"h-what-does-a-production-ready-node-js-setup-actually-look-like\",\"Como \u00c9 Realmente Um Setup De Node.js Pronto Para Produ\u00e7\u00e3o?\"],[\"h-when-is-a-vps-the-wrong-choice-for-node-js\",\"Quando Um VPS \u00c9 A Escolha Errada Para Node.js?\"],[\"h-picking-your-node-stack-and-moving-in\",\"Escolhendo Seu Node Stack e Mudando-se\"],[\"h-frequently-asked-questions-about-running-node-js-on-a-vps\",\"Perguntas Frequentes Sobre a Execu\u00e7\u00e3o do Node.js em um VPS\"]]","hide_toc":false,"show_updated_at":"0","footnotes":""},"categories":[14403,14393,14391],"tags":[],"class_list":["post-84966","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hosting-vps-pt","category-hosting-web-pt","category-tutoriais-pt"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.3 (Yoast SEO v27.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Como Executar Node.js em um VPS - DreamHost<\/title>\n<meta name=\"description\" content=\"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let&#039;s Encrypt.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Executar Node.js em um VPS - DreamHost\" \/>\n<meta property=\"og:description\" content=\"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let&#039;s Encrypt.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/\" \/>\n<meta property=\"og:site_name\" content=\"DreamHost Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/DreamHost\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-29T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-07T15:08:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1920\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Dallas Kashuba\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Como Executar Node.js em um VPS - DreamHost\" \/>\n<meta name=\"twitter:description\" content=\"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let&#039;s Encrypt.\" \/>\n<meta name=\"twitter:creator\" content=\"@http:\/\/twitter.com\/dallas\" \/>\n<meta name=\"twitter:site\" content=\"@dreamhost\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Dallas Kashuba\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Executar Node.js em um VPS - DreamHost","description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/","og_locale":"en_US","og_type":"article","og_title":"Como Executar Node.js em um VPS - DreamHost","og_description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","og_url":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/","og_site_name":"DreamHost Blog","article_publisher":"https:\/\/www.facebook.com\/DreamHost\/","article_published_time":"2026-06-29T15:00:00+00:00","article_modified_time":"2026-07-07T15:08:54+00:00","og_image":[{"width":2560,"height":1920,"url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","type":"image\/webp"}],"author":"Dallas Kashuba","twitter_card":"summary_large_image","twitter_title":"Como Executar Node.js em um VPS - DreamHost","twitter_description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","twitter_creator":"@http:\/\/twitter.com\/dallas","twitter_site":"@dreamhost","twitter_misc":{"Written by":"Dallas Kashuba","Est. reading time":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#article","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/"},"author":{"name":"Dallas Kashuba","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/f6a12ad459538e8e418cf31b8b603814"},"headline":"Como Executar Node.js em um VPS","datePublished":"2026-06-29T15:00:00+00:00","dateModified":"2026-07-07T15:08:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/"},"wordCount":4520,"publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","articleSection":["Hosting VPS","Hosting Web","Tutoriais"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/","url":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/","name":"Como Executar Node.js em um VPS - DreamHost","isPartOf":{"@id":"https:\/\/www.dreamhost.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#primaryimage"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","datePublished":"2026-06-29T15:00:00+00:00","dateModified":"2026-07-07T15:08:54+00:00","description":"Execute Node.js em um VPS com controle total: sem in\u00edcios a frio, sem tempos limite de fun\u00e7\u00e3o, sem cobran\u00e7as por assento. LTS atual, PM2 vs. systemd, NGINX com Let's Encrypt.","breadcrumb":{"@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#primaryimage","url":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","contentUrl":"https:\/\/www.dreamhost.com\/blog\/wp-content\/uploads\/2026\/06\/1460_x_1095_blog_hero_bun_vs_node_js-scaled.webp","width":2560,"height":1920,"caption":"How To Run Node.js on a VPS"},{"@type":"BreadcrumbList","@id":"https:\/\/www.dreamhost.com\/blog\/pt\/como-executar-nodejs-em-um-vps-pt\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.dreamhost.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Como Executar Node.js em um VPS"}]},{"@type":"WebSite","@id":"https:\/\/www.dreamhost.com\/blog\/#website","url":"https:\/\/www.dreamhost.com\/blog\/","name":"DreamHost Blog","description":"","publisher":{"@id":"https:\/\/www.dreamhost.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dreamhost.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.dreamhost.com\/blog\/#organization","name":"DreamHost","url":"https:\/\/www.dreamhost.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","contentUrl":"https:\/\/dhblog.dream.press\/blog\/wp-content\/uploads\/2019\/01\/dh_logo-blue-2.png","width":1200,"height":168,"caption":"DreamHost"},"image":{"@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/DreamHost\/","https:\/\/x.com\/dreamhost","https:\/\/www.instagram.com\/dreamhost\/","https:\/\/www.linkedin.com\/company\/dreamhost\/","https:\/\/www.youtube.com\/user\/dreamhostusa"]},{"@type":"Person","@id":"https:\/\/www.dreamhost.com\/blog\/#\/schema\/person\/f6a12ad459538e8e418cf31b8b603814","name":"Dallas Kashuba","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/05ab6fb1606be97d16c74efb0fba01b3c11e91501dc5f9661bdfbb5c5b0cd113?s=96&d=mm&r=g","caption":"Dallas Kashuba"},"description":"Dallas Kashuba co-founded DreamHost while attending Harvey Mudd College and has spent nearly three decades building infrastructure at scale. Today he serves as an advisor, board member, and investor for various tech startups, with a consistent focus on user privacy, open source, and data portability. When he's not thinking about the Open Web, he's probably making music. Follow Dallas on X.","sameAs":["http:\/\/www.idallas.com\/","https:\/\/x.com\/http:\/\/twitter.com\/dallas"],"url":"https:\/\/www.dreamhost.com\/blog\/author\/dallas\/"}]}},"lang":"pt","translations":{"pt":84966,"it":85083,"en":83809,"es":84969,"uk":84978,"pl":84985,"ru":84999,"fr":85022,"nl":85024,"de":85053},"pll_sync_post":{},"_links":{"self":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/84966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"version-history":[{"count":3,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/84966\/revisions"}],"predecessor-version":[{"id":85285,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/posts\/84966\/revisions\/85285"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media\/83811"}],"wp:attachment":[{"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/media?parent=84966"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/categories?post=84966"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dreamhost.com\/blog\/wp-json\/wp\/v2\/tags?post=84966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}