Implantação de TypeScript no Kubernetes: guia básico na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que TypeScript e Kubernetes são a dupla ideal

\n

O desenvolvimento web moderno exige não apenas código de qualidade, mas também uma infraestrutura confiável. TypeScript, como uma camada de tipagem estática sobre JavaScript, permite criar aplicações de servidor escaláveis com o mínimo de erros em tempo de compilação. Kubernetes (K8s) é o padrão de facto para orquestração de contêineres, fornecendo implantação, escalonamento e gerenciamento automáticos de aplicações.

\n

Neste guia, vamos abordar na prática como construir uma aplicação TypeScript simples (Express API), empacotá-la em uma imagem Docker e implantá-la em um cluster Kubernetes. Você receberá comandos prontos, arquivos de configuração e explicação de cada etapa. O material é voltado para desenvolvedores que já conhecem os fundamentos do TypeScript e desejam aprender processos de devops.

\n

Ao final do artigo, você será capaz de implantar projetos TypeScript em ambiente de produção usando Kubernetes.

\n\n

1. Preparando a aplicação TypeScript para conteinerização

\n

1.1. Criando um servidor Express básico em TypeScript

\n

Para demonstração, criaremos uma API mínima em TypeScript. Certifique-se de ter Node.js e npm instalados.

\n
mkdir ts-k8s-app\ncd ts-k8s-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon
\n

Crie o tsconfig.json:

\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true,\n    "esModuleInterop": true\n  },\n  "include": ["src/**/*"]\n}
\n

Agora vamos escrever o servidor. Crie o arquivo src/index.ts:

\n
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/health', (_req: Request, res: Response) => {\n  res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.get('/', (_req: Request, res: Response) => {\n  res.send('Hello from TypeScript on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});
\n

Adicione scripts ao package.json:

\n
"scripts": {\n  "build": "tsc",\n  "start": "node dist/index.js",\n  "dev": "nodemon src/index.ts"\n}
\n

Verifique a compilação: npm run build && npm start. O servidor deve iniciar na porta 3000.

\n\n

1.2. Otimização para produção

\n

Para produção, é importante minimizar o tamanho da imagem. Adicione o .dockerignore:

\n
node_modules\ndist\n.git\n*.md\n.env
\n

Certifique-se de que todas as dependências estejam listadas em dependencies (não em devDependencies), se forem necessárias em tempo de execução.

\n\n

2. Construindo a imagem Docker para a aplicação TypeScript

\n

2.1. Escrevendo o Dockerfile

\n

Usaremos compilação em múltiplos estágios (multi-stage build) para reduzir o tamanho da imagem final.

\n
# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\n\n# Stage 2: Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/node_modules ./node_modules\nCOPY --from=builder /app/package.json ./\nEXPOSE 3000\nCMD ["node", "dist/index.js"]
\n

Pontos-chave:

\n
    \n
  • npm ci — instalação rápida e determinística de dependências.
  • \n
  • A segunda camada contém apenas o JS compilado e os módulos necessários.
  • \n
  • A imagem base node:18-alpine pesa apenas ~120 MB.
  • \n
\n\n

2.2. Construindo e verificando a imagem

\n
docker build -t ts-k8s-app:latest .\ndocker run -p 3000:3000 ts-k8s-app:latest
\n

Acesse http://localhost:3000/health — você deve ver uma resposta JSON. Se em

Blogs

Book Recommendations