Skip to main content

Bookstack

image.png

BookStack es una plataforma web de documentación y gestión de conocimiento, de código abierto, diseñada para que equipos u organizaciones organicen información de manera estructurada y colaborativa.
Está escrita en PHP (Laravel) y utiliza MySQL/MariaDB como base de datos.


🔧 Usos

  • Crear wikis internos

  • Documentar procedimientos técnicos, manuales o políticas

  • Gestionar conocimiento organizacional

Manifiesto

✅ Namespace bookstack
✅ StatefulSet de MariaDB con PVC basado en StorageClass ceph-rbd
✅ Deployment escalable de BookStack con PVC basado en StorageClass ceph-rbd
✅ Service para la comunicación entre BookStack y MariaDB
✅ Ingress con nginx en https://bookstack.k8s.dominio.com

# Namespace para BookStack
apiVersion: v1
kind: Namespace
metadata:
  name: bookstack
---
# Secret para credenciales de MariaDB y BookStack
apiVersion: v1
kind: Secret
metadata:
  name: bookstack-secret
  namespace: bookstack
type: Opaque
stringData:
  MYSQL_ROOT_PASSWORD: bookstackpass
  MYSQL_DATABASE: bookstack
  MYSQL_USER: bookstack
  MYSQL_PASSWORD: bookstackpass
---
# PVC para configuración BookStack
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: bookstack-pvc
  namespace: bookstack
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ceph-rbd
  resources:
    requests:
      storage: 5Gi
---
# Servicio para MariaDB (ClusterIP interno)
apiVersion: v1
kind: Service
metadata:
  name: mariadb
  namespace: bookstack
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: mariadb
---
# StatefulSet de MariaDB (con volumen persistente)
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mariadb
  namespace: bookstack
spec:
  selector:
    matchLabels:
      app: mariadb
  serviceName: mariadb
  replicas: 1
  template:
    metadata:
      labels:
        app: mariadb
    spec:
      containers:
        - name: mariadb
          image: mariadb:10.11
          env:
            - name: TZ
              value: Europe/Madrid
            - name: MYSQL_ROOT_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_ROOT_PASSWORD
            - name: MYSQL_DATABASE
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_DATABASE
            - name: MYSQL_USER
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_USER
            - name: MYSQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_PASSWORD
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mariadb-storage
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: mariadb-storage
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: ceph-rbd
        resources:
          requests:
            storage: 5Gi
---
# Servicio para BookStack (interno para Ingress)
apiVersion: v1
kind: Service
metadata:
  name: bookstack
  namespace: bookstack
spec:
  selector:
    app: bookstack
  ports:
    - port: 80
      targetPort: 80
---
# Deployment de BookStack
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bookstack
  namespace: bookstack
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bookstack
  template:
    metadata:
      labels:
        app: bookstack
    spec:
      containers:
        - name: bookstack
          image: lscr.io/linuxserver/bookstack:latest
          env:
            - name: PUID
              value: "1000"
            - name: PGID
              value: "1000"
            - name: TZ
              value: Europe/Madrid
            - name: APP_URL
              value: https://bookstack.k8s.ictiberia.com
            - name: APP_KEY
              value: base64:iT19P7p4nStOV3LCxQ169Wg6KMFLesM2N50u8vFcJ2c=
            - name: DB_HOST
              value: mariadb.bookstack.svc.cluster.local
            - name: DB_PORT
              value: "3306"
            - name: DB_USERNAME
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_USER
            - name: DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_PASSWORD
            - name: DB_DATABASE
              valueFrom:
                secretKeyRef:
                  name: bookstack-secret
                  key: MYSQL_DATABASE
          ports:
            - containerPort: 80
          volumeMounts:
            - name: bookstack-storage
              mountPath: /config
      volumes:
        - name: bookstack-storage
          persistentVolumeClaim:
            claimName: bookstack-pvc
---
# Ingress TLS para BookStack
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: bookstack
  namespace: bookstack
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    cert-manager.io/cluster-issuer: "letsencrypt-staging" # usa letsencrypt-production en producción
spec:
  tls:
    - hosts:
        - bookstack.k8s.ictiberia.com
      secretName: bookstack-tls
  rules:
    - host: bookstack.k8s.ictiberia.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: bookstack
                port:
                  number: 80