Se ejecuta enAutoalojado
En esta página
Tu servidor, tu coordinador.
El coordinador open-core corre en hardware tuyo. El único requisito es Docker — ninguna base de datos, caché ni cola externa que operar, y ninguna función capada en lo que se entrega.
install ▸ tres comandos
Levántalo.
install.sh
git clone https://github.com/usewrit/writ.git && cd writ
./scripts/gen-env.sh
docker compose up -d --build Luego abre http://localhost:8000 y crea tu cuenta. El primer build es lento porque el runtime de extracción documental y OCR va integrado: a partir de ahí la extracción funciona sin conexión.
El coordinador no lanza navegadores por sí mismo. Nada se ejecuta hasta que conectas un agente — eso es el diseño, no una limitación de una versión gratuita.
Conecta el primer agente
En la app: Fleet → Connect a new agent, que acuña un código de emparejamiento. Después, en la máquina que hará el trabajo:
connect-agent.sh
curl -fsSL http://localhost:8000/agent.sh | sh -s -- WRIT-4K2P-9XQ Los códigos de emparejamiento son de un solo uso y caducan en 15 minutos. El agente llama hacia fuera al coordinador, así que no hay puertos entrantes que abrir en la máquina.
dominio ▸ un comando
Dominio público y HTTPS.
Un comando lleva una instalación de localhost a un hostname real con un certificado real:
deploy.sh
./scripts/deploy.sh writ.example.com [email protected] - Comprueba Docker, los puertos y que tu dominio ya apunta a este servidor.
- Escribe todos los ajustes derivados del dominio en el archivo de entorno, de forma coherente.
- Levanta el proxy inverso incluido con certificados Let’s Encrypt automáticos.
- Espera al certificado y verifica la URL HTTPS en vivo.
Se puede volver a ejecutar sin riesgo: úsalo para cambiar de dominio, reparar un despliegue a medias, o después de un docker compose down. Los secretos existentes nunca se rotan.
El día a día
Docker Compose corriente, porque no es otra cosa. Añade --profile tls a cualquiera de estos si desplegaste con el proxy inverso:
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 secretos ▸ ocho obligatorios
Secretos sin los que la pila no arranca.
./scripts/gen-env.sh genera los ocho por ti. En producción la pila se niega a arrancar si alguno está ausente, vacío o mide menos de 32 caracteres:
WRIT_JWT_SECRET |
API_SECRET_KEY |
HMAC_SECRET_KEY |
RECORDER_AUTH_SECRET |
INTERNAL_API_SECRET |
GATEWAY_SECRET |
DOC_EXTRACT_SECRET |
SECRET_ENCRYPTION_KEY |
Haz copia de SECRET_ENCRYPTION_KEY en un sitio separado del volumen de datos. Es la clave con la que se cifran tus secretos guardados. Si la pierdes, esos secretos no se pueden recuperar — ni por ti ni por nadie.
Ajustes de producción
Cuatro ajustes pesan de verdad en cuanto sales de localhost:
| Ajuste | Por qué importa |
|---|---|
WRIT_PUBLIC_URL | Estructural: los agentes lo llaman y el script de instalación lo incrusta. Producción se niega a arrancar sin él. |
ENVIRONMENT=production | Mantenlo. Es lo que impone la fuerza de los secretos y las reglas de abajo. |
CORS_ORIGINS | Pon orígenes explícitos. Un comodín se rechaza en producción. |
FORWARDED_ALLOW_IPS | Ponlo cuando corras tras tu propio proxy, para que las direcciones de cliente se lean bien. |
ejecución ▸ dos contenedores
Qué corre de verdad.
Dos contenedores, más un proxy inverso opcional. No hay base de datos, caché ni cola externa que operar, respaldar o actualizar.
| Contenedor | Puerto | Qué es |
|---|---|---|
| Coordinador | 8000 | La API, la app web y su propia base de datos integrada. |
| Extracción documental | 8092 | Extracción de documentos y OCR, incluida para funcionar sin conexión. |
| Proxy inverso | 80 · 443 | Opcional, bajo el perfil de compose tls. Certificados automáticos. |
Ambos servicios exponen un endpoint de salud, para que tu monitorización tenga algo que consultar.
cuenta ▸ dueño único
La primera cuenta.
Pon el email, la contraseña y el nombre del administrador en el archivo de entorno antes del primer arranque — o deja la contraseña en blanco y termina la configuración en el navegador, con el email ya rellenado en la página de setup.
WRIT_ADMIN_EMAIL | El email del dueño, o simplemente la dirección prellenada en la página de setup. |
WRIT_ADMIN_PASSWORD | Déjala en blanco para terminar la configuración en el navegador. |
WRIT_ADMIN_NAME | Nombre visible de la cuenta del dueño. |
Este build es de dueño único: en cuanto existe una cuenta, un segundo intento de registro se rechaza con 403. No hay restablecimiento de contraseña por email — recupera con el script de reinicio incluido, que ejecutas en el propio servidor.
mcp ▸ writ-selfhost
Apunta un asistente a tu propio coordinador.
Tu coordinador se registra como writ-selfhost, a propósito — para convivir con la app Writ Desktop, que se registra como writ, y con Writ Cloud, que se registra como 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 mcp config — any Streamable-HTTP client
{
"mcpServers": {
"writ-selfhost": {
"type": "http",
"url": "http://localhost:8000/mcp",
"headers": { "Authorization": "Bearer <YOUR_API_KEY>" }
}
}
} La clave API debe llevar el scope mcp:execute, o cada llamada se rechaza. Añade junto a él los scopes de recursos que quieras darle al asistente.
alcance ▸ dentro y fuera
Qué viene en la caja y qué no.
Incluido, sin funciones capadas
Todo esto viene en el build autoalojado y no lo restringe ningún plan:
- Grabación y edición de pasos
- El asistente de IA en el grabador, con tu propia clave de proveedor
- Personas con TOTP y OTP, y sesiones calientes
- Ejecución y programación
- Monitors — disponibilidad, certificados e historial de cambios
- Automatizaciones
- Crawl distribuido sobre tu propia flota
- Extracción documental y OCR
- Publicación de endpoints REST
- Herramientas MCP
- Una superficie de chat compatible con OpenAI
- Datasets, con exportación
No está en el build autoalojado
Son superficies que Writ opera en lugar de entregar. Están ausentes, no degradadas:
- El marketplace
- Facturación y aplicación de planes
- Organizaciones multiinquilino
- IA gestionada — el autoalojamiento funciona solo con tus propias claves
- Salida residencial gestionada
- Agentes cloud aprovisionados y autoescalado
- SSO y SCIM
- Scribe
actualizar ▸ licencia
Actualizaciones y licencia.
Para actualizar, haz pull del repositorio y reconstruye — los mismos tres comandos del principio, menos el clone.
Licenciado como AGPL-3.0-only, salvo el conector MCP (MIT) y las fuentes incluidas (SIL OFL 1.1). Al ser una licencia copyleft de red, tu instalación sirve su propia oferta de código en /api/about, enlazada desde la pantalla de login y desde ajustes.
referencia ▸ siguiente
Sigue
Códigos de emparejamiento, superficie de flota y qué corre dónde.
→ Dónde se ejecutaDesktop, tus propias máquinas o un servidor tuyo.
→ MCPLos mismos workflows como herramientas para cualquier cliente MCP.
→ Managed endpointsPublica un workflow como endpoint REST.
→ Canales de notificaciónConecta alertas a email, chat o un webhook.
→ Personas y secretosLogins, TOTP y sesiones calientes.
→faq
Preguntas de autoalojamiento, respondidas.
¿Qué necesito en el servidor?
¿Por qué no se ejecuta nada tras levantar la pila?
¿Qué pasa si pierdo SECRET_ENCRYPTION_KEY?
¿Cómo lo pongo en un dominio real con HTTPS?
¿Puedo añadir un segundo usuario?
Olvidé la contraseña de admin y no hay email de reinicio.
fin ▸ desplegar
Clónalo y levántalo.
Tres comandos para un coordinador funcionando, y uno más para ponerlo en tu propio dominio.