feat: homepage

This commit is contained in:
Philip Haupt
2025-03-15 14:33:40 +01:00
commit b2c53d2181
13 changed files with 546 additions and 0 deletions

61
homepage/cm.yaml Normal file
View File

@@ -0,0 +1,61 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
name: homepage
namespace: homepage
labels:
app.kubernetes.io/name: homepage
data:
kubernetes.yaml: |
mode: cluster
settings.yaml: ""
#settings.yaml: |
# providers:
# longhorn:
# url: https://longhorn.my.network
custom.css: ""
custom.js: ""
bookmarks.yaml: |
- Developer:
- Github:
- abbr: GH
href: https://github.com/
services.yaml: |
- My First Group:
- My First Service:
href: http://localhost/
description: Homepage is awesome
- My Second Group:
- My Second Service:
href: http://localhost/
description: Homepage is the best
- My Third Group:
- My Third Service:
href: http://localhost/
description: Homepage is 😎
widgets.yaml: |
- kubernetes:
cluster:
show: true
cpu: true
memory: true
showLabel: true
label: "cluster"
nodes:
show: true
cpu: true
memory: true
showLabel: true
- resources:
backend: resources
expanded: true
cpu: true
memory: true
network: default
- search:
provider: duckduckgo
target: _blank
docker.yaml: ""

40
homepage/cr.yaml Normal file
View File

@@ -0,0 +1,40 @@
---
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:
- metrics.k8s.io
resources:
- nodes
- pods
verbs:
- get
- list

15
homepage/crb.yaml Normal file
View File

@@ -0,0 +1,15 @@
---
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: homepage

66
homepage/deploy.yaml Normal file
View File

@@ -0,0 +1,66 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: homepage
namespace: homepage
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
spec:
serviceAccountName: homepage
automountServiceAccountToken: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
containers:
- name: homepage
image: "ghcr.io/gethomepage/homepage:v0.10.9"
imagePullPolicy: Always
ports:
- name: http
containerPort: 3000
protocol: TCP
volumeMounts:
- mountPath: /app/config/custom.js
name: homepage-config
subPath: custom.js
- mountPath: /app/config/custom.css
name: homepage-config
subPath: custom.css
- mountPath: /app/config/bookmarks.yaml
name: homepage-config
subPath: bookmarks.yaml
- mountPath: /app/config/docker.yaml
name: homepage-config
subPath: docker.yaml
- mountPath: /app/config/kubernetes.yaml
name: homepage-config
subPath: kubernetes.yaml
- mountPath: /app/config/services.yaml
name: homepage-config
subPath: services.yaml
- mountPath: /app/config/settings.yaml
name: homepage-config
subPath: settings.yaml
- mountPath: /app/config/widgets.yaml
name: homepage-config
subPath: widgets.yaml
- mountPath: /app/config/logs
name: logs
volumes:
- name: homepage-config
configMap:
name: homepage
- name: logs
emptyDir: {}

20
homepage/gateway.yaml Normal file
View File

@@ -0,0 +1,20 @@
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: homepage
namespace: homepage
spec:
gatewayClassName: cilium
listeners:
- hostname: homepage.home
name: homepage-home-http
port: 80
protocol: HTTP
# - hostname: homepage.home
# name: homepage-home-https
# port: 443
# protocol: HTTPS
# tls:
# certificateRefs:
# - kind: Secret
# name: homepage-server-tls

18
homepage/http-route.yaml Normal file
View File

@@ -0,0 +1,18 @@
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: homepage
namespace: homepage
spec:
parentRefs:
- name: homepage
hostnames:
- "homepage.home"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: homepage
port: 3000

27
homepage/ingress.yaml Normal file
View File

@@ -0,0 +1,27 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: homepage
namespace: homepage
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: cilium
rules:
- host: "homepage.home"
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: homepage
port:
number: 3000

View File

@@ -0,0 +1,15 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- cm.yaml
- cr.yaml
- crb.yaml
- deploy.yaml
#- gateway.yaml
#- http-route.yaml
- ingress.yaml
- ns.yaml
- secret.yaml
- svc.yaml
- svcacc.yaml

239
homepage/main.yaml Normal file
View File

@@ -0,0 +1,239 @@
apiVersion: v1
kind: Namespace
metadata:
name: homepage
---
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
secrets:
- name: homepage
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/name: homepage
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:
- metrics.k8s.io
resources:
- nodes
- pods
verbs:
- get
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app.kubernetes.io/name: homepage
name: homepage
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: homepage
subjects:
- kind: ServiceAccount
name: homepage
namespace: homepage
---
apiVersion: v1
data:
bookmarks.yaml: |
- Developer:
- Github:
- abbr: GH
href: https://github.com/
custom.css: ""
custom.js: ""
docker.yaml: ""
kubernetes.yaml: |
mode: cluster
services.yaml: "- My First Group:\n - My First Service:\n href: http://localhost/\n
\ description: Homepage is awesome\n\n- My Second Group:\n - My Second
Service:\n href: http://localhost/\n description: Homepage is the
best\n\n- My Third Group:\n - My Third Service:\n href: http://localhost/\n
\ description: Homepage is \U0001F60E\n"
settings.yaml: ""
widgets.yaml: |
- kubernetes:
cluster:
show: true
cpu: true
memory: true
showLabel: true
label: "cluster"
nodes:
show: true
cpu: true
memory: true
showLabel: true
- resources:
backend: resources
expanded: true
cpu: true
memory: true
network: default
- search:
provider: duckduckgo
target: _blank
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
---
apiVersion: v1
kind: Secret
metadata:
annotations:
kubernetes.io/service-account.name: homepage
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: Service
metadata:
annotations:
io.cilium/lb-ipam-ips: 192.168.0.130
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
spec:
ports:
- name: http
port: 3000
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/name: homepage
type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
spec:
replicas: 1
revisionHistoryLimit: 3
selector:
matchLabels:
app.kubernetes.io/name: homepage
strategy:
type: RollingUpdate
template:
metadata:
labels:
app.kubernetes.io/name: homepage
spec:
automountServiceAccountToken: true
containers:
- image: ghcr.io/gethomepage/homepage:v0.10.9
imagePullPolicy: Always
name: homepage
ports:
- containerPort: 3000
name: http
protocol: TCP
volumeMounts:
- mountPath: /app/config/custom.js
name: homepage-config
subPath: custom.js
- mountPath: /app/config/custom.css
name: homepage-config
subPath: custom.css
- mountPath: /app/config/bookmarks.yaml
name: homepage-config
subPath: bookmarks.yaml
- mountPath: /app/config/docker.yaml
name: homepage-config
subPath: docker.yaml
- mountPath: /app/config/kubernetes.yaml
name: homepage-config
subPath: kubernetes.yaml
- mountPath: /app/config/services.yaml
name: homepage-config
subPath: services.yaml
- mountPath: /app/config/settings.yaml
name: homepage-config
subPath: settings.yaml
- mountPath: /app/config/widgets.yaml
name: homepage-config
subPath: widgets.yaml
- mountPath: /app/config/logs
name: logs
dnsPolicy: ClusterFirst
enableServiceLinks: true
serviceAccountName: homepage
volumes:
- configMap:
name: homepage
name: homepage-config
- emptyDir: {}
name: logs
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
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
labels:
app.kubernetes.io/name: homepage
name: homepage
namespace: homepage
spec:
ingressClassName: cilium
rules:
- host: homepage.home
http:
paths:
- backend:
service:
name: homepage
port:
number: 3000
path: /
pathType: Prefix

5
homepage/ns.yaml Normal file
View File

@@ -0,0 +1,5 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: homepage

11
homepage/secret.yaml Normal file
View File

@@ -0,0 +1,11 @@
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: homepage
namespace: homepage
labels:
app.kubernetes.io/name: homepage
annotations:
kubernetes.io/service-account.name: homepage

19
homepage/svc.yaml Normal file
View File

@@ -0,0 +1,19 @@
---
apiVersion: v1
kind: Service
metadata:
name: homepage
namespace: homepage
labels:
app.kubernetes.io/name: homepage
annotations:
io.cilium/lb-ipam-ips: 192.168.0.130
spec:
type: ClusterIP
ports:
- port: 3000
targetPort: http
protocol: TCP
name: http
selector:
app.kubernetes.io/name: homepage

10
homepage/svcacc.yaml Normal file
View File

@@ -0,0 +1,10 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: homepage
namespace: homepage
labels:
app.kubernetes.io/name: homepage
secrets:
- name: homepage