Eigenen URL Shortener auf Raspberry Pi installieren

Wer viele Links auf sozialen Plattformen postet weiß, dass einige dieser Dienste die eingegebenen URLs automatisch kürzen. Aus der URL https://blog.doenselmann.com wird dann z.B. http://bit.ly/1sn4bWc Wie bekannt ist, vergisst das Internet erstmal nichts, was es einmal gespeichert hat. Was passiert jedoch, wenn ein URL Shortener Dienst die Pforten für immer schließt? Richtig, die erzeugten URLs zeigen damit ins Nirwana. Wer generell fremden Diensten skeptisch gegenüber steht, kann sich auch seinen eigenen URL Shortener installieren. Dazu wird eine passende URL sowie ein Raspberry Pi mit installiertem YOURLS benötigt. Damit die eigene URL auch auf dem zu Hause stehenden Raspberry Pi zeigen kann, ist ein CNAME Eintrag beim Provider sowie möglicherweise ein DynDNS Dienst (sollte keine feste statische IP vorhanden sein) erforderlich. Wie die eigene URL für DynDNS verwendet werden kann, habe ich hier beschrieben: https://blog.doenselmann.com/eigenen-domainnamen-fuer-dyndns-verwenden

Bei der URL ist darauf zu achten, dass diese auch möglichst kurz ist. Ziel soll es ja sein lange URLs zu kürzen. Eine URL wie http://meineeigensgekuerzteurlisttoll.de/fy1 ist natürlich wenig ansprechend. Hier ist also etwas Kreativität gefragt. Die Installationsanleitung bezieht sich auf einen Raspberry Pi mit installiertem Raspbian (Debian Wheezy) ohne weitere Dienste. Wer zusätzliche Webdienste anbieten will, benötigt ggf. eine abweichende nginx Konfigurationsdatei.
Als erstes werden alle benötigten Pakete installiert:

sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y install mysql-server nginx php5 php5-mysql php5-fpm php-apc

Während der MySQL Installation wird ein root Kennwort für den Server verlangt. Damit der frisch installierte MySQL Server nicht offen wie ein Scheunentor ist, wird dieser erstmal abgesichert. Wie dies funktioniert, ist hier beschrieben. https://blog.doenselmann.com/mysql-installation-absichern

Verbindung zum MySQL Server herstellen:

mysql -h localhost -u root –p

Datenbank erzeugen:

create database yourls;

Datenbank Benutzer für die Datenbank anlegen:

create user 'db_yourls'@'localhost' identified BY 'PASSWORT';

Berechtigungen vergeben:

grant all on yourls.* TO db_yourls@localhost;

MySQL Konfiguration beenden:

exit

Verzeichnis für die Webdateien erzeugen:

sudo mkdir /var/www/yourls

Konfigurationsdatei für nginx Webserver erzeugen:

sudo nano /etc/nginx/sites-enabled/default

Die folgende Datei ist eine funktionierende Beispielkonfiguration für YOURLS mit aktivem TLS und Perfect Forward Secrecy. Wie die benötigen Zertifikate erzeugt werden steht hier geschrieben. https://blog.doenselmann.com/ssl-zertifikat-mit-openssl-erzeugen. Die verwendeten Pfade müssen ggf. angepasst werden.

server {
        listen 80;
        server_name my.example.com;
        rewrite ^ https://$server_name$request_uri? permanent; # enforce https

        }

server {

        listen 443 ssl;
        server_name my.example.com;

      # SSL Settings
        ssl on;
        ssl_certificate /etc/nginx/certs/my.example.com/cert.pem;
        ssl_certificate_key /etc/nginx/certs/my.example.com/cert.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/certs/my.example.com/dhparam.pem;
        ssl_session_cache builtin:1000 shared:SSL:10m;
        ssl_ciphers  HIGH:!aNULL:!MD5:!RC4;

      # Header config for security
        add_header Strict-Transport-Security max-age=15768000;
        add_header X-Frame-Options DENY;

      # Path to the root of your webserver
        root /var/www/yourls;
        index index.php index.html index.htm;

        client_max_body_size 10G; # set max upload size
        fastcgi_buffers 64 4K;

        if ($request_uri ~ " ") {
          return 444;
        }

        location / {
            try_files $uri $uri/ /yourls-loader.php;
            location ~ \.php$ {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
                              }
                    }
        }

Ins Webverzeichnis wechseln:

cd /var/www/yourls

Download der aktuellsten YOURLS Version:

sudo wget https://github.com/YOURLS/YOURLS/archive/1.7.zip

Enpacken der Binaires:

sudo unzip 1.7.zip

Verschieben der Binaries in /var/www/yourls:

sudo mv -r YOURLS-1.7/* .
sudo rm -r YOURLS-1.7
sudo rm -r 1.7.zip

Erzeugen der Basinkonfigurationsdatei:

sudo cp user/config-sample.php user/config.php

Basiskonfiguration zum Bearbeiten öffnen:

sudo nano user/config.php

Folgende Anpassungen müssen durchgeführt werden, damit YOURLS funktioniert.

/** MySQL database username */
    define( 'YOURLS_DB_USER', 'db_yourls' );

    /** MySQL database password */
    define( 'YOURLS_DB_PASS', 'PASSWORT' );

    /** The name of the database for YOURLS */
    define( 'YOURLS_DB_NAME', 'yourls' );

    /** MySQL hostname */
    define( 'YOURLS_DB_HOST', 'localhost' );
    
    /** YOURLS installation URL -- all lowercase and with no trailing slash.
     ** If you define it to "http://site.com", don't use "http://www.site.com" in your browser (and vice-versa) */
    define( 'YOURLS_SITE', 'http://foo.bar' );

    /** YOURLS language or "locale".
     ** Change this setting to "localize" YOURLS (use a translation instead of the default English). A corresponding .$
     ** must be installed in the user/language directory.
     ** See http://yourls.org/translations for more information */
    define( 'YOURLS_LANG', 'de_DE' );
    
    /** Username(s) and password(s) allowed to access the site. Passwords either in plain text or as encrypted hashes
     ** YOURLS will auto encrypt plain text passwords in this file
     ** Read http://yourls.org/userpassword for more information */
    $yourls_user_passwords = array(
            'Test' => 'PASSWORT',
            //'username2' => 'password2'    // You can have one or more 'login'=>'password' lines
            );

Zum Abschluss muss der Webserver einmal durchgestartet werden.

sudo service nginx restart

Die Installation ist beinahe abgeschlossen. Die letzte Aktion wird direkt auf der Weboberfläche durchgeführt. Dazu muss die URL https://foo.bar/admin geöffnet und auf „Install YOURLS“ geklickt werden. Wenn alles erfolgreich war, kann man weiter auf „YOURLS Administration Page“ klicken. Die Installation ist somit abgeschlossen und der eigene short URL Dienst ist eingerichtet.