576 - Un hogar para tus Docker en Linux

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

1:25
-3:15

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 inicio
  • port: 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.sock
  • board_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 por nombre, descripción y un icono, 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 Dashboard
  • description La descripción
  • url 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,

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *