Zum Inhalt springen
Kategorien:

Docker-Container mit Portainer verwalten auf Ubuntu 16.04 LTS mit Apache2 als Reverse Proxy

Veröffentlichungsdatum:
Anzahl Kommentare: keine Kommentare

Heute will ich Euch zeigen, wie Ihr Eure Docker Container mit Portainer verwalten könnt. Dazu nutzen wir den Portainer-Container, Apache2 als Reverse Proxy und sichern das ganze mit einem LetEncrypt-ssl-Zertifikat ab.

Vorraussetzungen:
– einen Ubuntu VPS
– LAMP-Stack installiert
– Reverse Proxy Module in Apache2 aktiviert
– Docker installiert
– certbot installiert
– DNS-A-Record für FQDN mit dem wir das Management aufrufen möchten

Sollten Vorraussetzungen fehlen, müssen wir diese natürlich erst noch schaffen.

LAMP-Stack:

sudo apt-get install lamp-server^

Reverse Proxy Module aktivieren:

sudo a2enmod proxy proxy_http proxy_ajp rewrite deflate headers proxy_balancer proxy_connect proxy_html proxy_wstunnel authz_core authn_core setenvif ssl

Docker:
Version aus den offiziellen Paketquellen:

sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

oder direkt von Docker:

sudo curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable docker.service
sudo systemctl start docker.service

Certbot:

sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install python-certbot-apache

Im Anschluss können wir fortfahren und Portainer in Betrieb nehmen.

Step 1: Portainer-Container starten

Mit dem folgenden Befehl starten wir den Container auf unseren Server:

sudo docker run -d -p 9000:9000 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer

Nun prüfen wir noch, ob der Container gestartet wurde:

sudo docker ps

Portainer hört nun auf dem Port 9000.

Step 2: Apache2 vHost anlegen

Wenn der Container läuft, legen wir uns einen vHost an, damit wir die Reverse Proxy Funktionalität nutzen können und im Browser ohne Port-Angabe arbeiten können:

sudo nano /etc/apache2/sites-available/003-portainer.conf

dort fügen wir den folgenden Inhalt ein:

<VirtualHost *:80>

ServerName portainer.deine-domain.tld

</VirtualHost>

Datei speichern, Site aktivieren und Apache2 neu starten:

sudo a2ensite 003-portainer.conf
sudo systemctl restart apache2

Nun wäre Portainer bereits über http://portainer.deine-domain.tld erreichbar. Da wir aber mit Passwort-Eingabe arbeiten, verschlüsseln wir die Verbindung mit SSL.

Dazu nutzen wir Certbot:

sudo certbot --apache

entsprechenden vHost auswählen und am Ende „2“ für „redirect“ auswählen.

Nun müssen wir die soeben erstellte Config noch einmal bearbeiten:

sudo nano /etc/apache2/sites-available/003-portainer-le-ssl.conf

und den folgenden Block nach ServerName eintragen:

# Proxy to Portainer
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:9000/
ProxyPassReverse / http://127.0.0.1:9000/
RequestHeader set X-Forwarded-Proto "https"

ProxyVia Block

<Proxy *>
Require all granted
</Proxy>

# SSL Configuration - uses strong cipher list - these might need to be downgraded if you need to support older browsers/devices
SSLEngine on
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder On

# HSTS (optional)
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"
# Prevent MIME based attacks
Header set X-Content-Type-Options "nosniff"

ErrorLog /var/log/apache2/portainer-error.log
CustomLog /var/log/apache2/portainer-access.log combined

#Proxy to docker container console

<Location /api/websocket/>
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /api/websocket/(.*) ws://127.0.0.1:9000/api/websocket/$1 [P]
</Location>

Abspeichern und Apache2 neu starten:

sudo systemctl restart apache2

Step 3: Portainer konfigurieren

über den Browser unserer Wahl rufen wir https://portainer.deine-domain.tld auf und müssen zuerst ein Passwort für den admin vergeben:

Im nächsten Dialog setzen wir die Einstellung auf „Local“:

betätigen den Button „Connect“ und landen nach kurzer Zeit im Dashboard:

Wenn wir auf „Container“ klicken, können wir uns weitere Infos zu den einzelnen Containern anschauen oder diese neu starten, stoppen etc.:

Container-Details:

Update:

Wenn Ihr Portainer über einen existierenden vHost über einen Unterordner aufrufen wollt (zum Beispiel: https://hostname.deine-domain.tld/portainer/) dann müsst Ihr dieser conf-Datei diesen Block hinzufügen:

<Location /portainer/>
ProxyPass http://127.0.0.1:9000/
ProxyPassReverse http://127.0.0.1:9000/
RequestHeader set X-Forwarded-Proto "https"
</Location>

<Location /portainer/api/websocket/>
ProxyPass http://127.0.0.1:9000/api/websocket/
ProxyPassReverse http://127.0.0.1:9000/api/websocket/
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} Upgrade$ [NC]
RewriteRule /api/websocket/(.*) ws://127.0.0.1:9000/api/websocket/$1 [P]
</Location>

Vergestt aber nicht die Reverse Proxy Module zu aktivieren.

Das war es für heute, viel Spaß beim Ausprobieren 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert