Dashboard personalizado usando Dashy
Actualmente corro muchas aplicaciones en mi homelab. Estas aplicaciones se encuentran distintos dispositivos y cada una se encuentra en un puerto o URL distinta.
Una vez visitada en el navegador tiendo a guardarla como favoritos y accedo a ella de esa forma, pero, esto supone los siguientes problemas:
- Portabilidad: En el caso de cambiar de máquina o navegador “perdería” los links a mis servicios y tendría que volver a configurarlos.
- Usabilidad: Se tendrá que tirar de memoria para acceder una aplicación, ya sea sabiendo la IP y puerto del servicio o bien sabiendo el nombre de la aplicación. Esto me supone un problema, ya que, actualmente tengo varias instancias de
grafanay nunca sé a que server estoy accediendo hasta que estoy dentro de la instancia. - Buscadores: En el caso de buscar, por ejemplo, un paquete en nixpkgs tengo que acceder a su página y luego buscar el programa que necesito, teniendo que hacer un esfuerzo mental para acceder a la página y luego otro en buscar el paquete.
Una solución a estos problemas sería correr una instancia de un dashboard que me permita tener un acceso rápido, portable y más visual a mis servicios, en este caso he decidido usar
Dashy.
Solución
En mi caso he decidido hacer la instalación de Dashy directamente en mi configuración de NixOS de mi ordenador. El lector se podría preguntar si no sería mejor hacerla sobre alguno de mis servidores y es cierto, pero, eso supondría que para acceder al dashboard necesitaría una conexión a internet y más importante que eso, que el servidor que corre la instancia de Dashy no haya dejado de funcionar.
En el momento de escribir este artículo estoy migrando todos mis servidores a NixOS, así que, en un futuro, uno de mis servidores también correrá su propia instancia de Dashy, para que equipos que no pueden correr Dashy , principalmente mi teléfono; o equipos no propios puedan acceder a dashy, como el ordenador de mi empresa; puedan acceder a mi dashboard.
De todas formas la configuración de Dashy que aquí se muestra es completamente extrapolable a cualquier sistema UNIX sobre el que se quiera correr una instancia de Dashy, siempre que sea capaz de usar Docker.
Instalación
Para realizar la instalación recomendada desde docker se usará el docker compose que se muestra en el siguiente link, pero en mi caso adaptado para correr dentro de NixOS resultando en:
1{
2 virtualisation.docker.enable = true;
3 virtualisation.oci-containers = {
4 backend = "docker";
5 containers.dashy = {
6 image = "lissy93/dashy";
7 environment = {
8 NODE_ENV = "production";
9 UID = "1000";
10 GID = "1000";
11 };
12 volumes = [
13 "${dashyConfig}:/app/user-data/conf.yml"
14 ];
15 ports = [
16 "127.0.0.1:9000:8080"
17 ];
18 autoStart = true;
19 };
20 };
21}Configuración
Para personalizar la instancia se deberá configurar el archivo conf.yml. En mi caso paso la información de este archivo como una variable de mi archivo de configuración de NixOS. A continuación se presenta un pequeño extracto de esta configuración (completa en mi repositorio):
1 dashyConfig = pkgs.writeText "dashy-config.yml" ''
2appConfig:
3 theme: one-dark
4 layout: horizontal
5 iconSize: medium
6 language: en
7
8 hideHeading: true
9 hideNav: true
10 hideSearch: true
11 hideSettings: true
12 hideFooter: true
13 disableConfiguration: true
14
15pageInfo:
16 title: Dashboard
17 description: Blessed is the mind too small for doubt.
18
19sections:
20 - name: Search
21 widgets:
22 - type: custom-search
23 options:
24 placeholder: Search for something using the buttons below
25 openingMethod: newtab
26 engines:
27 - title: SearXNG
28 url: https://searxng.gabrielcachadina.com/search?q=
29 - title: Youtube
30 url: https://www.youtube.com/results?search_query=
31
32 - name: Linode
33 items:
34 - title: Website
35 icon: si-hugo
36 url: https://gabrielcachadina.com
37 statusCheck: true
38 - title: Calendar
39 icon: si-protoncalendar
40 url: https://calendario.gabrielcachadina.com
41 statusCheck: true
42 - name: Server-Main
43 items:
44 - title: Gitea
45 icon: si-gitea
46 url: https://gitea.gabrielcachadina.com
47 - name: Useful Websites
48 items:
49 - title: Subdomain Finder
50 url: https://subdomainfinder.c99.nl/
51
52 '';
53inConclusión
Desde que utilizo Dashy como punto de entrada a mis servicios, el acceso a mi homelab se ha vuelto mucho más rápido y predecible. Ya no dependo de recordar IPs, puertos o URLs concretas, ni de tener los favoritos sincronizados entre navegadores o dispositivos. Todo está centralizado en un único lugar, versionado y reproducible gracias a NixOS.
Este tipo de herramientas no elimina la complejidad de un homelab, pero sí reduce la fricción diaria al interactuar con él. En un entorno con múltiples servicios e instancias, contar con un dashboard simple, declarativo y bajo control propio acaba siendo más una necesidad que un extra.
