Homarr – My new homepage

Homarr – My new homepage

For years, I have added bookmarks to my browsers to enable me to navigate to the different systems I use. Typically, I open a list of pages whenever I launch my browsers, but as the number of systems has increased, I have not been happy with this way of working. So, I looked at a few different ‘home page’ tools to improve my life.

The first home page application I set up was Heimdall. This is a lovely application that runs as a web application in a Kubernetes container – although it is just as happy running in Docker, and you can install it directly on a Linux machine. However, Heimdall has no way to create sections or columns. So I looked for something else and found Homarr.

Where can I find Homarr?

Homarr has its home page here: – https://homarr.dev/

However, as I wanted to host it on my Kubernetes cluster, I needed it in a container. I found the container here: –

ghcr.io/ajnart/homarr:latest

Setup Homarr in Kubernetes

Homarr needs a persistent volume claim for its configuration files. I set it up using Longhorn – my default storage provider in Kubernetes. This meant I needed to set up two persistent volume claims – one for the configuration files and one for icons – like this: –

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-homarr-configs
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 1Gi

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-homarr-icons
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: longhorn
  resources:
    requests:
      storage: 1Gi

As Homarr only needs a small amount of space, I defined it as 1Gi for each claim – this is far more than it will need.

Then, I defined the deployment for Homarr like this:-

apiVersion: apps/v1
kind: Deployment
metadata:
  name: homarr
spec:
  replicas: 1
  selector:
    matchLabels:
      app: homarr
  template:
    metadata:
      labels:
       app: homarr
    spec:
      containers:
        - env:
            - name: PORT
              value: "7575"
          image: ghcr.io/ajnart/homarr:latest
          imagePullPolicy: Always
          name: homarr
          ports:
            - name: homarr
              containerPort: 7575
              protocol: TCP
          volumeMounts:
            - mountPath: /app/data/configs
              name: vol-homarr-configs
            - mountPath: /app/data/icons
              name: vol-homarr-icons
      volumes:
        - name: vol-homarr-configs
          persistentVolumeClaim:
            claimName: pvc-homarr-configs
        - name: vol-homarr-icons
          persistentVolumeClaim:
            claimName: pvc-homarr-icons

The two persistent volume claims are mounted as /app/data/config and /app/data/icons.

These manifests were created in a single yaml file called homarr.yaml.

To create the claims and the deployment within Kubernetes, I ran the following command: –

kubectl create -f homarr.yaml

Having created the deployment with a pod containing the application, I created a service and a Traefik ingress route with the following yaml.

The service was in a file called service.yaml: –

apiVersion: v1
kind: Service
metadata:
  name: homarr-service
spec:
  selector:
    app: homarr
  ports:
  - name: homarr
    port: 7575

The ingress manifest went into a file called ingressroute.yaml: –

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: homarr
spec:
  entryPoints:
    - websecure
  routes:
    - match: Host(`home.intrasoftware.uk`)
      kind: Rule
      services:
        - name: homarr-service
          port: 7575
  tls:
    secretName: intrasoftware-uk-tls

I then created the service and route in Kubernetes with the following commands: –

kubectl create -f service.yaml
kubectl create -f ingressroute.yaml

As you can see in the ingress route, this is set up as HTTPS://home.intrasoftware.uk, and means I can simply type that into my browser and have every system I use just a single click away.

Configuring Homarr

As I said earlier, one of the reasons I like Homarr is that you can define sections and columns. I have my dashboard set up like this: –

image-10-1024x603 Homarr - My new homepage

You add new items to the dashboard by clicking this icon in the header section: –

image-11 Homarr - My new homepage

Once you click this icon, you can edit the existing items on the page or add new items. If you click ‘add new’, you get this popup: –

image-12-1024x302 Homarr - My new homepage

Apps allow you to add new links on the dashboard; Widgets are special items that integrate with systems, pull information from them and display it on the dashboard – the PiHole widget is one example. Categories allow you to add new sections to the dashboard. You can drag everything around the page.

Stephen

Hi, my name is Stephen Finchett. I have been a software engineer for over 30 years and worked on complex, business critical, multi-user systems for all of my career. For the last 15 years, I have been concentrating on web based solutions using the Microsoft Stack including ASP.Net, C#, TypeScript, SQL Server and running everything at scale within Kubernetes.

Finchett.com
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.