Links eindampfen Teil 3

Dies ist der dritte Teil einer Artikelreihe zum Thema “Kurzlinks selbst bauen”. Den ersten Teil finden Sie hier und den zweiten hier. Willkommen zurück zum Finale.

Wie geht’s weiter?

Der erste Teil umfasste die Grundlagen und Vor- und Nachteile von Kurz-Links. Der zweite beschäftigte sich mit den Details, wie die Codes für Kurzlinks erzeugt werden und wie eine Umleitung bei einem Webserver abläuft. In diesem Teil beschreibe ich die Funktionen und Vorteile eines Kurzlink-Tools und zeige die Installation.

Voraussetzungen

Was benötigen Sie für einen eigenen Kurz-URL Service? Zuerst einmal eine kurze Domain. 😄 Dann einen Webspace, der für die Domain eingerichtet wurde und einen darauf laufenden Webserver. Für diesen Artikel folge ich der überwiegenden Mehrheit und gehe davon aus, dass der Webserver ein Apache 2.x ist und auf einem Linux läuft (das reicht vom kleinen Raspberry Pi über einen virtuellen Server beim Webhoster bis zu einem virtualisierten Firmenserver).

Sollten Sie einen anderen Webserver nutzen, dann benötigen Sie die Dokumentation, wie sie ein FastCGI-Script einrichten. Für den Webserver nginx finden Sie hier ein Beispiel.

Ich habe die folgenden Schritte sowohl auf einem meiner Raspberries als auch auf meinem öffentlichen Webserver nachvollzogen. Sollten Sie bereits “fit” sein im Umgang mit dem Apache, überlesen Sie einfach die für Sie nicht interessanten Abschnitte. An Zeit benötigen Sie je nach Erfahrung wahrscheinlich zwichen 20 und 60 Minuten. Fangen wir an!

Das Tool herunterladen

Hier haben Sie zwei Möglichkeiten. Entweder Sie laden sich den Quellcode herunter und kompilieren es mit dem Go-Compiler selbst oder Sie laden eine der Binärversionen herunter.

Das Repository mit Quellcode (und kompilierten binaries) finden Sie hier: https://gitlab.com/DerLinkshaender/shorturl

Kompiliertes Binary runterladen

Hinweis: ich übernehme keinerlei Garantie für die Funktion bzw. Nutzbarkeit der binären Dateien auf irgeneinem System. Der Einsatz erfolgt auf eigenes Risiko, diese Binaries sind als Service für Leute gedacht, die keinen Go-Compiler installiert haben. Vergleichen Sie nach dem Download auf jeden Fall die SHA256-Checksumme anhand der folgenden Liste! Kompiliert wurde mit go1.11.4 darwin/amd64

bd1d4f2c18a4c75d6717e8f0431909da1633c38cc4cfe2bb9820a75e29db75c9  shorturl_386.exe
82ac32f5ca04967d87f3192b024ab337647417332eb5f9c6a6c199ee8801b9ca  shorturl_amd64.exe
75f4df3bd36f8bbbc588e60cb3a00860586555ba7cbb40659bc62aef09f3da1d  shorturl_linux_386
56141adcbdb30e8bfead04cd711b98e494f9988380685a73c14044d7284cbfc6  shorturl_linux_amd64
33ed11f186e96902b2e019d3e2d9e559b6e92f33cd663006be335374d0913d80  shorturl_linux_arm5
5830c01eb5bb553dcb94108797d02dec7c0c368eb2cb489418dbd8e99a2af76e  shorturl_osx

(die Version shorturl_linux_arm5 läuft auf dem Raspberry Pi als auch auf Synology NAS)

Laden Sie die für Ihr Betriebssystem passende Datei und die Datei shorturl.toml herunter. Die .toml-Datei enthält die Konfiguration, die andere den ausführbaren Code für den Link-Kürzer.

Die Konfigurationsdatei besitzt folgende Einträge

  • User = "admin"
    – der Benutzername für das Eintragen und Löschen
  • Pass = "PASSWORD"
    – das Kennwort für das Eintragen und Löschen, niemandem mitteilen! Und nein, nehmen Sie nicht den Text “PASSWORD”, denken Sie sich was aus (was sicheres!). Falls Sie hier Inspiration benötigen: [Passwort-Tipps]({{ ref “/moderne-passwort-richtlienien.md” }})
  • LocalServer = ""
    – Benötigen Sie nur, wenn Sie das Tool lokal testen wollen, dann sollte hier Name/IP-Adresse und Port stehen (z.B. 127.0.0.1:8080)
  • StoreFile = "/pfad/zur/datei/shorturl.db"
    – Hier muss der Pfadname zu einer Datei rein, in der die ganzen Kurz-URLs abgelegt werden. Das bedeutet, es muss ein Verzeichnis sein, in dem das Tool schreiben darf.

Jetzt haben Sie zwei Möglichkeiten:

(Sollten Sie beides tun wollen, dann einfach linear weiterlesen, kommt in dieser Reihenfolge 😏)

Erstmal lokal ausprobieren?

Ich habe das Tool für die Kurz-URLs so gebaut, dass es sich auch lokal auf Ihrem Rechner ohne Webserver ausprobieren lässt. Suchen Sie sich einfach die Version für das Betriebssystem Ihres Rechner raus und kopieren Sie die beiden Dateien (shorturl.fcgi und shorturl.toml) in einen beliebigen Ordner.

Nun öffnen Sie mit einem Texteditor (Text, nicht Word oder Wordpad! Sondern einen Programmier-Editor wie Notepad++, SublimeText, Atom, etc.) die Datei shorturl.toml. Diese sollte folgenden Inhalt haben (falls nicht, bitte entsprechend anpassen). Dann die Datei wieder speichern und schließen.

User = "admin"
Pass = "PASSWORD"
LocalServer = "127.0.0.1:8080"
StoreFile = "./shorturl.db"

Jetzt können Sie die shorturl_XXX (Name ja nach Betriebssystem, s.o.) als ausführbares Programm starten. Unter MacOS/Linux müssen Sie zuerst das x-Bit zum Ausführen per chmod setzen (chmod +x ./shorturl_osx)

Auf der Konsole sehen Sie dann eine Ausgabe wie diese hier:

2018/12/03 22:17:22 Running with local server at 127.0.0.1:8080

Jetzt können Sie mit der Basis-URL 127.0.0.1:8080 alle Funktionen ausprobieren, die im Abschnit “Ausprobieren” erläutert sind.

Die “Installation”

Das Kurz-URL Tool auf den Webserver kopieren

Ich möchte mit Absicht nicht “installieren” schreiben, denn das klingt viel zu komplex. Was ist zu tun?

  • Die für Ihr Betriebssystem passende Datei in den Ordner für FastCGI-Scripte kopieren (welches das ist, sagt Ihnen die Dokumentation Ihres Providers. In den allermeisten Fällen ist das ein Ordner fcgi-bin direkt unterhalb des Webserver Home-Ordners). Benennen Sie die shorturl_XXX-Datei dann in shorturl.fcgi um.

  • Datei Datei shorturl.toml in den gleichen Ordner kopieren. Diese Datei enthält Benutzer und Passwort für das Eintragen und Löschen von URLs sowie den Speicherort der Datenbank.

    • User = "admin" – der Benutzername für das Eintragen und Löschen
    • Pass = "PASSWORD" – das Kennwort für das Eintragen und Löschen
    • LocalServer = "" – Benötigen Sie nur zur lokalen Ausführung, hier also den Leerstring eintragen.
    • StoreFile = "/pfad/zur/datei/shorturl.db" – Siehe oben. Direkt das /fcgi-bin sollte es nach Möglichkeit auch nicht sein aus Sicherheitsgründen. Ich habe mir unterhalb des HTML-Basisordner (bei mir /var/www/html) einfach einen Ordner storage erzeugt und da liegt die Datei.
  • Die Datei .htaccess bearbeiten, um das Tool einzutragen (siehe den nächsten Abschnitt)

Die .htaccess bearbeiten

Im Hauptverzeichnis Ihrers Webauftritts legen Sie (wenn es die noch nicht gibt) eine Datei .htaccess an und tragen folgenden Inhalt ein.

<IfModule mod_fcgid.c>
   AddHandler fcgid-script .fcgi
   <Files ~ (\.fcgi)>
       SetHandler fcgid-script
       Options +ExecCGI
   </Files>
</IfModule>

<IfModule mod_rewrite.c>
   RewriteEngine On
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ /fcgi-bin/shorturl.fcgi/$1 [QSA,L]
</IfModule>

Falls Ihnen hier Einträge unklar sind, lesen Sie bitte die Apache-Dokumentation zu .htaccess oder schreiben Sie dem Support Ihres Webhosters eine Mail. Eine kleine Erklärung finden Sie auch hier

Ausprobieren …

Jetzt können Sie das Tool aufrufen. Da ich nicht weiß, welche kurze Domain Sie sich registiert haben, verwende ich hier für die Beispiele die Domain “doma.in”.

Eine neue URL eintragen

Da wir noch keine Kurz-URL haben, ist dies ein guter Startpunkt. Dazu rufen Sie den Endpunkt /admin/add auf, also in unserem Beispiel http://doma.in/admin/add. Zuerst sollte eine Dialogbox erscheinen, in der Sie nach dem Benutzernamen und dem Passwort (siehe oben) gefragt werden, um eine neue URL einzutragen. Nach der Eingabe wird die Maske für das Eintragen angezeigt:

URL eintragen

Geben Sie in das erste Eingabefeld die lange URL ein (das zweite mit der optionalen Wunsch-URL lassen wir leer) und klicken Sie dann auf die Schaltfläche [Senden]. Danach sollten Sie etwas sehen wie in der folgenden Abbildung.

Neue URL eingetragen

Sie sehen jetzt den vergeben Schlüssel (im Beispiel oben by5I8QrVXia) und das Ziel des Links.

Wenn Sie im Eingabefeld “Optionale Wunsch-URL” einen eigenen Wert eingeben (z.B. shorty) wird dieser auf Gültigkeit geprüft (muss den URL-Konventionen entsprechen und darf noch nicht existieren) und dann statt des automatisch erzeugten Hashwerts verwendet.

Bestehende Kurz-URLs auflisten

Dazu verwenden Sie den Endpunkt /admin/list, also in unserem Beispiel http://doma.in/admin/list. Ich habe noch einige weitere URLs eingetragen, damit die Grafik nicht so “leer” aussieht. 😄

URLs auflisten

Sie sehen jetzt alle definierten Kurz-URLs und ihr Ziel, dass Sie auf Wunsch auch gleich anklicken können.

Bonus-Material

Beim Testen wollte ich die Liste der Kurz-URLs und ihrer Ziele nicht in HTML, sondern als CSV-Ausgabe. Ja, Pustekuchen, haste ja nicht programmiert, Alter! 😩 – Doch, jetzt schon 👍
Sie können an die URL /admin/list jetzt einfach den Parameter ?format= anhängen und dabei entweder csv, json oder xml verwenden. Beispiel: http://doma.in/admin/list?format=json und schon bekommen Sie die Ausgabe in einem maschinenlesbaren Format! Gerade bei längeren Sammlungen ist dies eine schnelle Export-Methode.

Eine bestehende Kurz-URL löschen

Dazu verwenden Sie den Endpunkt /admin/del/KEY, also in unserem Beispiel http://doma.in/admin/del/by5I8QrVXia. Der zu löschende Schlüssel ist also Bestandteil der URL. Waren Sie noch nicht angemeldet, wird auch hier wieder zuerst Benutzername und Passwort verlangt (wir wollen ja nicht jeden unsere Kurzlinks löschen lassen!). Für das Beispiel oben sieht das dann so aus:

URL entfernen

Weg ist der Link! 😄

Dies ist der einfachste Fall: der Schlüssel wird als Pfad hinter unserem kurzen Domain-Namen verwendet. In unserem Fall (siehe die Liste der definierten URLs oben): http://doma.in/shorty. Danach landen Sie direkt auf dem Ziel des Links.

Komfortfunktionen

Ah, Komfortfunktionen… 😏
Beschrieben hatte ich die im [zweiten Teil]({{ ref “/shortlinks-selbstgemacht-teil2” }}) dieser Serie. Sie machen den Umgang mit Kurz-URLs etwas leichter. Ich verwende für die folgenden Beispiel den Kurzcode shorty aus dem Beispiel oben.

Zielanzeige

Um das Ziel eines Kurz-Links anzuzeigen und nicht automatisch weiter zuleiten, hängen Sie einfach ein .d an den Kurzcode an (für destination), z.B. http://doma.in/short.d

Zielanzeige

Informationen über das Ziel

Um Informationen über das Ziel eines Kurz-Links anzuzeigen (den sogenannten HTTP-Header), hängen Sie einfach ein .h an den Kurzcode an (für header), z.B. http://doma.in/short.h

HTTP Header anzeigen

Einen QR-Code erzeugen

Wenn Sie für das Ziel der Kurz-URL einen QR-Code benötigen, dann hängen Sie einfach ein .q an den Kurzcode an (für QR-Code)

QR-Code anzeigen

Natürlich enthält der QR-Code gleich die URL des Ziel (alles andere wäre auch Unsinn), so dass für die Verteilung des QR-Codes unerheblich ist, ob das Tool in Betrieb ist oder nicht. Als Nebeneffekt haben Sie nun einen eigenen, privaten QR-Code Generator für Links, wenn Sie die eingetragene URL nach dem Anzeigen und Speichern des QR-Codes wieder austragen…

Digitale Mündigkeit bedeutet auch die Herrschaft über die eigenen Daten. Sie sollen auch ohne dieses Tool in der Lage sein, die Daten anderweitig zu verwenden oder beim Einsatz eines anderen Tools umziehen zu können. Dazu plane ich als Ergänzung noch ein kleines Zusatzwerkzeug, dass aus der Datenbank mit den Kurzlinks eine CSV- oder Exceldatei erzeugt. Falls Sie solange nicht warten wollen oder einfach wissen möchten, wie die Datenstrukturen innerhalb der Datei aussehen, finden Sie hier weitere Informationen.

Das Projekt nutzt einen sog. “Key-Value-Store”, also eine einfach Ablage von Werten unter einem Zeichenketten-Schlüssel. Dazu verwende ich das Projekt BoltDB: https://github.com/boltdb/bolt

Die darunterliegenden Datenstrukturen werden nach der gob-Konvention kodiert. Details dazu finden Sie hier: https://golang.org/pkg/encoding/gob/

Fazit

Ich habe wieder festgestellt, dass der Spruch “wenn Du etwas lernen willst, dann erkäre es jemand anders” immer noch gilt. 😄 👍 – Ich habe beim Schreiben dieser kleinen Reihe viel gelernt. In weniger als 500 Zeilen Code einen eigenen Kurz-URL Dienst zu bauen in einer Sprache, die ich nur gelegentlich nutze, war hochinteressant. Ich bin sicher, der Code ist mindestens “ugly” und ein Hack, aber ich habe schon Pläne für weitere Funktionen (z.B. die Kurz-URL als Text unter dem QR-Code, eine API, zeitliche Gültigkeiten und und und). Das Erläutern der Funktion und des Designs sowie die Vorteile gegenüber einer “dicken” Lösung aus z.B. PHP und MySQL haben Spaß gemacht. Ich finde das Grundprinzip und den Umfang auch für Einsteiger in der Programmierung “erfassbar”, sowohl für die Suche nach Fehlern als auch eigene Erweiterungen.

Zusätzlich hoffe ich, dass Sie meine Argumente aus den drei Teilen nachvollziehen können und verstehen, warum mir in Zeiten von Facebook, Google, TinyURL und Co. dieses “own your stuff” so wichtig ist. Gerade Hyperlinks sollen zeitlich “stabil” sein und nicht einfach verschwinden, weil ein externer Betreiber von Ihnen jetzt Geld möchte oder vom Markt verschwindet. Bestimmte Dinge mit einer solchen “verschwundenen” Kurz-URL lassen sich nie wieder ändern, z.B. ein Tweet auf Twitter. Vielen Dank für’s Lesen und Ihre Geduld.

Share Kommentieren
X

Ich habe einen Kommentar zum Artikel

Sie können die Kommentarfunktion ohne die Speicherung personenbezogener Daten nutzen. Schreiben Sie Ihren Kommentar und klicken Sie auf "Abschicken", der Versand erfolgt per Mail von meinem Auftritt aus an mich zur Prüfung. Dieser Versand und die Übertragung Ihres Kommentars ist zur Erfüllung der von Ihnen mit dem Klick auf "Abschicken" ersichtlichen Absicht technisch notwendig und bedarf keiner weiteren Einwilligung.

Wichtiger Hinweis: Sie haben keinen Anspruch auf die Veröffentlichung Ihres Kommentars. Jeder hier eingegebene Kommentar wird zuerst geprüft. Ich behalte mir die Entscheidung vor, welche Kommentare ich als Ergänzung an den Artikel anfüge.