Homepage
A highly customizable dashboard for docker and kubernetes cluster

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.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tagsdev-hugo-ingress
  annotations:
    gethomepage.dev/description: "TagsDev | Mark Taguaid"
    gethomepage.dev/enabled: "true"
    gethomepage.dev/group: Links
    gethomepage.dev/icon: https://raw.githubusercontent.com/mcbtaguiad/web-tagsdev-hugo/main/app/static/images/fa-tags-nobg.png
    gethomepage.dev/name: TagsDev
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
  tls:
  - hosts:
      - marktaguiad.dev
    secretName: tagsdev-hugo-tls
  rules:
  - host: marktaguiad.dev
    http:
      paths:
      - path: /
        #pathType: ImplementationSpecific
        pathType: Prefix
        backend:
          service:
            name: web-tagsdev
            port:
              number: 8080

Homepage with Docker

Installing it is easy! Just use docker-compose/podman-compose.

version: "3.3"
services:
  homepage:
    image: ghcr.io/benphelps/homepage:latest
    container_name: homepage
    ports:
      - 3000:3000
    volumes:
      - /path/to/config:/app/config # Make sure your local config directory exists
      - /var/run/docker.sock:/var/run/docker.sock:ro # (optional) For docker integrations

Homepage with Kubernetes

Use the unofficial helm chart: https://github.com/jameswynn/helm-charts/tree/main/charts/homepage

helm repo add jameswynn https://jameswynn.github.io/helm-charts
helm install my-release jameswynn/homepage

Or use my kube deploy files.

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: homepage
  namespace: web
  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:latest
        imagePullPolicy: Always
        securityContext:
          privileged: true
        ports:
          - name: http
            containerPort: 3000
            protocol: TCP
        volumeMounts:
          - name: homepage-config
            mountPath: /app/config
          - name: logs
            mountPath: /app/config/logs
      volumes:
        - name: homepage-config
          configMap:
            name: homepage
        - name: logs
          emptyDir:
            {}

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: homepage
  namespace: web
  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

serviceaccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: homepage
  namespace: web
  labels:
    app.kubernetes.io/name: homepage
secrets:
  - name: homepage

clusterrole.yaml

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:
      - metrics.k8s.io
    resources:
      - nodes
      - pods
    verbs:
      - get
      - list

clusterrolebinding.yaml

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: web

Last modified on 2024-04-24