Shlink URL Shortener installeren met Nginx op Ubuntu 20.04

Shlink is een open-source en zelf gehoste URL-verkorter geschreven in PHP. Het wordt gebruikt om korte URL’s te genereren en te beheren vanaf de commandoregel. Je kunt er alle bezoeken van je korte URL’s mee volgen, inclusief, locatie, browser of verwijzer. Het kan met hulpmiddelen van derden geïntegreerd worden via de Shlink API. Het biedt een command-line interface om URL’s in te korten.

In deze handleiding laat ik je zien hoe je Shlink installeert op Ubuntu 20.04.

Vereisten

  • Een server waarop Ubuntu 20.04 draait.
  • Een geldige domeinnaam gericht met het IP van je server.
  • Een root wachtwoord is op de server ingesteld.

Aan de slag

Werk eerst de systeempakketten bij naar de bijgewerkte versie door het volgende commando uit te voeren:

apt-get update -y

Als alle pakketten bijgewerkt zijn, kun je verder gaan met de volgende stap.

Installeer de LEMP server

Installeer eerst de Nginx, PHP, MariaDB en andere vereiste pakketten met het volgende commando:

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

Als alle pakketten geïnstalleerd zijn, kun je verder gaan met de volgende stap.

Maak Shlink Database

Shlink gebruikt MariaDB als database backend. Je zult dus een database en gebruiker voor Shlink moeten maken. Maak eerst verbinding met de MariaDB met het volgende commando:

mysql

Eenmaal verbonden maak je een databank en een gebruiker met het volgende commando:

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

Spoel vervolgens de privileges en verlaat de MariaDB met het volgende commando:

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

Download Shlink

Download eerst de nieuwste versie van Shlink van hun officiële download pagina:

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

Als de download voltooid is, pak je het gedownloade bestand uit met het volgende commando:

unzip shlink2.7.1_php7.4_dist.zip

Verplaats vervolgens de uitgepakte map naar de Nginx web root map:

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

Stel vervolgens de juiste toestemming en eigendom in met het volgende commando:

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

Installeer Shlink

Voer vervolgens het volgende commando uit om de installatie te starten:

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

Je wordt gevraagd de database te kiezen zoals hieronder:

 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

Kies een willekeurige optie en druk op Enter. Je wordt gevraagd de databasenaam op te geven zoals hieronder:

 Database name [shlink]:
 > 

Geef je databasenaam op of druk op Enter om de standaard te kiezen. Je wordt gevraagd de databank host op te geven:

 Database host [localhost]:
 > 

Geef je database host op of druk op Enter om de standaard te kiezen. Je wordt gevraagd de databasepoort op te geven:

 Database port [3306]:
 > 

Geef je databasepoort op of druk op Enter om de standaard te kiezen. Je wordt gevraagd je database gebruikersnaam op te geven:

 Database username:
 > shlink

Geef je database gebruikersnaam op en druk op Enter. Je wordt gevraagd je database gebruikerswachtwoord op te geven:

 Database password:
 > password

Geef je database gebruikerswachtwoord en druk op Enter. Je wordt gevraagd Unix socket op te geven.

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

Laat het leeg en druk op Enter. Je wordt gevraagd je domeinnaam op te geven:

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

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

Geef je domeinnaam op en druk op Enter. Je wordt gevraagd het Schema te kiezen:

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

Kies een optie en druk op Enter. Je wordt gevraagd om lange URL’s te valideren:

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

Kies de standaard optie en druk op Enter. Je wordt gevraagd de lengte van de gegenereerde shortcodes op te geven:

 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]:
 > 

Kies de standaard waarde en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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]:
 > 

Kies standaard antwoord en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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):
 > 

Laat het leeg en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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

Kies een optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies standaard waarden en druk op Enter. Je zou de volgende uitvoer moeten zien:

TRACKING
========

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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):
 > 

Druk gewoon op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Geef je domeinnaam op en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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

Geef je domeinnaam op en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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

Geef je domeinnaam op en druk op Enter. Je zou de volgende uitvoer moeten zien:

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]:
 > 

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

 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) []:
 > 

Kies de standaard optie en druk op Enter. Je zou de volgende uitvoer moeten zien:

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!                                                                                                                                                            

Configureer Nginx voor Shlink

Vervolgens moet je een Nginx virtual host bestand maken voor Shlink. Je kunt het aanmaken met het volgende commando:

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

Voeg de volgende regels toe:

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;
   }

}

Sla het bestand op en sluit het af, controleer Nginx dan op eventuele fouten met het volgende commando:

nginx -t

Je zou de volgende uitvoer moeten krijgen:

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

Herstart vervolgens de Nginx dienst om de veranderingen toe te passen:

systemctl restart nginx

Je kunt ook de status van de Nginx controleren met het volgende commando:

systemctl status nginx

Je zou de volgende uitvoer moeten krijgen:

? 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.

Je kunt nu de Shlink client installeren om de URL in te korten.

Je kunt de korte URL ook op je server genereren vanaf de commandoregel:

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

Om alle korte URL’s op te sommen, voer je het volgende commando uit:

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

Om eventuele helpinformatie te tonen, voer je het volgende commando uit:

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

Conclusie

Gefeliciteerd! je hebt met succes Shlink URL verkorter geïnstalleerd op Ubuntu 20.04. Je kunt nu URL’s inkorten met de CLI interface of de web-gebaseerde client.