{
  "schemaVersion": "1.0",
  "id": 144,
  "path": "/artigos/hospedar-nextjs-vps",
  "url": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps",
  "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps.md",
  "jsonUrl": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps.json",
  "title": "Como hospedar Next.js em VPS com PM2, Nginx e HTTPS",
  "seoTitle": "Como hospedar Next.js em VPS (PM2 e Nginx) | RoxyCloud",
  "description": "Hospede Next.js na sua VPS: next start ou standalone, PM2 com reinício no boot, Nginx com streaming, domínio, SSL grátis e deploy sem derrubar o site.",
  "category": "servidor-vps-cloud",
  "categoryLabel": "Servidor VPS (Cloud)",
  "categoryUrl": "https://ajuda.roxycloud.com.br/categorias/servidor-vps-cloud",
  "datePublished": "2026-09-07",
  "dateModified": "2026-09-07",
  "readingMinutes": 8,
  "wordCount": 1630,
  "h1": "Como hospedar Next.js em VPS com PM2, Nginx e HTTPS",
  "excerpt": "Hospede Next.js na sua VPS: next start ou standalone, PM2 com reinício no boot, Nginx com streaming, domínio, SSL grátis e deploy sem derrubar o site.",
  "author": "Equipe RoxyCloud",
  "language": "pt-BR",
  "toc": [
    {
      "id": "next-start-standalone-ou-export-qual-usar",
      "label": "next start, standalone ou export: qual usar",
      "level": 2
    },
    {
      "id": "preparar-a-vps-node-js-lts-e-pm2",
      "label": "Preparar a VPS: Node.js LTS e PM2",
      "level": 2
    },
    {
      "id": "build-e-variaveis-de-ambiente",
      "label": "Build e variáveis de ambiente",
      "level": 2
    },
    {
      "id": "modo-standalone",
      "label": "Modo standalone",
      "level": 3
    },
    {
      "id": "rodar-com-pm2-e-reiniciar-no-boot",
      "label": "Rodar com PM2 e reiniciar no boot",
      "level": 2
    },
    {
      "id": "nginx-dominio-e-https",
      "label": "Nginx, domínio e HTTPS",
      "level": 2
    },
    {
      "id": "atualizar-sem-derrubar-o-site",
      "label": "Atualizar sem derrubar o site",
      "level": 2
    },
    {
      "id": "erros-comuns-e-como-resolver",
      "label": "Erros comuns e como resolver",
      "level": 2
    },
    {
      "id": "qual-vps-usar-para-next-js-na-roxycloud",
      "label": "Qual VPS usar para Next.js na RoxyCloud",
      "level": 2
    },
    {
      "id": "perguntas-frequentes",
      "label": "Perguntas frequentes",
      "level": 2
    }
  ],
  "faqs": [
    {
      "question": "Next.js funciona completo em uma VPS?",
      "answer": "Sim. Com next start, renderização no servidor, ISR, Server Actions e otimização de imagem funcionam sem configuração extra. O que muda é que cache, escala e atualização ficam sob sua responsabilidade."
    },
    {
      "question": "Qual versão do Node.js usar com Next.js 16?",
      "answer": "O mínimo é o Node.js 20.9, mas a linha 20 já saiu de suporte. Use a LTS ativa, que em outubro de 2026 é o Node.js 24, a mesma no seu computador e na VPS."
    },
    {
      "question": "Preciso de Nginx se o Next.js já é um servidor?",
      "answer": "É o recomendado. O Nginx cuida do HTTPS, de conexões lentas e do limite de tamanho de requisição, deixando o Next.js livre para renderizar páginas."
    },
    {
      "question": "Quanto de RAM o build do Next.js precisa?",
      "answer": "Projetos médios costumam passar de 1 GB de pico e podem falhar em VPS de 2 GB sem swap. Com 4 GB o build fica confortável; outra saída é fazer o build no CI e enviar só a pasta standalone."
    },
    {
      "question": "Devo usar next start ou output standalone?",
      "answer": "next start é mais simples quando o build acontece na VPS. O standalone gera uma pasta enxuta, ideal para build no CI ou em Docker. Os dois entregam os mesmos recursos."
    }
  ],
  "howToSteps": [],
  "relatedGuides": [
    {
      "title": "RDP não conecta na VPS Windows? Use o console VNC do painel",
      "url": "https://ajuda.roxycloud.com.br/artigos/console-vnc-vps-windows-rdp-nao-conecta",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/console-vnc-vps-windows-rdp-nao-conecta.md"
    },
    {
      "title": "Disco cheio no Linux: como ver o que ocupa espaço na VPS",
      "url": "https://ajuda.roxycloud.com.br/artigos/disco-cheio-linux-ver-espaco-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/disco-cheio-linux-ver-espaco-vps.md"
    },
    {
      "title": "Como monitorar uma VPS 24 horas: alertas, uptime e métricas",
      "url": "https://ajuda.roxycloud.com.br/artigos/monitorar-vps-24-horas",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/monitorar-vps-24-horas.md"
    },
    {
      "title": "Como monitorar a VPS com htop e Netdata",
      "url": "https://ajuda.roxycloud.com.br/artigos/htop-e-netdata-monitorar-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/htop-e-netdata-monitorar-vps.md"
    },
    {
      "title": "Como instalar o Portainer na VPS para gerenciar o Docker",
      "url": "https://ajuda.roxycloud.com.br/artigos/como-instalar-portainer-vps",
      "markdownUrl": "https://ajuda.roxycloud.com.br/artigos/como-instalar-portainer-vps.md"
    }
  ],
  "relatedProducts": [
    "https://roxycloud.com.br/vps-ryzen-7",
    "https://roxycloud.com.br/vps-ryzen-9",
    "https://roxycloud.com.br/vps-xeon"
  ],
  "content": {
    "format": "markdown",
    "body": "**Resposta rápida:** para hospedar Next.js em uma VPS, instale o **Node.js LTS**, rode `npm ci` e `npm run build`, suba a aplicação com **PM2** escutando só em `127.0.0.1:3000` e coloque o **Nginx** na frente com HTTPS do Let's Encrypt. Ative o reinício no boot com `pm2 startup` e desligue o buffering do Nginx para o streaming funcionar.\n\n## next start, standalone ou export: qual usar\n\n| Modo | Como roda | Vantagem | Quando usar |\n| --- | --- | --- | --- |\n| `next start` | Processo Node com o `node_modules` completo | Mais simples, igual ao ambiente local | Build feito na própria VPS |\n| `output: \"standalone\"` | `node server.js` só com as dependências usadas | Pasta enxuta, sobe sem `npm install` | Build no CI ou em Docker |\n| `output: \"export\"` | HTML estático servido pelo Nginx | Sem Node em produção, consumo mínimo | Site sem renderização no servidor, sem rotas de API e sem Server Actions |\n\nEste guia cobre os dois primeiros, que mantêm todos os recursos do framework. O export estático merece consideração: landing pages, documentação e blogs ficam mais baratos e rápidos como HTML puro, ao custo de perder rotas de API, Server Actions, ISR e otimização de imagem sem loader externo.\n\n## Preparar a VPS: Node.js LTS e PM2\n\nO Next.js 16 exige Node.js 20.9 ou mais novo, mas a linha 20 já saiu de suporte. Use a versão LTS ativa (o Node.js 24 em outubro de 2026), instalada pelo repositório da NodeSource, e mantenha a mesma versão principal no seu computador e na VPS:\n\n```bash\ncurl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -\nsudo apt install -y nodejs git\nnode -v\nsudo npm install -g pm2\nsudo mkdir -p /var/www/meu-site\nsudo chown $USER:$USER /var/www/meu-site\n```\n\nRode tudo com um usuário comum com sudo, nunca como root. A pasta em `/var/www` evita um problema do Ubuntu 24.04: as pastas pessoais em `/home` vêm fechadas para outros usuários, e o Nginx não conseguiria ler arquivos de lá.\n\n> **Importante:** o `next build` consome bem mais memória que o site rodando. Em VPS de 2 GB, crie swap antes do primeiro build, seguindo o guia de [swap no Ubuntu](https://ajuda.roxycloud.com.br/artigos/como-configurar-swap-ubuntu), ou o processo morre no meio sem mensagem clara.\n\n## Build e variáveis de ambiente\n\nOrganize a pasta em três partes: `releases` guarda cada versão construída, `shared` guarda o que não muda entre versões (o arquivo de ambiente) e `current` é um link simbólico para a versão no ar. É essa estrutura que permite atualizar sem derrubar o site.\n\n```bash\ncd /var/www/meu-site\nmkdir -p releases shared\nnano shared/.env.production\nchmod 600 shared/.env.production\ngit clone https://github.com/sua-conta/meu-site.git releases/v1\ncp shared/.env.production releases/v1/\ncd releases/v1\nnpm ci\nnpm run build\nln -sfn /var/www/meu-site/releases/v1 /var/www/meu-site/current\n```\n\nO `npm ci` instala as dependências exatamente como estão no lockfile, sem atualizar nada sozinho.\n\nAtenção às variáveis: por padrão, elas só existem no servidor. As que começam com `NEXT_PUBLIC_` são copiadas para o JavaScript do navegador **durante o build**. Trocar uma delas no arquivo e reiniciar não muda nada; é preciso rodar o build de novo.\n\n### Modo standalone\n\nAtive a opção no `next.config.ts`:\n\n```ts\nimport type { NextConfig } from \"next\";\n\nconst nextConfig: NextConfig = {\n  output: \"standalone\",\n};\n\nexport default nextConfig;\n```\n\nO build cria `.next/standalone` com um `server.js`. As pastas `public` e `.next/static` não são copiadas por padrão, e sem elas o site abre sem CSS, JavaScript e imagens. Copie depois de cada build:\n\n```bash\ncp -r public .next/standalone/\ncp -r .next/static .next/standalone/.next/\n```\n\nSe o build acontece no CI, use um executor Linux x64, igual à VPS. A pasta standalone leva binários nativos, como o `sharp`, e um build feito no Windows ou no macOS copia o binário errado.\n\n## Rodar com PM2 e reiniciar no boot\n\nCrie `/var/www/meu-site/ecosystem.config.js`, fora das versões, apontando para o link `current`. Para `next start`:\n\n```js\nmodule.exports = {\n  apps: [\n    {\n      name: \"meu-site\",\n      cwd: \"/var/www/meu-site/current\",\n      script: \"node_modules/next/dist/bin/next\",\n      args: \"start -H 127.0.0.1 -p 3000\",\n      instances: 1,\n      exec_mode: \"fork\",\n      max_memory_restart: \"700M\",\n      env: { NODE_ENV: \"production\" },\n    },\n  ],\n};\n```\n\nNo modo standalone, o processo é o próprio `server.js`, que lê porta e endereço das variáveis `PORT` e `HOSTNAME`:\n\n```js\n{\n  name: \"meu-site\",\n  cwd: \"/var/www/meu-site/current/.next/standalone\",\n  script: \"server.js\",\n  env: {\n    NODE_ENV: \"production\",\n    PORT: \"3000\",\n    HOSTNAME: \"127.0.0.1\",\n  },\n}\n```\n\nInicie, salve a lista de processos e gere o serviço de boot:\n\n```bash\ncd /var/www/meu-site\npm2 start ecosystem.config.js\npm2 save\npm2 startup systemd\n# copie e rode a linha com sudo que o comando acima mostrar\ncurl -I http://127.0.0.1:3000\n```\n\nEscutar em `127.0.0.1` é proposital: a porta 3000 fica inacessível de fora e todo o tráfego passa pelo Nginx. Os logs do PM2 crescem sem limite por padrão; instale a rotação uma vez com `pm2 install pm2-logrotate`. Comece com uma instância: no modo cluster, cada processo guarda o próprio cache e revalidações de ISR podem não chegar a todos ao mesmo tempo.\n\n## Nginx, domínio e HTTPS\n\nAponte o domínio para o IP da VPS com um registro A para o domínio e outro para o `www`. Depois instale o Nginx (veja [como instalar o Nginx](https://ajuda.roxycloud.com.br/artigos/instalar-nginx-linux)) e crie `/etc/nginx/sites-available/meu-site`:\n\n```nginx\nserver {\n    listen 80;\n    listen [::]:80;\n    server_name seu-dominio.com.br www.seu-dominio.com.br;\n    client_max_body_size 10m;\n\n    location / {\n        proxy_pass http://127.0.0.1:3000;\n        proxy_http_version 1.1;\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_set_header Upgrade $http_upgrade;\n        proxy_set_header Connection \"upgrade\";\n        proxy_buffering off;\n    }\n}\n```\n\n- **Cabeçalhos Forwarded:** o Next.js usa o host e o protocolo originais para montar URLs e validar Server Actions. Sem eles, formulários podem falhar atrás do proxy.\n- **proxy_buffering off:** o App Router envia a página em partes (loading e Suspense). Com buffering ligado, o Nginx segura tudo e anula o streaming.\n- **client_max_body_size:** o padrão do Nginx é 1 MB. Aumente se o site recebe uploads.\n\nAtive o site, libere o firewall e emita o certificado gratuito:\n\n```bash\nsudo ln -s /etc/nginx/sites-available/meu-site /etc/nginx/sites-enabled/\nsudo rm -f /etc/nginx/sites-enabled/default\nsudo nginx -t && sudo systemctl reload nginx\nsudo ufw allow OpenSSH\nsudo ufw allow 'Nginx Full'\nsudo ufw enable\nsudo apt install -y certbot python3-certbot-nginx\nsudo certbot --nginx -d seu-dominio.com.br -d www.seu-dominio.com.br\nsudo certbot renew --dry-run\n```\n\nO Certbot edita o bloco do Nginx, cria o redirecionamento para HTTPS e agenda a renovação automática. Não é preciso configurar cache dos arquivos estáticos: o Next.js já responde `/_next/static` com cache de um ano, porque cada nome de arquivo tem um hash do conteúdo.\n\n## Atualizar sem derrubar o site\n\nRodar `git pull` e `npm run build` na pasta em uso apaga a `.next` enquanto o site ainda depende dela, e os visitantes recebem páginas quebradas por minutos. A solução é construir cada versão em outra pasta e só trocar o link no final. Salve como `/var/www/meu-site/deploy.sh`:\n\n```bash\n#!/usr/bin/env bash\nset -euo pipefail\nAPP=/var/www/meu-site\nRELEASE=\"$APP/releases/$(date +%Y%m%d%H%M%S)\"\n\ngit clone --depth 1 https://github.com/sua-conta/meu-site.git \"$RELEASE\"\ncp \"$APP/shared/.env.production\" \"$RELEASE/\"\ncd \"$RELEASE\"\nnpm ci\nnpm run build\nln -sfn \"$RELEASE\" \"$APP/current\"\npm2 startOrReload \"$APP/ecosystem.config.js\" --update-env\n\n# mantém as cinco versões mais recentes para rollback\nls -dt \"$APP\"/releases/* | tail -n +6 | xargs -r rm -rf\n```\n\nA versão nova é construída enquanto a antiga continua atendendo, e o link `current` só muda se o build terminar sem erro. No modo standalone, acrescente as duas cópias de pastas depois do build. Para voltar uma versão, aponte o link para a pasta anterior e rode `pm2 reload meu-site`.\n\n## Erros comuns e como resolver\n\n| Sintoma | Causa provável | Solução |\n| --- | --- | --- |\n| Build morre com *Killed* ou *heap out of memory* | RAM insuficiente no build | Crie swap, faça o build no CI ou aumente a RAM |\n| Site sem CSS e JavaScript no standalone | `public` e `.next/static` não copiadas | Copie as duas pastas depois de cada build |\n| Variável `NEXT_PUBLIC_` vazia no navegador | Não estava definida no build | Defina no arquivo e rode o build de novo |\n| 502 Bad Gateway | Processo parado ou em outra porta | Confira `pm2 status` e `pm2 logs meu-site` |\n| Página chega toda de uma vez | Buffering do Nginx | Adicione `proxy_buffering off` |\n| *Failed to find Server Action* após deploy | Navegador com a página da versão anterior | Recarregar resolve; configure `deploymentId` |\n| Site fora depois de reiniciar a VPS | `pm2 save` ou `pm2 startup` não executados | Rode os dois e teste com um reboot |\n\n## Qual VPS usar para Next.js na RoxyCloud\n\nA renderização no servidor roda no laço de eventos do Node, que usa um núcleo por processo, então o tempo de resposta de cada página depende muito da velocidade por núcleo. O segundo fator é a RAM do build, quando você compila na própria VPS.\n\n| Cenário | Plano sugerido |\n| --- | --- |\n| Site pequeno com build feito no CI | VPS Ryzen 7 ou Xeon de 2 GB |\n| Build na VPS e SSR com tráfego moderado | VPS Ryzen 7 de 4 GB |\n| Vários sites ou site com banco na mesma VPS | VPS Ryzen 9 de 8 GB |\n| Portal ou loja com muito acesso | VPS Ryzen 9 de 16 GB |\n\nAs VPS da RoxyCloud ficam no datacenter próprio em Presidente Prudente (SP), o que reduz o tempo até o primeiro byte para visitantes no Brasil, e todas têm acesso root, NVMe e Anti-DDoS incluso. Compare a [VPS Ryzen 7](https://roxycloud.com.br/vps-ryzen-7), a [VPS Ryzen 9](https://roxycloud.com.br/vps-ryzen-9) e a [VPS Xeon](https://roxycloud.com.br/vps-xeon).\n\n## Perguntas frequentes\n\n**Next.js funciona completo em uma VPS?**\n\nSim. Com `next start`, renderização no servidor, ISR, Server Actions e otimização de imagem funcionam sem configuração extra. O que muda é que cache, escala e atualização ficam sob sua responsabilidade.\n\n**Qual versão do Node.js usar com Next.js 16?**\n\nO mínimo é o Node.js 20.9, mas a linha 20 já saiu de suporte. Use a LTS ativa, que em outubro de 2026 é o Node.js 24, a mesma no seu computador e na VPS.\n\n**Preciso de Nginx se o Next.js já é um servidor?**\n\nÉ o recomendado. O Nginx cuida do HTTPS, de conexões lentas e do limite de tamanho de requisição, deixando o Next.js livre para renderizar páginas.\n\n**Quanto de RAM o build do Next.js precisa?**\n\nProjetos médios costumam passar de 1 GB de pico e podem falhar em VPS de 2 GB sem swap. Com 4 GB o build fica confortável; outra saída é fazer o build no CI e enviar só a pasta standalone.\n\n**Devo usar next start ou output standalone?**\n\n`next start` é mais simples quando o build acontece na VPS. O standalone gera uma pasta enxuta, ideal para build no CI ou em Docker. Os dois entregam os mesmos recursos."
  },
  "jsonLd": [
    {
      "@type": "Article",
      "@id": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps#article",
      "headline": "Como hospedar Next.js em VPS (PM2 e Nginx)",
      "description": "Hospede Next.js na sua VPS: next start ou standalone, PM2 com reinício no boot, Nginx com streaming, domínio, SSL grátis e deploy sem derrubar o site.",
      "url": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps",
      "articleSection": "Servidor VPS (Cloud)",
      "inLanguage": "pt-BR",
      "isAccessibleForFree": true,
      "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps#webpage"
      },
      "image": [
        "https://ajuda.roxycloud.com.br/og-ajuda.png"
      ],
      "author": {
        "@type": "Organization",
        "name": "RoxyCloud"
      },
      "publisher": {
        "@type": "Organization",
        "name": "RoxyCloud",
        "logo": {
          "@type": "ImageObject",
          "url": "https://cdn.roxycloud.com.br/logo.png"
        }
      },
      "datePublished": "2026-09-07T18:24:26.000Z",
      "dateModified": "2026-09-07T19:13:26.000Z"
    },
    {
      "@type": "BreadcrumbList",
      "itemListElement": [
        {
          "@type": "ListItem",
          "position": 1,
          "name": "Início",
          "item": "https://ajuda.roxycloud.com.br"
        },
        {
          "@type": "ListItem",
          "position": 2,
          "name": "Servidor VPS (Cloud)",
          "item": "https://ajuda.roxycloud.com.br/categorias/servidor-vps-cloud"
        },
        {
          "@type": "ListItem",
          "position": 3,
          "name": "Como hospedar Next.js em VPS com PM2, Nginx e HTTPS",
          "item": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps"
        }
      ]
    },
    {
      "@type": "FAQPage",
      "@id": "https://ajuda.roxycloud.com.br/artigos/hospedar-nextjs-vps#faq",
      "mainEntity": [
        {
          "@type": "Question",
          "name": "Next.js funciona completo em uma VPS?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Sim. Com next start, renderização no servidor, ISR, Server Actions e otimização de imagem funcionam sem configuração extra. O que muda é que cache, escala e atualização ficam sob sua responsabilidade."
          }
        },
        {
          "@type": "Question",
          "name": "Qual versão do Node.js usar com Next.js 16?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "O mínimo é o Node.js 20.9, mas a linha 20 já saiu de suporte. Use a LTS ativa, que em outubro de 2026 é o Node.js 24, a mesma no seu computador e na VPS."
          }
        },
        {
          "@type": "Question",
          "name": "Preciso de Nginx se o Next.js já é um servidor?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "É o recomendado. O Nginx cuida do HTTPS, de conexões lentas e do limite de tamanho de requisição, deixando o Next.js livre para renderizar páginas."
          }
        },
        {
          "@type": "Question",
          "name": "Quanto de RAM o build do Next.js precisa?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "Projetos médios costumam passar de 1 GB de pico e podem falhar em VPS de 2 GB sem swap. Com 4 GB o build fica confortável; outra saída é fazer o build no CI e enviar só a pasta standalone."
          }
        },
        {
          "@type": "Question",
          "name": "Devo usar next start ou output standalone?",
          "acceptedAnswer": {
            "@type": "Answer",
            "text": "next start é mais simples quando o build acontece na VPS. O standalone gera uma pasta enxuta, ideal para build no CI ou em Docker. Os dois entregam os mesmos recursos."
          }
        }
      ]
    }
  ]
}