Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Installationsanleitung für Shlink als Docker-Container

profile picture
Author
Lars Hubrich
Published
2022-07-07
Time to read
6 minutes reading time

About the author- Einfach ein weiterer Nerd

Einführung

In diesem Tutorial geht es um die Installation des selbst gehosteten URL-Shorteners Shlink als Docker Container

Mehr Informationen zu Shlink erhälst Du in der Shlink Dokumentation

Voraussetzungen

Schritt 1 - Verzeichnisstruktur erstellen

Zunächst erstellen wir die Verzeichnisse für die Konfigurations- und Datenbankdateien

mkdir -p /opt/shlink/db_data/

Schritt 2 - docker-compose.yml erstellen

In der docker-compose.yml legen wir alle Einstellungen für unsere Docker Container fest

nano /opt/shlink/docker-compose.yml

Dabei müssen wir einige Variablen beachten, welche wir noch anpassen müssen:

  • DEFAULT_DOMAIN: Hier müssen wir die Domain angeben, über welche die Shlink Instanz erreichbar sein wird
  • IS_HTTPS_ENABLED: Falls ein Reverse Proxy mit TLS Termination vorgeschaltet ist (Technologie um https verwenden zu können), muss hier true eingetragen werden, sonst false
  • GEOLITE_LICENSE_KEY: Hier muss der Geolite Lizenzschlüssel eingetragen werden, welchen wir in dem nächsten Schritt erhalten werden
  • DB_PASSWORD: Hier muss ein am besten zufällig generiertes sicheres Passwort eingetragen werden
  • MARIADB_ROOT_PASSWORD: Hier muss ein am besten zufällig generiertes sicheres Passwort eingetragen werden

Für die Variablen unter Ports gilt Folgendes:

  • 127.0.0.1: Hier wird die „bind address“ eingetragen, also die Adresse, über die der Dienst erreichbar sein soll
    • 127.0.0.1 bedeutet dabei, dass der Service nur local erreichbar ist, dies würde man verwenden, falls ein Reverse Proxy vorgeschaltet ist
    • 0.0.0.0 bedeutet dabei, dass der Service global erreichbar ist, solange der entsprechende Port freigegeben ist
  • 8080: Hier wird der „bind port“ eingetragen, also der Port, über den der Dienst erreichbar sein soll
    • 80 würde verwendet, wenn Du den Service direkt über http erreichen willst
    • 8080 oder ein anderer nicht standardisierter Port, würde verwendet, um diesen in der Reverse Porxy Konfiguration zu hinterlegen

Shlink bietet noch einige weitere Variablen, an welche Du in der Shlink Dokumentation findest

docker-compose.yml:

version: "3"

services:
  shlink:
    image: shlinkio/shlink:stable
    restart: always
    environment:
      - TZ="Europe/Berlin"
      - DEFAULT_DOMAIN=<DEFAULT_DOMAIN>
      - IS_HTTPS_ENABLED=<true/false>
      - GEOLITE_LICENSE_KEY=<GEOLITE_LICENSE_KEY>
      - DB_DRIVER=maria
      - DB_USER=shlink
      - DB_NAME=shlink
      - DB_PASSWORD=<DB_PASSWORD>
      - DB_HOST=database
    depends_on:
      - database
    ports:
      - <127.0.0.1>:<8080>:8080

  database:
    image: mariadb:10.8
    restart: always
    environment:
      - MARIADB_ROOT_PASSWORD=<MARIADB_ROOT_PASSWORD>
      - MARIADB_DATABASE=shlink
      - MARIADB_USER=shlink
      - MARIADB_PASSWORD=<DB_PASSWORD>
    volumes:
      - /opt/shlink/db_data:/var/lib/mysql

Schritt 3 - GeoLite2 Lizenzschlüssel beantragen

  • Damit wir den IP-Adressen eine reale Adresse zuordnen können, benötigen wir eine entsprechende Datenbank
  • Der Anbieter MAXMIND stellt neben kommerziellen Diensten die Datenbank GeoLite2 kostenlos zur Verfügung
  • Damit wir diesen nutzen können, benötigen wir einen ebenfalls kostenlosen Lizenzschlüssel

Diesen erhältst Du durch folgende Schritte:

  1. Erstelle einen Account für GeoLite2
  2. Generiere einen Lizenzschlüssel

Vergiss nicht, diesen Schlüssel auch in die Variable einzutragen!

Schritt 4 - Service starten

Zum Starten der Docker Container nutzen wir:

docker-compose up -d

Zum Stoppen der Docker Container nutzen wir:

docker-compose down

Den Status der Container können wir mit dem folgenden Befehl sehen:

docker-compose ps
  • Hier sollte bei Status alles auf Up stehen!

Um einen tieferen Einblick zu erhalten, kannst Du die Logs mit folgendem Befehl sehen:

docker-compose logs

Hinweis

Du solltest Deine Shlink Instanz jetzt erreichen können

Wenn Du Deine URL aufrufst und keine Weiterleitung durch die Variable DEFAULT_BASE_URL_REDIRECT festgelegt hast, sollte eine 404 Seite erscheinen

Nun kannst Du per CLI (Konsolenbefehl), Rest API oder Webclient neue Short-Codes also URL-Abkürzungen erstellen, verwalten und dessen Statistik einsehen

Schritt 5 - Konsolenbefehle (Optional)

Durch diesen Konsolenbefehl kannst Du direkt mit Deiner Instanz interagieren

docker-compose exec shlink shlink <Argumente>

Durch das Weglassen von Argumenten bekommst Du eine Hilfe mit allen verfügbaren Befehlen angezeigt

Schritt 6 - Rest API (Optional)

Shlink stellt eine Rest-API zur Verfügung, durch welche Du Deine Instanz neben den Konsolenbefehlen steuern kannst. Dafür wird ein API Key benötigt, welchen Du durch einen Konsolenbefehl erzeugen kannst:

docker-compose exec shlink shlink api-key:generate

Eine Auflistung der API-Endpoints findest Du hier

  • Bestimmt hast Du Dich gefragt, ob Du jetzt immer umständlich alles über die Konsole oder die Rest API steuern musst
    • Auch hier bietet Shlink eine schlaue Hilfe
    • Über den Shlink Webclient kannst Du Short-Codes also URL-Abkürzungen erstellen, verwalten und dessen Statistik einsehen
  • Um diesen zu nutzen, kannst Du einfach die offizielle WebApp verwenden
  • Auch wenn Deine Daten sicher sind, da sie ausschließlich in dem Browser verarbeitet werden, kannst Du auch diesen selber hosten
    • Dazu kannst Du einfach folgenden Teil Deiner docker-compose.yml hinzufügen
    • Beachte dabei, dass Du erneut die Bind-Adresse und den Bind-Port so einstellst, sodass Du den Webclient entweder direkt oder per Reverse Proxy erreichen kannst
  shlink-web-client:
    image: shlinkio/shlink-web-client
    restart: always
    volumes:
      - /opt/shlink/servers.json:/usr/share/nginx/html/servers.json
    ports:
      - <127.0.0.1>:<8081>:80

Hinweis

Falls du die offizielle WebApp verwenden willst und/oder deinen eigenen Webclient durch https sichern willst, musst du deiner Shlink Instanz ebenfalls einen Reverse Proxy mit TLS Termination vorschalten, da du aus Sicherheitsgründen keine http Seiten über https Seiten aufrufen kannst.

Mehr Informationen dazu gibt es hier

Zusammenfassung

Du hast nun eine voll funktionsfähige Shlink Instanz, mit der Du Abkürzungen für Deine URLs erstellen kannst Shlink bietet daneben noch viele weitere praktische Features Gucke Dir dazu einfach die Shlink Dokumentation an oder probiere Dich an dem CLI (Konsolenbefehl), Rest API oder Webclient

Für weitere Hilfe kannst Du

License: MIT
Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue
Try Hetzner Cloud

Get 20€ free credit!

Valid until: 31 December 2024 Valid for: 3 months and only for new customers
Get started
Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more