Antes de começar
Instale Node.js 20 ou mais recente, npm, Git e a CLI do Adios. Você também precisará de uma conta Adios e de um repositório Git de destino se quiser fazer push do código-fonte concluído.
Crie o projeto Next.js
Este comando explicita as escolhas: TypeScript, Tailwind, ESLint, App Router, o diretório src , o alias padrão de importação e npm.
npx create-next-app@latest ./my-project \
--ts \
--tailwind \
--eslint \
--app \
--src-dir \
--import-alias "@/*" \
--use-npm
cd my-project
npm run devAberto http://localhost:3000 e confirme que a página inicial carrega. Pare o servidor de desenvolvimento antes de continuar se quiser reutilizar o terminal.
Substitua a página inicial do projeto
Substituir src/app/page.tsx por uma pequena página renderizada no servidor. Manter os metadados na página torna o exemplo completo sem alterar o layout raiz gerado.
import type { Metadata } from "next";
export const metadata: Metadata = {
title: "Northstar — A small app ready to ship",
description:
"A production-ready Next.js example with health and search metadata routes.",
};
const checks = [
"Responsive App Router page",
"Production health endpoint",
"Sitemap and robots routes",
"Repeatable Adios deployment",
];
export default function Home() {
return (
<main className="min-h-screen bg-slate-950 px-6 py-20 text-white">
<div className="mx-auto max-w-5xl">
<p className="text-sm font-semibold uppercase tracking-[0.18em] text-cyan-300">
Next.js on Adios
</p>
<h1 className="mt-5 max-w-3xl text-5xl font-bold tracking-tight sm:text-7xl">
Build the app. Keep the deployment clear.
</h1>
<p className="mt-6 max-w-2xl text-lg leading-8 text-slate-300">
This project has the files a production release needs, from a health
check to the runtime contract stored beside the source.
</p>
<div className="mt-12 grid gap-4 sm:grid-cols-2">
{checks.map((check) => (
<div
key={check}
className="rounded-xl border border-white/10 bg-white/5 p-5 text-base text-slate-200"
>
{check}
</div>
))}
</div>
<a
href="/api/health"
className="mt-10 inline-flex rounded-lg bg-white px-5 py-3 font-semibold text-slate-950"
>
Check application health
</a>
</div>
</main>
);
}Criar a rota de saúde
Adicionar src/app/api/health/route.ts. O Adios fará uma solicitação a essa rota antes de promover a versão candidata.
export function GET() {
return Response.json({ status: "ok" });
}Mantenha essa rota rápida. Se o aplicativo não puder atender tráfego sem um banco de dados ou outro serviço obrigatório, decida se a verificação de prontidão também deve testar essa dependência.
Adicione rotas de sitemap e robots
Os arquivos de metadados do Next.js geram as respostas públicas de /sitemap.xmle /robots.txt . O fallback local mantém o desenvolvimento funcionando; a produção deve usar a URL pública final.
import type { MetadataRoute } from "next";
const siteUrl =
process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000";
export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: siteUrl + "/",
lastModified: new Date(),
changeFrequency: "weekly",
priority: 1,
},
];
}import type { MetadataRoute } from "next";
const siteUrl =
process.env.NEXT_PUBLIC_SITE_URL ?? "http://localhost:3000";
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: "*",
allow: "/",
},
sitemap: siteUrl + "/sitemap.xml",
};
}Criar adios.yaml na raiz do projeto
Este arquivo deve ficar junto a package.json. Ele registra como o Adios deve instalar, compilar, iniciar e verificar o projeto atual.
name: my-nextjs-app
region: de
replicas: 1
build_cmd: npm ci && npm run build
start_cmd: npm start
env:
NEXT_PUBLIC_SITE_URL: https://replace-with-your-route.adios.run
runtime:
name: node@24
port: 3000
health_path: /api/health
memory_mb: 1024Mantenha o hostname provisório na primeira implantação. Quando o Adios retornar a rota gerada, substitua-o pela origem HTTPS real e implante novamente para que o sitemap contenha a URL correta.
Execute as verificações de produção localmente
Carregar uma página em desenvolvimento não basta. Execute o linter e a mesma compilação de produção que será usada na implantação.
npm run lint
npm run buildSe algum comando falhar, corrija o primeiro erro e execute novamente as duas verificações antes de implantar.
Entre na conta e implante o código-fonte atual
Execute os comandos no diretório que contém adios.yaml. Revise todas as permissões solicitadas antes de permitir que a implantação continue.
adios login
adios upO Adios envia o código-fonte atual, executa a compilação, inicia o processo de produção, verifica /api/health, e retorna uma rota HTTPS gerada quando a versão está saudável.
Visite e verifique o aplicativo de produção
Abra o hostname gerado e verifique as quatro respostas:
/renderiza a nova página./api/healthretorna{"status":"ok"}./robots.txtpermite o rastreamento e indica o sitemap./sitemap.xmlcontém a URL de produção pública.
Substitua o valor provisório NEXT_PUBLIC_SITE_URL valor em adios.yaml pelo hostname gerado ou seu domínio personalizado, execute adios up novamente e repita as verificações. Use Domínios e Redirecionamentos ao vincular um hostname de produção.
Revise, faça commit e push do código-fonte funcional
Revise as alterações antes de registrá-las no histórico. O diff deve mostrar a página, a rota de saúde, as rotas de metadados para busca e o manifesto que você acabou de verificar.
git status
git diff
git add src/app/page.tsx src/app/api/health/route.ts \
src/app/sitemap.ts src/app/robots.ts adios.yaml
git diff --cached
git commit -m "Build and deploy the Next.js app"
git remote -v
git push -u origin mainConfirme o remote e a branch antes do comando final. Se git remote -v estiver vazio, crie primeiro o repositório remoto e adicione sua URL como origin.
Projeto concluído
Verifique os arquivos antes do próximo recurso.
my-project/
├── adios.yaml
├── package.json
├── package-lock.json
└── src/
└── app/
├── api/
│ └── health/
│ └── route.ts
├── page.tsx
├── robots.ts
└── sitemap.tsProblemas comuns
Por que o aplicativo Next.js precisa de uma rota de saúde?
O Adios usa a rota de saúde para confirmar que o processo de produção está pronto antes de promover a versão. Mantenha a resposta rápida e retorne um status de sucesso apenas quando o aplicativo puder atender tráfego.
Por que preciso substituir a URL do site após a primeira implantação?
Um sitemap precisa de URLs absolutas de produção. A primeira implantação no Adios cria o hostname gerado; substitua o valor provisório no adios.yaml por esse hostname e implante novamente antes de considerar o sitemap finalizado.
E se npm run build falhar?
Corrija a compilação local de produção antes de implantar. Comece pelo primeiro erro, confirme a versão do Node e o lockfile e não use o funcionamento do servidor de desenvolvimento como prova de que a compilação de produção funciona.
E se a versão iniciar, mas nunca ficar saudável?
Confirme que package.json tem um script de inicialização que executa next start, que o aplicativo escuta na porta 3000 e que adios.yaml usa a mesma porta e o caminho /api/health. Depois, consulte os logs do ambiente de execução e identifique o primeiro erro de inicialização ou de verificação de saúde antes de implantar novamente.
E se o projeto não tiver um remote Git?
Crie um repositório vazio no seu provedor Git, adicione-o como origin, confirme o nome da branch e faça push. Não execute o comando de push do exemplo antes que git remote -v mostre o destino esperado.
Continue criando
Use o mesmo contrato com um agente de programação com IA.
O guia de IA transforma exatamente esses arquivos e verificações em prompts para Codex, ChatGPT, Gemini e Claude.
Abra o fluxo de trabalho de IA