Traefik, Docker und Ubuntu für neue Wiki-Seite

Ich wollte mal mit der Zeit mitgehen und eine neues Docker-Projekt auf die Beine stellen. Die klassische Serveradministration (Apache2, PHP, mySQL, etc.) über die Konsole ist mir bekannt. Allerdings läuft man Gefahr sein System mit der Zeit zu überfrachten. Das macht die Administration in Summe nicht einfacher.

Mit Beginn des Cloud-Computings wurde auch das Thema Containerisierung immer heisser. Im Grunde genommen geht es darum die Software in voneinander unabhänigen Containern zu verpacken und ihnen alle Abhängigkeiten mitzugeben, die sie benötigen.

Das bekannteste Containerisierungs-Tool im Umlauf ist schon seit Jahren Docker. Es gibt unzählige Docker-Images für den täglichen Gebrauch. Am einfachsten ist es ein Webserver-Image zum Laufen zu bringen. Normalerweise startet man die Container über docker run auf der Konsole, allerdings ist es unhandlich, wenn man mehrere Parameter mitgeben möchte.

Deshalb arbeitet man mit Docker Compose und der Konfigurationsdatei docker-compose.yml. Hier packt man alles zusammen, was für den Gebrauch notwendig ist und startet das Ganze mit:

docker compose up -d

Im Grunde genommen braucht man für die Seite https://wiki.roth-it-solutions.de zwei Docker-Images:

mediawiki:    
   image: mediawiki
database:
   image: mariadb

Das ist aber nur die halbe Wahrheit, denn es gibt keinen https:// – Schutz für die Webseite. Hierfür braucht man ein drittes Image für einen Reverse-Proxy:

traefik:
   image: traefik:v2.11

Traefik leitet die Anfragen über https:// (Port: 443) an den MediaWiki-Container (Port: 80) weiter und erstellt gleichzeitig das nötige SSL-Zertifikat über Let’s Encrypt aus. Die #1 Regel aus dem OWASP Docker Security Cheatsheet lautet “Do not expose the Docker deamon socket”, deshalb läuft der Zugriff von Traefik auf Docker über den File-Provider.

 - --providers.docker=false
 - --providers.docker.exposedbydefault=false
 - --providers.file.filename=/etc/traefik/proxy-config.toml

Man muss aufpassen mit den Rechten für Docker restriktiv umzugehen, damit man das System nicht kapert. Insgesamt war es eine sehr lehrreiche Erfahrung sich mit der Thematik auseinanderzusetzen. Man lernt unweigerlich vieles über Docker-Sicherheit, -Volumes, -Netzwerke und Server-Ports. Die neue Konfiguration erfolgt unabhängig vom darunter liegenden Ubuntu 22.04 LTS Betriebssystem. Docker und Ubuntu sind erstmal getrennte Welten und lassen sich unabhängig voneinander aktualisieren. Das bedeutet, wie eingangs schon erwähnt, dass das Betriebssystem nicht überfrachtet wird.

Anbei das Wichtigste im Überblick:

  • Docker-Container eigenen sich auch für den produktiven Einsatz
  • Docker Compose mit docker-compose.yml erleichtern die Arbeit wesentlich
  • Laut #1 Regel OWASP Cheatsheet: “do not expose Docker deamon socket”. Heisst: file-provider einsetzen
  • Traefik als Proxy-Server hat sich bewährt
  • Docker Container nicht mit root-Rechten laufen lassen: Sicherheit!
  • Passwörter für mariaDB über secrets übergeben
  • Die ufw-Firewall und Docker vertragen sich nicht, heisst: ip-tables einsetzen
  • Regelmäßige Backups der Docker Volumes ziehen

Hier ein Traefik-Screenshot:

Posted in ServerTags: