Cómo instalar el acortador de URL Shlink con Nginx en Ubuntu 20.04

Shlink es un acortador de URLs de código abierto y auto-alojado escrito en PHP. Sirve para generar y gestionar URLs cortas desde la línea de comandos. Te permite rastrear todas las visitas de tus URLs cortas, incluyendo, la ubicación, el navegador o la referencia. Se puede integrar con herramientas de terceros utilizando la API de Shlink. Proporciona una interfaz de línea de comandos para acortar URLs.

En este tutorial, te mostraré cómo instalar Shlink en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Un nombre de dominio válido apuntado con la IP de tu servidor.
  • Una contraseña de root configurada en el servidor.

Cómo empezar

En primer lugar, actualiza los paquetes del sistema a la versión actualizada ejecutando el siguiente comando:

apt-get update -y

Una vez actualizados todos los paquetes, puedes pasar al siguiente paso.

Instalar el servidor LEMP

Primero, instala los paquetes Nginx, PHP, MariaDB y otros necesarios con el siguiente comando:

apt-get install nginx mariadb-server php-apcu php7.4 php7.4-fpm php7.4-mysql php7.4-gd php7.4-common php7.4-curl php7.4-intl php7.4-gmp php7.4-xml php-dev php-pear unzip -y

Una vez instalados todos los paquetes, puedes pasar al siguiente paso.

Crear la base de datos de Shlink

Shlink utiliza MariaDB como base de datos. Así que tendrás que crear una base de datos y un usuario para Shlink. Primero, conéctate a MariaDB con el siguiente comando:

mysql

Una vez conectado, crea una base de datos y un usuario con el siguiente comando:

MariaDB [(none)]> CREATE DATABASE shlink;
MariaDB [(none)]> GRANT ALL ON shlink.* TO 'shlink'@'localhost' IDENTIFIED BY 'password';

A continuación, vacía los privilegios y sal del MariaDB con el siguiente comando:

MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

Descarga Shlink

Primero, descarga la última versión de Shlink desde su página oficial de descargas:

wget https://github.com/shlinkio/shlink/releases/download/v2.7.1/shlink2.7.1_php7.4_dist.zip

Una vez completada la descarga, descomprime el archivo descargado con el siguiente comando:

unzip shlink2.7.1_php7.4_dist.zip

A continuación, mueve el directorio extraído al directorio raíz de la web Nginx:

mv shlink2.7.1_php7.4_dist /var/www/html/shlink

A continuación, establece el permiso y la propiedad adecuados con el siguiente comando:

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

Instalar Shlink

A continuación, ejecuta el siguiente comando para iniciar la instalación:

sudo -u www-data php7.4 /var/www/html/shlink/bin/install

Se te pedirá que selecciones la base de datos como se muestra a continuación:

 Welcome to Shlink!!
 This tool will guide you through the installation process.

DATABASE
========

 Select database type [MySQL]:
  [0] MySQL
  [1] MariaDB
  [2] PostgreSQL
  [3] MicrosoftSQL
  [4] SQLite
 > 1

Elige cualquier opción y pulsa Intro. Se te pedirá que proporciones el nombre de la base de datos como se muestra a continuación:

 Database name [shlink]:
 > 

Proporciona el nombre de tu base de datos o pulsa Intro para elegir la opción por defecto. Se te pedirá que indiques el host de la base de datos:

 Database host [localhost]:
 > 

Proporciona el host de tu base de datos o pulsa Intro para elegir el predeterminado. Se te pedirá que indiques el puerto de la base de datos:

 Database port [3306]:
 > 

Proporciona el puerto de tu base de datos o pulsa Intro para elegir el predeterminado. Se te pedirá que proporciones el nombre de usuario de la base de datos:

 Database username:
 > shlink

Proporciona tu nombre de usuario de la base de datos y pulsa Intro. Se te pedirá que indiques tu contraseña de usuario de la base de datos:

 Database password:
 > password

Proporciona tu contraseña de usuario de la base de datos y pulsa Intro. Se te pedirá que proporciones el socket Unix.

 Unix socket (leave empty to not use a socket):
 > 

Déjalo vacío y pulsa Intro. Se te pedirá que proporciones el nombre de dominio:

URL SHORTENER
=============

 Default domain for generated short URLs:
 > shlink.linuxbuz.com

Proporciona tu nombre de dominio y pulsa Intro. Se te pedirá que selecciones el esquema:

 Select schema for generated short URLs [http]:
  [0] http
  [1] https
 > 0

Selecciona una opción y pulsa Intro. Se te pedirá que valides las URLs largas:

 Do you want to validate long urls by 200 HTTP status code on response? (yes/no) [yes]:
 > 

Elige la opción por defecto y pulsa Intro. Se te pedirá que proporciones la longitud de los códigos cortos generados:

 What is the default length you want generated short codes to have? (You will still be able to override this on every created short URL) [5]:
 > 

Elige el valor por defecto y pulsa Intro. Deberías ver el siguiente resultado:

 Do you want Shlink to resolve the short URL title based on the long URL 's title tag (if any)? Otherwise, it will be kept empty unless explicitly provided. (yes/no) [no]:
 > 

Elige la respuesta por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Provide a GeoLite2 license key. (Leave empty to use default one, but it is strongly recommended to get your own. Go to https://shlink.io/documentation/geolite-license-key to know how to get it):
 > 

Déjalo vacío y pulsa Intro. Deberías ver la siguiente salida:

 What kind of redirect do you want your short URLs to have? [All visits will always be tracked. Not that good for SEO.]:
  [302] All visits will always be tracked. Not that good for SEO.
  [301] Best option for SEO. Redirect will be cached for a short period of time, making some visits not to be tracked.
 > 301

Elige cualquier opción y pulsa Intro. Deberías ver la siguiente salida:

 How long (in seconds) do you want your redirects to be cached by visitors? [30]:
 > 

Elige los valores por defecto y pulsa Intro. Deberías ver la siguiente salida:

TRACKING
========

 Do you want track orphan visits? (visits to the base URL, invalid short URLs or other "not found" URLs) (yes/no) [yes]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Provide a parameter name that you will be able to use to disable tracking on specific request to short URLs (leave empty and this feature won't be enabled):
 > 

Pulsa Intro. Deberías ver la siguiente salida:

 Do you want to completely disable visits tracking? (yes/no) [no]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Do you want to disable tracking of visitors' IP addresses? (yes/no) [no]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Do you want visitors' remote IP addresses to be anonymized before persisting them to the database? (yes/no) [yes]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Do you want to disable tracking of visitors' "User Agents"? (yes/no) [no]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

 Do you want to disable tracking of visitors' "Referrers"? (yes/no) [no]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

REDIRECTS
=========

 Custom URL to redirect to when a user hits Shlink's base URL (If no value is provided, the user will see a default "404 not found" page):
 > http://shlink.linuxbuz.com

Proporciona tu nombre de dominio y pulsa Intro. Deberías ver el siguiente resultado:

 Custom URL to redirect to when a user hits an invalid short URL (If no value is provided, the user will see a default "404 not found" page):
 > http://shlink.linuxbuz.com

Proporciona tu nombre de dominio y pulsa Intro. Deberías ver el siguiente resultado:

 Custom URL to redirect to when a user hits a not found URL other than an invalid short URL (If no value is provided, the user will see a default "404 not found" page):
 > http://shlink.linuxbuz.com

Proporciona tu nombre de dominio y pulsa Intro. Deberías ver el siguiente resultado:

APPLICATION
===========

 Do you want to enable a safety check which will not allow short URLs to be deleted after receiving a specific amount of visits? (yes/no) [yes]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver el siguiente resultado:

 What is the amount of visits from which the system will not allow short URLs to be deleted? [15]:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver el siguiente resultado:

 What is the path from which shlink is going to be served? (Leave empty if you plan to serve shlink from the root of the domain) []:
 > 

Elige la opción por defecto y pulsa Intro. Deberías ver la siguiente salida:

INTEGRATIONS
============

 Provide a comma-separated list of redis server URIs which will be used for shared caching purposes under shlink multi-instance contexts (Leave empty if you don't want to use redis cache):
 > 

 Custom configuration properly generated!

Initializing database... Success!
Updating database... Success!
Generating proxies... Success!
Downloading GeoLite2 db file... Success!

                                                                                                                        
 [OK] Installation complete!                                                                                                                                                            

Configurar Nginx para Shlink

A continuación, tendrás que crear un archivo de host virtual Nginx para Shlink. Puedes crearlo con el siguiente comando:

nano /etc/nginx/conf.d/shlink.conf

Añade las siguientes líneas:

server {
   listen 80;
   server_name shlink.example.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/php7.4-fpm.sock;
     fastcgi_index index.php;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     include fastcgi_params;
   }

}

Guarda y cierra el archivo y luego verifica el Nginx por si hay algún error con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

A continuación, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes verificar el estado del Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-06-02 05:28:30 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 25639 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 25653 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 25655 (nginx)
      Tasks: 2 (limit: 2353)
     Memory: 2.6M
     CGroup: /system.slice/nginx.service
             ??25655 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??25656 nginx: worker process

Jun 02 05:28:29 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Jun 02 05:28:30 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Ahora puedes instalar el cliente Shlink para acortar la URL.

También puedes generar la URL corta en tu servidor desde la línea de comandos:

sudo -u www-data php7.4 /var/www/html/shlink/bin/cli short-url:generate

Para listar todas las URLs cortas, ejecuta el siguiente comando:

sudo -u www-data php7.4 /var/www/html/shlink/bin/cli short-url:list

Para mostrar cualquier información de ayuda, ejecuta el siguiente comando:

sudo -u www-data php7.4 /var/www/html/shlink/bin/cli

Conclusión

Enhorabuena! has instalado con éxito el acortador de URL Shlink en Ubuntu 20.04. Ahora puedes acortar URLs utilizando la interfaz CLI o el cliente basado en la web.

También te podría gustar...