logo
icon

Multica

Gestión de tareas nativa de IA donde los agentes de código son compañeros de pleno derecho. Despliega PostgreSQL (pgvector), el backend en Go y la app web en Next.js.

template cover
Implementado0 veces
Editorpseudoyu
Creado2026-07-31
Etiquetas
Developer ToolsProject Management

Multica en Zeabur

Tres servicios, sin necesidad de almacenamiento de objetos externo. Los adjuntos van a un volumen persistente en el backend.

Después de desplegar

  1. Abre tu dominio. Introduce un correo para pedir un código de acceso.
  2. Si dejaste RESEND_API_KEY vacío, lee el código en el log del servicio backend — busca Verification code.
  3. Crea tu espacio de trabajo.
  4. Cierra la instancia: define ALLOW_SIGNUP=false y DISABLE_WORKSPACE_CREATION=true en el backend y reinícialo.

Conectar un runtime de agentes

El daemon se ejecuta en tu propio ordenador, no en Zeabur. El servidor de Multica es solo la API, el hub de WebSocket y la base de datos.

brew install multica-ai/tap/multica
multica setup self-host \
  --server-url https://TU_DOMINIO_API \
  --app-url    https://TU_DOMINIO

Las dos URL son distintas a propósito. --app-url es la aplicación web donde inicias sesión; --server-url es el dominio de la API, que la CLI comprueba en /health antes de guardar nada. Esa ruta no la reenvía la aplicación web, así que apuntar --server-url al dominio de la app hace que la configuración informe de que el servidor no es accesible.

Los navegadores no se ven afectados en ningún caso: permanecen en el dominio de la app para todo, incluido el WebSocket, por lo que las cookies nunca cruzan orígenes y COOKIE_DOMAIN se queda sin definir.

Cambiar el dominio más adelante

El lado del navegador sigue al host que visitas: la aplicación web sirve /api, /auth, /uploads y /ws desde su propio origen, y el cliente deriva wss:// de window.location. Nada de eso está fijado a un dominio, así que la interfaz y el WebSocket siguen funcionando en uno nuevo sin configuración.

El backend es la parte que no se entera. Nunca lee el host de la petición: todas las URL públicas que emite vienen de variables de entorno. Tras asignar un dominio nuevo, actualiza estas en el servicio backend y reinícialo:

VariableDale el valorQué se rompe si queda obsoleta
MULTICA_APP_URLnuevo origen de la appEl onboarding muestra el host antiguo; las invitaciones y los correos con código enlazan a él
FRONTEND_ORIGINnuevo origen de la appRespaldo de lo anterior; comprobación de origen CSRF
CORS_ALLOWED_ORIGINSnuevo origen de la appLas llamadas de origen cruzado se rechazan
MULTICA_PUBLIC_URLnuevo origen de la APImultica setup self-host entrega al daemon la URL antigua

Con esquema y sin barra final. Todas fallan en silencio: la aplicación sigue cargando y parece correcta. Después de cambiarlas, abre /api/config y confirma que daemon_app_url y daemon_server_url coinciden con los dominios que estás usando realmente.

Una advertencia que conviene conocer antes de asociar un dominio propio: MULTICA_PUBLIC_URL viene como ${ZEABUR_API_URL}, y esa variable integrada se resuelve al dominio *.zeabur.app generado automáticamente incluso después de asociar uno personalizado junto a él. No sigue al dominio personalizado. Así que en cuanto pongas tu propio dominio en el backend, sustituye ${ZEABUR_API_URL} por ese dominio, escrito completo.

Después vuelve a ejecutar multica setup self-host con el nuevo --server-url en cada máquina que ejecute un daemon: la CLI guarda la URL, así que los daemons existentes seguirán usando la antigua hasta que lo hagas.

Almacenamiento

S3_BUCKET se deja sin definir, así que el backend recurre al disco local y escribe en el volumen /app/data/uploads. Para pasar más adelante a almacenamiento compatible con S3 (R2, MinIO, B2), define S3_BUCKET, AWS_ENDPOINT_URL, AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY en el backend. Añade ATTACHMENT_DOWNLOAD_MODE=proxy cuando el endpoint no sea accesible desde el navegador. Los archivos existentes no se migran automáticamente.

Nota sobre escalado

El volumen de uploads fija el backend a una sola réplica. Pasa primero a S3 si necesitas más, y añade REDIS_URL: sin Redis, los eventos en tiempo real recurren a la memoria del proceso y la limitación de peticiones de autenticación queda desactivada.

Licencia y atribución

Multica se distribuye bajo una Apache License 2.0 modificada con condiciones adicionales sobre uso comercial alojado/incrustado, marca y atribución. El uso interno dentro de una sola organización no requiere licencia comercial; ofrecerlo como servicio a terceros sí. Retirar el nombre, el logotipo o los avisos de copyright de Multica de la interfaz requiere una exención de marca por escrito.

Código: https://github.com/multica-ai/multica · Licencia: https://github.com/multica-ai/multica/blob/main/LICENSE