From 850eb25f3f079e4400c9aa16060e1b00d5d190c0 Mon Sep 17 00:00:00 2001 From: "joao.herculano" Date: Thu, 6 Aug 2026 14:11:21 -0300 Subject: [PATCH] =?UTF-8?q?corrige=20links=20quebrados=20do=20README=20e?= =?UTF-8?q?=20documenta=20lacunas=20p=C3=B3s-limpeza?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Os links de Dockerfile/Jenkinsfile/k8s apontavam para caminhos absolutos do WSL de uma máquina específica (quebrados desde o primeiro commit). Trocados por caminhos relativos. Adiciona: fluxo de build/start local de produção, passo a passo de aplicar o secret via create-secret.sh, explicação do patch em patches/ (postinstall) e nota sobre o preset node-server do nitro. --- README.md | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e108ece..80468cb 100644 --- a/README.md +++ b/README.md @@ -5,25 +5,39 @@ Aplicacao TanStack Start/Node.js para registro de coleta de pedidos, usando SQL ## Desenvolvimento local ```sh +cp .env.example .env # preencha com as credenciais do seu ambiente npm install npm run dev ``` +O `npm install` roda um `postinstall` que reaplica automaticamente o patch em `patches/` (veja "Patches de dependências" abaixo). + +## Build de produção local + +Para validar um build antes de mandar pro Jenkins: + +```sh +npm run build +node .output/server/index.mjs +``` + +É o mesmo comando que o `Dockerfile` roda no container final. + ## Estrutura de deploy Este repositorio ja possui a base para subir o app como servico separado: -- [Dockerfile](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/Dockerfile:1) -- [Jenkinsfile](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/Jenkinsfile:1) -- [k8s/deployment.yaml](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/k8s/deployment.yaml:1) -- [k8s/service.yaml](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/k8s/service.yaml:1) -- [k8s/hpa.yaml](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/k8s/hpa.yaml:1) -- [k8s/secret.example.yaml](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/k8s/secret.example.yaml:1) -- [k8s/create-secret.sh](/mnt/c/Users/joao.herculano/OneDrive%20-%20GRUPO%20GINSENG/Documentos/sla_separacao/k8s/create-secret.sh:1) +- [Dockerfile](Dockerfile) +- [Jenkinsfile](Jenkinsfile) +- [k8s/deployment.yaml](k8s/deployment.yaml) +- [k8s/service.yaml](k8s/service.yaml) +- [k8s/hpa.yaml](k8s/hpa.yaml) +- [k8s/secret.example.yaml](k8s/secret.example.yaml) +- [k8s/create-secret.sh](k8s/create-secret.sh) ## Variaveis obrigatorias -O app precisa destas variaveis no ambiente de deploy: +O app precisa destas variaveis no ambiente de deploy (veja `.env.example`): - `DB_HOST` - `DB_PORT` @@ -35,6 +49,23 @@ O app precisa destas variaveis no ambiente de deploy: - `DB_SERVER_NAME` - `SESSION_SECRET` +## Aplicando o secret no cluster + +Com `kubectl` configurado para o namespace `ci-cd`, exporte as variaveis acima e rode: + +```sh +NAMESPACE=ci-cd SECRET_NAME=sla-separacao-env \ +DB_HOST=... DB_PORT=... DB_NAME=... DB_USER=... DB_PASSWORD=... \ +DB_ENCRYPT=... DB_TRUST_SERVER_CERT=... DB_SERVER_NAME=... SESSION_SECRET=... \ +./k8s/create-secret.sh +``` + +O script usa `kubectl apply` (idempotente) e nunca grava os valores em disco. + +## Patches de dependências + +`patches/@tanstack+start-server-core+*.patch` corrige um bug no `@tanstack/start-server-core`: a lib cria o middleware de CSRF padrão de forma incondicional ao carregar o módulo, o que colide com um import circular gerado pelo `nitro` no build de produção e quebra toda requisição (`createCsrfMiddleware is not a function`). O patch adia essa criação para dentro de uma função. Ele é reaplicado automaticamente pelo `postinstall` a cada `npm install`; se atualizar `@tanstack/start-server-core`, confira se o patch ainda se aplica. + ## Antes do deploy Voce precisa validar estes pontos no ambiente da empresa: @@ -50,3 +81,4 @@ Voce precisa validar estes pontos no ambiente da empresa: - O app atual usa SQL Server direto, sem API intermediaria. - O deploy criado aqui e separado do app Django existente. - O repositório nao guarda o secret real de producao; ele deve ser criado no cluster. +- O build de produção usa o preset `node-server` do nitro (não Cloudflare) — o `Dockerfile` roda `node .output/server/index.mjs` diretamente, então o preset precisa continuar assim.