Create your own URL shortener!

schBenedikt - Aug 17 '23 - - Dev Community

Today we come to a very interesting topic in the field of HomeServer.


If you like our articles, we would appreciate a Like & Comment❤️


We want to install our own URL shortener on our HomeSever. This means that shortened links can then be reached under your domain/desired name. There are several options here, e.g. you can also generate the shortened links randomly or provide them with numbers. But more on that. You can do it!

Or do you like to test it first?
Then try it below
url.schächner.de!

Database

First we create the databases and users again. To do that, let's switch to first

mysql
and then create the database with

CREATE DATABASE yourls;
and then the user with

CREATE USER 'yourlsuser'@'localhost' IDENTIFIED BY 'password';
and the corresponding password.

We'll give this to you

GRANT ALL PRIVILEGES ON yourls.* TO 'yourlsuser'@'localhost';
the permissions and load them as well

FLUSH PRIVILEGES;
new.

Now we can do that

EXIT;
leave again.

Download Yourls

Now let's switch

cd /tmp
Into the temporary directory we also download YOURLS with

sudo wget https://github.com/YOURLS/YOURLS/archive/refs/tags/1.9.1.zip

We'll unpack that
unzip 1.9.1.zip
and move it to the /var/www/ directory

sudo mv YOURLS-1.9.1 /var/www/
If we want, we can also add the folder

cd /var/www/
sudo mv YOURLS-1.9.1 yourls
rename.

config file

Now we have to go to the directory

cd yourls/user
switch and copy the config file there with

cp config-sample.php config.php
We now have to edit this with

sudo nano config.php
Here we need to adjust the following values:

define( 'YOURLS_DB_USER', 'yourlsuser' );
In the line above we need to enter our database user.

In the following line the database password

define( 'YOURLS_DB_PASS', 'password');
and the name of the database

define( 'YOURLS_DB_NAME', 'yourls' );
Here

define( 'YOURLS_SITE', 'yourls.example.com' );
we have to enter our desired domain.

With ctrl + w we can also search for the following value:

$yourls_user_passwords = [
A user and a password are already specified below, which must be changed to the desired values.

Permissions

Now we need to set the permissions again with

sudo chown -R www-data:www-data /var/www/yourls
and

sudo chmod -R 775 /var/www/yourls

Apache2 config file

We have to take these with us

sudo nano /etc/apache2/apache2.conf
edit.

There we search again with ctrl + w

AllowOverride
We need all of these values, except for the area with <Directory /var/www/> from

AllowOverride None
Enter fullscreen mode Exit fullscreen mode

to

AllowOverrideAll
Enter fullscreen mode Exit fullscreen mode

adjust.

We insert the following block above the area with <Directory /var/www/>:

<Directory /var/www/yourls/>
         Options Indexes FollowSymLinks
         AllowOverrideAll
         Require all granted
</Directory>
virtual host
Now we create a virtual host with

sudo nano /etc/apache2/sites-available/yourls.conf
and add the following content:

<VirtualHost *:80>
     ServerName yourls.example.com
     DocumentRoot "/var/www/yourls"

     <Directory "/var/www/yourls">
         Require all granted
         Options Indexes FollowSymLinks
         AllowOverrideAll
         Order allow deny
         Allow from all
     </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Of course, as always, we have to take this file with us

sudo a2ensite yourls.conf
activate.

Now we also start the web server

sudo service apache2 restart
and

sudo systemctl restart apache2.service
new.

Now we can go into the browser to configuration!

This can be done by opening the domain (only if we have defined an A record or AAAA record) /admin or ip/admin in the browser.

Here we go!

PS:

Do you want a certificate for this instance?

This is what you get with our article:

Make NextCloud accessible from the Internet and an SSL certificate or https for our cloud and other web installations - Schächner

Thanks for reading,
Schächner

. . . . . . . . . . . . . .