Conception complete (Phase 0) pour formation-hub Acadenice : - 19 docs Merise Agile + UML + GitOps + plans (tests/deploy/ops/api) cf docs/00-readme.md pour l'index complet - Stack Docker compose (Docmost + Baserow + Postgres + Redis + MinIO local FS) compose.yml + compose.staging.yml + compose.prod.yml - CI/CD GitHub Actions skeleton (ci, deploy-staging, deploy-prod) - Bridge service skeleton (Hono + TS + Biome + Vitest + zod + pino) - Templates GitHub : PR + 3 issue types + CODEOWNERS + dependabot.yml - Scripts ops : healthcheck, backup quotidien, smoke-test post-deploy - LICENSE AGPL-3.0 + SECURITY.md + CONTRIBUTING.md + CHANGELOG.md - Diagramme drawIO archi infra (XML importable dans diagrams.net) Decisions structurelles enregistrees : - Scope CFA + Agence avec entite PERSONNE pivot multi-roles (ADR-001) - Stack composite Docmost AGPL + Baserow MIT + bridge custom (ADR-001) - Path B : UX quasi-unified via Tiptap node-views custom (ADR-002) - Monorepo trunk-based development (ADR-003) - Postgres separe Docmost/Baserow (ADR-004) - Bridge stack Node 22 + Hono (ADR-005) - Repo neuf prefere a fork Docmost - Prod-like des le jour 1 (pas MVP)
40 lines
1 KiB
Docker
40 lines
1 KiB
Docker
# Bridge service — multi-stage build
|
|
# Image finale : node 22 alpine, ~80 Mo
|
|
|
|
ARG NODE_VERSION=22-alpine
|
|
|
|
# --- Stage 1 : deps ---
|
|
FROM node:${NODE_VERSION} AS deps
|
|
WORKDIR /app
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci --only=production && npm cache clean --force
|
|
|
|
# --- Stage 2 : build ---
|
|
FROM node:${NODE_VERSION} AS build
|
|
WORKDIR /app
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
COPY tsconfig.json ./
|
|
COPY src ./src
|
|
RUN npm run build
|
|
|
|
# --- Stage 3 : runtime ---
|
|
FROM node:${NODE_VERSION} AS runtime
|
|
WORKDIR /app
|
|
|
|
# Non-root user
|
|
RUN addgroup -g 1001 -S bridge && adduser -S bridge -u 1001
|
|
USER bridge
|
|
|
|
COPY --from=deps --chown=bridge:bridge /app/node_modules ./node_modules
|
|
COPY --from=build --chown=bridge:bridge /app/dist ./dist
|
|
COPY --chown=bridge:bridge package.json ./
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PORT=4000
|
|
EXPOSE 4000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
|
|
CMD wget --quiet --tries=1 --spider http://localhost:4000/api/health || exit 1
|
|
|
|
CMD ["node", "dist/index.js"]
|