518 - Un dashboard para selfhosted con Docker y Rust
Un #dashboard para #selfhosted. Todos tus servicios #autoalojados accesibles desde un mismo sitio. Dashboard sencillo, fácil de mantener y con acceso
Se veía venir. Tarde o temprano tenía que suceder y sucedió. Era algo completamente inevitable. ¿A que me refiero? Sencillamente a desarrollar mi propio Dashboard para Selfhosted. ¿Que es eso de un Dashboard para selfhosted? Básicamente se trata de una herramienta que te permite tener al alcance del ratón o del teclado, dependiendo de como lo quieras hacer, todos los servicios selfhosted que has ido levantando con Docker. Digamos que se trata de un directorio de servicios, que te permite encontrar de forma relativamente fácil, aquel que estás buscando. Te cuento que he hecho, con eso del dashboard para selfhosted.
Así en este episodio del podcast te quiero hablar sobre autoalojamiento de aplicaciones y servicios, y porque decidí desarrollar mi propio dashboard para selfhosted con Docker y Rust.
Un dashboard para selfhosted con Docker y Rust
Un poquito de información
Antes de nada, y por si es la primera vez que escuchas este episodio del podcast, quiero explicarte que es esto de selfhosted o autoalojamiento, y porque es importante para mi.
¿Qué es eso de selfhosted o autoalojamiento?
Para empezar, quiero definir qué es eso de selfhosted o autoalojamiento. En pocas palabras, se trata de alojar tus propias aplicaciones y servicios en tu propio servidor en lugar de depender de servicios en la nube de terceros. Esto puede incluir aplicaciones de correo electrónico, gestión de contraseñas, almacenamiento de archivos y mucho más.
Antes de profundizar en el tema de los dashboards, quiero destacar algunas de las ventajas del autoalojamiento. ¿Por qué alguien querría hacer esto en lugar de utilizar servicios en la nube convencionales? Hablamos de la privacidad, el control total sobre tus datos y la posibilidad de personalización.
Los servicios en la nube tienen la ventaja de que los gestiona otro, y es otro el que se preocupa de que estén siempre disponibles para ti. Sin embargo, en general, se trata de servicios generalistas, que nunca se adaptarán por completo a tus necesidades.
¿A que me refiero con que nunca se adaptarán a tus necesidades? Al simple hecho de que son servicios que están pensados para una amplia mayoría, y a los que nos gusta esto de cacharrear, siempre andamos buscando soluciones muy personalizadas. Esto lo puedes conseguir con varios servicios autoalojados en lugar de uno solo.
Por otro lado está el problema de que dependes de un tercero. Esto en general no es problemático. Sin embargo, suelen cambiarte las condiciones bajo las que contrataste el servicio, aumentan los precios, o incluso, cierran los servicios. Ciertamente, cuando el servicio lo pones tu, tu eres el que estableces las condiciones y lo cierras cuando quieras.
¿Que es un dashboard o panel?
No es ni mas ni menos que un servicio que te ofreces a ti mismo, que concentra todos los otros servicios que tienes alojados. Así, de un solo vistazo, tienes al alcance de tu ratón todos las herramientas y servicios, y puedes acceder a cualquiera de ellos de forma sencilla.
Existen docenas de dashboard que puedes personalizar y a adecuar a tus necesidades, como por ejemplo,
- Dashboard– Página de inicio minimalista para organizar tus aplicaciones web y marcadores usando archivos JSON.
- Dashy – Página de inicio con muchas funciones para tu laboratorio doméstico, con una configuración YAML sencilla.
- envlinks – Un panel de enlaces minimalista que muestra enlaces de variables de entorno.
- Fenrus – Una página de inicio personal autohospedada que permite múltiples usuarios, acceso de invitados y múltiples paneles para cada usuario. También tiene «Aplicaciones Inteligentes» que muestran datos en tiempo real para esas aplicaciones.
- Heimdall – Heimdall es una solución elegante para organizar todas tus aplicaciones web.
- Hiccup – Una página de inicio estática y hermosa para acceder rápidamente a tus enlaces y servicios. Tiene búsqueda incorporada, edición, soporte para PWA y almacenamiento en caché local para organizar fácilmente tu página de inicio.
- Homarr – Un elegante panel moderno con muchas integraciones y configuración basada en la web.
- Homepage de benphelps – Una página de inicio altamente personalizable (o panel de inicio/aplicaciones) con integraciones Docker y API de servicios.
- Homepage de tomershvueli – Página PHP independiente autohospedada y sencilla que es tu ventana a tu servidor y la web.
- Homer – Una página de inicio estática muy sencilla para exponer los servicios de tu servidor, con una configuración YAML sencilla y comprobación de conectividad.
- Hubleys – Paneles personales autohospedados para organizar enlaces para varios usuarios a través de una configuración central de YAML.
- Jump – Otra página de inicio autohospedada para tu servidor diseñada para ser simple, elegante, rápida y segura.
- LinkStack – Enlaza todas tus plataformas de redes sociales de fácil acceso en una página, personalizable a través de una interfaz de usuario/administrador intuitiva y fácil de usar (alternativa a Linktree y Manylink).
- LittleLink – Un enfoque simplista para enlaces en la biografía con más de 100 botones personalizados (alternativa a Linktree).
- Organizr – Organizr tiene como objetivo ser tu ventanilla única para la interfaz de usuario de tus servidores.
- Smashing – Smashing, el sucesor espiritual de Dashing, es un marco basado en Sinatra que te permite crear paneles excelentes. Se ve especialmente bien en televisores.
- Starbase 80 – Una página de inicio simple con una cuadrícula de aplicaciones estilo iPad, para dispositivos móviles y de escritorio. Un archivo de configuración JSON.
- Web-Portal – Una aplicación web en Python diseñada para permitir una forma fácil de administrar los enlaces a todos tus servicios web.
- Your Spotify – Te permite registrar tu actividad de escucha de Spotify y obtener estadísticas al respecto a través de una aplicación web.
¿Por qué un dashboard personalizado?
Uno de los aspectos más emocionantes del autoalojamiento es la capacidad de crear tu propio dashboard personalizado. ¿Por qué es esto importante? Bueno, un dashboard te permite tener un control centralizado y una vista rápida de todas tus aplicaciones y servicios alojados de forma local.
Esto que puede parece muy obvio, a mi no me lo parecía nada en absoluto. Cuando Ángel de uGeek Podcast, hablaba en su podcast sobre distintos dashboard, no le terminaba de entender. ¿Para que quiero un servicio mas que me muestre los servicios que tengo alojados?¿dejaré de saber los servicios que tengo alojados?
Al principio esto es fácil, cuando tienes uno o dos servicios. Sin embargo, con el paso del tiempo cada vez tienes mas servicios alojados. Que si un servicio de analíticas, varias páginas web, varias aplicaciones para tomar notas, tu propio servicio de contraseñas, gestión y compartición de archivos, tu propio respositorio web…
A esto además y si esto te parece poco, con el paso del tiempo, he ido desarrollando mis propios servicios, para publicar en distintas redes y servicios, para publicar encuestas, para hacer retos y mucho mas…
Con tanto servicio, al final no sabes lo que tienes y si lo tienes. Con lo que finalmente se hace algo necesario. O por lo menos esto se ha convertido en algo necesario para mi.
¿La búsqueda del dashboard ideal?
A partir de aquí surge la necesidad de encontrar ese dashboard para selfhosted ideal. Básicamente que cumpla una serie de principios fundamentales como es,
- Tiene que ser muy sencillo de mantener
- Que tenga acceso mediante credenciales. Normalmente usuario y contraseña.
- Debería de consumir muy pocos recursos
- Muy estable
- Altamente personalizable
Con este criterio no he terminado de encontrar ninguno que se adapte exactamente a mis necesidades. O a lo mejor, es que yo lo he buscado así. Me refiero, a que me he auto convencido para finalmente optar por desarrollar mi propio dashboard.
Mi experiencia desarrollando mi propio dashboard
Hasta la fecha he probado unos pocos de dashboard. Creo que todos los que puedes encontrar en la lista anterior. Sin embargo, como te puedes imaginar, ninguno se adapta a mis necesidades.
Aquí es donde mi historia personal entra en juego. Finalmente con lo que te he contado hasta el momento decidí implementar mi propio servicio de dashboard para selfhosted. Por supuesto, y con los condicionantes anteriores, se trata de un servicio implementado en Rust.
Lo he llamado board
, por lo sencillo que es y está disponible en Dockerhub, y por supuesto también en GitHub. Con lo que si quieres también lo puedes instalar tu. Eso si solo está disponible en arquitectura de 64 bits.
Para conseguir que sea muy sencillo de mantener, simplemente tienes un archivo de configuración en formato yaml
, como el que te muestro a continuación,
url: https://board.sample.es
port: 6969
log_level: debug
jwt_secret: un-secreto-muy-secreto
jwt_expires_in: 60m
jwt_maxage: 60
board_name: Board
users:
- name: user1
password: password1
active: true
categories:
- name: Category1
description: Category1 description
icon: fa-solid fa-music
apps:
- name: App11
url: https://atareao.es
icon: fa-solid fa-podcast
description: App11 description
new_tab: true
Solo he puesto un usuario, una categoría y una aplicación para que te hagas una idea, pero evidentemente, puedes poner tantos usuarios como consideres, tantas categorías como quieras, y para cada una de esas categorías incluir tantos usuarios como necesites.
El docker-compose
que estoy utilizando es el siguiente,
version: '3.7'
services:
board:
image: atareao/board:latest
container_name: board
init: true
restart: unless-stopped
networks:
- proxy
volumes:
- ./config.yml:/app/config.yml
labels:
- traefik.enable=true
- traefik.http.services.board.loadbalancer.server.port=6969
- traefik.http.routers.board.entrypoints=http
- traefik.http.routers.board.rule=Host(`board.servidorlinux.es`)
- traefik.http.middlewares.board-https-redirect.redirectscheme.scheme=https
- traefik.http.routers.board.middlewares=board-https-redirect
- traefik.http.routers.board-secure.entrypoints=https
- traefik.http.routers.board-secure.rule=Host(`board.servidorlinux.es`)
- traefik.http.routers.board-secure.tls=true
- traefik.http.routers.board-secure.tls.certresolver=myresolver
networks:
proxy:
external: true
Para el acceso, es decir, para las credenciales estoy utilizando usuario/contraseña
, y algunas cuestiones mas, pero que ya puedes ver en el archivo de configuración.
Indicar, que esto va mediante cookies
que igualmente puedes personalizar. Es decir, que transcurrido el tiempo que tu digas, dejará de ser válida, y te pedirá que te registres de nuevo.
Sobre la personalización
En esta primera versión estoy utilizando chota un micro framework css, para facilitarme la vida a la hora de dar un aspecto mas o menos elegante al dashboard, sobre todo por la cantidad de componentes y utilidades que pone a tu disposición.
Para el tema de los iconos, estoy utilizando en esta primera versión fontawesome, lo cual de nuevo me facilita enormemente el trabajo, ya que lo único que tengo que hacer es buscar el icono que me hace falta.
Para el dashboard, utilizo jinja2
. Realmente, estoy utilizando MiniJinja, para Rust. La ventaja, frente a Tera, es que aparentemente, minijinja es mas ligero que tera, o por lo menos es lo que dice su desarrollador, y la impresión que yo tengo.
Como está realizado en jinja2, la personalización es total, puedes hacer exactamente lo que quieras. Simplemente tienes que compartir como volumen donde se encuentran las plantillas y copiar las que hay en el repositorio y puedes hacer literalmente lo que tu quieras. Es decir,
volumes:
- ./config.yml:/app/config.yml
- ./templates:/app/templates
Lo único que recuerda poner en ./templates
las plantillas necesarias, que como digo son las que están en el repositorio. Eso si con tu propia personalización.
Conclusiones
Indicar que se trata de una primera versión, y que actualmente estoy trabajando en una segunda, donde será posible que parte de la información la saque de los propios contenedores, siempre y cuando utilices etiquetas.
Lo cierto es que estoy totalmente emocionado, como un chiquillo en una tienda de caramelos. Espero, en los próximos días sacar mas de una versión.
La curiosidad mató al gato
Lo cierto es que me pica la curiosidad enormemente,
- ¿Utilizas un dashboard para tu selfhosted?
- ¿Que dashboard utilizas?
- ¿Que te gustaría que tuviera tu dashboard?
Más información,
Espero que te haya gustado este nuevo episodio del podcast. Si puedes, te agradecería una valoración en iVoox y/o en Apple Podcast.
Hola! Estoy teniendo dificultades para probar tu dashboard, la verdad es que siguiendo lo pasos no consigo desplegarlo, quizás falte un poco de documentación , o igual no me considero digno de probar tus apps al no tener un conocimiento suficiente de docker… Estoy desplegando la plantilla de docker compose directamente desde portainer, al principio me daba error por la network, pues para solventar eso le di a crear red llamada proxy .
Luego el container se me despliega pero me da error el contenedor , se ejecuta, pero lanza este mensaje «Error with config file `config.yml`: Is a directory (os error 21)»
He creado el archivo config.yml manualmente , con permisos y sigue igual , sin embargo he probado a instalar todo tipo de contenedores en linuxserver y dockerhub y no he tenido problemas, creo que se obvia cierta información que tenemos que cambiar en la configuración.
Me da rabia voy a quedarme sin probar tu solución así seguiré usando Heimdall
Homer me parece muy bueno, conciso y todo en un yamel. Probaré board y te diré qué tal.
Gracias, ya me cuentas que tal ha ido.
No consigo hacer funcionar board mediante portainer , intento pegar la plantilla tal cual planteas, previamente creando el archivo pero primero me da una error por una red que no existe… supuse que era la que se llama proxy, creo una en portainer con el mismo nombre, el contenedor se inicia, pero no escucha por ningun puerto, ni habilitandolo manualmente.
Es un poco frustrante ya que si he intentado otras alternativas como Heimdall y parece muchisimo mas sencillo de instalar, he intentado hacer todos los pasos pero no lo consigo