Índice del diarioDockup / nota de campo
Note / self-host-excalidraw

Cómo autoalojar Excalidraw en 2026: colaboración, TLS y límites de los datos

Guía práctica para autoalojar Excalidraw con Docker, puertos, datos persistentes, TLS, seguridad, copias de seguridad y los fallos que impiden usarlo en producción. En 2026.

Si ya has intentado autoalojar Excalidraw, probablemente te resulte familiar este estado frustrante: la interfaz aparece, pero la colaboración falla porque su endpoint de WebSocket es incorrecto. Recrear el contenedor rara vez resuelve un desacuerdo entre las URL, el estado y las dependencias.

Este recorrido utiliza un único criterio concreto de finalización: dibujar y exportar un diagrama, compartir un enlace de colaboración mediante el servicio de salas configurado y volver a conectarse desde un segundo navegador. Cada decisión de configuración se evalúa con respecto a ese criterio, no a partir de un indicador verde del contenedor.

Restaurar Excalidraw en un host vacío

Para el despliegue base de Excalidraw, la capa del contenedor es desechable y no se necesita ningún volumen de datos. El manifiesto de recuperación no incluye datos del servidor en la imagen básica; haz copias de seguridad de cualquier servicio de colaboración independiente. Mantén el digest de la imagen, la configuración y cualquier recurso mantenido por separado bajo control de cambios.

Elimina y vuelve a crear el servicio en un entorno limpio. Después, demuestra que el cliente se reconstruye a partir de su imagen fijada y que el servicio de salas independiente restaura cualquier estado de colaboración que se comprometa a conservar. La guía del repositorio Git al despliegue en producción es el modelo relevante aquí: reconstruye el artefacto y haz copias de seguridad únicamente del estado externo que realmente exista.

No marques un directorio como persistente a menos que Excalidraw escriba allí datos relevantes. Los montajes vacíos o sin uso generan una falsa sensación de seguridad y hacen que los operadores posteriores busquen el estado en el lugar equivocado.

Analizar Excalidraw antes de tocar Docker

El proceso HTTP de Excalidraw escucha en el puerto 80; mantén ese puerto en la red de la aplicación y publica únicamente la ruta de la plataforma. El requisito del runtime local es un servidor de salas independiente y una capa de almacenamiento para la colaboración persistente. Mantén explícito su ciclo de vida para que mover Excalidraw entre hosts no cambie el comportamiento de forma silenciosa.

Documenta el límite como un contrato breve: quién es responsable del requisito, qué credencial se utiliza, qué tiempo de espera es aceptable y cómo se manifiesta el fallo. Después, ejecuta esta transacción: dibuja y exporta un diagrama, comparte un enlace de colaboración mediante el servicio de salas configurado y vuelve a conectarte desde un segundo navegador. Durante la ejecución, observa la entrega de recursos estáticos de la imagen básica; las conexiones WebSocket y el estado de las salas deben corresponder al servicio de colaboración independiente, ya que esta carga ofrece un tamaño inicial más útil que un contenedor inactivo.

Ejecución de aceptación de Excalidraw en producción

Un candidato a versión de Excalidraw obtiene tráfico al completar un escenario fijo: dibujar y exportar un diagrama, compartir un enlace de colaboración mediante el servicio de salas configurado y volver a conectarse desde un segundo navegador. Registra el digest de la imagen, la configuración efectiva no secreta, el origen público y las marcas de tiempo de ese escenario. Los datos de prueba deben ser desechables, pero lo bastante realistas como para recorrer el mismo flujo que los usuarios.

Ejecútalo después de sustituir el runtime y, a continuación, reconstruye el servicio sin datos del servidor en la imagen básica; haz copias de seguridad de cualquier servicio de colaboración independiente. La recuperación es correcta cuando el cliente se reconstruye a partir de su imagen fijada y el servicio de salas independiente restaura cualquier estado de colaboración que se comprometa a conservar. Compara con la versión anterior las mediciones de recursos de la entrega de recursos estáticos de la imagen básica; las conexiones WebSocket y el estado de las salas deben corresponder al servicio de colaboración independiente, e investiga cualquier desviación significativa antes de promover la versión.

Por último, ejecuta este fallo controlado: envía una entrada inocua cercana al límite de recursos o de formato asociado a este límite: la interfaz se carga, pero la colaboración falla porque su endpoint de WebSocket es incorrecto. Verifica que Excalidraw explique el fallo, no dañe el estado existente y se recupere cuando vuelva a cumplirse la condición válida. Guarda un fragmento de log redactado y el tiempo de recuperación. En conjunto, estas comprobaciones cubren el comportamiento, la durabilidad y la operabilidad, no solo que el proceso esté activo.

Convertir el comando local en un servicio inspeccionable

Un lanzamiento con forma de producción es deliberadamente aburrido: estado con nombre, puerto explícito y ningún secreto dentro de la imagen.

docker run -d \
  --name excalidraw \
  --restart unless-stopped \
  -p 127.0.0.1:80:80 \
  excalidraw/excalidraw:latest

El ejemplo es una base, no una pila auxiliar completa. Confirma el requisito local antes de exponer el servicio: un servidor de salas independiente y una capa de almacenamiento para la colaboración persistente. Comprueba los montajes efectivos y el listener; después, intenta dibujar y exportar un diagrama, compartir un enlace de colaboración mediante el servicio de salas configurado y volver a conectarte desde un segundo navegador. Fija la imagen que funciona antes del siguiente reinicio.

Decisiones de seguridad específicas de Excalidraw

Con Excalidraw, rotar cuentas no es la tarea de hardening, porque la imagen estándar no tiene un almacén de cuentas. Céntrate en asumir que la imagen estática por sí sola proporciona almacenamiento persistente para salas compartidas; protege las salas de colaboración privadas y no afirmes que existe colaboración persistente cuando solo se ha desplegado la imagen web de Excalidraw.

Usa HTTPS, autenticación opcional de la plataforma y un digest de imagen revisado. No montes datos del host que no estén relacionados y limita la carga representada por la entrega de recursos estáticos de la imagen básica; las conexiones WebSocket y el estado de las salas deben corresponder al servicio de colaboración independiente. Un cliente externo limpio debería recibir la compilación prevista, mientras que un cliente no autorizado debería ser rechazado antes de llegar al contenedor cuando el acceso esté restringido.

Enrutar Excalidraw sin falsear el uso de HTTPS

La emisión de TLS es solo la mitad de la ruta de Excalidraw. Sirve el cliente mediante HTTPS y configura los endpoints de colaboración por separado. Envía el tráfico internamente al puerto 80 y reenvía el esquema externo para que las URL generadas y las cookies seguras mantengan la coherencia.

Utiliza el escenario completo de Excalidraw desde una red limpia, no solo la página raíz. Un error 502 o un fallo del certificado se puede aislar con la configuración automática del dominio y TLS. Si el tráfico llega al proceso y la interfaz se carga, pero la colaboración falla porque su endpoint de WebSocket es incorrecto, diagnostica esa condición donde se produce en lugar de acumular redirecciones.

Actualizar Excalidraw sin hacer suposiciones

El indicador de servicio útil para Excalidraw es completar correctamente «dibujar y exportar un diagrama, compartir un enlace de colaboración mediante el servicio de salas configurado y volver a conectarse desde un segundo navegador». Combina ese resultado con la entrega de recursos estáticos de la imagen básica; las conexiones WebSocket y el estado de las salas deben corresponder al servicio de colaboración independiente. Una página raíz en verde no dice nada sobre la compatibilidad de la salida ni sobre el agotamiento de recursos.

Antes de sustituir la imagen, ten en cuenta este riesgo: las versiones del frontend, del servidor de salas y del almacenamiento deben probarse conjuntamente, en lugar de asumir que el cliente estático es el propietario de los datos compartidos. Prueba entradas representativas y cercanas a los límites con ambas versiones y conserva el digest anterior hasta que el candidato supere las comprobaciones. Si la interfaz se carga, pero la colaboración falla porque su endpoint de WebSocket es incorrecto, inspecciona el formato de la solicitud, el comportamiento del cliente y los logs del runtime antes de cambiar la configuración de la ruta o del almacenamiento.

Usar Dockup para la capa de plataforma

Una plantilla de Excalidraw de un solo clic debería incluir el digest de la imagen, el puerto 80, los tiempos del health check, el dominio y TLS. Como el servicio base no tiene estado, Dockup puede recrearlo directamente en la infraestructura de Dockup o en una máquina conectada sin fingir que un volumen vacío es una copia de seguridad.

Después del lanzamiento, sirve el cliente mediante HTTPS y configura los endpoints de colaboración por separado. Dockup debería conservar la configuración del runtime de Excalidraw mientras el operador confirma este requisito local: un servidor de salas independiente y una capa de almacenamiento para la colaboración persistente. Verifica este resultado: dibuja y exporta un diagrama, comparte un enlace de colaboración mediante el servicio de salas configurado y vuelve a conectarte desde un segundo navegador. Cualquier ampliación posterior con estado debe declarar su propio montaje, secreto y prueba de restauración, en lugar de cambiar silenciosamente el significado de la plantilla base.

Preguntas frecuentes

¿Qué necesita Excalidraw para un despliegue en producción?

Enruta el contenedor de Excalidraw a través del puerto 80 mediante un único origen HTTPS. El requisito del runtime local es un servidor de salas independiente y una capa de almacenamiento para la colaboración persistente. No consideres Excalidraw listo hasta que puedas dibujar y exportar un diagrama, compartir un enlace de colaboración mediante el servicio de salas configurado y volver a conectarte desde un segundo navegador.

¿Qué datos de Excalidraw deben incluirse en una copia de seguridad?

La imagen estándar de Excalidraw no necesita ningún montaje de datos de aplicación. Conserva su configuración de despliegue y haz copias de seguridad por separado de cualquier estado conectado; la recuperación es correcta cuando el cliente se reconstruye a partir de su imagen fijada y el servicio de salas independiente restaura cualquier estado de colaboración que se comprometa a conservar.

¿Excalidraw necesita HTTPS detrás de un proxy inverso?

Usa HTTPS para el origen público de Excalidraw y mantén el puerto 80 en la ruta interna. Aplica correctamente la configuración de Excalidraw: sirve el cliente mediante HTTPS y configura los endpoints de colaboración por separado. En Excalidraw, HTTPS protege las credenciales o el contenido de los usuarios durante el tránsito y mantiene coherente el comportamiento del cliente sensible al origen.

¿Cómo se debe probar una actualización de Excalidraw?

Despliega la imagen candidata de Excalidraw junto a la versión actual y repite la transacción de aceptación con una entrada conocida. Presta especial atención, porque las versiones del frontend, del servidor de salas y del almacenamiento deben probarse conjuntamente, en lugar de asumir que el cliente estático es el propietario de los datos compartidos. El contenedor estándar no tiene migraciones de datos, así que conserva el digest anterior hasta que se superen las comprobaciones de salida y compatibilidad.