DockerLAMPVPS

Bereitstellung minio-S3-Storage hinter Apache2-Reverse-Proxy auf Ubuntu 18.04 mit docker

Heute wollen wir unseren eigenen S3 Storage mit minio hinter einem Apache2-https-proxy über Docker bereitstellen. Dieses Howto funktioniert sowohl mit Ubuntu 16.04 als auch mit 18.04.

Voraussetzungen:
– einen Ubuntu VPS
– LAMP stack installiert
– Apache2 Reverse Proxy Module aktiviert
– Docker installiert
– certbot installiert
– DNS-A record für unseren Apache2-vHost

Wenn Voraussetzungen fehlen bitte nachholen:

LAMP stack:

 sudo apt-get install lamp-server^

Aktivieren der reverse proxy module:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_ajp
sudo a2enmod rewrite
sudo a2enmod deflate
sudo a2enmod headers
sudo a2enmod proxy_balancer
sudo a2enmod proxy_connect
sudo a2enmod proxy_html

Docker:
Version aus den 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 Anschluß können wir fortfahren:

Step 1: Create Apache2 vHost

Als ersten Schritt legen wir den Apache-vHost für die Reverse-Proxy-Funktion an:

sudo nano /etc/apache2/sites-available/005-minio.conf

und fügen erst einmal den folgenden Inhalt ein:

<VirtualHost *:80>

ServerName s3.your-domain.tld

</VirtualHost>

conf speichern, Seite aktivieren und den Apache2 neu starten:

sudo a2ensite 005-minio.conf
sudo systemctl restart apache2

Mit Certbot lassen wir uns nun ein Zertifikat generieren:

sudo certbot --apache

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

Danach bearbeiten wir die soeben erstellte Konfiguration noch einmal:

sudo nano /etc/apache2/sites-available/005-minio-le-ssl.conf

und fügen den unteren Inhalt zwischen den VirtualHost-Block:

# Proxy to minio
ProxyPreserveHost On
ProxyPass / http://0.0.0.0:32768/
ProxyPassReverse / http://0.0.0.0:32768/
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/s3.your-domain.tld-error.log
CustomLog /var/log/apache2/s3.your-domain.tld-access.log combined

nun Apache2 noch einmal neu starten:

sudo systemctl restart apache2

Nach dem Neustart sind wir fertig und können zum nächsten Step wechseln.

Step 2: Deploy minio

Um unsere Daten persistent zu machen, legen wir zuerst zwei Ordner in unserem Filesystem an, die wir dann an den minio-Container mounten:

sudo mkdir /s3data
sudo mkdir /miniocfg

Danach können wir mit dem ausrollen des Containers beginnen:

sudo docker run -d -p 32768:9000 --name minio --restart=always -v /s3data:/data -v /miniocfg:/root/.minio minio/minio server /data

Beim Starten des Containers werden unsere Zugangsdaten (Access-Key und Secret-Key) generiert, die wir uns erst einmal anzeigen lassen müssen:

sudo docker logs minio

Step 3: Create Bucket

In diesem Step legen wir uns unseren ersten Bucket an, dazu rufen wir im Browser unsere Domain auf und melden uns mit den Zugangsdaten an:

Nach dem Anmelden können wir unten rechts (+) Buckets anlegen und diese in entprechenden Anwendungen, z.B. in Plesk als Backup-Ziel, External Storage für Nextcloud (Achtung hier existiert ein BUG), nutzen.

Für heute soll es das gewesen sein und viel Spaß beim Ausprobieren 😉

Feedback und Teilen wie immer erwünscht…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.