Hier auf dieser Seite wird es um meine Synology Server gehen, hauptsächlich in Verbindung mit Docker Containern.

Ich plane einige Videos zu machen und diese auf YouTube zu veröffentlichen.

Da dadurch die Seite sehr gross werden würde habe ich alles in praktischen “Spoiler” Kästchen verfrachtet. Ein Klick auf den Titel genügt und Sie bekommen das Video und einige Details dazu zu lesen.

Um die Container zu erstellen benötigen Sie einen Docker Erstellungscode (oder wie auch immer man das nennen möchte). Ich habe diese auf YouTube in der Beschreibung aufgelistet genau so wie ich sie hier drunter auflisten werde. Die Quellen stehen auf YouTube und ich werde sie auch noch mal hier erwähnen da die Quellen eigentlich nur die Original Webseiten der Container-Ersteller sind.

Es könnte allerdings vorkommen, dass mal Links nicht mehr direkt funktionieren da sie für Version X geschrieben wurden und mit der Zeit dann obsolet sind.

Die Dockercontainererstellungscodes finden Sie hier unten, wobei der obere immer der aus dem letzten Video ist.

WICHTIG: Falls ich irgendwo Infos vergessen haben sollte teilt es mir bitte umgehend über das Kontaktformular mit. Danke.

Kavita ist ein Comic Book Reader – Das ganze relativ simpel und sauber gehalten. Ich hatte ein paar Problemchen diese werden aber im Video erläutert.

docker run -d --name=kavita \
-p 5000:5000 \
-e PUID=1038 \
-e PGID=100 \
-v /volume1/docker/Kavita:/kavita/config \
-v /volume1/Comics:/manga \
--restart always \
kizaing/kavita

SMTP Server

docker run --name kavita-email -p 5003:5003 
-e SMTP_HOST="smtp.office365.com" 
-e SMTP_PORT="587" 
-e SMTP_USER="frank@datateam.lu" 
-e SMTP_PASS="xyungelöst" 
-e SEND_ADDR="frank@datateam.lu" 
-e DISP_NAME="Frank Schroeder (Anime)" 
-d kizaing/kavitaemail:latest

Bedenkt dass dies nur ein Beispiel ist und mein Passwort nicht enthalten ist – somit wird das ganze so wie es da steht nutzlos für euch sein sondern einfach nur eine kleine Anregung wie man es lösen könnte.

Als Zusatz kann ich noch den Comictagger empfehlen um die Comics richtig zu taggen.
Diesen habe ich aber nicht im Video gezeigt und erklärt da er eigentlich selbsterklärend ist.

Benutzte Links

Random Number (für eine Portnummer per Zufallsgenerator)

your_spotify ist eine Web App wo Ihnen Statistiken zu Ihrer Spotify Nutzung angzeigt werden.

Mehr erfahrt Ihr im Video.

Die Installation geht in 3 Schritten vor:

  1. Datenbank
  2. Server
  3. Web Client

docker run -d --name mongo \
-v /volume1/docker/your_spotify_db:/data/db \
--restart always \
mongo:4.4.13

Hier solltet Ihr bei Synology aufpassen eine 4.4.x Vesion von der Mongo DB zu nutzen da die 5.x nicht kompatibel mit der CPU des Gerätes ist.

docker run -d --name=your_spotify_server \
--link mongo \
-p 33424:8080 \
-e API_ENDPOINT=https://dyndnsserverdomain/api \
-e CLIENT_ENDPOINT=https://dyndnsserverdomain \
-e SPOTIFY_PUBLIC=eurepublicid \
-e SPOTIFY_SECRET=eurepublicidsecret \
-e CORS=all \
--restart always \
yooooomi/your_spotify_server

API und CLIENT Endpoint müsst Ihr euren Einstellungen entsprechend ausfüllen.

Genau so müsst Ihr eure Spotify PUBLIC und SECRET Daten eures Developer Kontos entnehmen. Links dazu etwas unten.

Beim ausfüllen der Daten in der Konfiguration auf der Spotify Seite ist es wichtig die richtige Redirect URI auszufüllen.

https://dyndnsserverdomain/api/oauth/spotify/callback
docker run -d --name=your_spotify_client \
-p 17812:3000 \
-e API_ENDPOINT=https://dyndnsserverdomain/api \
yooooomi/your_spotify_client

Bitte achtet darauf auch hier wieder euren API Endpoint korrekt auszufüllen.

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name spotify.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    # enable for ldap auth, fill in ldap details in ldap.conf
    #include /config/nginx/ldap.conf;

    # enable for Authelia
    #include /config/nginx/authelia-server.conf;


	location /api/ {
        # enable the next two lines for http auth
        auth_basic "Restricted";
        auth_basic_user_file /config/nginx/.htpasswd;

        # enable the next two lines for ldap auth
        #auth_request /auth;
        #error_page 401 =200 /ldaplogin;

        # enable for Authelia
        #include /config/nginx/authelia-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
		proxy_pass http://192.168.178.20:33424/;
	}

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable the next two lines for ldap auth
        #auth_request /auth;
        #error_page 401 =200 /ldaplogin;

        # enable for Authelia
        #include /config/nginx/authelia-location.conf;

        include /config/nginx/proxy.conf;
        include /config/nginx/resolver.conf;
        set $upstream_app holodeck;
        set $upstream_port 17812;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;		
		#proxy_pass http://192.168.178.20:17812/;

    }
	

	
}

SWAG Beispiel conf Datei für your_spotify.

Benutzte Links

TZ – Timezone

Random Number (für eine Portnummer per Zufallsgenerator)

your_spotify @GitHub

Spotify Developer Dashboard (hier muss eine Applikation erstellt werden um einen API Schlüssel zu bekommen)

Spotify Account Privacy (um den vergangenen Verlauf anzufragen)

SWAG ist eine Reverse Proxy Software basierend auf NGINX. Ich habe versucht das gleiche mit Traefik hinzubekommen doch ich bin gescheitert – Auch wenn es irgendwie funktioniert hat, haben viele Seiten einfach fehlende Informationen gehabt und waren somit nutzlos.
SWAG hat sehr viele fertige Konfigurationsdateien für häufig genutzte Programme integriert und ist somit sehr leicht zu handhaben.
Ausserderm kann man sich SSL Zertifikate von Let’s Encrypt automatisch erstellen lassen und auch fail2ban ist mit an Bord.

Allerdings hat man auf einem Synology ein grosses Problem, und zwar Port 80 und 443. Obwohl die DSM Software auf einem anderem Port läuft wurden diese beiden Ports blockiert und umgeleitet.

Um dieses zu umgehen gibt es ein kleinen Script den ich euch hier angebe. Dieser wird über eine SSH Session ausgeführt und schaltet Port 80 und 443 wieder frei.

Wa gibt im Netz sehr viele Anleitung dazu doch habe ich ein Script auf Github gefunden was bei mir dann auch geklappt hat – Vieles vorhin hatte nicht geklappt. Den Link setze ich wie immer unten in die Liste der verwendeten Links.

#! /bin/bash

# NEWLY ADDED BACKUP FUNCTIONALITY IS NOT FULLY TESTED YET, USE WITH CARE, ESPECIALLY DELETION
# Developed for DSM 6 - 7.0.1. Not tested on other versions.
# Steps to install
# Save this script in one of your shares
# Edit it according to your requirements
# Backup /usr/syno/share/nginx/ as follows:
# # cd /usr/syno/share/
# # tar cvf ~/nginx.tar nginx
# Run this script as root
# Reboot and ensure everything is still working
# If not, restore the backup and post a comment on this script's gist page
# If it did, schedule it to run as root at boot
#   through Control Panel -> Task Scheduler

HTTP_PORT=81
HTTPS_PORT=444

BACKUP_FILES=true # change to false to disable backups
BACKUP_DIR=/volume1/apps/free_ports/backup
DELETE_OLD_BACKUPS=false # change to true to automatically delete old backups.
KEEP_BACKUP_DAYS=30

DATE=$(date +%Y-%m-%d-%H-%M-%S)
CURRENT_BACKUP_DIR="$BACKUP_DIR/$DATE"

if [ "$BACKUP_FILES" == "true" ]; then
  mkdir -p "$CURRENT_BACKUP_DIR"
  cp /usr/syno/share/nginx/*.mustache "$CURRENT_BACKUP_DIR"
fi

if [ "$DELETE_OLD_BACKUPS" == "true" ]; then
  find "$BACKUP_DIR/" -type d -mtime +$KEEP_BACKUP_DAYS -exec rm -r {} \;
fi

sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)80\([^0-9]\)/\1$HTTP_PORT\2/" /usr/syno/share/nginx/*.mustache
sed -i "s/^\([ \t]\+listen[ \t]\+[]:[]*\)443\([^0-9]\)/\1$HTTPS_PORT\2/" /usr/syno/share/nginx/*.mustache

if which synoservicecfg; then
  synoservicecfg --restart nginx
else
  synosystemctl restart nginx
fi

echo "Made these changes:"

diff /usr/syno/share/nginx/ $CURRENT_BACKUP_DIR 2>&1 | tee $CURRENT_BACKUP_DIR/changes.log

Zum ausführen des Scriptes wechselt bitte in das Verzeichnis wo Ihr es erstellt habt und führt es wie folgt aus:

sudo ./free_ports.sh

Warum dieser Script? Nunja, wie gesagt er funktioniert, und vor allem erstellt er ein Backup aller veränderten Dateien und gibt einem am Schluss auch an was er geändert hat.
Außerdem könnt Ihr entscheiden welcher Port anstelle von 80 und 443 genutzt werden soll um diese dann frei zu machen.

Diesen Script speichert ihr euch am Besten in einem Share ab unter zB dem Namen free_ports.sh und führt ihn in einer SSH Session aus (sudo nicht vergessen).

Als SSH Client nutze ich unter Windows zB. Bitvise – es gibt aber unzählige weitere.

Der Script sieht vor ihn beim Start immer auszuführen – Allerdings war das bei mir bis dato noch nicht nötig (Mein Server startet über Nacht täglich neu – also schaltet 6 Stunden in der Nacht ab).

docker run -d \
  --name=swag \
  --cap-add=NET_ADMIN \
  -e PUID=1027 \
  -e PGID=100 \
  -e TZ=Europe/Luxembourg \
  -e URL=my.ddns.server \
  -e VALIDATION=http \
  -e EMAIL=euremailadresse \  
  -e SUBDOMAINS=heimdall, \
  -p 443:443 \
  -p 80:80 \
  -v /volume1/docker/Swag:/config \
  --restart unless-stopped \
  linuxserver/swag

Denkt bitte daran unter URL euer DynDNS Domain oder ähnliches einzugeben genau so wie eine korrekte E-Mail Adresse. Desweiteren immer die korrekten IDs angeben zwecks Ordner Rechten.

Zur Erstellung einer .htpasswd Datei nutzt folgenden Befehl:

sudo htpasswd -c /volume1/docker/Swag/nginx/.htpasswd newuser

Oder für einen zusätzlichen Nutzer:

sudo htpasswd /volume1/docker/Swag/nginx/.htpasswd newuser2

Benutzte Links

TZ – Timezone

Random Number (für eine Portnummer per Zufallsgenerator)

SWAG @DockerHub

Free_Ports Script @GitHub

Bitvise SSH Client

SWAG Reverse Proxy Configurations @GitHub (read the readme.md on this page!)

docker run -d \
  --name=heimdall \
  -e PUID=1027 \
  -e PGID=100 \
  -e TZ=Europe/Luxembourg \
  -p 40979:80 \
  -p 9039:443 \
  -v /volume1/docker/Heimdall:/config \
  --restart always \
  lscr.io/linuxserver/heimdall

Ich habe mal Flame in der Zeit genutzt und habe nach einer besseren Alternative gesucht und ich denke ich habe sie in Heimdall gefunden 🙂

Benutzte Links

TZ – Timezone

Random Number (für eine Portnummer per Zufallsgenerator)

Heimdall

Heimdall @LinuxServer.io

Heimdall @GitHub

docker run -d --name=calibre-web \
-p 8083:8083 \
-e PUID=1027 \
-e PGID=100 \
-e TZ=Europe/Luxembourg \
-e DOCKER_MODS=linuxserver/calibre-web:calibre \
-e OAUTHLIB_RELAX_TOKEN_SCOPE=1 \
-v /volume1/docker/CalibreWeb:/config \
-v /volume1/E-Books.local:/e-books \
-v /volume1/SSL:/SSL:ro \
--restart always \
lscr.io/linuxserver/calibre-web

Standard Benutzer: admin
Standard Passwort: admin123

Calibre-Web ist eine Web Interface für Calibre, mit denen Sie ihre E-Book-Sammlung verwalten können.

Sie können damit durch ihre Bücher stöbern, diese direkt über den Browser lesen oder auf eines ihrer Geräte, idealerweise E-Book Reader, herunterladen wie auch, falls Sie es aktiviert haben, direkt E-Books an ihren Kindle versenden.

Benutzte Links

TZ – Timezone

Random Number (für eine Portnummer per Zufallsgenerator)

Calibre-Web @LinuxServer.io

Calibre-Web @GitHub

docker run -d --name=calibre \
-p 20118:8080 \
-p 43797:8081 \
-e PUID=1027 \
-e PGID=100 \
-e TZ=Europe/Luxembourg \
-e PASSWORD=calibrepw \
-v /volume1/docker/Calibre:/config \
-v /volume1/E-Books.local:/e-books \
-v /volume1/SSL:/SSL:ro \
--restart always \
lscr.io/linuxserver/calibre

Bitte denken Sie daran, euer eigenes Passwort anstelle von calibrepw zu schreiben. Der Standard Login Nutzer ist abc. Passen Sie auch auf, dass Ihr eure eigene User ID nehmen und nicht, die ich als Beispiel hier angebe.

Calibre ist ein freies Programmpaket zur Verarbeitung, Konvertierung und Verwaltung von E-Books für Linux, macOS und Windows.

TZ – Timezone

Random Number (für eine Portnummer per Zufallsgenerator)

Dokumentation zum Calibre Docker Container

Calibre

Heute gibt es eine kleine Stellungnahme zu meinen Videos da mich da einiges doch sehr aufgeregt und wütend gemacht hat.

Ausserdem gehe ich auf SSL ein und der Schluss ist nicht der Schluss, denn ich musste noch etwas anhängen lol 🙂

SSL Converter (Seite öfters lahm – Also bitte Geduld 🙂 )

Docker Images – Beispielliste

docker run -d --name=portainer \
-p 8000:8000 \
-p 9000:9000 \
-v /volume1/docker/docker.sock:/var/run/docker.sock \
-v /volume1/docker/Portainer:/data \
--restart=always \
portainer/portainer-ce

Portainer ist ein Open-Source-Tool für die Verwaltung von Containern, das es erspart, Codes schreiben zu müssen. Hierfür bietet Portainer für alles, was über eine Docker-Kommandozeile realisiert werden kann, eine grafische Benutzeroberfläche.

Portainer kann ausserdem mit Passwort geschützt werden und man kann multiple Nutzer und/oder Rollen verteilen.

Portainer Community Edition Dokumentation

docker run -d --name=watchtower \
-v /volume1/docker/docker.sock:/var/run/docker.sock \
--restart=always \
containrrr/watchtower --cleanup --include-stopped --include-restarting --interval 21600

Watchtower aktualisiert Ihre Container automatisch ohne Nachfrage. Für manche ist das sehr praktisch für Andere, die permanent mit einem Container arbeiten müssen eher weniger.

Deshalb gibt es auch eine Möglichkeit Watchtower immer manuel auszuführen anstelle von einem Automatismus. Diese Optionen finden Sie alle in der Dokumentation.

Hier ein Beispiel für das manuelle Update von Calibre:

docker run --rm \
-v /volume1/docker/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once calibre

docker run –rm erstellt den Container Watchtower, führt ihn aus und wenn dieser fertig ist, wird er wieder automatisch gelöscht.

Symbolic Link erstellen für docker.sock

ln -s /var/run/docker.sock /volume1/docker/docker.sock

Ich erstelle diesen symbolischen Link, da ich Probleme mit manchen Container hatte zwecks Zugriff auf docker.sock. Als ich diese so verlinkte, hatten diese Container keine Probleme mehr und liefen tadellos.

Watchtower Dokumentation

Synology DSM basiert eigentlich auf einem simplen Linux System und daher sind auch die Standardbefehle dort nutzbar. Deshalb bekommt man dank dem Befehl ID ganz einfach die IDs heraus die man für viele Container benötigen wird.