576 - Un hogar para tus Docker en Linux
Existen páginas de inicio para tus servicios #docker en #linux #windows o #macos , yo busco una con control de acceso y monitorización de contenedores
Si te soy sincero, no tenía muy claro como titular este episodio, como me suele suceder de forma habitual. Y eso que el pasado lunes ya te amenacé con esto de que te hablaría sobre Dockerboard. Lo cierto, es que cada vez que tengo que pensar en los títulos de los episodios me vuelvo loco. En ocasiones pienso que lo mejor sería que esto lo hiciera ChatGPT, pero nunca caigo en eso. Dejo de divagar ya, porque hoy te quiero hablar sobre como construir un hogar para tus Docker en Linux. Realmente en Linux, o en cualquier otro Sistema Operativo, pero, como sabes yo me centro en éste.
Sobre el asunto de los títulos y antes de que se me olvide, no creas que es cuestión menor. La realidad es que es algo fundamental. Muchos escuchan ven o escuchan el episodio del podcast en función del título. No todo el mundo es tan fiel como soy yo, que siempre escucho el podcast, con independencia del título. También tendrá que ver el hecho de que no lo puedo leer, porque como te digo escucho el podcast cuando corro. En fin, tontunas.
Contruyendo un hogar para tus Docker en Linux
Un paseo por el pasado
Una vez descubres el potencial de Docker, y el maravilloso mundo de selfhosted, es inevitable que empieces a levantar contenedores Docker como si no hubiera un mañana. Los servicios te crecen como setas. Y llega un momento que no sabes ni cuantos servicios tienes en funcionamiento.
Es mas, puede ser que sepas los servicios que tienes levantado, pero seguro que no recuerdas todas las url de cada uno de los servicios. Se termina por convertir en un infierno.
Cuando Angel, de uGeek comenzó hablar de Homarr, yo no terminaba de entender la necesidad de este tipo de páginas de inicio. Sin embargo, hoy en día, lo veo imprescindible, y muy necesario.
He probado diferentes páginas de inicio, Homepage, Homarr, Heimdall, Dashy, Frame, Fenrus, Organizr. Y si bien todas tienen características impresionantes, no todas tienen las que yo quiero. A unas les falta unas cosas y a otras les faltan otras.
Por supuesto, que luego está el asunto del ego del programador, que siempre nos entra la espinita de programarlo uno mismo. Esto, es probablemente lo que mas me ha influido a la hora de empezar a programar mi propia página de inicio.
De cualquier forma, y sin dejar de lado lo mencionado anteriormente, para mi, hay dos características que son absolutamente imprescindibles, y que sin ellas no concibo una página de inicio para mis servicios,
Control de acceso
Es necesario, al menos para mi, que la página de inicio, tenga control de acceso, de forma que cualquier persona no pueda ver ni acceder a los servicios, mas aun si tenemos en cuenta el siguiente apartado.
Inicialmente me había planteado un solo usuario, pero, en ocasiones, es muy probable que otras personas puedan acceder. Incluso, si vamos mas allá seguro que mas adelante me plantearé la posibilidad de establecer roles de forma que algunos usuarios si que puedan realizar acciones, pero que otros no.
Monitorización y gestión Docker
La segunda de las características que considero imprescindible es la monitorización de Docker. Con esta monitorización no me refiero, tanto a l consumo de cada uno de los contenedores, que también, si no a cuestiones mucho mas sencillas, como simplemente sabe si un contenedor está levantado o no.
Y por supuesto, una vez metidos en gastos, porque no tener también la posibilidad de gestionar los contenedores. Desde la propia página de inicio, tener la posibilidad de iniciar o detener un contenedor Docker.
Es precisamente en este segundo apartado en el que me encuentro trabajando actualmente, y te tengo que decir, que bastante cerca de llegar al final. Precisamente, ha sido este estado de euforia, en el que te encuentras cuando estas viendo el final del túnel, el que me ha dado pie a este episodio del podcast.
Aunque no te quiero engañar, todavía me queda resolver un par de detalles para tener esto productivo, y hay uno bastante preocupante.
Sobre DockerBoard
Esta página de inicio que estoy implementando, DockerBoard, se configura en dos partes. Por un lado un archivo de configuración en formato YAML, como el que te muestro a continuación, donde se establecen los parámetros básicos del mismo, y que paso a detallarte a continuación,
url: http://localhost
port: 6969
log_level: debug
jwt_secret: un-secreto-muy-secreto
jwt_expires_in: 60m
jwt_maxage: 86400
docker_uri: unix:///run/user/1000/docker.sock
board_name: DockerBoard
users:
- username: user1
password: password1
active: true
- username: user2
password: password2
active: false
- username: user3
password: password3
active: true
categories:
- name: Category1
description: Category1 description
icon: fa-solid fa-music
- name: Category2
description: Category2 description
icon: user
- name: tools
description: Tools
icon: fa-sharp fa-solid fa-wrench
url
: la dirección url de la página de inicioport
: el puerto en el que se publicará. Aunque aquí es interesante tener delante un proxy inverso como Traefik, para que puedas acceder vía https.jwt_secret
: es un parámetro necesario para la creación de los token y las cookies. Puedes poner la frase aleatoria que tu consideres.jwt_expires_in
: La validez de los token.jwt_maxage
: La edad máxima de los token.docker_uri
: unix:///run/user/1000/docker.sockboard_name
: El título que quieres que aparezca para tu página de inicio.users
: Se corresponde con el listado de usuarios que pueden acceder a la página de inicio. Cada una de las entradas se corresponde las credenciales, usuario, contraseña y un campo para indicar si un usuario está activo o no. De esta forma podemos deshabilitar de forma sencilla un usuario.categories
: Son todas las categorías que quieres que se muestren en tu página. Cada una de estas categorías vienen descritas pornombre
,descripción
y unicono
, que puede aparecer en la propia página de inicio.
Configuración por contenedor
Respecto a la configuración de cada contenedor, es decir, respecto a las etiquetas que tienes que poner, te lo muestro con un ejemplo,
labels:
- "es.atareao.board.active=true"
- "es.atareao.board.category=tools"
- "es.atareao.board.name=webdav"
- "es.atareao.board.description=description"
- "es.atareao.board.url=http://localhost:8080"
- "es.atareao.board.icon=fa-solid fa-box"
- "es.atareao.board.new_tab=false"
Como puedes observar todas las etiquetas van precedidas por es.atareao.board
, simplemente para evitar confusiones con el resto de etiquetas que pueda llevar un contenedor. Respecto a las etiquetas, te indico para que es cada una,
active
esta indica si se mostrará o no se mostrarácategory
la categoría en la que se agrupará en el Dashboard. Si la categoría no existe no se mostraráname
el nombre que figurará en el Dashboarddescription
La descripciónurl
La url a la que nos llevará al hacer clic sobre.icon
el icono que queremos que muestre junto a la configuración.new_tab
Si queremos que al hacer clic se abra en la misma pestaña del navegador o se abra en una pestaña nueva.
Uso y funcionamiento
Como te he explicado este servicio tiene dos partes, la primera que es la que se encarga del interfaz de usuario, y que está plenamente funcional. Esta se basa a la definición tanto de la configuración como la que acompaña a cada uno de los contenedores que queremos que se muestren en nuestra página de inicio.
La segunda de las partes, todavía no está terminada, y es la que se encargará de mostrarte el estado de cada uno de los contenedores, y de poder interactuar con ellos para poder realizar determinadas operaciones, como las que he mencionado de parar o reiniciar un contenedor, por poner un ejemplo.
Sinceramente, espero poder terminar este proyecto en breve, porque realmente me parece muy interesante, tanto por el hecho de tener una página de inicio plenamente funcional, como porque realmente me parece un proyecto nuevo y disruptivo con respecto a lo que se puede encontrar actualmente.
Más información,