--- apiVersion: v1 kind: Namespace metadata: name: bookstack --- # MySQL Deployment apiVersion: apps/v1 kind: Deployment metadata: name: mysql namespace: bookstack spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0 ports: - containerPort: 3306 name: mysql env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql key: mysql-root-password - name: MYSQL_DATABASE valueFrom: secretKeyRef: name: mysql key: mysql-database - name: MYSQL_USER valueFrom: secretKeyRef: name: mysql key: mysql-user - name: MYSQL_PASSWORD valueFrom: secretKeyRef: name: mysql key: mysql-password volumeMounts: - name: mysql-data mountPath: /var/lib/mysql resources: requests: memory: "512Mi" cpu: "250m" limits: memory: "1Gi" cpu: "1000m" volumes: - name: mysql-data persistentVolumeClaim: claimName: mysql-data-encrypted --- # MySQL Service apiVersion: v1 kind: Service metadata: name: mysql namespace: bookstack spec: type: ClusterIP selector: app: mysql ports: - port: 3306 targetPort: 3306 protocol: TCP --- # Bookstack Config PersistentVolumeClaim apiVersion: v1 kind: PersistentVolumeClaim metadata: name: bookstack-config namespace: bookstack spec: accessModes: - ReadWriteOnce storageClassName: hcloud-volumes-encrypted resources: requests: storage: 5Gi --- # Bookstack Deployment apiVersion: apps/v1 kind: Deployment metadata: name: bookstack namespace: bookstack spec: replicas: 1 selector: matchLabels: app: bookstack template: metadata: labels: app: bookstack spec: initContainers: - name: wait-for-mysql image: busybox:latest command: - sh - -c - | until nc -z mysql 3306; do echo "Waiting for MySQL to be ready..." sleep 2 done echo "MySQL is ready!" containers: - name: bookstack image: lscr.io/linuxserver/bookstack:latest ports: - containerPort: 80 name: http env: - name: PUID value: "1000" - name: PGID value: "1000" - name: TZ value: "Europe/Berlin" - name: APP_URL value: "https://bookstack.basicstack.de" - name: DB_HOST value: "mysql" - name: DB_PORT value: "3306" - name: DB_DATABASE valueFrom: secretKeyRef: name: mysql key: mysql-database - name: DB_USERNAME valueFrom: secretKeyRef: name: mysql key: mysql-user - name: DB_PASSWORD valueFrom: secretKeyRef: name: mysql key: mysql-password # OIDC Configuration - name: AUTH_METHOD value: "oidc" - name: AUTH_AUTO_INITIATE value: "false" - name: OIDC_NAME value: "Pocket-ID" - name: OIDC_DISPLAY_NAME_CLAIMS value: "name" - name: OIDC_CLIENT_ID value: "bookstack" - name: OIDC_CLIENT_SECRET valueFrom: secretKeyRef: name: bookstack-oidc key: client-secret - name: OIDC_ISSUER value: "https://pocket-id.basicstack.de" - name: OIDC_ISSUER_DISCOVER value: "true" - name: OIDC_PUBLIC_KEY value: "" - name: OIDC_AUTH_ENDPOINT value: "" - name: OIDC_TOKEN_ENDPOINT value: "" - name: OIDC_DUMP_USER_DETAILS value: "false" - name: OIDC_USER_TO_GROUPS value: "true" - name: OIDC_GROUPS_CLAIM value: "groups" - name: OIDC_REMOVE_FROM_GROUPS value: "false" volumeMounts: - name: bookstack-config mountPath: /config resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "1Gi" cpu: "1000m" livenessProbe: httpGet: path: / port: 80 initialDelaySeconds: 60 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 6 readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 30 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 volumes: - name: bookstack-config persistentVolumeClaim: claimName: bookstack-config --- # Bookstack Service apiVersion: v1 kind: Service metadata: name: bookstack namespace: bookstack spec: type: ClusterIP selector: app: bookstack ports: - port: 80 targetPort: 80 protocol: TCP --- # Bookstack Ingress apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: bookstack namespace: bookstack annotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" traefik.ingress.kubernetes.io/router.entrypoints: websecure spec: ingressClassName: traefik tls: - hosts: - bookstack.basicstack.de secretName: bookstack-tls rules: - host: bookstack.basicstack.de http: paths: - path: / pathType: Prefix backend: service: name: bookstack port: number: 80