Commit inicial: BookStack con MariaDB 11, Traefik/NPM, sin standalone
This commit is contained in:
15
.env.example
Normal file
15
.env.example
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# === CONTRASEÑAS REQUERIDAS ===
|
||||||
|
# Generar DB_PASSWORD con: openssl rand -base64 32
|
||||||
|
DB_PASSWORD=''
|
||||||
|
|
||||||
|
# === CONFIGURACIÓN OPCIONAL ===
|
||||||
|
# Base de datos (valores por defecto)
|
||||||
|
DB_NAME=bookstack
|
||||||
|
DB_USER=bookstack
|
||||||
|
|
||||||
|
# === SOLO PARA TRAEFIK ===
|
||||||
|
# Dominio para certificado SSL (no necesario con NPM)
|
||||||
|
DOMAIN_HOST=bookstack.example.com
|
||||||
|
|
||||||
|
# IMPORTANTE: Usa comillas simples si las contraseñas contienen caracteres especiales
|
||||||
|
# Ejemplo: DB_PASSWORD='tu_password_con_$_especiales'
|
||||||
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
# Docker
|
||||||
|
.env
|
||||||
|
docker-compose.override.yml
|
||||||
|
|
||||||
|
# Backups
|
||||||
|
*.sql
|
||||||
|
*.sql.gz
|
||||||
|
*.tar.gz
|
||||||
|
backups/
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
531
README.md
Normal file
531
README.md
Normal file
@@ -0,0 +1,531 @@
|
|||||||
|
# BookStack
|
||||||
|
|
||||||
|
Plataforma de documentación y wiki de código abierto. Organiza contenido en libros, capítulos y páginas con editor WYSIWYG y Markdown.
|
||||||
|
|
||||||
|
## Características
|
||||||
|
|
||||||
|
- 📚 **Organización jerárquica**: Libros → Capítulos → Páginas
|
||||||
|
- ✏️ **Editor dual**: WYSIWYG y Markdown
|
||||||
|
- 🔍 **Búsqueda potente**: Busca en todo el contenido
|
||||||
|
- 🔐 **Control de acceso**: Permisos granulares por rol
|
||||||
|
- 📝 **Historial de cambios**: Seguimiento completo de ediciones
|
||||||
|
- 🖼️ **Gestión de imágenes**: Biblioteca de medios integrada
|
||||||
|
- 🔗 **Integración**: LDAP, SAML, OAuth
|
||||||
|
- 🌍 **Multi-idioma**: Soporte para múltiples idiomas
|
||||||
|
|
||||||
|
## Requisitos Previos
|
||||||
|
|
||||||
|
- Docker Engine instalado
|
||||||
|
- Portainer configurado (recomendado)
|
||||||
|
- **Para Traefik o NPM**: Red Docker `proxy` creada
|
||||||
|
- **Dominio configurado**: Para acceso HTTPS
|
||||||
|
- **Contraseña generada**: DB_PASSWORD
|
||||||
|
|
||||||
|
⚠️ **IMPORTANTE**: BookStack requiere MariaDB 11. Este compose incluye el contenedor de base de datos.
|
||||||
|
|
||||||
|
## Generar Contraseña
|
||||||
|
|
||||||
|
**Antes de cualquier despliegue**, genera una contraseña segura:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# DB_PASSWORD (MariaDB)
|
||||||
|
openssl rand -base64 32
|
||||||
|
```
|
||||||
|
|
||||||
|
Guarda el resultado, lo necesitarás en el archivo `.env`.
|
||||||
|
|
||||||
|
> ⚠️ **Importante**: Usa comillas simples en el archivo `.env` si la contraseña contiene caracteres especiales.
|
||||||
|
> Ejemplo: `DB_PASSWORD='tu_password_generado'`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Despliegue con Portainer
|
||||||
|
|
||||||
|
### Opción A: Git Repository (Recomendada)
|
||||||
|
|
||||||
|
Permite mantener la configuración actualizada automáticamente desde Git.
|
||||||
|
|
||||||
|
1. En Portainer, ve a **Stacks** → **Add stack**
|
||||||
|
2. Nombra el stack: `bookstack`
|
||||||
|
3. Selecciona **Git Repository**
|
||||||
|
4. Configura:
|
||||||
|
- **Repository URL**: `https://git.ictiberia.com/groales/bookstack`
|
||||||
|
- **Repository reference**: `refs/heads/main`
|
||||||
|
- **Compose path**: `docker-compose.yml`
|
||||||
|
- **GitOps updates**: Activado (opcional - auto-actualización)
|
||||||
|
5. **Solo para Traefik**: En **Additional paths**, añade:
|
||||||
|
- `docker-compose.override.traefik.yml.example`
|
||||||
|
6. En **Environment variables**, añade:
|
||||||
|
|
||||||
|
```env
|
||||||
|
DB_PASSWORD=tu_password_generado
|
||||||
|
```
|
||||||
|
|
||||||
|
7. **Solo para Traefik**: Añade también `DOMAIN_HOST=bookstack.example.com`
|
||||||
|
8. Click en **Deploy the stack**
|
||||||
|
|
||||||
|
### Opción B: Web editor
|
||||||
|
|
||||||
|
Para personalización completa del compose.
|
||||||
|
|
||||||
|
1. En Portainer, ve a **Stacks** → **Add stack**
|
||||||
|
2. Nombra el stack: `bookstack`
|
||||||
|
3. Selecciona **Web editor**
|
||||||
|
4. Pega el contenido de `docker-compose.yml`
|
||||||
|
5. En **Environment variables**, añade las mismas variables que la Opción A
|
||||||
|
6. Click en **Deploy the stack**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Modos de Despliegue
|
||||||
|
|
||||||
|
### Traefik (Proxy Inverso con SSL automático)
|
||||||
|
|
||||||
|
**Requisitos**:
|
||||||
|
- Stack de Traefik desplegado
|
||||||
|
- Red `proxy` creada
|
||||||
|
- DNS apuntando al servidor
|
||||||
|
|
||||||
|
Si desplegaste con **Opción A (Git Repository)**, ya configuraste todo en el paso 5 y 7. Simplemente accede a `https://bookstack.tudominio.com`
|
||||||
|
|
||||||
|
Si usas otra forma de despliegue:
|
||||||
|
|
||||||
|
1. Asegúrate de tener el archivo `docker-compose.override.traefik.yml.example` como `docker-compose.override.yml`
|
||||||
|
|
||||||
|
2. En las **Environment variables**, añade:
|
||||||
|
```env
|
||||||
|
DOMAIN_HOST=bookstack.tudominio.com
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Despliega el stack y accede a `https://bookstack.tudominio.com`
|
||||||
|
|
||||||
|
**Ejemplo de compose completo con Traefik**:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
bookstack:
|
||||||
|
container_name: bookstack
|
||||||
|
image: lscr.io/linuxserver/bookstack:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
PUID: 1000
|
||||||
|
PGID: 1000
|
||||||
|
TZ: Europe/Madrid
|
||||||
|
APP_URL: https://${DOMAIN_HOST:-bookstack.example.com}
|
||||||
|
DB_HOST: bookstack-db
|
||||||
|
DB_PORT: 3306
|
||||||
|
DB_DATABASE: ${DB_NAME:-bookstack}
|
||||||
|
DB_USERNAME: ${DB_USER:-bookstack}
|
||||||
|
DB_PASSWORD: ${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- bookstack_config:/config
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
- bookstack-internal
|
||||||
|
depends_on:
|
||||||
|
- bookstack-db
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.bookstack-http.rule=Host(`${DOMAIN_HOST}`)
|
||||||
|
- traefik.http.routers.bookstack-http.entrypoints=web
|
||||||
|
- traefik.http.routers.bookstack-http.middlewares=redirect-to-https
|
||||||
|
- traefik.http.routers.bookstack.rule=Host(`${DOMAIN_HOST}`)
|
||||||
|
- traefik.http.routers.bookstack.entrypoints=websecure
|
||||||
|
- traefik.http.routers.bookstack.tls=true
|
||||||
|
- traefik.http.routers.bookstack.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.bookstack.service=bookstack-svc
|
||||||
|
- traefik.http.services.bookstack-svc.loadbalancer.server.port=80
|
||||||
|
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
|
||||||
|
|
||||||
|
bookstack-db:
|
||||||
|
container_name: bookstack-db
|
||||||
|
image: mariadb:11-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: ${DB_NAME:-bookstack}
|
||||||
|
MYSQL_USER: ${DB_USER:-bookstack}
|
||||||
|
MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||||
|
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
|
||||||
|
volumes:
|
||||||
|
- bookstack_db:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- bookstack-internal
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
bookstack_config:
|
||||||
|
name: bookstack_config
|
||||||
|
bookstack_db:
|
||||||
|
name: bookstack_db
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
bookstack-internal:
|
||||||
|
name: bookstack-internal
|
||||||
|
```
|
||||||
|
|
||||||
|
### Nginx Proxy Manager (NPM)
|
||||||
|
|
||||||
|
**Requisitos**:
|
||||||
|
- NPM desplegado y accesible
|
||||||
|
- Red `proxy` creada
|
||||||
|
- DNS apuntando al servidor
|
||||||
|
|
||||||
|
**Pasos**:
|
||||||
|
|
||||||
|
1. Despliega el stack con el `docker-compose.yml` base (sin override)
|
||||||
|
|
||||||
|
2. En NPM, crea un nuevo **Proxy Host**:
|
||||||
|
- **Domain Names**: `bookstack.tudominio.com`
|
||||||
|
- **Scheme**: `http`
|
||||||
|
- **Forward Hostname / IP**: `bookstack`
|
||||||
|
- **Forward Port**: `80`
|
||||||
|
- **Cache Assets**: ✅ Activado
|
||||||
|
- **Block Common Exploits**: ✅ Activado
|
||||||
|
- **Websockets Support**: ✅ Activado
|
||||||
|
|
||||||
|
3. En la pestaña **SSL**:
|
||||||
|
- **SSL Certificate**: Request a new SSL Certificate (Let's Encrypt)
|
||||||
|
- **Force SSL**: ✅ Activado
|
||||||
|
- **HTTP/2 Support**: ✅ Activado
|
||||||
|
- **HSTS Enabled**: ✅ Activado (opcional)
|
||||||
|
|
||||||
|
4. Guarda y accede a `https://bookstack.tudominio.com`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Configuración Inicial
|
||||||
|
|
||||||
|
### Primer Acceso
|
||||||
|
|
||||||
|
1. Accede a BookStack usando tu dominio configurado
|
||||||
|
2. Login con credenciales por defecto:
|
||||||
|
- **Email**: `admin@admin.com`
|
||||||
|
- **Password**: `password`
|
||||||
|
|
||||||
|
3. **⚠️ CRÍTICO**: Cambia la contraseña inmediatamente:
|
||||||
|
- Click en tu avatar (esquina superior derecha)
|
||||||
|
- **Edit Profile** → **Change Password**
|
||||||
|
|
||||||
|
### Panel de Administración
|
||||||
|
|
||||||
|
Accede al panel: **Settings** (engranaje superior derecho)
|
||||||
|
|
||||||
|
#### Configuración Básica
|
||||||
|
|
||||||
|
**Settings → Settings**:
|
||||||
|
- **Application Name**: Nombre de tu wiki
|
||||||
|
- **Application Description**: Descripción breve
|
||||||
|
- **Application Logo**: Sube tu logo personalizado
|
||||||
|
- **Default Language**: Español u otro idioma
|
||||||
|
|
||||||
|
#### Registro de Usuarios
|
||||||
|
|
||||||
|
**Settings → Registration Settings**:
|
||||||
|
- **Allow public registration**: Desactivar (❌)
|
||||||
|
- **Allow public viewing**: Activar si quieres que usuarios no autenticados puedan leer
|
||||||
|
- **Default role for new users**: Seleccionar rol apropiado
|
||||||
|
|
||||||
|
#### Roles y Permisos
|
||||||
|
|
||||||
|
**Settings → Roles**:
|
||||||
|
|
||||||
|
1. **Admin**: Control total
|
||||||
|
2. **Editor**: Puede crear y editar contenido
|
||||||
|
3. **Viewer**: Solo lectura
|
||||||
|
|
||||||
|
Crea roles personalizados según necesites:
|
||||||
|
- **Permissions**: Granular por libros, capítulos, páginas
|
||||||
|
- **System Permissions**: Gestión de imágenes, ajustes
|
||||||
|
|
||||||
|
#### Personalización de Tema
|
||||||
|
|
||||||
|
**Settings → Customization**:
|
||||||
|
- **Custom HTML Head Content**: Añadir CSS personalizado
|
||||||
|
- **Color Scheme**: Claro/Oscuro
|
||||||
|
- **Custom Styles**: CSS para personalización avanzada
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Personalización
|
||||||
|
|
||||||
|
### Integración con LDAP
|
||||||
|
|
||||||
|
**Settings → Authentication → LDAP**:
|
||||||
|
|
||||||
|
```env
|
||||||
|
# Añadir al .env
|
||||||
|
LDAP_SERVER=ldap.example.com:389
|
||||||
|
LDAP_BASE_DN=dc=example,dc=com
|
||||||
|
LDAP_DN=cn=bookstack,ou=Services,dc=example,dc=com
|
||||||
|
LDAP_PASS=password
|
||||||
|
LDAP_USER_FILTER=(&(uid=${user}))
|
||||||
|
LDAP_VERSION=3
|
||||||
|
```
|
||||||
|
|
||||||
|
Reinicia el contenedor: `docker restart bookstack`
|
||||||
|
|
||||||
|
### SAML / OAuth
|
||||||
|
|
||||||
|
**Settings → Authentication**:
|
||||||
|
- **SAML 2.0**: Para Active Directory con ADFS
|
||||||
|
- **OAuth**: Google, GitHub, GitLab, etc.
|
||||||
|
|
||||||
|
Consulta la [documentación oficial](https://www.bookstackapp.com/docs/admin/third-party-auth/) para configuración específica.
|
||||||
|
|
||||||
|
### Comandos Personalizados
|
||||||
|
|
||||||
|
Acceso al contenedor:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Shell de BookStack
|
||||||
|
docker exec -it bookstack bash
|
||||||
|
|
||||||
|
# Comandos artisan disponibles
|
||||||
|
docker exec bookstack php artisan list
|
||||||
|
|
||||||
|
# Limpiar caché
|
||||||
|
docker exec bookstack php artisan cache:clear
|
||||||
|
|
||||||
|
# Regenerar permisos de búsqueda
|
||||||
|
docker exec bookstack php artisan bookstack:regenerate-search
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Backup y Restauración
|
||||||
|
|
||||||
|
### Backup Manual
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Backup de MariaDB
|
||||||
|
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack > bookstack-backup-$(date +%Y%m%d).sql
|
||||||
|
|
||||||
|
# Backup de configuración y uploads
|
||||||
|
docker run --rm -v bookstack_config:/backup -v $(pwd):/target alpine tar czf /target/bookstack-config-$(date +%Y%m%d).tar.gz -C /backup .
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backup Automático
|
||||||
|
|
||||||
|
Crea un script en `/root/backup-bookstack.sh`:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
#!/bin/bash
|
||||||
|
BACKUP_DIR="/backups/bookstack"
|
||||||
|
DATE=$(date +%Y%m%d-%H%M%S)
|
||||||
|
DB_PASSWORD="tu_password_aqui"
|
||||||
|
|
||||||
|
mkdir -p $BACKUP_DIR
|
||||||
|
|
||||||
|
# MariaDB
|
||||||
|
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack | gzip > $BACKUP_DIR/bookstack-db-$DATE.sql.gz
|
||||||
|
|
||||||
|
# Configuración
|
||||||
|
docker run --rm -v bookstack_config:/backup -v $BACKUP_DIR:/target alpine tar czf /target/bookstack-config-$DATE.tar.gz -C /backup .
|
||||||
|
|
||||||
|
# Limpiar backups antiguos (mantener 7 días)
|
||||||
|
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
|
||||||
|
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
|
||||||
|
|
||||||
|
echo "Backup completado: $DATE"
|
||||||
|
```
|
||||||
|
|
||||||
|
Programa con cron:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x /root/backup-bookstack.sh
|
||||||
|
crontab -e
|
||||||
|
|
||||||
|
# Backup diario a las 2 AM
|
||||||
|
0 2 * * * /root/backup-bookstack.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### Restauración
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Detener BookStack
|
||||||
|
docker stop bookstack
|
||||||
|
|
||||||
|
# Restaurar MariaDB
|
||||||
|
gunzip < bookstack-db-20250101.sql.gz | docker exec -i bookstack-db mariadb -u bookstack -p${DB_PASSWORD} bookstack
|
||||||
|
|
||||||
|
# Restaurar configuración
|
||||||
|
docker run --rm -v bookstack_config:/restore -v $(pwd):/source alpine tar xzf /source/bookstack-config-20250101.tar.gz -C /restore
|
||||||
|
|
||||||
|
# Iniciar BookStack
|
||||||
|
docker start bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Actualización
|
||||||
|
|
||||||
|
### Actualizar BookStack
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Backup ANTES de actualizar
|
||||||
|
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack > bookstack-pre-update-$(date +%Y%m%d).sql
|
||||||
|
|
||||||
|
# 2. Detener stack
|
||||||
|
docker stop bookstack bookstack-db
|
||||||
|
|
||||||
|
# 3. Actualizar imágenes
|
||||||
|
docker pull lscr.io/linuxserver/bookstack:latest
|
||||||
|
docker pull mariadb:11-alpine
|
||||||
|
|
||||||
|
# 4. Iniciar stack
|
||||||
|
docker start bookstack-db
|
||||||
|
sleep 10
|
||||||
|
docker start bookstack
|
||||||
|
|
||||||
|
# 5. Verificar logs
|
||||||
|
docker logs -f bookstack
|
||||||
|
|
||||||
|
# 6. Verificar versión en Settings → About
|
||||||
|
```
|
||||||
|
|
||||||
|
### Actualizar MariaDB
|
||||||
|
|
||||||
|
Si necesitas actualizar de MariaDB 10 a 11 (ya está en 11):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1. Backup
|
||||||
|
docker exec bookstack-db mariadb-dump -u bookstack -p${DB_PASSWORD} bookstack > bookstack-db-migration.sql
|
||||||
|
|
||||||
|
# 2. Detener y eliminar contenedor antiguo
|
||||||
|
docker stop bookstack-db
|
||||||
|
docker rm bookstack-db
|
||||||
|
|
||||||
|
# 3. Eliminar volumen antiguo
|
||||||
|
docker volume rm bookstack_db
|
||||||
|
|
||||||
|
# 4. Recrear con MariaDB 11
|
||||||
|
docker compose up -d bookstack-db
|
||||||
|
|
||||||
|
# 5. Esperar inicialización
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
# 6. Restaurar datos
|
||||||
|
cat bookstack-db-migration.sql | docker exec -i bookstack-db mariadb -u bookstack -p${DB_PASSWORD} bookstack
|
||||||
|
|
||||||
|
# 7. Iniciar BookStack
|
||||||
|
docker start bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Solución de Problemas
|
||||||
|
|
||||||
|
### BookStack no inicia
|
||||||
|
|
||||||
|
**Síntomas**: Contenedor se reinicia constantemente
|
||||||
|
|
||||||
|
**Diagnóstico**:
|
||||||
|
```bash
|
||||||
|
docker logs bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
**Soluciones**:
|
||||||
|
- Verificar que MariaDB esté funcionando: `docker logs bookstack-db`
|
||||||
|
- Comprobar contraseña en `.env`
|
||||||
|
- Verificar permisos del volumen: `docker exec bookstack ls -la /config`
|
||||||
|
|
||||||
|
### Error de conexión a base de datos
|
||||||
|
|
||||||
|
**Síntomas**: `SQLSTATE[HY000] [2002] Connection refused`
|
||||||
|
|
||||||
|
**Solución**:
|
||||||
|
```bash
|
||||||
|
# Verificar que MariaDB esté lista
|
||||||
|
docker exec bookstack-db mariadb -u bookstack -p${DB_PASSWORD} -e "SELECT 1"
|
||||||
|
|
||||||
|
# Reiniciar servicios en orden
|
||||||
|
docker restart bookstack-db
|
||||||
|
sleep 10
|
||||||
|
docker restart bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
### Error de permisos
|
||||||
|
|
||||||
|
**Síntomas**: `PermissionError: [Errno 13] Permission denied`
|
||||||
|
|
||||||
|
**Solución**:
|
||||||
|
```bash
|
||||||
|
docker run --rm -v bookstack_config:/data alpine chown -R 1000:1000 /data
|
||||||
|
docker restart bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
### BookStack lento o no responde
|
||||||
|
|
||||||
|
**Diagnóstico**:
|
||||||
|
```bash
|
||||||
|
# Ver uso de recursos
|
||||||
|
docker stats bookstack bookstack-db
|
||||||
|
|
||||||
|
# Ver queries lentas en MariaDB
|
||||||
|
docker exec bookstack-db mariadb -u bookstack -p${DB_PASSWORD} -e "SHOW FULL PROCESSLIST;"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Soluciones**:
|
||||||
|
- Limpiar caché: `docker exec bookstack php artisan cache:clear`
|
||||||
|
- Optimizar BD: `docker exec bookstack-db mariadb-optimize -u bookstack -p${DB_PASSWORD} bookstack`
|
||||||
|
- Regenerar índices de búsqueda: `docker exec bookstack php artisan bookstack:regenerate-search`
|
||||||
|
|
||||||
|
### Comandos de emergencia
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Reiniciar todo el stack
|
||||||
|
docker restart bookstack bookstack-db
|
||||||
|
|
||||||
|
# Ver logs en tiempo real
|
||||||
|
docker logs -f --tail 100 bookstack
|
||||||
|
|
||||||
|
# Acceder a shell de BookStack
|
||||||
|
docker exec -it bookstack bash
|
||||||
|
|
||||||
|
# Ejecutar comandos artisan
|
||||||
|
docker exec bookstack php artisan tinker
|
||||||
|
|
||||||
|
# Limpiar todo el caché
|
||||||
|
docker exec bookstack php artisan cache:clear
|
||||||
|
docker exec bookstack php artisan config:clear
|
||||||
|
docker exec bookstack php artisan view:clear
|
||||||
|
docker restart bookstack
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Variables de Entorno
|
||||||
|
|
||||||
|
### Requeridas
|
||||||
|
|
||||||
|
| Variable | Descripción | Ejemplo |
|
||||||
|
|----------|-------------|---------|
|
||||||
|
| `DB_PASSWORD` | Contraseña de MariaDB | `generada_con_openssl` |
|
||||||
|
|
||||||
|
### Opcionales
|
||||||
|
|
||||||
|
| Variable | Descripción | Valor por defecto |
|
||||||
|
|----------|-------------|-------------------|
|
||||||
|
| `DB_NAME` | Nombre de la base de datos | `bookstack` |
|
||||||
|
| `DB_USER` | Usuario de MariaDB | `bookstack` |
|
||||||
|
| `DOMAIN_HOST` | Dominio (solo Traefik) | `bookstack.example.com` |
|
||||||
|
| `PUID` / `PGID` | UID/GID del usuario | `1000` |
|
||||||
|
| `TZ` | Zona horaria | `Europe/Madrid` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Recursos
|
||||||
|
|
||||||
|
- [Documentación oficial de BookStack](https://www.bookstackapp.com/docs/)
|
||||||
|
- [LinuxServer BookStack Image](https://docs.linuxserver.io/images/docker-bookstack)
|
||||||
|
- [BookStack GitHub](https://github.com/BookStackApp/BookStack)
|
||||||
|
- [BookStack Demo](https://demo.bookstackapp.com/)
|
||||||
|
- [API Documentation](https://demo.bookstackapp.com/api/docs)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Licencia
|
||||||
|
|
||||||
|
BookStack es software de código abierto bajo licencia MIT.
|
||||||
22
docker-compose.override.traefik.yml.example
Normal file
22
docker-compose.override.traefik.yml.example
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
services:
|
||||||
|
bookstack:
|
||||||
|
labels:
|
||||||
|
# Habilitar Traefik
|
||||||
|
- traefik.enable=true
|
||||||
|
|
||||||
|
# Router HTTP (redirige a HTTPS)
|
||||||
|
- traefik.http.routers.bookstack-http.rule=Host(`${DOMAIN_HOST}`)
|
||||||
|
- traefik.http.routers.bookstack-http.entrypoints=web
|
||||||
|
- traefik.http.routers.bookstack-http.middlewares=redirect-to-https
|
||||||
|
|
||||||
|
# Router HTTPS
|
||||||
|
- traefik.http.routers.bookstack.rule=Host(`${DOMAIN_HOST}`)
|
||||||
|
- traefik.http.routers.bookstack.entrypoints=websecure
|
||||||
|
- traefik.http.routers.bookstack.tls=true
|
||||||
|
- traefik.http.routers.bookstack.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.routers.bookstack.service=bookstack-svc
|
||||||
|
- traefik.http.services.bookstack-svc.loadbalancer.server.port=80
|
||||||
|
|
||||||
|
# Redirect middleware
|
||||||
|
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||||
|
- traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true
|
||||||
48
docker-compose.yml
Normal file
48
docker-compose.yml
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
services:
|
||||||
|
bookstack:
|
||||||
|
container_name: bookstack
|
||||||
|
image: lscr.io/linuxserver/bookstack:latest
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
PUID: 1000
|
||||||
|
PGID: 1000
|
||||||
|
TZ: Europe/Madrid
|
||||||
|
APP_URL: https://${DOMAIN_HOST:-bookstack.example.com}
|
||||||
|
DB_HOST: bookstack-db
|
||||||
|
DB_PORT: 3306
|
||||||
|
DB_DATABASE: ${DB_NAME:-bookstack}
|
||||||
|
DB_USERNAME: ${DB_USER:-bookstack}
|
||||||
|
DB_PASSWORD: ${DB_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- bookstack_config:/config
|
||||||
|
networks:
|
||||||
|
- proxy
|
||||||
|
- bookstack-internal
|
||||||
|
depends_on:
|
||||||
|
- bookstack-db
|
||||||
|
|
||||||
|
bookstack-db:
|
||||||
|
container_name: bookstack-db
|
||||||
|
image: mariadb:11-alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
MYSQL_DATABASE: ${DB_NAME:-bookstack}
|
||||||
|
MYSQL_USER: ${DB_USER:-bookstack}
|
||||||
|
MYSQL_PASSWORD: ${DB_PASSWORD}
|
||||||
|
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
|
||||||
|
volumes:
|
||||||
|
- bookstack_db:/var/lib/mysql
|
||||||
|
networks:
|
||||||
|
- bookstack-internal
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
bookstack_config:
|
||||||
|
name: bookstack_config
|
||||||
|
bookstack_db:
|
||||||
|
name: bookstack_db
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
bookstack-internal:
|
||||||
|
name: bookstack-internal
|
||||||
Reference in New Issue
Block a user