458 - Pocket Casts, Traefik y un poquito de Rust
Me cambio de AntennaPod a Pocket Casts por los problemas que he tenido. Te cuento sobre Traefik como añadir páginas de error y un poquito sobre Rust
En este episodio del podcast te traigo un variadito de algunos temas en los que me he visto envuelto ultimamente. Pero además cuando te digo variadito, de verdad me refiero a que es realmente variado, porque te voy a hablar de Pocket Casts, Traefik y un poquito de Rust. Y es que esto es en lo que ando metido últimamente. Empezando por la aplicación Android que utilizo para escuchar podcast mientras corro, hasta terminar por el lenguaje de programación que últimamente me está comiendo el tiempo, literalmente.
Pocket Casts, Traefik y un poquito de Rust
El taller sobre Docker
Antes de nada comentarte sobre el taller de Docker del pasado fin de semana en Linux Center de Slimbook que te tengo que confesar, que hacía tiempo que no disfrutaba tanto con una charla y taller.
Lo cierto es que tengo que dar las gracias a todos los asistentes y por supuesto a Alejandro y familia por la acogida.
Igualmente, te tengo que decir, que la preparación del taller fue bastante accidentada. Para esta presentación utilicé Trillium, que como te puedes imaginar lo hice en Docker, como no podía ser de otra manera.
Preparé una imagen Docker en Python para poder realizar todos los casos. Se trataba de ir viendo paso a paso la razón del uso de cada uno de los parámetros y opciones que se indican en la línea de comandos. Para posteriormente dar el salto a docker-compose
.
Reemplazando AntennaPod por Pocket Casts
Cambiando radicalmente de asunto, y un poco a raíz también del curso. Cuando corro y cuando me desplazo de un sitio a otro, escucho podcast, como he mencionado en mas de una ocasión. Así que cuando fuí al taller de Docker en [Linux Center](), lo hice escuchando Podcast, y me volvió a suceder.
Utilizo AntennaPod desde hace años, muchos años, y hasta la fecha nunca me había pasado lo que me está sucediendo últimamente, y es que se me corta la reproducción. Es decir, estoy escuchando un podcast, y a mitad de reproducción se detiene, arrojando un mensaje de error. Y por supuesto, no continua, ni salta al siguiente podcast, ni nada. Se queda detenido.
Esto para mi es un verdadero problema, porque, como te decía anteriormente, escucho podcast, mientras corro o conduzco, y en ninguna de estas dos circustancias me viene bien detenerme a ver que pasa y resolverlo.
Así que definitivamente he decidido dar una oportunidad a Pocket Casts y dejar AntennaPod durante un tiempo.
El 404 de Traefik
Antes que nada, y por si no conoces Traefik, indicarte que se trata de un proxy inverso pensado específicamente en Docker, y que permite configurar y particularizar el comportamiento del mismo para cada uno de los contenedores a través de etiquetas.
La cuestión, es que si, por ejemplo, buscas alguna dirección que caiga bajo tu dominio, te devuelve un 404
en modo texto, que no es nada atractivo. Es decir, imagina, que tienes, el dominio servidorlinux.es
. Todos tus contenedores los llamarás como grafana.servidorlinux.es
, wordpress.servidorlinux.es
, y así sucesivamente, por ponerte algunos ejemplos. Sin embargo, si visitas nada.servidorlinux.es
, no va a encontrar nada y te devolverá ese 404
en modo texto.
Esto no me gustaba nada, como te decía, así que me decidí a configurar una solución que me evitara este problema. Esta problema está solucionado en Traefik, utilizando las siguientes etiquetas,
traefik.http.middlewares.errorpages-redirect.errors.status: 400-599
traefik.http.middlewares.errorpages-redirect.errors.service: errorpages-service
traefik.http.middlewares.errorpages-redirect.errors.query: /{status}.html
En mi caso, lo que hice fue implementar un servicio en Rust, que luego te comentaré que se encargue de servir precisamente las páginas de error. Este servicio, lo he configurado en el mismo docker-compose.yml
que Traefik, con la siguiente configuración,
errors:
image: atareao/simpleserver
container_name: simpleserver_errors
init: true
restart: unless-stopped
environment:
LOG_LEVEL: info
networks:
- proxy
labels:
traefik.enable: true
## Routers
traefik.http.routers.errorpages-router.entrypoints: https
traefik.http.routers.errorpages-router.rule: HostRegexp(`{host:.+}`)
traefik.http.routers.errorpages-router.priority: 1
traefik.http.routers.errorpages-router.tls: true
## Middlewares
traefik.http.routers.errorpages-router.middlewares: errorpages-redirect,errorpages-headers
### Middleware redirect
traefik.http.middlewares.errorpages-redirect.errors.status: 400-599
traefik.http.middlewares.errorpages-redirect.errors.service: errorpages-service
traefik.http.middlewares.errorpages-redirect.errors.query: /{status}.html
### Middleware headers
traefik.http.middlewares.errorpages-headers.headers.sslproxyheaders.X-Forwarded-Proto: https
## Services
traefik.http.routers.errorpages-router.service: errorpages-service
traefik.http.services.errorpages-service.loadbalancer.server.port: 8080
Lo que he visto en general, es que el servidor estático se resuelve con un contenedor docker con Nginx
, pero a mi me daba mucha pereza configurar este servidor, y preferí montar mi propio servicio. Servicio, que como te puedes imaginar está disponible en DockerHub
, por si tu también lo quieres utilizar.
Y esto me da para hablarte del último punto, sobre un poquito de Rust.
Un poquito de Rust
En las últimas semanas, yo diría que meses, estoy muy volcado en Rust. Estoy implementando todo tipo de servicios y aplicaciones, para facilitarme todo lo relacionado con el proyecto atareao.es, y proporcionar nuevas herramientas, para quien las quiera utilizar.
En las últimas semanas estoy implementado estas tres aplicaciones que te comento a continuación, por si alguna de ellas, te resulta de utilidad, o simplemente, por si tienes curiosidad, por saber a que dedico mi tiempo libre.
Shorturl
Shorturl es un servicio para acortar urls. Vamos, el típico servicio de acortado de direcciones web. Y, ¿porque hacer un servicio del que puedes encontrar decenas de alternativas?. Simplemente por curiosidad.
Los servicios de acortado de direcciones web que he encontrado, siempre me parecen demasiado complejos. Y simplemente, lo que necesitamos es un servicio que te de una dirección web corta de una dirección web larga, y que como mucho te saque un listado de las direcciones web que has añadido, para saber cuantas veces se ha utilizado.
Esto es lo que he hecho, ni mas ni menos. No hace nada mas que esto. Se encarga de comprobar si la dirección web que estás añadiendo existe y funciona y en su caso, te devuelve la versión corta. Ya está.
Está implementado en Rust, y lo tienes disponible en Docker para amd64 y arm64, para que lo puedas instalar fácilmente donde quieras.
Simpleserver
Simpleserver es un servidor web super sencillo. Sobre este te he hablado cuando te comentaba sobre las páginas de error de Traefik.
Se trata de un servicio que se encarga de servirte el contenido que le pones en un directorio concreto, con la particularidad de que si se trata de un archivo en formato markdown lo convierte a HTML, el resto de tipos de archivos los sirve tal cual.
Un servicio sencillo y que te permite resolver el problema de tener un servidor web sin ningún tipo de archivo de configuración.
Readmers
Readmers esta es una herramienta que implementé hace algún tiempo en Python, y además con interfaz gráfico, pero que ahora quiero resolver con Rust. Se trata de una aplicación para resolver uno de mis mayores problemas, que es, ni mas ni menos, los archivos README.md de los repositorios en GitHub, GitLab y cualquier otro servicio de repositorios git.
Actualmente en GitHub tengo alojados algo mas de repositorios de los mas variopintos. Sin embargo la mayoría de ellos, tienen una característica común, no tienen README.md, con lo que aunque estés en el repositorio, ni sabes lo que hace, ni para que sirve, ni nada de nada. Así que estoy decidido a resolver este problema, desde la propia terminal.
Esta aplicación lee del encabezado del archivo README.md que va en un formato de comentario para que no aparezca en el renderizado del archivo a HTML, y a partir de ahí es capaz de construir y particularizar todo el contenido.
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.