imagen

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