Por qué autoalojar BookStack en un VPS
BookStack destaca por su simplicidad: allí donde otros wikis ahogan al usuario con opciones, impone una jerarquía clara — estantes, libros, capítulos, páginas — que hace la documentación navegable de inmediato. Construido sobre Laravel, es ligero y fácil de mantener. Autoalojado en un VPS, conserva toda su documentación interna — procedimientos, runbooks, base de conocimiento de clientes — en su propia infraestructura, sin suscripción por usuario. Para una agencia que documenta sus proyectos o un equipo técnico que centraliza sus procedimientos, es un wiki privado que usted controla de principio a fin, con búsqueda de texto completo, gestión detallada de permisos y editor WYSIWYG o Markdown.
Beneficios concretos de un BookStack autoalojado
- Estructura clara en estantes/libros/capítulos/páginas: documentación navegable sin esfuerzo.
- Editor WYSIWYG y Markdown a elección, con diagramas Draw.io integrados.
- Permisos granulares por rol y por libro para compartimentar los contenidos sensibles.
- Búsqueda de texto completo y rápida sobre el conjunto de la base de conocimiento.
- Autenticación LDAP, SAML u OAuth para integrarse con su directorio corporativo.
- Huella ligera: un VPS con 2 GB de RAM basta para la documentación de un equipo.
- Sin suscripción por usuario — número ilimitado de colaboradores sin coste adicional.
Requisitos de hardware y software
BookStack es poco exigente. Un VPS de 1 a 2 vCPU y 2 GB de RAM como mínimo aloja cómodamente la documentación de un equipo; con BookStack y MariaDB ejecutándose juntos, 2 GB es el mínimo recomendado — por debajo, las migraciones de Laravel en el primer arranque pueden fallar por falta de memoria. El consumo sube sobre todo con el volumen de imágenes subidas.
Prevea de 15 a 25 GB de SSD según la cantidad de archivos adjuntos. En cuanto al software: Docker 24+ y el plugin Compose v2 (docker compose sin guion), un subdominio wiki.sudominio.com con un registro A, y acceso SMTP para invitaciones y notificaciones por correo electrónico.
BookStack frente a alternativas autoalojadas
Desplace la tabla
| Herramienta | Stack | RAM mín. | Punto fuerte |
|---|---|---|---|
| BookStack | Laravel + MariaDB | 2 GB | Jerarquía libros/capítulos, WYSIWYG |
| Wiki.js | Node.js + BD a elegir | 512 MB | Editor moderno, sincronización Git |
| Outline | Node.js + PostgreSQL | 1 GB | UI tipo Notion, API rica |
| Confluence | SaaS / on-premise | 4 GB+ | Integración Atlassian, maduro |
Desplegar BookStack con Docker Compose y SSL
Preparar el VPS e instalar Docker
Conéctese por SSH e instale Docker y el plugin Compose:
curl -fsSL https://get.docker.com | sh apt install docker-compose-plugin mkdir -p /opt/bookstack && cd /opt/bookstackVerifique:
docker compose versiondebe mostrar v2.x o superior. La imagen comunitarialscr.io/linuxserver/bookstackes la más extendida y mejor mantenida para un despliegue en contenedores.Crear el archivo docker-compose.yml
Cree
/opt/bookstack/docker-compose.ymlcon dos servicios — MariaDB y BookStack — en una red dedicada:services: mariadb: image: mariadb:10.11 environment: MYSQL_ROOT_PASSWORD: changeme_root MYSQL_DATABASE: bookstack MYSQL_USER: bookstack MYSQL_PASSWORD: changeme_bk volumes: - ./data/mariadb:/var/lib/mysql networks: [bookstack] bookstack: image: lscr.io/linuxserver/bookstack:latest environment: PUID: 1000 PGID: 1000 APP_URL: https://wiki.sudominio.com DB_HOST: mariadb DB_USER: bookstack DB_PASS: changeme_bk DB_DATABASE: bookstack MAIL_DRIVER: smtp MAIL_HOST: smtp.sudominio.com MAIL_PORT: 587 MAIL_FROM: [email protected] MAIL_USERNAME: [email protected] MAIL_PASSWORD: su_contrasena_smtp ports: - "6875:80" volumes: - ./data/bookstack:/config depends_on: [mariadb] networks: [bookstack] networks: bookstack:APP_URLdebe coincidir exactamente con la URL HTTPS final. Un valor incorrecto rompe los enlaces internos y las subidas.Lanzar la pila y comprobar los registros
docker compose up -d docker compose logs -f bookstackEn el primer arranque, BookStack ejecuta automáticamente las migraciones de Laravel para crear el esquema de la base de datos. Espere la línea
Server running on http://0.0.0.0:80antes de continuar — tarda entre 30 y 60 segundos.Configurar el reverse proxy y el SSL
Con Caddy (gestión automática del certificado):
wiki.sudominio.com { reverse_proxy localhost:6875 }Recargue Caddy:
systemctl reload caddy.Con Nginx + Certbot:
server { listen 80; server_name wiki.sudominio.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name wiki.sudominio.com; ssl_certificate /etc/letsencrypt/live/wiki.sudominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/wiki.sudominio.com/privkey.pem; location / { proxy_pass http://127.0.0.1:6875; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }Obtenga el certificado con
certbot --nginx -d wiki.sudominio.com.Primera conexión y segurización de la cuenta admin
Abra
https://wiki.sudominio.com. La cuenta por defecto es[email protected]con la contraseñapassword. Cámbielas inmediatamente en Configuración → Perfil.Verifique después que SMTP funciona: Configuración → Configuración de correo electrónico → Enviar un correo de prueba. Si el test falla, revise los registros:
docker compose logs bookstack | grep -i mail.
Configuración avanzada: SSO, LDAP y SAML
BookStack soporta varios mecanismos de autenticación centralizada, configurables mediante variables de entorno en docker-compose.yml.
LDAP / Active Directory: añada las variables AUTH_METHOD=ldap, LDAP_SERVER, LDAP_BASE_DN, LDAP_USER_FILTER y LDAP_VERSION. Los usuarios inician sesión con sus credenciales corporativas sin una cuenta BookStack separada.
SAML 2.0 (para proveedores como Authentik, Keycloak o Azure AD): establezca AUTH_METHOD=saml2 y rellene SAML2_IDP_ENTITYID, SAML2_IDP_SSO y SAML2_IDP_SLO. La documentación oficial de BookStack ofrece ejemplos por proveedor.
OAuth social (GitHub, Google, Slack): cada proveedor tiene su par de variables *_APP_ID / *_APP_SECRET. Esta opción es útil para equipos que quieren evitar la gestión de contraseñas sin desplegar un servidor LDAP.
Hacer copias de seguridad y restaurar BookStack
Una instancia de BookStack se apoya en tres elementos: la base de datos MariaDB, la carpeta uploads (imágenes y archivos adjuntos) y el valor APP_KEY en la configuración. Sin el APP_KEY, el contenido cifrado es irrecuperable tras la restauración.
Script de copia de seguridad diaria en /etc/cron.daily/bookstack-backup:
#!/bin/bash
BACKUP_DIR=/var/backups/bookstack
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d)
docker exec $(docker ps -qf name=mariadb) \
mysqldump -u bookstack -pchangeme_bk bookstack \
> $BACKUP_DIR/bookstack-db-$DATE.sql
tar -czf $BACKUP_DIR/bookstack-uploads-$DATE.tar.gz /opt/bookstack/data/bookstack/uploads
find $BACKUP_DIR -mtime +14 -deleteCopie después estos archivos a almacenamiento externo (S3, Backblaze B2 o el almacenamiento objeto de su VPS). Guarde el APP_KEY en un gestor de secretos fuera del servidor — es el único elemento que no puede recrearse.
Resolución de problemas: errores comunes
Algunos errores aparecen con frecuencia durante una instalación nueva o una actualización.
Problemas frecuentes y soluciones
- Error SMTP «Connection refused» o timeout: compruebe que
MAIL_PORTcorresponde al puerto real (587 para STARTTLS, 465 para SSL). Algunos servidores SMTP bloquean el puerto 25 saliente. Pruebe la conectividad desde el contenedor:docker exec -it bookstack curl -v telnet://smtp.sudominio.com:587. - Permisos en
storage/: error 500 o página en blanco: la carpeta/opt/bookstack/data/bookstackdebe pertenecer al UID 1000 (variablePUID). Corrija conchown -R 1000:1000 /opt/bookstack/data/bookstacky reinicie el contenedor. - Lentitud o timeout de MariaDB al arrancar: BookStack espera a que MariaDB esté lista. Si el contenedor BookStack se reinicia en bucle los primeros segundos, es normal. Añada un
healthcheckal serviciomariadben el Compose o espere 30 segundos antes de inspeccionar los registros. - Las imágenes no se muestran tras un cambio de dominio:
APP_URLdebe coincidir exactamente con la URL HTTPS pública. Si cambia de dominio, actualiceAPP_URLen el Compose, reinicie el contenedor y ejecutephp artisan bookstack:update-urldesde dentro del contenedor para actualizar las URLs almacenadas en la base de datos. - Las migraciones se detienen en el primer arranque (OOM): si el VPS tiene menos de 2 GB de RAM, las migraciones de Laravel pueden ser eliminadas por el OOM killer. Añada un fichero de swap de 2 GB (
fallocate -l 2G /swapfile && mkswap /swapfile && swapon /swapfile) o aumente la RAM del VPS antes de reintentar.
Actualizar BookStack
La imagen lscr.io/linuxserver/bookstack:latest recibe las nuevas versiones poco después de su publicación en GitHub. Para actualizar:
cd /opt/bookstack
docker compose pull
docker compose up -d
docker compose logs -f bookstackLas migraciones de base de datos se aplican automáticamente al arrancar. Consulte las notas de versión de BookStack antes de cualquier actualización mayor: algunas versiones introducen cambios de esquema o de configuración.
Consejo de seguridad
Configure una entrada robots.txt o proteja su instancia de BookStack detrás de un firewall de aplicaciones web si contiene procedimientos internos sensibles. BookStack no ofrece un modo «solo intranet» por defecto — la URL pública es accesible para cualquiera que conozca la dirección. Para una documentación verdaderamente privada, combine los permisos granulares de BookStack con una regla UFW o una VPN WireGuard que restrinja el acceso al puerto 443.
Para profundizar
- Alojar Nextcloud en un VPS — almacenamiento en la nube y colaboración documental.
- Alojar Gitea en un VPS — forja Git autoalojada para sus equipos de desarrollo.
- Authentik en un VPS — SSO de código abierto para centralizar la autenticación de BookStack y sus otras aplicaciones.