Install a Self-hosted URL Shortener with Shlink.io
#Shlink #URLShortener #Linux
Full steps can be found at https://i12bretro.github.io/tutorials/0225.html
What is Shlink?
A PHP-based self-hosted URL shortener that can be used to serve shortened URLs under your own custom domain. - https://github.com/shlinkio/shlink
Installing Shlink
01. Log into the Linux device
02. Run the following commands in a terminal:
# update software repositories
sudo apt update
# install software updates
sudo apt upgrade -y
# install pre-requisites
sudo apt install lsb-release apt-transport-https ca-certificates unzip -y
# add php gpg key
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
# add php apt repository
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
# update software repositories
sudo apt update
# install Apache HTTPD and MySQL
sudo apt-get install apache2 mariadb-server mariadb-client -y
# install PHP components
sudo apt install php8.0 libapache2-mod-php8.0 php8.0-curl php8.0-intl php8.0-gd php8.0-pdo php8.0-fpm php8.0-common php8.0-mysql php8.0-xml php8.0-apcu -y
# enable/disable apache2 modules
sudo a2dismod mpm_prefork php8.0
sudo a2enmod mpm_event rewrite proxy_fcgi setenvif php8.0
sudo a2enconf php8.0-fpm
# configure the MySQL database
sudo su
mysql_secure_installation
03. Press Enter to login as root
04. Type Y and press Enter to set a root password, type the password twice to confirm
05. Type Y and press Enter to remove anonymous users
06. Type Y and press Enter to disallow root login remotely
07. Type Y and press Enter to remove the test database
08. Type Y and press Enter to reload privilege tables
09. Run the following command to login into MySQL:
mysql -u root -p
10. Authenticate with the root password set earlier
11. Run the following commands to create the ShlinkIO database and database user
# NOTE: update the password with a secure password
CREATE DATABASE shlinkio;
GRANT ALL ON shlinkio.* to 'shlinkio_rw'@'localhost' IDENTIFIED BY '$hlink10!';
FLUSH PRIVILEGES;
EXIT;
exit
12. Continue with the following commands to download and extract shlinkio
# download latest shlink.io version
sudo wget https://github.com/shlinkio/shlink/releases/download/v2.6.2/shlink2.6.2_php8.0_dist.zip
# extract the zip archive
sudo unzip shlink2.6.2_php8.0_dist.zip -d /var/www
# rename the extracted folder
sudo mv /var/www/shlink* /var/www/shlinkio
# set the owner of the new shlinkio directory to www-data
sudo chown -R www-data:www-data /var/www/shlinkio
# run the shlinkio installer
sudo -u www-data php /var/www/shlinkio/bin/install
13. Type 1 for MariaDB ≫ Press Enter
14. Type shlinkio for the database name ≫ Press Enter
15. Press enter to use localhost for the database host
16. Press enter to accept the default MySQL port
17. Type shlinkio_rw for the database username ≫ Press Enter
18. Type the shlinkio_rw password created earlier ($hlink10!) ≫ Press Enter
19. Press Enter at the Unix socket prompt
20. Enter the default domain name to use for shortened URLs,
21. Type 0 for http ≫ Press Enter
22. Press Enter to validate long URLs
23. Press Enter to accept the default shortened URL length
24. Press Enter to say no to having shlink resolve page titles
25. Press Enter to track orphan visits
26. Press Enter at the GeoLite2 license key prompt
27. Press Enter to anonymize report IP addresses
28. Enter 301 for the kind of redirect ≫ Press Enter
29. Press Enter to accept the default redirect cache value
30. Press Enter to accept displaying a 404 for all 3 redirects options
31. Press Enter to leave parameter name blank
32. Type No to enable safety check ≫ Press Enter
33. Type /shlinkio for the path ≫ Press Enter
34. Press Enter at the integrations prompt
35. With the installation completed, run the following command to create a shlinkio.conf apache configuration
# download shlinkio web client
sudo wget https://github.com/shlinkio/shlink-web-client/releases/download/v3.1.0/shlink-web-client_3.1.0_dist.zip
# extract the zip archive
sudo unzip shlink-web-client_3.1.0_dist.zip
# move the extracted files to the web root
sudo mv ./shlink-web-client*/* /var/www/html
sudo nano /etc/apache2/sites-available/shlinkio.conf
....Full steps can be found on GitHub [link at the top]
### Connect with me and others ###
★ Discord: https://discord.com/invite/EzenvmSHW8
★ Reddit: https://reddit.com/r/i12bretro
★ Twitter: https://twitter.com/i12bretro