diff --git a/helm/Chart.yaml b/helm/Chart.yaml new file mode 100644 index 00000000..2bfd9ed6 --- /dev/null +++ b/helm/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +appVersion: "v2.30.0" +description: "filebrowser" +name: filebrowser +release-name: filebrowser +version: v1.0.6 diff --git a/helm/README.md b/helm/README.md new file mode 100644 index 00000000..ac12ce72 --- /dev/null +++ b/helm/README.md @@ -0,0 +1,26 @@ + +## package helm chart + + perl -pe 's/(version: )(v\d\.)(\d\.)(\d+)/$1 . $2.$3.($4 + 1)/ge' helm/Chart.yaml > helm/Chart.yaml.tmp; + mv helm/Chart.yaml.tmp helm/Chart.yaml + + helm package helm + helm cm-push -u -p $(ls -tr -1 *.tgz | tail -n 1) + +## install + + helm install / --namespace --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com' + +or + + helm upgrade --install / --namespace --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com' + +## install from local directory + + helm upgrade --install helm/ --namespace --create-namespace --wait --set ingress.tls='true' --set ingress.ingessClassName='traefik' --set ingress.domain='files.example.com' + +## upgrade + + helm repo update + helm upgrade / --namespace + diff --git a/helm/templates/docker-secret.yaml b/helm/templates/docker-secret.yaml new file mode 100644 index 00000000..a3f407ae --- /dev/null +++ b/helm/templates/docker-secret.yaml @@ -0,0 +1,20 @@ +{{- if (eq (toString .Values.cr.enabled ) "true") }} +apiVersion: v1 +kind: Secret +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: dockersecret + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }}-docker + namespace: {{ .Values.namespace }} +type: kubernetes.io/dockerconfigjson +data: + .dockerconfigjson: {{ .Values.cr.dockersecret }} +{{ end }} diff --git a/helm/templates/filebrowser-cm.yaml b/helm/templates/filebrowser-cm.yaml new file mode 100644 index 00000000..1782b7ec --- /dev/null +++ b/helm/templates/filebrowser-cm.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: configmap + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }}-cm + namespace: {{ .Values.namespace }} +data: + .filebrowser.json: | + { + "port": 80, + "baseURL": "/files", + "address": "", + "log": "stdout", + "database": "/srv/config/database.db", + "root": "/srv" + } diff --git a/helm/templates/filebrowser-deploy.yaml b/helm/templates/filebrowser-deploy.yaml new file mode 100644 index 00000000..1524e845 --- /dev/null +++ b/helm/templates/filebrowser-deploy.yaml @@ -0,0 +1,76 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: web + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }} + namespace: {{ .Values.namespace }} +metadata: + labels: + app: {{ .Values.fullnameOverride }} + name: {{ .Values.namespace }} + name: {{ .Values.fullnameOverride }} + namespace: {{ .Values.namespace }} +spec: + progressDeadlineSeconds: 600 + replicas: 1 + revisionHistoryLimit: 10 + selector: + matchLabels: + app: {{ .Values.fullnameOverride }} + name: {{ .Values.namespace }} + strategy: + rollingUpdate: + maxSurge: 25% + maxUnavailable: 25% + type: RollingUpdate + template: + metadata: + labels: + app: {{ .Values.fullnameOverride }} + name: {{ .Values.namespace }} + spec: + containers: + - image: {{ .Values.cr.registry }}/{{ .Values.cr.image }}:{{ .Values.cr.tag }} + imagePullPolicy: Always + name: remoteip + resources: {} + terminationMessagePath: /dev/termination-log + terminationMessagePolicy: File + volumeMounts: + - mountPath: /srv + name: data-pvc + - mountPath: /srv/config + name: files-pvc + - mountPath: /.filebrowser.json + name: filebrowser-cm + subPath: .filebrowser.json + dnsPolicy: ClusterFirst + {{- if (eq (toString .Values.cr.enabled ) "true") }} + imagePullSecrets: + - name: {{ .Values.fullnameOverride }}-docker + {{ end }} + restartPolicy: Always + schedulerName: default-scheduler + securityContext: {} + terminationGracePeriodSeconds: 30 + volumes: + - name: data-pvc + persistentVolumeClaim: + claimName: {{ .Values.namespace }}-data-pvc + - name: files-pvc + persistentVolumeClaim: + claimName: {{ .Values.namespace }}-files-pvc + - configMap: + defaultMode: 420 + name: filebrowser-cm + name: filebrowser-cm diff --git a/helm/templates/files-ingress.yaml b/helm/templates/files-ingress.yaml new file mode 100644 index 00000000..63512bdf --- /dev/null +++ b/helm/templates/files-ingress.yaml @@ -0,0 +1,40 @@ +{{- if (eq (toString .Values.ingress.enabled ) "true") }} +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + cert-manager.io/cluster-issuer: letsencrypt-prod + ingress.kubernetes.io/ssl-redirect: "true" + nginx.ingress.kubernetes.io/rewrite-target: / + traefik.ingress.kubernetes.io/router.middlewares: {{ .Values.fullnameOverride }}-redirect@kubernetescrd + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: web + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }} + namespace: {{ .Values.namespace }} +spec: + ingressClassName: {{ .Values.ingress.ingessClassName }} + rules: + - host: {{ .Values.ingress.domain }} + http: + paths: + - backend: + service: + name: {{ .Values.fullnameOverride }} + port: + number: {{ .Values.loadbalancer.port }} + path: / + pathType: Prefix + {{- if (eq (toString .Values.ingress.tls ) "true") }} + tls: + - hosts: + - {{ .Values.ingress.domain }} + secretName: {{ .Values.ingress.domain }}-tls + {{ end }} +{{ end }} diff --git a/helm/templates/files-svc.yaml b/helm/templates/files-svc.yaml new file mode 100644 index 00000000..a4eed42c --- /dev/null +++ b/helm/templates/files-svc.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + name: {{ .Values.namespace }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: service + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }} + namespace: {{ .Values.namespace }} +spec: + internalTrafficPolicy: Cluster + ipFamilies: + - IPv4 + ipFamilyPolicy: SingleStack + ports: + - name: {{ .Values.fullnameOverride }} + port: {{ .Values.loadbalancer.port }} + protocol: {{ .Values.loadbalancer.protocol }} + targetPort: {{ .Values.loadbalancer.targetport }} + selector: + app: {{ .Values.fullnameOverride }} + name: {{ .Values.namespace }} + sessionAffinity: None + type: ClusterIP + diff --git a/helm/templates/middleware.yaml b/helm/templates/middleware.yaml new file mode 100644 index 00000000..bee5891a --- /dev/null +++ b/helm/templates/middleware.yaml @@ -0,0 +1,19 @@ +apiVersion: traefik.containo.us/v1alpha1 +kind: Middleware +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: middleware + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: redirect + namespace: {{ .Values.namespace }} +spec: + redirectScheme: + permanent: true + scheme: https \ No newline at end of file diff --git a/helm/templates/pv-data.yaml b/helm/templates/pv-data.yaml new file mode 100644 index 00000000..10285b37 --- /dev/null +++ b/helm/templates/pv-data.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: web + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }}-data-pv + namespace: {{ .Values.namespace }} +spec: + accessModes: + - ReadWriteMany + capacity: + storage: 100M + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: {{ .Values.fullnameOverride }}-data-pvc + namespace: {{ .Values.namespace }} + hostPath: + path: /mnt/{{ .Values.fullnameOverride }}-data-pv + type: "" + persistentVolumeReclaimPolicy: Retain + storageClassName: {{ .Values.storage.class }} + volumeMode: Filesystem diff --git a/helm/templates/pv-files.yaml b/helm/templates/pv-files.yaml new file mode 100644 index 00000000..8c854c5c --- /dev/null +++ b/helm/templates/pv-files.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: web + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }}-files-pv + namespace: {{ .Values.namespace }} +spec: + accessModes: + - ReadWriteMany + capacity: + storage: {{ .Values.storage.size }} + claimRef: + apiVersion: v1 + kind: PersistentVolumeClaim + name: {{ .Values.fullnameOverride }}-files-pvc + namespace: {{ .Values.namespace }} + hostPath: + path: /mnt/{{ .Values.fullnameOverride }}-files-pvc + type: "" + persistentVolumeReclaimPolicy: Retain + storageClassName: {{ .Values.storage.class }} + volumeMode: Filesystem diff --git a/helm/templates/pvc-data.yaml b/helm/templates/pvc-data.yaml new file mode 100644 index 00000000..b747f321 --- /dev/null +++ b/helm/templates/pvc-data.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: pvc + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.namespace }}-data-pvc + namespace: {{ .Values.namespace }} +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 100M + storageClassName: {{ .Values.storage.class }} + volumeMode: Filesystem + volumeName: {{ .Values.namespace }}-data-pv diff --git a/helm/templates/pvc-files.yaml b/helm/templates/pvc-files.yaml new file mode 100644 index 00000000..decc34a2 --- /dev/null +++ b/helm/templates/pvc-files.yaml @@ -0,0 +1,24 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + helmrepo: "{{ .Values.helmrepo }}" + labels: + app: {{ .Values.fullnameOverride }} + app.kubernetes.io/component: {{ .Values.fullnameOverride }} + app.kubernetes.io/instance: pvc + app.kubernetes.io/managed-by: Helm + app.kubernetes.io/name: {{ .Values.fullnameOverride }} + app.kubernetes.io/version: {{ .Chart.Version }} + helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }} + name: {{ .Values.fullnameOverride }}-files-pvc + namespace: {{ .Values.namespace }} +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: {{ .Values.storage.size }} + storageClassName: {{ .Values.storage.class }} + volumeMode: Filesystem + volumeName: {{ .Values.fullnameOverride }}-files-pv diff --git a/helm/values.yaml b/helm/values.yaml new file mode 100644 index 00000000..1256a01d --- /dev/null +++ b/helm/values.yaml @@ -0,0 +1,35 @@ +fullnameOverride: "filebrowser" + +replicaCount: 1 + +namespace: filebrowser + +helmrepo: "https://github.com/filebrowser/filebrowser" + +storage: + size: 10Gi + class: local-path + +cr: + enbled: false + dockersecret: "" + registry: docker.io + image: filebrowser/filebrowser + tag: v2.30.0 + +ingress: + enabled: true + tls: true + ingessClassName: traefik + domain: files.example.com + +loadbalancer: + port: 80 + targetport: 80 + protocol: TCP + +nodeSelector: {} + +tolerations: [] + +affinity: {}