# FileBrowser + Webpage deployment for felhom.eu --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: filebrowser-files namespace: felhom-system spec: accessModes: - ReadWriteMany storageClassName: longhorn resources: requests: storage: 1Gi --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: filebrowser-db namespace: felhom-system spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 100Mi --- apiVersion: v1 kind: ConfigMap metadata: name: filebrowser-config namespace: felhom-system data: .filebrowser.json: | { "port": 8080, "baseURL": "", "address": "0.0.0.0", "log": "stdout", "database": "/database/filebrowser.db", "root": "/srv" } --- # =================== # FILEBROWSER # =================== apiVersion: apps/v1 kind: Deployment metadata: name: filebrowser namespace: felhom-system labels: app: filebrowser spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app: filebrowser template: metadata: labels: app: filebrowser spec: # filebrowser v2.63.13 (debian default) runs as a non-root UID by default # and can't write to PVC files left by the previous v2-alpine image (which # ran as root). Force root explicitly so the existing PVC contents are # readable + writable. (The alternative -- chown the PVC then drop perms -- # needs a one-shot initContainer; not worth the moving parts here.) securityContext: runAsUser: 0 runAsGroup: 0 containers: - name: filebrowser image: filebrowser/filebrowser:v2.63.13 # v2.63.x default config path is `/config/settings.json`; our ConfigMap # is mounted at `/.filebrowser.json`. Tell filebrowser to read it # explicitly so it picks up port 8080 (else it falls back to port 80 # and the readiness probe on 8080 fails). args: ["-c", "/.filebrowser.json"] ports: - containerPort: 8080 volumeMounts: - name: files mountPath: /srv - name: database mountPath: /database - name: config mountPath: /.filebrowser.json subPath: .filebrowser.json resources: requests: memory: "64Mi" cpu: "50m" limits: memory: "256Mi" cpu: "500m" livenessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 10 periodSeconds: 30 readinessProbe: httpGet: path: /health port: 8080 initialDelaySeconds: 5 periodSeconds: 10 volumes: - name: files persistentVolumeClaim: claimName: filebrowser-files - name: database persistentVolumeClaim: claimName: filebrowser-db - name: config configMap: name: filebrowser-config --- apiVersion: v1 kind: Service metadata: name: filebrowser namespace: felhom-system spec: selector: app: filebrowser ports: - port: 80 targetPort: 8080 --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: filebrowser namespace: felhom-system annotations: cert-manager.io/cluster-issuer: letsencrypt-prod nginx.ingress.kubernetes.io/proxy-body-size: "100m" spec: ingressClassName: nginx-internal tls: - hosts: - files.felhom.eu secretName: filebrowser-tls rules: - host: files.felhom.eu http: paths: - path: / pathType: Prefix backend: service: name: filebrowser port: number: 80