Files
mono/components/extension-sdk/templates/Dockerfile
T
coopops 883e597d40
Typecheck / controller (pull_request) Has been cancelled
Typecheck / desktop (pull_request) Has been cancelled
[E10-2] feat(extension-sdk): @coopenomics/extension-sdk — Nest-template subgraph'а
Epic 10 Story 10.2 — SDK для разработки backend-расширений Apollo Federation v2
subgraph'ов экосистемы кооператива.

Что внутри:
- ExtensionFederationModule.forRoot() — готовый GraphQL модуль с
  ApolloFederationDriver + autoSchemaFile.federation: 2
- ExtensionAuthModule.forRoot({ secret }) — passport-jwt стратегия,
  валидирует токен который Apollo Gateway forward'ит в Authorization-header.
- ExtensionJwtAuthGuard — guard для GraphQL resolver'ов
- SharedCooperator/SharedCooperative/SharedAccount — federation v2 stub'ы
  на core-entity для cross-extension references (@key + @external)
- HealthController GET /_health — обязательный для orchestrator'а
- loadExtensionConfig() — fail-fast загрузчик env'ов

Templates:
- Dockerfile multi-stage (builder + runtime + wget healthcheck)
- docker-compose.snippet.yaml — шаблон service'а для orchestrator'а

Контракт фиксирован Epic 10 PRD (apps-catalog/docs/epics/E10-federation-runtime.md)
и Architecture v3 (blago req 8b-architecture-v3-runtime-federation).
2026-06-03 18:33:24 +00:00

41 lines
1.3 KiB
Docker

# Multi-stage Dockerfile template для backend-расширения.
#
# Расширение должно скопировать этот файл к себе в репозиторий и кастомизировать
# при необходимости (например, добавить native deps). Базовый pattern:
# 1. install deps (cached layer)
# 2. build TypeScript → dist
# 3. runtime образ — только prod-deps + dist + healthcheck wget
# ───── builder ──────
FROM node:20-alpine AS builder
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile
COPY . .
RUN pnpm run build
# ───── runtime ──────
FROM node:20-alpine AS runtime
WORKDIR /app
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile --prod && pnpm store prune
COPY --from=builder /app/dist ./dist
EXPOSE 3001
# Orchestrator опрашивает GET /_health после up -d
HEALTHCHECK --interval=10s --timeout=3s --start-period=20s --retries=3 \
CMD wget --quiet --tries=1 --spider http://localhost:3001/_health || exit 1
CMD ["node", "dist/main.js"]