Website auf Synology als Docker-Container betreiben

Auf einer Synology DiskStation kann eine Website auch mittels Docker-Hosting innerhalb eines Containers auf der Synology betrieben werden. Wie man vom Dockerfile ein Docker Image erstellt und dieses dann als Docker Container in der Synology betreibt, werden wir in diesem Blogbeitrag zeigen.

Wir werden eine PHP-Applikation hosten - als Datenbank verwenden wir eine MariaDB auf dem Synology-Host (als "MariaDB 10" über das Paket-Zentrum installiert). Folgende Pakete müssen auf der Synology DiskStation installiert sein (Voraussetzungen):

  • DSM (getestet mit 7.1.1)
  • Docker
  • MariaDB 10 + PHPMyAdmin

1. Schritt: Dockerfile mit wkhtmltopdf

Wir verwenden als Base-Image "php:7.4.0-apache-buster" und installieren dann noch einige benötigte Module (pdo, pdo_mysql, mod_rewrite) und wkhtmltopdf, welches von unserer Demo-Applikation benötigt wird.

FROM php:7.4.0-apache-busterRUN apt-get update && apt-get upgrade -yRUN docker-php-ext-install pdo pdo_mysqlRUN a2enmod rewriteRUN apt-get install -y wget xfonts-75dpiRUN apt-get install -y fontconfigRUN apt-get install -y libjpeg62-turboRUN apt-get install -y libx11-6RUN apt-get install -y libxcb1RUN apt-get install -y libxext6RUN apt-get install -y libxrender1RUN apt-get install -y xfonts-baseRUN wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.debRUN dpkg -i wkhtmltox_0.12.6-1.buster_amd64.debRUN cp /usr/local/bin/wkhtmltopdf /usr/bin/RUN cp /usr/local/bin/wkhtmltoimage /usr/bin/

2. Schritt: Docker-Image erstellen

Damit man aus diesem Dockerfile ein Image erstellt, welches dann als Container auf der Synology ausgeführt werden kann, muss zuerst das Image erstellt werden. Dieses Image wird dann in ein Archiv exportiert und auf der Synology das Docker Image importiert.

Dazu werden am Host (nicht auf der Synology) folgende Befehle ausgeführt:

docker build -t various-image:v1 . docker save various-image:v1 | gzip > various_image.tar.gz

3. Schritt: Docker-Image auf Synology importieren

Im nächsten Schritt wird das soeben erstellte Docker-Image auf der Synology importiert. Dazu sind folgende Schritte nötig:

  • Webinterface der Synology DiskStation aufrufen
  • Docker öffnen
  • Image
  • Hinzufügen -> Aus Datei hinzufügen
  • Datei auswählen
Synology - Docker Image importieren
Synology - Docker Image importieren

4. Schritt: Docker-Container erzeugen

Mit dem soeben erstellten Image werden wir nun einen lauffähigen Container erzeugen. Dieser soll wie folgt aufgebaut sein und funktionieren:

  • Lokaler-Port des Containers ist 80, dieser wird auf einen beliebigen (freien Port der Synology) gemapped - zum Beispiel 1905. Über einen Reverse-Proxy der Synology wird dieser Port dann einer bestimmten Domain zugewiesen.
  • Es wird kein eigener Datenbank-Container betrieben, hier wird die Host-Datenbank der Synology verwendet
  • Volumes: Für das "/var/www/html/"-Verzeichnis des Containers wird auf einen freigegebenen Ordner der Synology gemounted. Hier werden dann die Source-Files der Applikation abgelegt bzw. mittels composer installiert

Dazu sind folgende Schritte notwendig:

  • Docker-Applikation auf Synology öffnen
  • Container
  • Erstellen
  • Schritt 1 (Image): Das vorhin importierte Image auswählen
  • Schritt 2 (Netzwerk): Die gewählten Netzwerke verwenden (bridge)
  • Schritt 3 (Allgemeine Einstellungen): Alle Einstellungen deaktiviert lassen
  • Schritt 4 (PORT-Einstellungen): Lokaler Port (beliebigen Port angeben) und Container-Port 80 auswählen - Typ = TCP
  • Schritt 5 (Volume-Einstellungen): Gewünschten Ordner in den Container unter Mount-Pfad "/var/www/html/" mounten
Synology + Docker: Allgemeine Einstellungen
Synology + Docker: Allgemeine Einstellungen
Synology + Docker: PORT Einstellungen
Synology + Docker: PORT Einstellungen
Synology + Docker: Volume Einstellungen (mount)
Synology + Docker: Volume Einstellungen (mount)

5. Schritt: Datenbank

Für die Datenbank wird einfach eine neue Datenbank über PHPMyAdmin (ist ebenfalls als eigenes Paket im Synology Paket-Zentrum verfügbar) samt Benutzer dafür erstellt. Um sich nun in der Web-Applikation auf die Datenbank zu verbinden, werden folgende Einstellungen verwendet:

  • Hostname: IP der Synology (also nicht 127.0.0.1)
  • Port: 3307 (Standard-Port, sofern nicht angepasst)

6. Schritt: Source-Files

Die Source-Files der Datenbank müssen nun auf die Synology kopiert werden (Pfad wurde in Schritt 4 konfiguriert).

7. Schritt: Reverse-Proxy

Damit die Webapplikation unter der gewünschten Domain erreichbar ist, muss (natürlich neben den DNS-Einträgen für die Domain) noch der Reverse-Proxy eingerichtet werden:

  • Öffnen Sie "Systemsteuerung" auf der Synology Disk-Station
  • Anmeldeportal
  • Erweitert
  • Reverse Proxy -> Erstellen
  • Unter Quelle geben Sie die gewünschte Domain ein, zum Beispiel test.vrs.at
  • Unter Ziel geben sie localhost und den in Schritt 4 konfigurierten Port an (zum Beispiel localhost)
Synology - Reverse Proxy für Docker-Container
Synology - Reverse Proxy für Docker-Container

8. Schritt: SSL-Zertifikat

Für die sichere Verbindung wird auch noch ein SSL-Zertifikat installiert:

  • Öffnen Sie wieder die Systemsteuerung auf der Synology Disk-Station
  • Sicherheit
  • Zertifikat
  • Mittels hinzufügen kann ein neues Zertifikat erstellt werden (zum Beispiel Let's Encrypt)
  • Wenn Sie nun auf Einstellungen klicken, können Sie für die Domain das passende Zertifikat auswählen
Synology - Detailansicht Docker-Container
Synology - Detailansicht Docker-Container

Fazit: Website auf Synology mittels Docker betreiben

Nachdem nun alle Schritte durchgeführt wurden, kann die Website im Browser über die beim Reverse-Proxy konfigurierte Domain aufgerufen werden. Damit können leicht Websites und auch andere Anwendungen mittels Docker auf einer Synology gehostet bzw. betrieben werden - gerade auch für interne Applikationen sehr nützlich. Das Docker-Paket der Synology bietet dazu eine gute und ansprechende grafische Oberfläche für die Verwaltung der Docker-Images und Docker-Container - das ist besonders für Benutzer, die im Umgang mit Docker (noch) nicht ganz routiniert sind, ganz nützlich. Vorallem die Übersicht der laufenden Container und Informationen dazu sind besonders praktisch - hier kann man sich auch über "Terminal" direkt eine Befehlszeile innerhalb des Containers öffnen. Zusätzlich kann man auch jederzeit die Ressourcen (CPU, RAM) der Container überwachen.

Quellen / Nützliche Links

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

DDEV-Performance unter Windows verbessern

DDEV-Performance unter Windows verbessern

Bei der Entwicklung unserer Web-Projekte nutzer wir bei varioous DDEV. Einige Entwickler arbeiten bei uns auch mit Windows, wo bei uns bisher die Perf…

DDEV-Port Freigeben (Exposure Port)

DDEV-Port Freigeben (Exposure Port)

In diesem Beitrag zeigen wir, wie man bei DDEV Port's freigeben kann (Exposure Port). Dies kann zum Beispiel nützlich sein, wenn man im Web-Container …

TRAUNER Verlag - Webshop
Trauner TYPO3 Online-Shop - Startseite

TRAUNER Verlag - Webshop

Für den Trauner Verlag aus Linz in Oberösterreich wurde eine neue Website inkl. Online-Shop entwickelt. Viele Enterprise-Features und eine Schnittstel…