You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.4 KiB

06 — Deployment & containerização (Docker)

Objetivo

Encapsular o microsite num contentor Docker para funcionamento independente e isolado: a aplicação corre da mesma forma em qualquer host com Docker, sem depender de um Node/npm instalado na máquina nem de configuração externa.

Motivação adicional: nesta máquina não existe Node/npm instalados — o Docker remove essa dependência do host (o build corre dentro da imagem). Ver CHANGELOG.md.

Estratégia

Multi-stage build:

  1. Stage build (node:22-alpine): npm ci (ou npm install) + npm run build → gera dist/ (estático Vite).
  2. Stage runtime (nginx:1.27-alpine): serve o dist/ como conteúdo estático. Imagem final pequena, sem Node nem código-fonte.

Como é uma SPA single-page, o runtime é um servidor estático; o nginx trata de fallback de rotas para index.html e do cache de assets.

Artefactos a criar (após aprovação)

Ficheiro Função
Dockerfile Build multi-stage (node → nginx)
.dockerignore Excluir node_modules, dist, .git, etc. do contexto
nginx.conf Config nginx: porta 80, SPA fallback, gzip, cache de assets
docker-compose.yml Orquestração local (build + port mapping + healthcheck)

Contrato de operação

  • Build: docker build -t resilience-microsite .
  • Run: docker run --rm -p 8080:80 resilience-micrositehttp://localhost:8080
  • Compose: docker compose up --build (porta exposta 8080:80 por defeito).
  • Porta interna: 80 (nginx). Porta externa: configurável (default 8080).
  • Sem estado: não há volumes nem dependências externas (site 100% estático).
  • Healthcheck: GET / devolve 200.

nginx — requisitos

  • try_files $uri $uri/ /index.html; (suporte a deep-link de âncoras/refresh).
  • gzip on para HTML/CSS/JS.
  • Cache longo para assets com hash (/assets/*), no-cache para index.html.
  • Servir em IPv4/IPv6, porta 80.

Notas

  • O Dockerfile torna a verificação do gate de TypeScript reprodutível mesmo sem Node no host: npm run build (que corre tsc -b) executa no stage de build; se houver erros de TS, o docker build falha — passando a ser o método de verificação de aceitação enquanto não houver Node instalado localmente.
  • Versões base pinadas (node:22-alpine, nginx:1.27-alpine) para reprodutibilidade.