883e597d40
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).
41 lines
1.3 KiB
Docker
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"]
|