Looking for flashy and dynamic dashboard to organized your websites and self-hosted application running on your cluster/server? Checkout homepage!
Homepage Core Features
- Docker integration
- Kubernetes integration
- Service Integration
- Various widgets
Experience with Homepage
It’s easy to install and configure, with docker you may need to mount the config but with kubernetes it can be configured by using config maps. This has been my dashboard for quite sometime now and every websites and application deployed is added.
It has a quick integration using annonation in ingress, here is a sample. With this example, this application/website is added automatically to group Links
.
1apiVersion: networking.k8s.io/v1
2kind: Ingress
3metadata:
4 name: tagsdev-hugo-ingress
5 annotations:
6 gethomepage.dev/description: "TagsDev | Mark Taguaid"
7 gethomepage.dev/enabled: "true"
8 gethomepage.dev/group: Links
9 gethomepage.dev/icon: https://raw.githubusercontent.com/mcbtaguiad/web-tagsdev-hugo/main/app/static/images/fa-tags-nobg.png
10 gethomepage.dev/name: TagsDev
11 kubernetes.io/ingress.class: "nginx"
12 cert-manager.io/cluster-issuer: "letsencrypt-prod"
13spec:
14 tls:
15 - hosts:
16 - marktaguiad.dev
17 secretName: tagsdev-hugo-tls
18 rules:
19 - host: marktaguiad.dev
20 http:
21 paths:
22 - path: /
23 #pathType: ImplementationSpecific
24 pathType: Prefix
25 backend:
26 service:
27 name: web-tagsdev
28 port:
29 number: 8080
Homepage with Docker
Installing it is easy! Just use docker-compose/podman-compose.
1version: "3.3"
2services:
3 homepage:
4 image: ghcr.io/benphelps/homepage:latest
5 container_name: homepage
6 ports:
7 - 3000:3000
8 volumes:
9 - /path/to/config:/app/config # Make sure your local config directory exists
10 - /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations
11
Homepage with Kubernetes
Use the unofficial helm chart: https://github.com/jameswynn/helm-charts/tree/main/charts/homepage
1helm repo add jameswynn https://jameswynn.github.io/helm-charts
2helm install my-release jameswynn/homepage
Or use my kube deploy files.
deployment.yaml
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: homepage
5 namespace: web
6 labels:
7 app.kubernetes.io/name: homepage
8spec:
9 revisionHistoryLimit: 3
10 replicas: 1
11 strategy:
12 type: RollingUpdate
13 selector:
14 matchLabels:
15 app.kubernetes.io/name: homepage
16 template:
17 metadata:
18 labels:
19 app.kubernetes.io/name: homepage
20 spec:
21 serviceAccountName: homepage
22 automountServiceAccountToken: true
23 dnsPolicy: ClusterFirst
24 enableServiceLinks: true
25 containers:
26 - name: homepage
27 image: ghcr.io/gethomepage/homepage:latest
28 imagePullPolicy: Always
29 securityContext:
30 privileged: true
31 ports:
32 - name: http
33 containerPort: 3000
34 protocol: TCP
35 volumeMounts:
36 - name: homepage-config
37 mountPath: /app/config
38 - name: logs
39 mountPath: /app/config/logs
40 volumes:
41 - name: homepage-config
42 configMap:
43 name: homepage
44 - name: logs
45 emptyDir:
46 {}
service.yaml
1apiVersion: v1
2kind: Service
3metadata:
4 name: homepage
5 namespace: web
6 labels:
7 app.kubernetes.io/name: homepage
8 annotations:
9spec:
10 type: ClusterIP
11 ports:
12 - port: 3000
13 targetPort: http
14 protocol: TCP
15 name: http
16 selector:
17 app.kubernetes.io/name: homepage
serviceaccount.yaml
1apiVersion: v1
2kind: ServiceAccount
3metadata:
4 name: homepage
5 namespace: web
6 labels:
7 app.kubernetes.io/name: homepage
8secrets:
9 - name: homepage
clusterrole.yaml
1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRole
3metadata:
4 name: homepage
5 labels:
6 app.kubernetes.io/name: homepage
7rules:
8 - apiGroups:
9 - ""
10 resources:
11 - namespaces
12 - pods
13 - nodes
14 verbs:
15 - get
16 - list
17 - apiGroups:
18 - extensions
19 - networking.k8s.io
20 resources:
21 - ingresses
22 verbs:
23 - get
24 - list
25 - apiGroups:
26 - metrics.k8s.io
27 resources:
28 - nodes
29 - pods
30 verbs:
31 - get
32 - list
33
clusterrolebinding.yaml
1apiVersion: rbac.authorization.k8s.io/v1
2kind: ClusterRoleBinding
3metadata:
4 name: homepage
5 labels:
6 app.kubernetes.io/name: homepage
7roleRef:
8 apiGroup: rbac.authorization.k8s.io
9 kind: ClusterRole
10 name: homepage
11subjects:
12 - kind: ServiceAccount
13 name: homepage
14 namespace: web