
666 - Un login para tus aplicaciones self-hosted
Una interesante opción para poner #login a tus servicios #selfhosted en #docker con #traefik y en #linux. Sencillo, fácil, ligero y sin complicaciones.
Existen cientos o miles de servicios que puedes auto alojar, y esto es una auténtica maravilla, porque es muy probable que encuentres el servicio que andabas buscando para realizar vete a saber que cosa. Sin embargo, y como ya te puedes imaginar, no todas los servicios cumplen con todas nuestras expectativas o exigencias. En ocasiones, nos gustaría que un determinado servicio tuviera alguna característica concreta que no tiene. En estas ocasiones, siempre, nos podemos poner amablemente en contacto con el desarrollador y preguntarle si implementaría esa característica. El propietario, puede acceder o no, eso ya es decisión única y exclusiva de él. Sin embargo, en ocasiones es posible que esa característica de la que adolece el servicio, la podemos conseguir de otra forma, y esto es precisamente de lo que trata este nuevo episodio, como puedes poner login a tus aplicaciones self-hosted o autoalojadas.

Un login para tus aplicaciones self-hosted
En mas de una ocasión te he hablado de uno u otro servicio que no tenía login, y te he indicado como puedes configurarlo utilizando Traefik. Sin embargo, a mi lo de la autenticación básica, no me termina de gustar. Y llevo bastante tiempo buscando una herramienta que se encargue de realizar esa autenticación.
Soy consciente de que existen multitud de servicios que puedes auto alojar igualmente, como pueden ser Authentik, Keycloak, y mas. Pero te tengo que decir, que muchos de ellos son realmente complejos de configurar, y lo cierto es que lo que buscaba era algo realmente sencillo y ligero, y lo cierto es que he dado con el clavo.
Tinyauth
Tal y como describe el propio desarrollador de la aplicación Tinyauth es la manera mas sencilla de proteger tus aplicación con una pantalla de login. Y realmente lo es, es lo que mas me ha gustado y lo que me ha hecho decantarme por este servicio.
Al contrario que otros servicios de autenticación, en el caso de TinyAuth no necesitas ni base de datos, ni complejos archivos de configuración ni nada por el estilo. Este servicio se configura directamente utilizando las variables de entorno, ya está, nada mas.
La segunda de las características que es que tiene soporte OAuth, con lo que es posible hacer login utilizando Google, GitHub o cualquier otro proveedor OAuth. Lo cierto es que estoy intentando hacerlo actualmente con Gitea y todavía no he dado como. Estoy a punto, pero en el último momento siempre me devuelve un error, y todavía no he identificado el problema.
Y por último, se trata de una servicio realmente ligero. Apenas son 20 MB, con lo que incluso en una Raspberry Pi podrías utilizarlo sin problemas.
Instalación y configuración
Lo primero y principal es modificar la configuración en Traefik. Para ello tienes que cambiar el archivo dynamic.yaml
, que es donde, en mi caso, guardo la configuración dinámica de Traefik.
En este archivo tienes que añadir un nuevo middleware, en concreto,
tinyauth:
forwardauth:
address: http://tinyauth:3000/api/auth
Recuerda que al ser la configuración dinámica no vas a necesitar reiniciar Traefik, sino que directamente ya lo puedes comenzar a utilizar.
Por otro lado, a continuación tienes el docker-compose.yml
, para el servicio. Aquí, evidentemente, tendrás que cambiar, el SECRET
, así como tus credenciales, y en caso de que quieras utilizar GitHub, necesitarás configurarlo para ello.
Para obtener el SECRET
, lo puedes hacer con el siguiente comando:
tr -dc A-Za-z0-9 </dev/urandom | head -c 32; echo
services:
tinyauth:
container_name: tinyauth
image: ghcr.io/steveiliop56/tinyauth:latest
restart: unless-stopped
init: true
environment:
SECRET: KbbwqmqpCaLKj2f6Rbm0vM6kbMmNrT1V
APP_URL: https://tinyauth.tuservicio.es
USERS: tu@correo.es:$$2a$$10$$1rAn5S.jSDqm6aEcl2x3aeg/TqJvqzw4jzDpUw1go7uJUzw98nHn.
GITHUB_CLIENT_ID: 4VGp0WYv710wQ12cVktl
GITHUB_CLIENT_SECRET: VQOG0ovflDAsXCYpEO6OKSTmXebW6DvhbD7HGtip
OAUTH_WHITELIST: tu@correo.es
DISABLE_CONTINUE: true
COOKIE_EXPIRY: 3600
networks:
- proxy
labels:
traefik.enable: true
traefik.http.routers.tinyauth.rule: Host(`tinyauth.tuservidor.es`)
traefik.http.services.tinyauth.loadbalancer.server.port: 3000
traefik.http.routers.tinyauth.entrypoints: https
networks:
proxy:
external: true
A partir de aquí todo es tremendamente sencillo. Para cada servicio al que le quieres añadir autenticación simplemente tienes que incluir la siguiente etiqueta,
traefik.http.routers.<nombre>.middlewares: tinyauth@file
Donde tienes que sustituir <nombre>
por el que corresponde. Por ejemplo, acutalmente estoy probando Homer, como dashboard, y este no tiene autenticación. Así que estoy utilizando el siguiente docker-compose.yml
,
services:
homer:
image: b4bz/homer
container_name: homer
restart: unless-stopped
init: true
volumes:
- ./assets:/www/assets
user: 1000:1000
environment:
- INIT_ASSETS=1 # default
networks:
- proxy
labels:
traefik.enable: true
traefik.http.services.homer.loadbalancer.server.port: 8080
traefik.http.routers.homer.entrypoints: https
traefik.http.routers.homer.rule: Host(`homer.tuservidor.es`)
traefik.http.routers.homer.middlewares: tinyauth@file
networks:
proxy:
external: true
Otro ejemplo
En el episodio 659 te hablé sobre como podías tener toda la información en un solo sitio con Docker. Otra auténtica madriguera de conejo de las que te traigo en los últimos episodios.
Por resumirte, se trata de una herramienta que te permite crear un dashboard de toda la información que te gustaría ver de un solo vistazo. Sin embargo, tenía un problema, y es que no tenía *autenticación. En este caso también puedes darle autenticación, de la misma forma. Te dejo el docker-compose.yml
, para que lo veas,
services:
glance:
image: glanceapp/glance
container_name: glance
init: true
restart: unless-stopped
volumes:
- ./glance.yml:/app/glance.yml
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- proxy
labels:
- traefik.enable=true
- traefik.http.services.glance.loadbalancer.server.port=8080
- traefik.http.routers.glance.entrypoints=https
- traefik.http.routers.glance.rule=Host(`glance.tuservidor.es`)
- traefik.http.routers.glance.middlewares=tinyauth@file
networks:
proxy:
external: true
Bajo el capó de Tinyauth
En estos últimos tiempos que estoy haciendo algunos servicios con backend y frontend, estoy mirando con mucho detenimiento, que tecnologías están utilizando. Así, en el caso de Tinyauth, el desarrollador se ha decantado por utilizar Go en el backend, mientras que para el frontend está utilizando React. Y los componentes que utiliza para React son los de Mantine, que en particular también he estado mirando para alguna de las aplicaciones que ando haciendo.
Igual que en otras ocasiones, a este servicio le hecho en falta alguna que otra configuración, o incluso, la idea de personalizarlo de alguna forma concreta. En seguida me entran las ganas de hacer mi propia configuración o personalización. Vamos, que me dan ganas de desarrollarlo, y tengo que refrenar esos impulsos.
Dos comentarios adicionales
nvim-scrollview
Un plugin para Neovim, que te añade una barra de desplazamiento vertical con signos. Esta barra de desplazamiento es interactiva, de forma que dependiendo de lo que estés haciendo te muestra una información u otra.
Por ejemplo, si estás realizando una búsqueda, en la barra de desplazamiento vertical, verás todas las apariciones. Igualmente pasa con los errores y muchas mas información.
Por otro lado, puedes interactuar con todos estos elementos utilizando el ratón, lo cual en determinados casos puede ser interesante. Esto a pesar de que, como sabes, no me gusta hacer uso del ratón.
Puedes encontrar mucha mas información de este complemento en el GitHub de nvim-scrollview.
Orbit
Por fin Firefox ha sacado el asistente de IA. Le he dado una primera probada y me parece realmente interesante, aunque actualmente solo está disponible en inglés. Me gusta como lo han implementado, porque no está incrustado en el navegador, sino que es una extensión que puedes instalar.
Es curioso, porque lo que hace es poner un icono flotante sobre la página en la que te sitúas ofreciéndote diferentes acciones a realizar.
Más información,
Herramienta super útil y ligera para la realizar autenticaciones. Una maravilla, gracias ateareo!!