stack.basicstack.de/apps/bookstack/bookstack-deployment.yaml
CTO Agent 0523d6e0c6 Fix Bookstack OIDC client ID to match Pocket ID configuration
The deployment was using client ID "bookstack" which does not exist in
Pocket ID. Updated to use the actual client ID from Pocket ID.

This fixes the "Record not found" error when attempting to login via
Pocket ID.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-07-12 11:51:18 +00:00

261 lines
5.7 KiB
YAML

---
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://books.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: "true"
- name: OIDC_NAME
value: "Pocket ID"
- name: OIDC_DISPLAY_NAME_CLAIMS
value: "name"
- name: OIDC_CLIENT_ID
value: "158bc0f7-e569-47c1-8dd2-269b9812cb18"
- name: OIDC_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: bookstack-oidc
key: client-secret
- name: OIDC_ISSUER
value: "https://auth.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:
- books.basicstack.de
secretName: bookstack-tls
rules:
- host: books.basicstack.de
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: bookstack
port:
number: 80