Next.js

Guia prático para hospedar aplicações Next.js na Discloud.

🧭 Introdução

Este guia passo a passo mostra como preparar, configurar e fazer o deploy de uma aplicação Next.js na Discloud.

Existem duas abordagens principais:

  • Opção A (recomendada) – usar o next build + next start sem servidor custom (apenas o server interno do Next.js).

  • Opção B – usar um servidor custom com Express, útil se você precisa de rotas extras, middlewares customizados ou integrações específicas.

Além disso, mostramos uma alternativa com export estático, ideal para sites puramente estáticos.

Este guia assume que você já tem um projeto Next.js funcionando localmente.


📋 Requisitos


🧱 Pré-requisitos locais

Antes de continuar, você vai precisar:

  • Node.js instalado na sua máquina.

  • Um projeto Next.js criado (ex.: npx create-next-app).

  • Uma conta na Discloud com subdomínio configurado.

  • Opcionalmente: Git, VSCode e/ou CLI da Discloud para facilitar o fluxo.

Se ainda não tiver familiaridade com o ambiente, confira:

NodeJS

🧹 Preparando os arquivos do projeto

Antes de compactar seu projeto em .zip, crie um arquivo .discloudignore na raiz do projeto para excluir arquivos e pastas desnecessárias do upload:

node_modules/
dist/
.next/
.env
.env.local
.git
package-lock.json

O arquivo .discloudignore funciona de forma semelhante a um .gitignore, mas é usado pela Discloud para ignorar arquivos no momento do upload.


📦 package.json – scripts recomendados

Dentro do seu package.json, garanta que os scripts principais do Next.js estejam definidos. Um exemplo básico:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start -p 8080",
    "export": "next export"
  }
}

✅ Opção A – Deploy sem servidor custom (Next.js "built-in")

Nesta opção, você usa somente o servidor interno do Next (next start), sem precisar de server.js.

🔁 Fluxo básico

  1. Rodar o build localmente (opcional, mas recomendado):

    npm run build
  2. Testar localmente:

    npm run start
  3. Se tudo estiver funcionando, preparar o .zip e enviar para a Discloud.

⚙️ discloud.config (exemplo)

TYPE=site
BUILD=npm run build
START=npm run start
RAM=512
VERSION=latest
ID=meu-nextjs-app
🧩 Opção B – Custom server com Express

Se você precisa de rotas customizadas, middlewares ou integrar outras libs antes de delegar ao Next, pode usar um servidor Express que usa o Next internamente.

🧾 server.js

Crie um arquivo server.js na raiz do projeto com o seguinte conteúdo:

const express = require("express");
const next = require("next");

const dev = process.env.NODE_ENV !== "production";
const app = next({ dev });
const handle = app.getRequestHandler();

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

app.prepare().then(() => {
  const server = express();

  server.get("/hello", (req, res) => {
    return res.send("Olá, Discloud!");
  });

  server.all("*", (req, res) => {
    return handle(req, res);
  });

  server.listen(PORT, () => {
    console.log(`Servidor rodando na porta ${PORT}`);
  });
});

📦 package.json (com servidor custom)

Atualize seus scripts para utilizar o server.js em produção:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "node server.js"
  }
}

⚙️ discloud.config (custom server)

TYPE=site
MAIN=server.js
BUILD=npm run build
START=npm run start
RAM=512
VERSION=latest
ID=meu-nextjs-app-custom-server

Use esta opção apenas se realmente precisar de um servidor custom. Para a maioria dos projetos, a Opção A (sem servidor custom) é mais simples e suficiente.

🧾 Alternativa – Export estático (Next.js como site estático)

Se o seu projeto não depende de SSR ou API Routes, você pode usar o next export para gerar um site totalmente estático.

📦 package.json (export estático)

{
  "scripts": {
    "dev": "next dev",
    "build": "next build && next export",
    "start": "npx serve -s out -l 8080"
  }
}

⚙️ discloud.config (estático)

TYPE=site
BUILD=npm run build
START=npm run start
RAM=256
ID=meu-site-estatico

🔐 Variáveis de ambiente

No Next.js, variáveis de ambiente públicas devem começar com NEXT_PUBLIC_.

  • Defina variáveis pelo Painel da Discloud, CLI ou API.

  • Tudo que começa com NEXT_PUBLIC_ é embutido no bundle durante o build.

Exemplo:

NEXT_PUBLIC_API_URL=https://meu-backend.discloud.app
API_SECRET_TOKEN=nao-colocar-no-front

Usando em componentes:

const apiUrl = process.env.NEXT_PUBLIC_API_URL;

🗂️ Estrutura final recomendada do projeto

Uma estrutura típica de projeto Next.js para a Discloud pode ser:

my-next-app/
├─ discloud.config
├─ .discloudignore
├─ package.json
├─ next.config.js
├─ server.js        # opcional (apenas na Opção B)
├─ public/
└─ app/ ou pages/
	 ├─ page.js
	 └─ api/
			└─ hello.js

🚀 Fazendo o deploy na Discloud

Você pode fazer deploy do seu app Next.js usando qualquer um dos métodos suportados.

Painel de ControleBot do DiscordVisual Studio CodeCLI

🛠️ Troubleshooting (erros comuns)

Aplicação não abre / porta errada

Verifique se o Next está usando a porta 8080 (next start -p 8080 ou PORT=8080).

Erro de plano / permissão

Confirme se sua conta possui o plano correto para websites/APIs.

Subdomínio não configurado

Certifique-se de ter seguido o guia de subdomínio antes do deploy.

Erros de build

  • Execute localmente: npm run build e corrija qualquer erro antes de enviar.

  • Confira se todas as dependências estão listadas no package.json.

Erros ao iniciar (START)

  • Verifique se o script start está correto.

  • Acompanhe os logs da Discloud para ver a mensagem de erro exata.

Last updated