Despliegue Enterprise
Guía de despliegue autoalojado
Documentación de referencia para clientes Enterprise que despliegan Ilveno en su propia infraestructura bajo contrato. Los clientes de Ilveno Cloud no necesitan nada de esto. Se asumen conocimientos básicos de Docker.
1. Requisitos
- Docker 24+ y docker compose v2
- Mínimo 2 GB de RAM, 10 GB de disco
- Proxy inverso con HTTPS (Cloudflare, Traefik, nginx)
- Un dominio o subdominio (p. ej. ilveno.yourcompany.com)
- Tu ILVENO_LICENSE_KEY adquirida (enviada por correo)
- Tu token de GHCR (para descargar la imagen, enviado por correo)
2. Preparar el directorio de trabajo
mkdir ilveno && cd ilveno
curl -fsSL https://ilveno.com/install/docker-compose.yml -o docker-compose.yml
curl -fsSL https://ilveno.com/install/env.example -o .env3. Rellenar el archivo .env
Pega los valores del correo de tu compra:
# Domain
BETTER_AUTH_URL=https://ilveno.yourcompany.com
# Database password (generate randomly)
DB_PASSWORD=$(openssl rand -hex 16)
# Better Auth secret (generate randomly)
BETTER_AUTH_SECRET=$(openssl rand -hex 32)
# Redis password (generate randomly)
REDIS_PASSWORD=$(openssl rand -hex 16)
# Cron secret (generate randomly)
CRON_SECRET=$(openssl rand -hex 32)
# License (from your purchase email)
ILVENO_LICENSE_KEY=eyJ2IjoxLCJjdXN0b21lciI6...
# License check-in is ON by default. Uncomment to run fully air-gapped:
# ILVENO_LICENSE_CHECKIN_URL=off
# AG Grid Enterprise license (data-grid block renders watermarked without it)
AG_GRID_LICENSE_KEY=
# OpenAI API key ("ask the grid" feature)
OPENAI_API_KEY=
# R2 backup (optional)
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=Ejecuta los comandos openssl rand en tu terminal y pega los resultados. No los pierdas: son necesarios para acceder a la base de datos.
Check-in de licencia (y cómo desactivarlo)
Ilveno envía una pequeña baliza de licencia a admin.ilveno.com aproximadamente cada 12 horas y recibe a cambio un derecho de uso firmado, de modo que los cambios de plan, usuarios y caducidad llegan a tu instalación sin un nuevo archivo de clave. Envía el identificador de tu licencia, un hash de un solo sentido de BETTER_AUTH_URL, los usuarios en uso, la versión de Ilveno y un nonce de un solo uso — nunca el contenido del espacio de trabajo, nombres de usuario ni direcciones de correo.
ILVENO_LICENSE_CHECKIN_URL=offAñade esta línea a .env para una instalación totalmente aislada (air-gapped). Tu clave firmada sigue funcionando sin conexión al nivel que compraste; los cambios de plan llegan entonces como una clave reemitida en su lugar.
Módulos opcionales y ajustes
El .env descargado incluye más interruptores que el bloque anterior. Todo aquí está comentado por defecto — descomenta solo lo que necesites:
- Salas de reunión — descomenta el servicio livekit y define LIVEKIT_URL y LIVEKIT_API_SECRET. ROOMS_MAX_CONCURRENT limita los participantes simultáneos en todas las salas.
- Subtítulos en vivo de sala (50 idiomas hablados → 51 idiomas de subtítulos) — añade el servicio translator, define ROOMS_TRANSLATION_ENABLED=true junto con tu propia DEEPGRAM_API_KEY y OPENAI_API_KEY. El uso se factura a tus propias cuentas. Los idiomas ofrecidos en los selectores los eliges tú con ROOMS_SPOKEN_LANGUAGES (por defecto: los siete idiomas de la interfaz).
- Copias de seguridad externas — descomenta el servicio r2-sync y rellena los valores R2_* para reflejar cada noche los volcados de la base de datos y los archivos subidos en Cloudflare R2.
- Retención — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS y el resto anulan cuánto tiempo se conserva cada tipo de registro.
- Notificaciones de Helpdesk — NETGSM_* envía un SMS cuando una llamada se marca como no localizable; RESEND_API_KEY y RESEND_FROM activan los informes de actividad por correo. En blanco desactiva ambos.
- Seguimiento de errores — ERROR_AI_ENABLED=0 desactiva el análisis de causa raíz con IA (las trazas de pila se envían a OpenAI cuando está activado). WEBHOOK_ALLOW_PRIVATE=1 permite que los webhooks de tablero lleguen a receptores de red privada.
- Operaciones — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* y UPLOAD_MIN_FREE_BYTES ajustan el tamaño de los pools, el tiempo de vaciado, los límites de conexión en tiempo real y la protección de espacio libre.
Cada valor está documentado en línea en el .env que descargaste. En blanco significa que se aplica el valor predeterminado.
Hardening: encryption at rest
Like other self-hosted collaboration tools, Ilveno stores workspace content as regular PostgreSQL rows so search and exports work; application-layer secrets (integration credentials) are additionally encrypted. Protecting the data at rest is done at the disk layer of your server:
- Encrypt the disk or volume that holds your Docker volumes — LUKS on bare-metal Linux, or your cloud provider's encrypted block storage.
- Database dumps land in the dbbackups volume on the same disk. If you copy them elsewhere, keep them encrypted in transit and at the destination.
- If you enable the optional R2 backup sync, Cloudflare encrypts stored objects at rest; scope the API token to that single bucket.
HTTPS in front of the app is already required (step 1). Combined with disk encryption and encrypted backups this matches the at-rest baseline that SOC 2 / ISO 27001 questionnaires expect.
4. Descargar la imagen de Docker
Usa el token de GHCR que te enviamos por correo para iniciar sesión y descargar la imagen:
echo "ghp_xxxxxxxxxxxx" | docker login ghcr.io \
-u egebilge --password-stdin
docker pull ghcr.io/ilveno/ilveno:latestFija una etiqueta de versión (por ejemplo :v0.2.0) en docker-compose.yml para producción, de modo que una actualización sea algo que eliges tú y no algo que ocurre en el siguiente reinicio.
5. Ejecutarlo
docker compose up -dEl arranque inicial tarda entre 30 y 60 segundos (se ejecutan las migraciones y se levantan los contenedores).
6. Crear el primer administrador
Abre https://ilveno.yourdomain.com en un navegador. Aparece el asistente de configuración: introduce los datos de tu primer usuario. Este primer usuario se crea con el rol de superadministrador y el asistente se ejecuta una sola vez.
7. Verificar el estado de la licencia
Ve a Administración → Licencia (barra lateral). Deberían aparecer el nombre del cliente, la edición, el número de usuarios y la fecha de caducidad.
| Error | Cause / Sebep | Fix / Çözüm |
|---|---|---|
| ILVENO_LICENSE_KEY is not set | Falta la variable de entorno o se copió de forma incorrecta. | Pega la línea exacta del correo de tu compra en .env. Reinicia: docker compose up -d --force-recreate app |
| ILVENO_LICENSE_KEY is invalid: malformed envelope | El sobre se copió de forma incompleta (pegado truncado). | Selecciona y copia la línea ILVENO_LICENSE_KEY=... completa del correo. El valor debe contener un punto (.) que separe la carga útil y la firma. |
| ILVENO_LICENSE_KEY is invalid: invalid signature | Versión de imagen incorrecta, o el sobre pertenece a otro binario de proveedor. | Comprueba la etiqueta de la imagen en tu comando docker pull. Para obtener ayuda, contacta con [email protected]. |
| ILVENO_LICENSE_KEY is invalid: license revoked | La licencia fue revocada en el panel del proveedor y la instalación lo detectó en su último check-in. | Contacta con [email protected]. Si es un error, se aplica una restauración en el siguiente check-in — sin necesidad de una nueva clave. |
| LICENSE_OVER_SEAT — Cannot add new user | El límite de usuarios de tu licencia está completo. Los usuarios baneados no ocupan un puesto. | Escribe a [email protected] para aumentar el número de usuarios, o banea a quienes ya no estén. |
Renovación
Te enviamos un correo 30 días antes de la caducidad. Tras el pago, llega una nueva ILVENO_LICENSE_KEY por correo. Sustituye el valor en .env y reinicia:
docker compose up -d --force-recreate appSoporte
Correo: [email protected]
Respuesta en un plazo de 48 horas. Usa el prefijo «URGENT» en el asunto para emergencias.