340 - Shlink mi acortador de urls con Docker
Shlink se ha convertido en mi acortador de urls por defecto, tanto en terminal como en web y levantado con Docker detrás de mi proxy Traefik
Hace ya bastante tiempo que voy detrás de un acortador de urls. Son bastantes las razones que me hacían buscar un acortador de urls. Además de la obvia, la de acortar la url, detrás de este tipo de herramientas, hay determinadas características que las hacen realmente interesantes y recomendables. Definitivamente, te permiten tener un mayor y mejor control de todo aquello que compartes. No solo está el hecho de facilitar el compartir, sino que también es necesario llevar un control de esas descargas.
En este sentido, en los últimos episodios del podcast te he hablado de diferentes herramientas para compartir todo tipo de archivos y documentos. Empezando por mi herramienta preferida Filebrowser de la que te hablé en el episodio 242 del podcast titulado explorador de archivos online y menús de restaurante. También te hablé de esta herramienta en el episodio 246, titulado ¿realmente necesitas NextCloud.
Por otro lado, en las últimas semanas te he hablado de Gokapi y como reemplazar Firefox Send. Todo, con el objetivo de poder compartir de forma, relativamente sencilla archivos, en condiciones concretas.
Shlink mi acortador de urls con Docker
Sobre Shlink
Shlink, es un acortador de urls, o acortador de direcciones web, Open Source, liberado bajo licencia MIT, auto alojado. Es decir, que tu te lo montas en tu servidor, y te permite tener todo el control sobre la herramienta.
Se trata de una herramienta realmente sencilla, pensada para generar y gestionar las url desde la línea de comandos. Es decir, que no solo te permite crear las url desde la línea de comandos, sino que además te permite listar las códigos, ver el número de visitas, obtener las direcciones y mas.
Por supuesto, tienes la posibilidad de realizar esta misma gestión directamente desde la REST API, lo cual te puede ser de gran utilidad.
La web
Además de lo que es puramente el acortador de urls, también te permite levantar una web, para realizar la gestión mucho mas sencilla, en el caso de que no te tengas, al alcance de tus dedos una terminal.
Inicialmente, y aunque, como sabes, soy un gran amante de la terminal, me he decantado por instalar también la web, para realizar la gestión desde la misma. Si, en ocasiones, una imagen vale mas que mil palabras.
Traefik
Por supuesto, para completar todo el stack de herramientas, esto está detrás de mi proxy inverso preferido. Está detrás de Traefik. Esto me hace mucho mas sencilla la gestión, no solo de las direcciones, sino que además, Traefik, se encarga de gestionar los certificados.
Sobre la configuración
Para levantar ambos servicios, me refiero al propio Shlink y a la web, estoy utilizando docker-compose que me facilita enormemente el trabajo y además me permite integrarlo con Traefik. Así el archivo docker-compose.yml
es el siguiente,
version: '3'
services:
shlink:
image: shlinkio/shlink:stable
container_name: shlink
restart: unless-stopped
networks:
- proxy
volumes:
- ./database.sqlite:/etc/shlink/data/database.sqlite
environment:
USE_HTTPS: "no"
DEFAULT_DOMAIN: compartir.tuservidor.es
labels:
- traefik.enable=true
- traefik.http.services.compartir.loadbalancer.server.port=8080
- traefik.http.routers.compartir-secure.entrypoints=https
- traefik.http.routers.compartir-secure.rule=Host(`compartir.tuservidor.es`)
- traefik.http.routers.compartir-secure.tls=true
- traefik.http.routers.compartir-secure.tls.certresolver=myresolver
shlinkweb:
image: shlinkio/shlink-web-client
container_name: shlinkweb
restart: unless-stopped
networks:
- proxy
environment:
SHLINK_SERVER_API_KEY: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
SHLINK_SERVER_URL: https://compartir.tuservidor.es
labels:
- traefik.enable=true
- traefik.http.services.shlinkweb.loadbalancer.server.port=80
- traefik.http.routers.shlinkweb-secure.entrypoints=https
- traefik.http.routers.shlinkweb-secure.rule=Host(`shlinkweb.tuservidor.es`)
- traefik.http.routers.shlinkweb-secure.middlewares=traefik-auth
- traefik.http.routers.shlinkweb-secure.tls=true
- traefik.http.routers.shlinkweb-secure.tls.certresolver=myresolver
networks:
proxy:
external: true
Evidentemente tienes que cambiar compartir.tuservidor.es
y shlinkweb.tuservidor.es
, por las direcciones que consideres, para que todo funcione correctamente.
Por otro lado, yo estoy utilizando como base de datos SQLite
, si bien, los desarrolladores de Shlink no lo recomiendan para producción. Mi intención es alojar unas pocas url, no voy a alojar una gran cantidad. Y además tampoco creo que vaya a tener una gran demanda de uso.
Indicar que en el caso de la web, esta no restricción de acceso, lo cual es un auténtico problema. Yo estoy utilizando un middleware de Traefik, que me permite tener acceso por usuario y contraseña.
Las características de Shlink
Shlink tiene algunas características realmente interesantes y son las que han hecho que me decante por esta herramienta
- Te permite registrar todas las visitas a las urls generadas por este acortador de urls. Pero no solo te permite registrar la visita, sino que además recoge alguna información de relevancia dependiendo de lo que le configures. Así, puede recoger la ubicación, navegador o referencia. Sin embargo, esto es totalmente opcional. A mi, única y exclusivamente me interesa recoger la cantidad de descargas que se realiza. De cualquier forma, toda la información que se recoge es anonimizada.
- Es posible personalizar la url acortada. En general, estas herramientas funcionan generando un enlace aleatorio. Sin embargo, te da la posibilidad de que tu configures el que te haga falta.
- Te permite gestionar diferentes dominios desde una misma instancia.
- Puedes generar los códigos QR para apuntar a la URL. De nuevo, esto es un claro caso, para aquel episodio del podcast en el que hablé de los menús de restaurante.
- Es posible limitar el acceso a las url acortadas. Esta limitación de acceso te permite establecerla tanto por fecha como por número de visitas. Esto es exactamente como funcionaba Gokapi.
- Es posible recibir información en tiempo real de cada una de las descargas que se realizan. De esta manera, puedes guardar esta información en otros sistemas.
- Se trata de una herramienta que está pensada como una API, permitiéndote realizar todas las operaciones necesarias a través de la misma.
- Para el acceso a la API, es necesario generar un toke, pudiendo asignar a cada uno de los token diferentes roles. De esta forma cada role tiene un permiso definido.
- Igualmente también permite realizar el seguimiento de correos electrónicos a través de pixel.
- Es posible importar información de herramientas de terceros, por si en un momento piensas gestionarlo con este acortador de urls.
Conclusión
Esta herramienta viene a aportar parte de las carencias que tenía Filebrowser. En concreto la limitación por número de descargas. Sin embargo, sigo dependiendo de Gokapi para el caso de archivos realmente pesados, y sobre todo para la gestión del espacio.
Si los archivos pesados, quieres que se liberen una vez se han cumplido las condiciones establecidas, la única solución actualmente es utilizar Gokapi. Aunque, siempre nos quedará la opción de programarlo uno mismo, claro.
Imagen de portada de Jonathan Kemper
Más información,
Hola, en primer lugar enhorabuena por tu blog y por los audios (podcast) estoy enganchadisimo a ellos. Una duda que tengo es que normalmente los que teneis blog de ayuda en referencia a Linux y open source usais traefik (o otro software), como proxy inverso y balanceador de carga para las imágenes de docker.
Pero yo tengo un servidor Proxmox alojado a un subdominio con una IP fija y uso el proxy inverso de Nginx en el servidor, y me encuentro en muchos lios a la hora de «traduir» de la manera tradicional para subdominios, p.e. duckdns a un dominio propio.
He conseguido, gracias a ti, poner en marcha servidores desconocidos para mi como PhotoPrim o Excalidraw+, entre otros.
Mi pregunta es como puedo usar esta configuración del docker-compose para una ip en local:puerto para después redirigirlo al subdominio.
Muchas gracias, saludos desde Menorca y desearte un feliz entrada de año.
Hola, tienes un servicio que haga lo inverso, dada una URL acortada este servicio pueda expandir la URL.
Saludos!