The mysql-data-encrypted PVC exists in the cluster and is working correctly, but attempting to manage it through Argo CD causes sync failures because the PVC is already bound and its spec is immutable. Leaving it unmanaged while documenting its existence. Co-Authored-By: Paperclip <noreply@paperclip.ing>
262 lines
5.8 KiB
YAML
262 lines
5.8 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
|
|
---
|
|
# Note: mysql-data-encrypted PVC is pre-existing and not managed by Argo CD
|
|
# 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
|