Cómo instalar Wiki.js con Docker
Índice de contenidos
- Puntos clave
- ¿Qué es Wiki.js?
- ¿Qué necesitas antes de empezar?
- El docker-compose.yml de Wiki.js con PostgreSQL
- ¿Cómo se hace la instalación inicial?
- ¿Cómo se gestiona la autenticación y el control de acceso?
- ¿Cómo publicar Wiki.js con HTTPS?
- Preguntas frecuentes
- ¿Puedo usar Wiki.js sin PostgreSQL?
- ¿Por qué no debo usar la etiqueta latest?
- ¿Cómo hago copias de seguridad de la wiki?
- Conclusión
- Fuentes
Wiki.js es un motor de wiki de código abierto escrito en Node.js que, en Docker, se levanta con dos contenedores: la aplicación y una base de datos PostgreSQL. Con un solo archivo docker-compose.yml tienes tu propia wiki con editor Markdown, control de versiones y más de cuarenta métodos de autenticación, y tus páginas guardadas en un volumen que tú controlas.
Wiki.js es una de las formas más elegantes de montar tu propia wiki, y con Docker la tienes lista en un par de minutos. En esta guía levantas la aplicación junto a una base de datos PostgreSQL con un solo archivo docker-compose.yml, completas el asistente de instalación inicial, configuras la autenticación y el control de acceso, y la publicas con HTTPS detrás de un proxy inverso. La misma explicación está disponible en inglés.
Puntos clave
- Wiki.js es un motor de wiki de código abierto escrito en Node.js, con editor Markdown, editor visual e historial de versiones de cada página.
- El montaje recomendado usa dos contenedores: la aplicación (imagen
ghcr.io/requarks/wiki) y una base de datos PostgreSQL, donde se guardan todas las páginas. - La rama estable es la 2.x; fija una versión concreta como
ghcr.io/requarks/wiki:2.5en vez de:latest, porque la 3.x todavía está en fase beta. - El contenedor escucha en el puerto 3000 y no cifra el tráfico por sí mismo, así que para sacarlo a Internet conviene ponerlo detrás de Traefik u otro proxy inverso con HTTPS.
- No hay usuario por defecto: la primera vez que abres la wiki, un asistente te pide crear la cuenta de administrador y la URL del sitio.
¿Qué es Wiki.js?
Wiki.js es un motor de wiki moderno y de código abierto construido sobre Node.js, con un frontend en Vue.js. Lo creó Nicolas Giard (conocido como NGPixel) y su primera versión apareció en 2016; desde entonces ha acumulado más de 20.000 estrellas en GitHub y se ha convertido en una alternativa autoalojada muy popular a Confluence o Notion para documentación técnica y bases de conocimiento.
Su punto fuerte es la edición: puedes escribir en Markdown con vista previa en dos paneles, en un editor visual de tipo WYSIWYG o directamente en HTML. Cada página guarda su historial de cambios, se organiza en una jerarquía de rutas y se puede buscar a texto completo. A diferencia de BookStack, que impone una estructura fija de estanterías y libros, Wiki.js deja que tú definas el árbol de contenidos y ofrece integración con más de 40 métodos de autenticación, desde cuentas locales hasta LDAP, OAuth2, SAML, Google o GitHub.
¿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. Wiki.js es ligero: con 1 GB de RAM y un núcleo va sobrado para una wiki personal o de equipo pequeño, y el consumo real en reposo ronda unos pocos cientos de megabytes.
El detalle importante es que Wiki.js no incluye motor de base de datos. Necesita una base de datos externa y la opción recomendada es PostgreSQL; también admite MySQL, MariaDB, MSSQL y SQLite, pero PostgreSQL es la que mejor soporte recibe. En este tutorial definimos la base de datos dentro del mismo docker-compose.yml, así que no hace falta instalarla aparte.
El docker-compose.yml de Wiki.js con PostgreSQL
Crea una carpeta para el proyecto y guarda dentro este docker-compose.yml. Cambia el valor cambia_esta_clave_db por una contraseña propia y segura, la misma en el servicio db y en el servicio wiki, antes de arrancar:
services:
db:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: wiki
POSTGRES_USER: wikijs
POSTGRES_PASSWORD: cambia_esta_clave_db
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U wikijs -d wiki"]
interval: 30s
timeout: 5s
retries: 5
wiki:
image: ghcr.io/requarks/wiki:2.5
restart: unless-stopped
init: true
depends_on:
db:
condition: service_healthy
environment:
DB_TYPE: postgres
DB_HOST: db
DB_PORT: 5432
DB_USER: wikijs
DB_PASS: cambia_esta_clave_db
DB_NAME: wiki
ports:
- "8080:3000"
volumes:
db_data:
Fíjate en varios detalles del archivo. La wiki no arranca hasta que PostgreSQL pasa su healthcheck, gracias a depends_on con la condición service_healthy. El puerto 3000 del contenedor se publica en el 8080 del anfitrión, así que la wiki quedará en http://localhost:8080. La opción init: true añade un proceso init que gestiona correctamente las señales del sistema. Y todo el contenido (páginas, usuarios y configuración) vive en la base de datos, cuyo volumen db_data es lo único que necesitas respaldar.
Con el archivo listo, arranca la pila en segundo plano y sigue el registro hasta que la aplicación esté disponible:
docker compose up -d
docker compose ps
docker compose logs -f wiki
La primera vez, Wiki.js crea las tablas en la base de datos y prepara los recursos, por lo que el arranque tarda un poco. Cuando el registro muestre que el servidor escucha en el puerto 3000, la wiki estará lista.
¿Cómo se hace la instalación inicial?
Abre http://localhost:8080 en el navegador. Como no hay ningún usuario creado todavía, Wiki.js te recibe con un asistente de instalación. Ahí defines tres cosas: la dirección de correo y la contraseña de la cuenta de administrador, y la URL del sitio (por ejemplo http://localhost:8080 en tu equipo o https://wiki.midominio.com en producción). Esa URL se guarda en la configuración, así que conviene poner ya la definitiva si vas a exponer la wiki con un dominio.
Al terminar, el asistente te lleva al inicio de sesión. Entra con la cuenta que acabas de crear y verás el panel de administración vacío. El primer paso habitual es crear la página de inicio: Wiki.js te propone elegir el editor (Markdown es la opción más común) y la ruta de la página, y a partir de ahí ya puedes escribir y guardar. Cada vez que edites una página, el sistema guarda una nueva entrada en su historial, de modo que siempre puedes comparar versiones o revertir un cambio.
¿Cómo se gestiona la autenticación y el control de acceso?
Por defecto, Wiki.js crea una estrategia de autenticación local: los usuarios se registran con correo y contraseña dentro de la propia wiki. Desde Administración → Autenticación puedes activar proveedores externos, ya que la aplicación integra más de 40 estrategias, entre ellas LDAP, OAuth2, SAML y proveedores concretos como Google, GitHub o Microsoft. Es la forma habitual de que un equipo entre con las cuentas que ya usa en la empresa.
El control de acceso se organiza en grupos y reglas de página. Cada grupo define qué puede leer, escribir o gestionar y sobre qué rutas se aplica, de modo que puedes tener una parte pública y una parte privada en la misma wiki. Un patrón frecuente es dejar la lectura abierta a todo el mundo pero restringir la edición al grupo de administradores. Si publicas la wiki en Internet, revisa también si quieres permitir el autoregistro o cerrarlo para evitar cuentas no deseadas.
¿Cómo publicar Wiki.js con HTTPS?
Wiki.js escucha en HTTP plano en el puerto 3000 y no gestiona certificados por sí mismo, así que servirlo directamente a Internet sin cifrado sería un error: las contraseñas viajarían al descubierto. La forma habitual de darle un certificado válido es ponerlo detrás de un proxy inverso que gestione TLS. Si sigues la serie, ya tendrás montado Traefik con Docker Compose; en ese caso, quita la sección ports del servicio wiki, conéctalo a la red del proxy y añádele estas etiquetas:
labels:
- "traefik.enable=true"
- "traefik.http.routers.wiki.rule=Host(`wiki.midominio.com`)"
- "traefik.http.routers.wiki.entrypoints=websecure"
- "traefik.http.routers.wiki.tls.certresolver=le"
- "traefik.http.services.wiki.loadbalancer.server.port=3000"
Traefik pedirá el certificado a Let’s Encrypt y lo renovará automáticamente. Recuerda actualizar la URL del sitio en Administración → General para que coincida con tu dominio HTTPS; si no, algunos enlaces internos y el inicio de sesión con proveedores externos pueden fallar.
Preguntas frecuentes
¿Puedo usar Wiki.js sin PostgreSQL?
Sí, Wiki.js admite MySQL, MariaDB, MSSQL y SQLite además de PostgreSQL, pero PostgreSQL es la base de datos recomendada y la que recibe mejor soporte del proyecto. SQLite sirve para una prueba rápida sin un contenedor de base de datos aparte, aunque para cualquier uso real conviene quedarse con PostgreSQL, tal como muestra el docker-compose.yml de esta guía.
¿Por qué no debo usar la etiqueta latest?
Porque :latest puede arrastrarte sin avisar a un salto de versión mayor durante un simple reinicio. Al fijar ghcr.io/requarks/wiki:2.5 te quedas en la rama estable 2.x (cuya última versión es la 2.5.314) y controlas tú cuándo actualizas. La rama 3.x todavía está en fase beta, así que para producción la 2.x sigue siendo la elección segura en 2026.
¿Cómo hago copias de seguridad de la wiki?
Como Wiki.js guarda todo (páginas, usuarios y configuración) en la base de datos, basta con respaldar PostgreSQL. Exporta la base de datos con pg_dump desde el contenedor db y guarda el archivo resultante en un lugar seguro:
docker compose exec db pg_dump -U wikijs wiki > wiki-backup.sql
Con ese volcado y tu docker-compose.yml puedes reconstruir la wiki completa en otro servidor.
Conclusión
Con un único docker-compose.yml tienes una wiki completa en Node.js: aplicación y base de datos PostgreSQL, con todo el contenido bajo tu control. El siguiente paso lógico es sacarla a Internet con seguridad detrás de Traefik, configurar la autenticación de tu equipo y programar copias de seguridad periódicas de la base de datos. A partir de ahí, Wiki.js se convierte en la base de conocimiento central de tu infraestructura autoalojada.
Fuentes
Código fuente
Accede a todo el código fuente de este artículo en GitHub.
Ver en GitHub