NestJS

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

🧭 Introdução

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

O processo envolve compilar seu código TypeScript para a pasta dist e executar o JavaScript compilado na porta 8080. Aplicações NestJS são simples de fazer deploy porque o framework gerencia rotas, injeção de dependências e organização de módulos automaticamente.


📋 Requisitos


🧱 Pré-requisitos locais

Antes de continuar, você vai precisar:

  • Node.js instalado na sua máquina.

  • Um projeto NestJS criado (ex.: nest new meu-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/
.env
.env.local
.git
.vscode/
package-lock.json

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


🔧 Configuração TypeScript – tsconfig.build.json

Garanta que seu tsconfig.build.json (ou tsconfig.json) esteja configurado para compilar para a pasta dist. Aqui está uma configuração típica:

{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "./dist",
    "rootDir": "./src",
    "composite": false,
    "incremental": false
  },
  "exclude": ["node_modules", "dist"]
}

🚀 Ponto de entrada principal – src/main.ts

Garanta que seu src/main.ts escute na porta 8080 e aceite a porta de variáveis de ambiente. Aqui está uma configuração típica:

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  const port = process.env.PORT ? Number(process.env.PORT) : 8080;

  await app.listen(port, "0.0.0.0");
  console.log(`Servidor rodando em http://0.0.0.0:${port}`);
}

bootstrap();

Importante


📦 package.json – scripts recomendados

Dentro do seu package.json, garanta que os scripts de build e start estejam corretamente definidos:

{
  "scripts": {
    "start": "node dist/main",
    "start:dev": "nest start --watch",
    "build": "nest build"
  }
}
  • build – compila TypeScript para dist via o CLI do Nest.

  • start – executa a aplicação compilada a partir da pasta dist.

  • start:dev – executa em modo watch localmente (não necessário para Discloud).


⚙️ discloud.config – exemplo

Aqui está uma configuração típica para uma aplicação NestJS:

TYPE=site
BUILD=npm run build
START=npm run start
RAM=512
VERSION=latest
ID=meu-nestjs-app

Para informações detalhadas sobre cada parâmetro de configuração e todas as opções disponíveis, consulte o guia completo:

discloud.config

🧪 Testando localmente (build para produção)

Antes de enviar para a Discloud, verifique se seu app compila e executa corretamente:

1

Compile o projeto localmente:

npm run build

Isto gera a pasta dist com o JavaScript compilado.

2

Teste o build para produção:

npm run start

Verifique se o servidor inicia e responde às requisições (ex.: via curl http://localhost:8080).

3

Pare o servidor e proceda com o deploy.


🔐 Variáveis de ambiente

No NestJS, variáveis de ambiente são tipicamente acessadas via process.env:

  • Padrões comuns incluem DATABASE_URL, API_KEY, REDIS_URL, etc.

Exemplo em um serviço:

import { Injectable } from "@nestjs/common";

@Injectable()
export class ConfigService {
  getDatabaseUrl() {
    return process.env.DATABASE_URL || "sqlite:memory";
  }
}

Para melhor segurança de tipo e validação, considere usar o pacote @nestjs/config para gerenciar variáveis de ambiente.


🗂️ Estrutura final recomendada do projeto

Uma estrutura típica de projeto NestJS para a Discloud pode ser:

meu-nest-app/
├─ discloud.config
├─ .discloudignore
├─ package.json
├─ tsconfig.json
├─ tsconfig.build.json
├─ src/
│  ├─ main.ts
│  ├─ app.module.ts
│  ├─ app.controller.ts
│  └─ app.service.ts
└─ dist/  (gerado após o build)

🚀 Fazendo o deploy na Discloud

Você pode fazer deploy do seu app NestJS 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 NestJS está escutando na porta 8080 (process.env.PORT || 8080 em main.ts).

Pasta dist não encontrada

Verifique se tsconfig.build.json possui "outDir": "./dist" e execute npm run build localmente para confirmar.

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