Appuyez sur / pour rechercher

Toute la documentation
docs Faites-le tourner quelque part Auto-hébergement

S’exécute surAuto-hébergé

selfhost ▸ votre serveur

Votre serveur, votre coordinateur.

Le coordinateur open-core tourne sur du matériel qui vous appartient. La seule exigence, c’est Docker — aucune base, aucun cache, aucune file à exploiter, et aucune restriction de fonctionnalité dans ce qui est livré.

AGPL-3.0-only. L’offre de source est servie par votre propre installation, sur /api/about.

install ▸ trois commandes

Mettez-le debout.

install.sh

git clone https://github.com/usewrit/writ.git && cd writ
./scripts/gen-env.sh
docker compose up -d --build

Puis ouvrez http://localhost:8000 et créez votre compte. Le premier build est lent parce que le runtime d’extraction documentaire et d’OCR est intégré : l’extraction fonctionne hors ligne ensuite.

Le coordinateur ne lance aucun navigateur lui-même. Rien ne s’exécute tant que vous n’avez pas connecté d’agent — c’est le principe, pas une limite d’une version gratuite.

Connecter le premier agent

Dans l’app : Fleet → Connect a new agent, qui fabrique un code d’appairage. Puis, sur la machine qui fera le travail :

connect-agent.sh

curl -fsSL http://localhost:8000/agent.sh | sh -s -- WRIT-4K2P-9XQ

Les codes d’appairage sont à usage unique et expirent en 15 minutes. L’agent appelle le coordinateur vers l’extérieur : aucun port entrant à ouvrir sur la machine.

domaine ▸ une commande

Domaine public et HTTPS.

Une commande fait passer une installation de localhost à un vrai nom d’hôte avec un vrai certificat :

deploy.sh

./scripts/deploy.sh writ.example.com [email protected]
  1. Vérifie Docker, les ports, et que votre domaine pointe déjà sur ce serveur.
  2. Écrit tous les réglages dérivés du domaine dans le fichier d’environnement, de façon cohérente.
  3. Lève le reverse proxy fourni avec des certificats Let’s Encrypt automatiques.
  4. Attend le certificat et vérifie l’URL HTTPS en direct.

Elle est rejouable sans risque : servez-vous-en pour changer de domaine, réparer un déploiement à moitié fini, ou après un docker compose down. Les secrets existants ne sont jamais renouvelés.

Au quotidien

Du Docker Compose ordinaire, parce que ce n’est rien d’autre. Ajoutez --profile tls à ces commandes si vous avez déployé avec le reverse proxy :

operate.sh

docker compose logs -f
docker compose restart
docker compose down

# Removes the data volumes too — this deletes your data.
docker compose down -v

# Add --profile tls to any of these if you deployed with the reverse proxy.
docker compose --profile tls logs -f

secrets ▸ huit obligatoires

Les secrets sans lesquels la stack ne démarre pas.

./scripts/gen-env.sh les génère tous les huit pour vous. En production, la stack refuse de démarrer si l’un d’eux est absent, vide, ou plus court que 32 caractères :

WRIT_JWT_SECRET
API_SECRET_KEY
HMAC_SECRET_KEY
RECORDER_AUTH_SECRET
INTERNAL_API_SECRET
GATEWAY_SECRET
DOC_EXTRACT_SECRET
SECRET_ENCRYPTION_KEY

Sauvegardez SECRET_ENCRYPTION_KEY ailleurs que sur le volume de données. C’est la clé qui chiffre vos secrets stockés. Perdez-la et ces secrets sont irrécupérables — ni par vous, ni par qui que ce soit.

Réglages de production

Quatre réglages pèsent vraiment une fois passé localhost :

RéglagePourquoi c’est important
WRIT_PUBLIC_URLStructurant : les agents l’appellent et le script d’installation l’embarque. La production refuse de démarrer sans lui.
ENVIRONMENT=productionGardez-le. C’est lui qui impose la force des secrets et les règles ci-dessous.
CORS_ORIGINSIndiquez des origines explicites. Un joker est refusé en production.
FORWARDED_ALLOW_IPSÀ définir derrière votre propre proxy, pour que les adresses clientes soient lues correctement.

exécution ▸ deux conteneurs

Ce qui tourne réellement.

Deux conteneurs, plus un reverse proxy optionnel. Aucune base, aucun cache, aucune file externe à exploiter, sauvegarder ou mettre à jour.

ConteneurPortCe que c’est
Coordinateur8000L’API, l’application web, et sa propre base intégrée.
Extraction documentaire8092Extraction de documents et OCR, embarquée pour fonctionner hors ligne.
Reverse proxy80 · 443Optionnel, sous le profil compose tls. Certificats automatiques.

Les deux services exposent un endpoint de santé, pour que votre supervision ait quelque chose à interroger.

compte ▸ propriétaire unique

Le premier compte.

Renseignez l’e-mail, le mot de passe et le nom de l’administrateur dans le fichier d’environnement avant le premier démarrage — ou laissez le mot de passe vide et terminez l’installation dans le navigateur, avec l’e-mail pré-rempli sur la page de configuration.

WRIT_ADMIN_EMAILL’e-mail du propriétaire, ou simplement l’adresse pré-remplie sur la page de configuration.
WRIT_ADMIN_PASSWORDLaissez vide pour terminer l’installation dans le navigateur.
WRIT_ADMIN_NAMENom affiché du compte propriétaire.

Ce build est à propriétaire unique : une fois un compte créé, une seconde inscription est refusée en 403. Il n’y a pas de réinitialisation de mot de passe par e-mail — récupérez avec le script de réinitialisation fourni, que vous lancez sur le serveur lui-même.

mcp ▸ writ-selfhost

Pointer un assistant vers votre coordinateur.

Votre coordinateur s’enregistre comme writ-selfhost, volontairement — pour cohabiter avec l’app Writ Desktop, qui s’enregistre comme writ, et avec Writ Cloud, qui s’enregistre comme writ-cloud.

connect-mcp.sh

claude mcp add writ-selfhost -e WRIT_API_KEY=<YOUR_API_KEY> \
  -- npx -y writ-mcp --url http://localhost:8000

La clé API doit porter le scope mcp:execute, sinon chaque appel est refusé. Ajoutez à côté les scopes de ressources que vous voulez donner à l’assistant.

périmètre ▸ dedans et dehors

Ce qui est dans la boîte, et ce qui n’y est pas.

Inclus, sans restriction de fonctionnalité

Tout ceci est livré dans le build auto-hébergé et n’est bridé par aucun plan :

  • Enregistrement et édition des étapes
  • L’assistant IA dans l’enregistreur, avec votre propre clé de fournisseur
  • Personas avec TOTP et OTP, et sessions chaudes
  • Exécution et planification
  • Moniteurs — disponibilité, certificats et historique des changements
  • Automatisations
  • Crawl distribué sur votre propre flotte
  • Extraction documentaire et OCR
  • Publication d’endpoints REST
  • Outils MCP
  • Une surface de chat compatible OpenAI
  • Datasets, avec export

Absent du build auto-hébergé

Ce sont des surfaces que Writ exploite plutôt qu’il ne livre. Elles sont absentes, pas dégradées :

  • La marketplace
  • La facturation et l’application des plans
  • Les organisations multi-tenants
  • L’IA gérée — l’auto-hébergement fonctionne uniquement avec vos propres clés
  • La sortie résidentielle gérée
  • Les agents cloud provisionnés et l’autoscaling
  • SSO et SCIM
  • Scribe

mise à jour ▸ licence

Mises à jour et licence.

Pour mettre à jour, tirez le dépôt et reconstruisez — les trois mêmes commandes qu’au départ, sans le clone.

Sous licence AGPL-3.0-only, sauf le connecteur MCP (MIT) et les polices embarquées (SIL OFL 1.1). Comme il s’agit d’une licence copyleft réseau, votre installation sert sa propre offre de source sur /api/about, liée depuis l’écran de connexion et depuis les réglages.

faq

Questions d’auto-hébergement, répondues.

De quoi ai-je besoin sur le serveur ?
De Docker, et de rien d’autre. Aucune base, aucun cache, aucune file externe à installer ou exploiter — le coordinateur porte sa propre base intégrée, et le runtime d’extraction documentaire est intégré à l’image, si bien que l’extraction fonctionne hors ligne.
Pourquoi rien ne s’exécute après avoir levé la stack ?
Parce que le coordinateur ne lance aucun navigateur lui-même. Connectez un agent depuis Fleet → Connect a new agent, puis lancez la ligne d’installation sur la machine qui fera le travail. Les codes d’appairage sont à usage unique et expirent en 15 minutes.
Que se passe-t-il si je perds SECRET_ENCRYPTION_KEY ?
Vos secrets stockés deviennent irrécupérables. C’est la clé qui les chiffre : sauvegardez-la ailleurs que sur le volume de données — une sauvegarde qui contient les deux est à une panne près de ne servir à rien.
Comment le mettre sur un vrai domaine en HTTPS ?
./scripts/deploy.sh writ.example.com [email protected]. Elle vérifie le DNS et les ports, écrit le fichier d’environnement, lève le reverse proxy fourni avec des certificats Let’s Encrypt automatiques, et vérifie l’URL en direct. Elle est rejouable sans risque et ne renouvelle jamais les secrets existants.
Puis-je ajouter un second utilisateur ?
Pas dans ce build — il est à propriétaire unique, et une seconde inscription est refusée en 403. Les organisations multi-tenants, le SSO et SCIM sont des surfaces exploitées par le cloud et sont absentes ici.
J’ai oublié le mot de passe admin et il n’y a pas d’e-mail de réinitialisation.
C’est exact — il n’y a pas de réinitialisation par e-mail dans le build auto-hébergé. Récupérez avec le script de réinitialisation fourni, lancé sur le serveur lui-même. Puisque vous avez déjà l’accès serveur, c’est la même frontière de confiance.

fin ▸ déployer

Clonez-le et levez-le.

Trois commandes pour un coordinateur qui fonctionne, une de plus pour le mettre sur votre domaine.