ShortLink con SHLink

TU SERVER DE SHORTLINKS

Vamos a ver como montar tu propio servidor de shortlinks en Debian 11 utilizando shlink , el cual tiene muchas características, multi dominio, códigos QR, emojis, REST API, Bot detectión,....

Lo primero es instalar php 8.1 o 8.2 con los módulos necesarios, como indican en la documentación oficial.

INSTALAR PHP 8.1 EN DEBIAN 11

Ejecutamos:

apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list

curl -fsSL https://packages.sury.org/php/apt.gpg| gpg --dearmor -o /etc/apt/trusted.gpg.d/sury-keyring.gpg

apt-get update

Hemos añadido los repositorios y a continuación instalamos los módulos necesarios.

apt-get install php-apcu php8.1 php8.1-fpm php8.1-mysql php8.1-gd php8.1-common php8.1-curl php8.1-intl php8.1-gmp php8.1-xml php-dev php-pear

Podemos comprobar con:

php --modules

Que están cargados correctamente.

INSTALACIÓN Y CONFIGURACIÓN SHLINK

Comenzamos instalando los paquetes necesarios.

apt-get install nginx mariadb-server unzip sudo

Creamos la base de datos.

mysql

Una vez dentro escribimos.

CREATE DATABASE shlink;
GRANT ALL ON shlink.* TO 'shlink'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
EXIT;

Puedes llamar a la base de datos como te guste al igual que el usuario.

Una vez tenemos la base de datos, procedemos con la descarga e instalación de la última versión shlink

wget https://github.com/shlinkio/shlink/releases/download/v3.5.4/shlink3.5.4_php8.1_dist.zip

unzip shlink3.5.4_php8.1_dist.zip

mv shlink3.5.4_php8.1_dist /var/www/html/shlink

chown -R www-data:www-data /var/www/html/shlink/

chmod -R 755 /var/www/html/shlink/

cd /var/www/html/shlink

(Sino os vais a este directorio el siguiente comando no será capaz de escribir el fichero de configuración si lo ejecutáramos con el path completo /var/www/htmtl...., puesto que el path que hay en el script es config/params para grabar el fichero de configuración)

sudo -u www-data php8.1 vendor/bin/shlink-installer install

Y nos saldrá un menú interactivo

DATABASE (los datos de la conexión a nuestra base de datos)

Elegimos la 1 en nuestro caso y nos pedirá los siguientes datos

URL SHORTENER

1. El dominio por defecto para generar las url cortas

2. Con SSL o sin SSL

3. Cuantos caracteres

4. Si quieres que resuelva en función de la url larga

5. Si quieres que resuelva la url lo antes posible y añada el resto de la url larga

6. Si quieres que soporte multiniveles

7. Si quieres que considere la misma url con barra al final o sin ella

8. Como quieres que coincidan

9. Licencia de GeoLite2.

Aquí nos paramos un poco para explicar. Shlink utiliza GeoLite2 para geolocalizar las visitas, si no es introducida simplemente no las geolocalizara. Obtener esta licencia es gratis, solo hay que:

Crear cuenta en MAXMIND https://www.maxmind.com/en/geolite2/signup

Y a continuación generar la key

Tras eso nos pide que tipo de redireccionamiento queremos, elegir el mejor para vuestro caso.

Y cuanto tiempo queremos que sean cacheadas en segundos, por defecto 30

TRACKING

Para no hacerlo más largo el post simplemente es contestar a las preguntas de que quieres hacer seguimiento y si quieres excluir algo como un rango de ip, un navegador,etc...

REDIRECTS

Donde quieres redirigir según lo que te preguntan, tiene que ser en formato http:// o https://

QR CODES

Como quieres que sean los QR

APPLICATION

No tiene misterio, salvo quizá la primera que quiere decir si ese link estará indefinido o puedes decirle 1, entonces se borrara tras la primera apertura.

INTEGRATIONS

Como no estamos montando un cluster le diremos que no.

Una vez completado encontraremos nuestro fichero de configuración en /var/www/html/shlink/config/params con el nombre generated_config.php, el cual podemos modificar si cambias de opinión en las opciones seleccionadas durante la instalación.

CONTINUAMOS CON NGINX

Borramos el sitio por defecto

rm /etc/nginx/sites-enabled/default

Y ahora creamos nuestro sitio

nano /etc/nginx/sites-available/tudominio.conf

Añadiendo lo siguiente

server {
listen 80;
listen [::]:80;
server_name tudominio.com;

root /var/www/html/shlink/public;
error_log /var/log/nginx/shlink.error;
access_log /var/log/nginx/shlink.access;

index index.php index.html index.htm index.nginx-debian.html;

location / {
# try to serve file directly, fallback to app.php
try_files $uri /index.php$is_args$args;
}

# redirect some entire folders
rewrite ^/(vendor|translations|build)/.* /index.php break;

location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

}

Creamos el enlace simbólico para activarlo

ln -s /etc/nginx/sites-available/tudominio.conf /etc/nginx/sites-enabled/

Comprobamos que no haya ningún error en la configuración

nginx -t

Y lo recargamos

systemctl reload nginx

Ahora habilitaremos SSL ya que en nuestro config le hemos dicho SSL

apt-get install certbot python3-certbot-nginx

certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d tudominio.com

Hecho todo esto solo nos falta generar nuestar API key

sudo -u www-data php8.1 /var/www/html/shlink/bin/cli api-key:generate

Y nos dirigimos a https://app.shlink.io/ para añadir nuestro servidor si queremos la interfaz gráfica

O bien desde el propio servidor utilizando

sudo -u www-data php8.1 /var/www/html/shlink/bin/cli short-url:create

OJO!!! siempre proveer el https://

Podemos ver las opciones con:

sudo -u www-data php8.1 /var/www/html/shlink/bin/cli

La documentación de la API podéis encontrarla en https://shlink.io/documentation/api-docs/

Y por último para obtener el QR solo tenéis que añadir /qr-code a la url corta.

TL.

 

Gracias por leer nuestros posts.

No hay comentarios

Comenta la entrada