Docs

Démarrage rapide en auto-hébergement

Démarrez Multica avec Docker Compose, connectez-vous, puis reliez votre premier ordinateur.

L'auto-hébergement de Multica comporte deux parties :

PartieCe qu'elle exécuteOù elle se trouve
Service MulticaWeb, API et PostgreSQLUne machine sur laquelle Docker est installé
OrdinateurLe daemon Multica et les outils de codage IAL'ordinateur sur lequel les développeurs travaillent réellement

Il peut s'agir de la même machine ou de machines distinctes. L'auto-hébergement ne remplace que la partie Multica Cloud.

Ce guide utilise Docker Compose. Pour un déploiement sur Kubernetes, consultez le guide d'auto-hébergement dans le dépôt.

Avant de commencer

La machine qui exécute le service Multica a besoin de :

  • Docker Engine ou Docker Desktop, avec docker compose fonctionnel
  • Git, Make, curl et OpenSSL
  • Les ports 3000 et 8080 libres sur la machine

Vérifiez d'abord que Docker et Compose sont disponibles :

docker info
docker compose version

Multica utilise Compose v2, invoqué via docker compose. L'ancien docker-compose v1 n'est pas pris en charge.

L'ordinateur doit également disposer d'au moins un outil de codage IA installé et connecté, comme Claude Code, Codex ou Cursor. Le CLI Multica est installé à l'étape 5.

Démarrer Multica

Sur la machine qui fera tourner le service :

git clone --depth 1 https://github.com/multica-ai/multica.git
cd multica
make selfhost

Relancer make selfhost réutilise le .env et les volumes existants ; les secrets ne sont pas régénérés.

make selfhost télécharge les images publiées et ne compile pas le code de votre copie locale. Pour tester le code source local, utilisez make selfhost-build.

Les images publiées suivent le tag de version le plus récent, alors qu'un simple git clone récupère main, qui a généralement de l'avance. Si vous compilez quoi que ce soit à partir de cette copie locale (le CLI, ou des images via make selfhost-build), basculez d'abord sur le tag de version correspondant, afin que les binaires compilés et les conteneurs en cours d'exécution restent sur la même version :

git fetch --tags --depth 1
git checkout $(git tag -l 'v*' --sort=-v:refname | head -1)

Vérifier que les services sont prêts

Vérifiez l'état des conteneurs :

docker compose -f docker-compose.selfhost.yml ps

postgres doit afficher healthy, et backend et frontend doivent être en cours d'exécution. Vérifiez ensuite le backend, la base de données et les migrations :

curl -fsS http://localhost:8080/readyz

La réponse attendue est :

{"status":"ok","checks":{"db":"ok","migrations":"ok"}}

Le conteneur backend exécute les migrations de base de données à chaque démarrage, avant de servir les requêtes ; il n'y a aucune commande de migration manuelle à lancer.

Choisir le mode d'accès

Ouvrez directement http://localhost:3000. Vous n'aurez pas non plus besoin de fournir d'URL lorsque vous lancerez multica setup self-host plus tard.

Se connecter et créer un espace de travail

Ouvrez http://localhost:3000 en local, ou le https://app.example.com que vous venez de configurer, puis saisissez votre adresse e-mail pour demander un code de vérification.

Aucun service d'e-mail n'est configuré par défaut. Après avoir demandé un code, lisez-le dans les journaux du backend :

docker compose -f docker-compose.selfhost.yml logs backend \
  | grep "Verification code"

Les journaux contiennent une ligne comme celle-ci :

[DEV] Verification code for you@example.com: 123456

Saisissez le code et créez votre premier espace de travail. Une fois Resend ou SMTP configuré, les codes sont envoyés par e-mail et les membres n'ont plus besoin de lire les journaux des conteneurs ; consultez Configuration de l'authentification.

Les déploiements auto-hébergés utilisent par défaut APP_ENV=production, qui désactive les codes de vérification fixes. Ne définissez pas MULTICA_DEV_VERIFICATION_CODE sur une instance publique.

Connecter un ordinateur

Lancez les commandes ci-dessous sur l'ordinateur qui fait tourner vos outils de codage IA, qui n'est pas forcément le serveur qui fait tourner Docker.

Les exécutions disposent de toutes les permissions de l'utilisateur qui fait tourner le daemon : elles peuvent lire et écrire tout ce à quoi cet utilisateur a accès. Faites tourner le daemon sous un utilisateur Unix dédié, dans un conteneur ou dans une VM plutôt que sous votre compte personnel. Consultez le modèle de sécurité.

Installez d'abord le CLI Multica :

curl -fsSL https://raw.githubusercontent.com/multica-ai/multica/main/scripts/install.sh | bash

Reliez ensuite le CLI à votre service. Choisissez l'endroit où tourne le service Multica :

multica setup self-host

Si le service tourne sur une autre machine, passez les deux URL configurées précédemment. La commande vérifie d'abord <server-url>/health, puis ouvre un navigateur pour terminer la connexion. Une fois la connexion effectuée, elle enregistre les identifiants en local et démarre le daemon. Une erreur Server not reachable à cette étape signifie que la sonde n'a pas obtenu de 200 sur /health. Trois causes sont possibles : le proxy transmet tout à une version web qui ne relaie pas ce chemin ; le proxy ne route pas du tout /health vers le backend ; ou une défaillance de plus bas niveau (DNS, TLS, pare-feu, délai d'attente dépassé, 5xx renvoyé par le backend). Consultez Dépannage.

Vérifiez la connexion :

multica daemon status

La sortie doit afficher :

  • Daemon: running
  • Agents, qui liste les outils de codage IA installés sur cette machine
  • Workspaces supérieur à 0

Terminer la première exécution

De retour dans Multica, dès qu'un runtime en ligne apparaît dans la liste des runtimes, créez un agent et assignez-lui votre première tâche.

Lorsque l'exécution apparaît comme terminée et que la réponse de l'agent s'affiche dans la chronologie, le service auto-hébergé, l'ordinateur et l'outil de codage IA sont tous connectés. Pour le détail, consultez les étapes 3 à 5 du démarrage rapide.

Commandes d'administration courantes

Lancez-les toutes depuis le répertoire du dépôt multica :

# Vérifier l'état
docker compose -f docker-compose.selfhost.yml ps

# Suivre les journaux du backend
docker compose -f docker-compose.selfhost.yml logs -f backend

# Appliquer les modifications de .env
docker compose -f docker-compose.selfhost.yml up -d

# Arrêter les services en conservant les volumes
docker compose -f docker-compose.selfhost.yml down

docker compose down conserve pgdata et backend_uploads. Ajouter -v supprime ces volumes, base de données comprise ; n'exécutez pas docker compose down -v, sauf si vous avez l'intention d'effacer l'instance.

Mise à niveau

Vérifier que le tag d'image n'est pas figé

Les deux images sont résolues en ${MULTICA_IMAGE_TAG:-latest} (docker-compose.selfhost.yml, services.backend.image / services.frontend.image), et .env.example fournit MULTICA_IMAGE_TAG=latest.

grep MULTICA_IMAGE_TAG .env
# MULTICA_IMAGE_TAG=v0.4.5   ← figé : remplacez-le d'abord par `latest` (ou la version souhaitée)

Si vous avez figé MULTICA_IMAGE_TAG, les commandes de mise à niveau ci-dessous ne mettent rien à niveau. pull récupère simplement de nouveau ce même tag et vous restez sur l'ancienne version, sans erreur ni avertissement.

Sauvegarder Postgres

Les migrations ne vont que vers l'avant ; faites donc un dump avant de mettre à niveau un déploiement auquel vous tenez :

docker compose -f docker-compose.selfhost.yml exec -T postgres \
  pg_dump -U multica multica > multica-backup.sql && gzip multica-backup.sql

Utilisez vos propres POSTGRES_USER / POSTGRES_DB de .env si vous avez modifié les valeurs par défaut multica. Les données résident dans le volume nommé multica_pgdata, qui survit à docker compose down, mais pas à down -v.

Ne redirigez pas pg_dump directement vers gzip par un pipe. Un shell renvoie le code de sortie de la dernière commande d'un pipeline : pg_dump … | gzip > backup.sql.gz se termine donc avec 0 même si le dump a échoué, ce qui laisse une archive de 20 octets parfaitement valide, mais vide. Rediriger d'abord vers un fichier fait compter le code de sortie de pg_dump lui-même, et && ne compresse qu'un dump qui a réellement réussi.

Télécharger les nouvelles images et recréer les conteneurs

Sur une installation existante, les deux commandes produisent le même résultat : la cible selfhost du Makefile exécute les mêmes docker compose pull + up -d, et en plus crée .env s'il est absent et attend /health avant d'afficher un résumé de l'état. Choisissez celle que vous préférez :

cd multica
git pull --ff-only
make selfhost

Comme à l'étape 2, le conteneur backend exécute ./migrate up au démarrage (docker/entrypoint.sh) avant de servir le trafic. Il n'y a pas de commande de mise à niveau distincte : démarrer la nouvelle image est l'étape de migration. Pour suivre le déroulement :

docker compose -f docker-compose.selfhost.yml logs -f backend

Les migrations qui complètent rétroactivement des données historiques (comme la 103) terminent aussi ce remplissage automatiquement. Dans de rares cas, le remplissage automatique échoue avec refusing to drop legacy daily rollups ; consultez Dépannage.

Vérifier avec /readyz, pas /health

curl -s localhost:8080/readyz
# {"status":"ok","checks":{"db":"ok","migrations":"ok"}}

Toute réponse autre qu'un HTTP 200 avec les deux vérifications à ok signifie que la nouvelle version n'a pas terminé ses migrations ; consultez les journaux du backend avant de lui envoyer du trafic.

/health est une sonde de vivacité (liveness) : elle renvoie {"status":"ok"} tant que le processus tourne, y compris lorsque les migrations ont échoué. /readyz (readyHandler, enregistré dans server/cmd/server/router.go ; /healthz en est un alias) vérifie la base de données et l'ensemble des migrations appliquées : c'est donc elle qui détecte une mise à niveau ratée.

Problèmes courants

SymptômeÀ vérifier en premier
/readyz ne renvoie pas okExécutez docker compose -f docker-compose.selfhost.yml logs backend postgres.
Aucun code de vérification n'arriveDemandez un code, puis cherchez Verification code dans les journaux du backend.
setup self-host signale que le serveur est injoignableDepuis l'ordinateur, envoyez une requête à https://api.example.com/health pour confirmer que le DNS, le TLS et le proxy inverse sont tous joignables. Un 404 signifie que le proxy envoie /health à une ancienne version web qui ne le relaie pas : routez-le vers le backend (Dépannage).
Le daemon n'affiche rien sous AgentsVérifiez que les outils de codage IA sont dans le PATH et connectés, puis exécutez multica daemon restart.
Les tâches restent en file d'attenteExécutez multica daemon status pour confirmer que le daemon tourne et qu'il est connecté à l'espace de travail.

Pour d'autres scénarios, consultez Dépannage.

Étapes suivantes

Sur cette page