apiVersion: v1 kind: ServiceAccount metadata: name: homepage namespace: default labels: app.kubernetes.io/name: homepage secrets: - name: homepage --- apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: homepage namespace: default labels: app.kubernetes.io/name: homepage annotations: kubernetes.io/service-account.name: homepage --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: homepage labels: app.kubernetes.io/name: homepage rules: - apiGroups: - "" resources: - namespaces - pods - nodes verbs: - get - list - apiGroups: - extensions - networking.k8s.io resources: - ingresses verbs: - get - list - apiGroups: - traefik.io resources: - ingressroutes verbs: - get - list - apiGroups: - gateway.networking.k8s.io resources: - httproutes - gateways verbs: - get - list - apiGroups: - metrics.k8s.io resources: - nodes - pods verbs: - get - list --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: homepage labels: app.kubernetes.io/name: homepage roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: homepage subjects: - kind: ServiceAccount name: homepage namespace: default --- apiVersion: apps/v1 kind: Deployment metadata: name: homepage namespace: default labels: app.kubernetes.io/name: homepage spec: revisionHistoryLimit: 3 replicas: 1 strategy: type: RollingUpdate selector: matchLabels: app.kubernetes.io/name: homepage template: metadata: labels: app.kubernetes.io/name: homepage annotations: configmap.reloader/checksum: "{{ include (print $.Template.BasePath \"/app/config/services.yaml\") . | sha256sum }}" spec: serviceAccountName: homepage automountServiceAccountToken: true enableServiceLinks: true containers: - name: homepage image: "ghcr.io/gethomepage/homepage:latest" imagePullPolicy: Always env: - name: HOMEPAGE_ALLOWED_HOSTS value: homepage.haven # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts ports: - name: http containerPort: 3000 protocol: TCP livenessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: / port: 3000 initialDelaySeconds: 5 periodSeconds: 5 volumeMounts: - name: logs mountPath: /app/config/logs - name: homepage-config mountPath: /app/config - name: homepage-config mountPath: /app/public/images subPath: images volumes: - name: homepage-config persistentVolumeClaim: claimName: homepage-config - name: logs emptyDir: {} --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: homepage-config namespace: default annotations: nfs.io/storage-path: "homepage-config" spec: storageClassName: "nfs-client" accessModes: - ReadWriteMany resources: requests: storage: 1Gi --- apiVersion: v1 kind: Service metadata: name: homepage namespace: default labels: app.kubernetes.io/name: homepage annotations: spec: type: ClusterIP ports: - port: 3000 targetPort: http protocol: TCP name: http selector: app.kubernetes.io/name: homepage --- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: homepage namespace: default labels: app.kubernetes.io/name: homepage # annotations: # gethomepage.dev/description: Dynamically Detected Homepage # gethomepage.dev/enabled: "true" # gethomepage.dev/group: Cluster Management # gethomepage.dev/icon: homepage.png # gethomepage.dev/name: Homepage spec: ingressClassName: nginx rules: - host: "homepage.haven" http: paths: - path: "/" pathType: Prefix backend: service: name: homepage port: number: 3000