LogoKalli
Server

Deployment

Déploiement du serveur

Cette page décrit comment déployer l'API (Bun + Hono + ORPC) et configurer la base de données PostgreSQL.

Prérequis

  • PostgreSQL accessible (DB gérée par Drizzle ORM)
  • Variables d'environnement renseignées (voir apps/server/.env-example)
  • Runtime: Bun

Variables d'environnement

Fichier .env (copier depuis apps/server/.env-example):

  • DATABASE_URL — chaîne de connexion PostgreSQL
  • CORS_ORIGIN — origine autorisée (ex: http://localhost:3001)
  • BETTER_AUTH_SECRET, BETTER_AUTH_URL — Better Auth
  • DOCUMENT_PROCESSOR_URL — URL du microservice document-processor (ex: http://localhost:8001)
  • INDEX_API_URL — URL de l'Index API du chatbot (ex: http://localhost:8502)
  • RESEND_API_KEY, EMAIL_FROM — emails (reset / notifications)
  • MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET, MICROSOFT_TENANT_ID — OAuth Microsoft
  • I18N_JSON — JSON i18n inline pour le frontend (alternatif à /app/i18n.json)

Ports & routes

  • Health: GET /, GET /health, GET /ready
  • Auth: POST/GET /api/auth/**
  • RPC: /rpc/* (ORPC)
  • CORS dynamique pour localhost + CORS_ORIGIN

Dossier base de données

  • apps/server/src/db/
    • index.ts — initialisation Drizzle (DATABASE_URL)
    • schema/ — définitions Drizzle (auth.ts, naivi.ts)
  • Config Drizzle: apps/server/drizzle.config.ts
  • Migrations (générées): apps/server/drizzle/

Procédure (local / on-prem)

  1. Installer dépendances à la racine
bun install
  1. Créer .env dans apps/server/ à partir de .env-example
  2. (Optionnel) Générer et appliquer migrations avec Drizzle
# dans apps/server
bun run db:generate   # génère SQL dans ./drizzle
bun run db:push       # pousse le schéma courant
# ou
bun run db:migrate    # applique les migrations existantes
  1. Démarrer le serveur en dev
# dans apps/server
bun run dev

Le serveur Hono est exposé par Bun (port géré par Bun, logs dans la console). Health endpoints doivent renvoyer OK.

  1. Build/Start (prod)
# build TS
bun run build
# démarrer depuis dist
bun run start

Conteneurisation (exemple Dockerfile minimal)

FROM oven/bun:1 AS base
WORKDIR /app
COPY apps/server/package.json apps/server/tsconfig.json apps/server/tsconfig.paths.json ./
COPY apps/server/src ./src
RUN bun install
RUN bun run build

FROM oven/bun:1
WORKDIR /app
COPY --from=base /app/dist ./dist
ENV NODE_ENV=production
# DATABASE_URL, CORS_ORIGIN, BETTER_AUTH_*, RESEND_*, MICROSOFT_* fournis à l'exécution
CMD ["bun", "run", "dist/src/index.js"]

Réseaux & CORS

  • Assurez-vous que CORS_ORIGIN pointe vers l'URL du front (ex: Vite http://localhost:3001).
  • Les cookies de session sont envoyés avec credentials: true côté ORPC.

Observabilité

  • Logs via hono/logger
  • Health/Ready endpoints pour probes (Kubernetes/HELM)

Intégration Frontend

  • Auth client (apps/web/src/lib/auth-client.ts) doit utiliser une URL cohérente avec le montage serveur:
    • Si l'auth est montée sur /api/auth/**, utilisez baseURL = ${VITE_SERVER_URL}/api/auth (voir mémoire: les différences d'env peuvent sinon provoquer des 404 sur /sign-in/email).

Conseils

  • Sécuriser .env et secrets (ne pas exposer côté client)
  • Séparer les environnements (dev/staging/prod) avec des DATABASE_URL distinctes
  • Automatiser les migrations via CI/CD (Drizzle db:generate, db:migrate)