Skip to main content
Portée : un déploiement pilote à instance unique — pas encore un self-serve public. docker-compose.yml reste la référence pour le développement local ; cette page couvre la mise en ligne réelle de l’API, telle que documentée dans docs/DEPLOY.md.

Image

Le Dockerfile (multi-stage, basé sur uv) construit une image qui, au démarrage du conteneur, applique les migrations Alembic puis lance uvicorn sur le port 8100.
Une seule instance à la fois : alembic upgrade head tourne à chaque démarrage de conteneur (voir le CMD ci-dessous), et plusieurs instances qui démarrent en même temps entreraient en course sur les migrations. Découper « lancer les migrations » et « démarrer l’app » en deux étapes séparées avant de scaler au-delà d’une instance.
haki (sdk/python) est une dépendance path éditable ([tool.uv.sources] de pyproject.toml), donc le code du SDK doit être dans le contexte de build avant uv sync — pas seulement app/. C’est pourquoi le Dockerfile copie sdk/python avant la première passe uv sync.

Cible recommandée : Fly.io

Choisie parce que c’est du Docker standard dessous (pas de verrouillage fort) et que Fly propose un Postgres managé avec l’extension pgvector.
1

Détecter le Dockerfile

Crée fly.toml.
2

Postgres managé

3

Activer pgvector

Une fois sur la base, après fly postgres attach (les migrations Alembic supposent CREATE EXTENSION IF NOT EXISTS vector, déjà dans alembic/versions/0001_initial.py — rien à faire côté Fly au-delà d’avoir une image Postgres qui supporte l’extension).
4

Variables d'environnement

fly secrets set NOM=valeur pour chacune — voir .env.example à la racine du dépôt pour la liste complète et le rôle de chaque variable.
5

Déployer

Console (Next.js)

Déployée séparément sur Vercel (adapté nativement à Next.js) :
Variables à définir côté Vercel : NEXT_PUBLIC_HAKI_API_URL (l’URL Fly.io de l’API), NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY / CLERK_SECRET_KEY (Clerk), HAKI_CONSOLE_SERVICE_KEY (même valeur que côté API — jamais NEXT_PUBLIC_*, elle ne doit jamais atteindre le navigateur).

Sauvegardes

Non couvertes par cette page — voir l’audit production (section sauvegardes) : c’est un prérequis avant d’accepter la moindre donnée d’un tiers, à traiter séparément de la mise en ligne elle-même.