Déployer Dashy sur Kubernetes avec configuration multi-pages et favicon personnalisé

Dashy est un tableau de bord open source qui permet de centraliser tous vos outils et services dans une interface élégante et personnalisable. Dans cet article, nous allons voir comment déployer Dashy sur Kubernetes avec une configuration multi-pages et un favicon personnalisé, afin de disposer d’un portail moderne et pratique pour les équipes.


🚀 Pourquoi utiliser Dashy ?

Dashy est une application self-hosted permettant de créer un portail d’accès rapide vers vos services internes et externes.
Ses avantages principaux :

  • Interface personnalisable (thèmes, couleurs, logo, favicon).
  • Support multi-pages pour structurer vos outils par équipes ou domaines.
  • Intégration Kubernetes/Docker avec configuration via fichiers YAML.
  • Support des icônes (favicon des sites, images locales ou URL).

C’est donc un outil idéal pour unifier l’accès aux applications métiers, plateformes web ou outils DevOps.


🛠️ Déploiement de Dashy sur Kubernetes

Voici un exemple de manifeste Kubernetes complet permettant de déployer Dashy dans un namespace dédié, avec un PVC pour stocker les fichiers de configuration et un Ingress pour l’accès via HTTPS.

apiVersion: v1
kind: Namespace
metadata:
  name: tools
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dashy-user-data
  namespace: tools
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dashy
  namespace: tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dashy
  template:
    metadata:
      labels:
        app: dashy
    spec:
      containers:
      - name: dashy
        image: lissy93/dashy:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: dashy-user-data
          mountPath: /app/user-data
        - name: favicon
          mountPath: /app/public/favicon.ico
          subPath: favicon.ico
        - name: favicon
          mountPath: /app/dist/favicon.ico
          subPath: favicon.ico
      volumes:
      - name: dashy-user-data
        persistentVolumeClaim:
          claimName: dashy-user-data
      - name: favicon
        configMap:
          name: dashy-favicon
---
apiVersion: v1
kind: Service
metadata:
  name: dashy
  namespace: tools
spec:
  type: ClusterIP
  ports:
  - port: 8080
    targetPort: 8080
  selector:
    app: dashy
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashy
  namespace: tools
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - portail.example.com
    secretName: dashy-tls
  rules:
  - host: portail.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: dashy
            port:
              number: 8080

📂 ConfigMap pour le favicon

Le favicon est servi par Dashy depuis le dossier /public/.
Avec Kubernetes, on peut injecter un favicon via un ConfigMap binaire :

apiVersion: v1
kind: ConfigMap
metadata:
  name: dashy-favicon
  namespace: tools
binaryData:
  favicon.ico: |
    iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAAB...

Cela permet de remplacer le favicon par défaut et d’afficher votre propre logo dans l’onglet du navigateur.


📑 ConfigMap pour la configuration multi-pages

Dashy supporte le mode multi-pages, idéal pour séparer vos services par domaine ou par équipe. Exemple :

apiVersion: v1
kind: ConfigMap
metadata:
  name: dashy-config
  namespace: tools
data:
  conf.yml: |
    pageInfo:
      title: 'Portail DSI'
      description: Bienvenue sur les outils de la DSI !
    appConfig:
      theme: material
      layout: horizontal
      hideComponents:
        hideFooter: true
    pages:
      - name: Reseau
        path: reseau.yml
      - name: Infogestion
        path: infogestion.yml
      - name: Support
        path: support.yml

Chaque sous-page (reseau.yml, infogestion.yml, 911.yml) contient ses propres sections et items.

Exemple d’une sous-page reseau.yml

data:
  tools.yml: |
    pageInfo:
      title: "Réseau"
      description: "Outils du pôle Systèmes, Réseaux et Sécurité"
    sections:
      - name: "Sécurité"
        items:
          - title: "WithSecure"
            url: "https://elements.withsecure.com"
            icon: favicon
          - title: "Zabbix"
            url: "https://zabbix.exemple"
            icon: favicon

De la même manière, vous pouvez créer infogestion.yml et support.yml dans le même ConfigMap Kubernetes.


Configurer l’authentification SSO (OIDC)

Dashy prend en charge OpenID Connect (OIDC), ce qui permet de sécuriser le portail via un fournisseur SSO comme Keycloak, Azure AD, ou CAS OIDC.

Exemple de configuration OIDC :

appConfig:
  auth:
    enableOidc: true
    oidc:
      clientId: dashy-client
      endpoint: https://ssov2.example.com/cas/oidc
      scopes: openid profile email
      autoLogin: true

➡️ Avec cette configuration, Dashy redirige automatiquement l’utilisateur vers le SSO pour authentification, avant d’afficher les pages.


🎨 Résultat attendu

  • Un portail unique, accessible via une URL sécurisée par HTTPS.
  • Navigation par onglets : chaque équipe (Réseau, Infogestion, support, etc.) a sa propre page.
  • Logo + favicon personnalisés pour renforcer l’identité visuelle.
  • Centralisation des outils (GLPI, Zabbix, Gitlab, Jira, Confluence, etc.) dans une seule interface claire.
  • Accès sécurisé via SSO (OIDC).

Mots-clés ciblés :

  • Dashy Kubernetes
  • Dashboard multi-pages open source
  • Favicon Dashy
  • Portail IT personnalisé
  • Self-hosted dashboard

Déployez Dashy sur Kubernetes avec multi-pages et favicon personnalisé. Découvrez comment centraliser vos outils IT dans un portail moderne, sécurisé et open source.


✅ Conclusion

Déployer Dashy sur Kubernetes est une solution simple et puissante pour offrir un portail IT moderne à vos équipes. Grâce au support multi-pages et à la possibilité d’ajouter un favicon personnalisé, vous disposez d’un tableau de bord centralisé, ergonomique et aligné sur l’identité de votre organisation.