Docmost es un wiki colaborativo de código abierto que se instala en minutos con Docker. En esta guía levantas la aplicación junto a una base de datos PostgreSQL y una caché Redis usando un solo archivo docker-compose.yml, generas el APP_SECRET obligatorio, configuras las variables de entorno y aprendes a organizar el contenido en espacios de trabajo con edición en tiempo real. La misma explicación está disponible en inglés.

Puntos clave

  • Docmost es un wiki y una base de conocimiento de código abierto, una alternativa autoalojada a Confluence y Notion, publicada bajo licencia AGPL-3.0.
  • El montaje recomendado usa tres contenedores: la aplicación (imagen oficial docmost/docmost), una base de datos PostgreSQL y una caché Redis que además soporta la colaboración en tiempo real.
  • Necesitas un APP_SECRET de al menos 32 caracteres; se genera con openssl rand -hex 32. Sin él, Docmost no arranca.
  • Fija una versión concreta de la imagen (por ejemplo docmost/docmost:0.95.0) en lugar de :latest, para controlar cuándo actualizas.
  • Los adjuntos viven en el volumen /app/data/storage y la base de datos en su propio volumen, así que tus documentos persisten aunque recrees los contenedores.

¿Qué es Docmost y en qué se diferencia de Confluence?

Docmost es una plataforma de código abierto para crear wikis y bases de conocimiento: un sustituto autoalojado de Confluence, de Atlassian, y de Notion. Organizas la documentación en espacios de trabajo, escribes con un editor de bloques moderno y colaboras con tu equipo en tiempo real, todo en un servidor que controlas tú.

La diferencia principal con Confluence es el modelo: Docmost se ejecuta en tu propia infraestructura, sin cuotas por usuario ni datos en la nube de un tercero. Su núcleo es libre bajo licencia AGPL-3.0 y el proyecto acumula unas 21.000 estrellas en GitHub. Frente a Notion, la ventaja es la misma soberanía sobre los datos, más la posibilidad de exportar, respaldar y auditar todo lo que escribes. Incluye permisos por grupos, historial de páginas, comentarios, búsqueda y diagramas con Draw.io, Excalidraw y Mermaid.

¿Qué necesitas antes de empezar?

Necesitas una máquina Linux con Docker y el plugin Compose ya instalados. Si aún no lo tienes, sigue primero la guía para instalar Docker en Ubuntu 24.04. Para un uso de equipo pequeño bastan 2 GB de RAM y un par de núcleos.

El montaje se apoya en dos servicios de datos que quizá quieras conocer por separado: la base de datos PostgreSQL, donde Docmost guarda páginas, espacios y usuarios, y Redis, que actúa como caché y como canal de la colaboración en tiempo real por WebSocket. En este tutorial los definimos dentro del mismo docker-compose.yml, así que no hace falta instalarlos aparte.

El docker-compose.yml de Docmost

Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. Antes de arrancar, sustituye la clave de la base de datos y pega tu propio APP_SECRET (lo generamos en el apartado siguiente):

services:
  docmost:
    image: docmost/docmost:0.95.0
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      APP_URL: "http://localhost:3000"
      APP_SECRET: "pega_aqui_tu_secreto_generado"
      DATABASE_URL: "postgresql://docmost:cambia_esta_clave_db@db:5432/docmost?schema=public"
      REDIS_URL: "redis://redis:6379"
    ports:
      - "3000:3000"
    volumes:
      - docmost_data:/app/data/storage

  db:
    image: postgres:18
    restart: unless-stopped
    environment:
      POSTGRES_DB: docmost
      POSTGRES_USER: docmost
      POSTGRES_PASSWORD: cambia_esta_clave_db
    volumes:
      - db_data:/var/lib/postgresql
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U docmost -d docmost"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:8-alpine
    restart: unless-stopped
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5

volumes:
  docmost_data:
  db_data:
  redis_data:

Fíjate en algunos detalles. La aplicación no arranca hasta que PostgreSQL y Redis pasan su healthcheck, gracias a depends_on con la condición service_healthy. El puerto 3000 del contenedor se publica en el 3000 del anfitrión, así que Docmost quedará en http://localhost:3000. Los adjuntos se guardan en el volumen docmost_data, montado en /app/data/storage, y la base de datos en db_data.

APP_SECRET y variables de entorno

El APP_SECRET cifra las sesiones y los tokens de Docmost, por lo que es obligatorio y debe tener al menos 32 caracteres. Genera uno aleatorio con OpenSSL y pégalo en el valor APP_SECRET del Compose:

openssl rand -hex 32

Ese comando devuelve una cadena de 64 caracteres hexadecimales, más que suficiente. Estas son las cuatro variables que necesitas revisar:

  • APP_URL: la dirección pública desde la que accederás a Docmost. En tu propio equipo es http://localhost:3000; en producción, la URL completa con HTTPS, por ejemplo https://wiki.midominio.com.
  • APP_SECRET: la clave que acabas de generar. No la compartas ni la subas a un repositorio.
  • DATABASE_URL: la cadena de conexión a PostgreSQL. El usuario y la contraseña deben coincidir con los del servicio db.
  • REDIS_URL: la conexión a Redis, que dentro de la red de Compose es siempre redis://redis:6379.

Con el archivo y el secreto listos, arranca la pila en segundo plano y comprueba que los tres servicios están sanos:

docker compose up -d
docker compose ps
docker compose logs -f docmost

La primera vez, la aplicación ejecuta las migraciones de la base de datos, por lo que el arranque tarda un poco más. Cuando el registro deje de moverse, abre http://localhost:3000 y crea la primera cuenta: ese usuario será el administrador del espacio de trabajo.

¿Cómo publicarlo con HTTPS?

Docmost necesita HTTPS en producción, porque la edición colaborativa usa WebSockets y el navegador exige un origen seguro. Servirlo por HTTP plano dejaría las sesiones sin cifrar. La forma habitual de darle un certificado válido es ponerlo detrás de un proxy inverso que gestione TLS por ti. Si sigues la serie, ya tendrás montado Traefik con Docker Compose; en ese caso, quita la sección ports del servicio docmost, conéctalo a la red del proxy y añádele estas etiquetas:

    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.docmost.rule=Host(`wiki.midominio.com`)"
      - "traefik.http.routers.docmost.entrypoints=websecure"
      - "traefik.http.routers.docmost.tls.certresolver=le"
      - "traefik.http.services.docmost.loadbalancer.server.port=3000"

Traefik pedirá el certificado a Let’s Encrypt y lo renovará automáticamente. Recuerda cambiar APP_URL a tu dominio real con https://, porque Docmost usa ese valor para construir los enlaces y las conexiones del editor.

Espacios de trabajo y colaboración en tiempo real

Dentro de Docmost, todo el contenido se organiza en espacios (spaces): agrupaciones de páginas con sus propios permisos, pensadas para separar equipos o proyectos. Dentro de cada espacio, las páginas se anidan en una jerarquía de árbol, así que puedes construir desde un manual pequeño hasta una base de conocimiento con cientos de documentos.

La colaboración en tiempo real es una de sus mejores bazas: varias personas pueden editar la misma página a la vez y ven los cambios al instante, igual que en Notion. Esto se apoya en Redis, que sincroniza el estado del editor entre las sesiones abiertas; por eso el contenedor de Redis no es opcional. Cada página guarda su historial de versiones, admite comentarios en línea y permite insertar diagramas de Draw.io, Excalidraw y Mermaid sin salir del editor. Los permisos se asignan por grupos, de modo que controlas quién lee y quién escribe en cada espacio.

Preguntas frecuentes

¿Necesito de verdad PostgreSQL y Redis para usar Docmost?

Sí, los dos son obligatorios. Docmost no admite SQLite: guarda todos sus datos en PostgreSQL, así que la base de datos es imprescindible. Redis tampoco es opcional, porque además de caché es el canal que sincroniza la edición colaborativa en tiempo real entre las sesiones. Los tres contenedores forman la configuración mínima.

¿Por qué no debo usar la etiqueta latest de la imagen?

Porque :latest cambia sin avisarte y podría subirte a una versión mayor durante un simple reinicio, arrastrando migraciones de base de datos que no esperabas. Al fijar docmost/docmost:0.95.0 decides tú cuándo actualizas, revisas antes las notas de la versión y evitas sorpresas en un servicio que guarda documentación importante.

¿Dónde se guardan los archivos que subo a las páginas?

Por defecto, en el volumen local montado en /app/data/storage dentro del contenedor, con el controlador de almacenamiento local. Si prefieres almacenamiento de objetos, Docmost admite un backend compatible con S3, que puedes cubrir con MinIO; en ese caso los adjuntos viajan al bucket en lugar de al disco del servidor.

Conclusión

Con un único docker-compose.yml tienes un wiki colaborativo completo: aplicación, base de datos y caché, con documentos que no salen de tu servidor. El siguiente paso lógico es sacarlo a Internet con seguridad detrás de Traefik y crear tu primer espacio de trabajo. Si buscas una alternativa con inicio de sesión único y almacenamiento en S3, compara Docmost con Outline, el otro wiki self-hosted de esta serie.

Fuentes

  1. Documentación oficial de Docmost
  2. Repositorio de Docmost en GitHub
  3. Imagen oficial docmost en Docker Hub

Ruta: Productividad y documentos self-hosted con Docker