[PL] Własny Amazon S3 na Mikrusie?

📅 2022-01-08  🕑 5min


This article is written in Polish, for the Mikrus project.

Czym jest MinIO?

MinIO to napisany w Go otwartoźródłowy serwer object storage kompatybilny z Amazon S3. Posiada bardzo duże możliwości konfiguracji, a jego instalacja jest dość prosta.

W tym poście, chciałbym opisać jego instalację na Mikrusie

Instalacja

Instalację przeprowadzimy na następującej konfiguracji:

Porty użyte w poradniku

Ta lista powinna pomóc ci uzupełnić pliki konfiguracyjne odpowiednimi portami

Rekordy DNS

Stwórz dwa rekordy:

TypNazwaAdres
CNAMEminiosrvXX.mikr.us
CNAMEconsole.miniosrvXX.mikr.us

Zamień srvXX na adres serwera twojego Mikrusa (np. srv08.mikr.us). Będziesz musiał ogarnąć też certyfikat SSL dla tych dwóch rekordów i umieścić go w /etc/ssl/minio/ (patrz. Konfiguracja reverse proxy);


MinIO jest dostępny jako pakiet Alpine, lecz użyjemy binarki, gdyż po pierwsze, jest to najnowsza wersja (a MinIO jest bardzo często aktualizowany), a po drugie, taki sposób instalacji zaleca producent.

W tym celu, wykonaj następujące polecenia jako root:

apk add curl
curl https://dl.min.io/server/minio/release/linux-amd64/minio -o /usr/bin/minio
chmod +x /usr/bin/minio
addgroup -S minio
adduser -S -D -h /var/lib/minio -s /sbin/nologin -G minio -g minio minio

MinIO nie posiada własnego skryptu OpenRC, więc napisałem swój. Umieść go w /etc/init.d/minio:

#!/sbin/openrc-run
name='MinIO Server'
command=/usr/bin/minio
command_args="server --address $MINIO_ADDR --console-address $MINIO_CONSOLE_ADDR $MINIO_VOLUME"
command_user="minio:minio"
command_background=true
pidfile="/run/${RC_SVCNAME}.pid"
output_log="/var/log/${RC_SVCNAME}.log"

depend() {
    need net
    use logger
}

start_pre() {
    checkpath --file --mode 0600 --owner root:root "/etc/conf.d/${RC_SVCNAME}"
    checkpath --file --mode 0644 --owner minio:minio "/var/log/${RC_SVCNAME}.log"
    checkpath --directory --mode 0700 --owner minio:minio "$MINIO_VOLUME"
}

Nie zapomnij ustawić uprawnień wykonywania:

chmod +x /etc/init.d/minio

Konfiguracja serwera MinIO

Ważne: Upewnij się, że twój Mikrusowy storage jest zamontowany jako /storage.

Stwórz plik /etc/conf.d/minio (jako root) i umieść w nim następującą zawartość:

# ścieżka do całego "środowiska" S3
MINIO_VOLUME="/storage/S3"

# nazwa użytkownika administratora
export MINIO_ROOT_USER=lemonsh
# hasło administratora
export MINIO_ROOT_PASSWORD=WysmieniteHaslo

# porty TCP, zmień jeśli potrzebujesz
MINIO_ADDR=:9000 # główny port
MINIO_CONSOLE_ADDR=:9001 # MinIO Console

# ustaw tutaj adres za pomocą którego można dostać się do MinIO Console z zewnątrz
export MINIO_BROWSER_REDIRECT_URL=https://console.minio.example.com:12345

# nie powinieneś/aś musieć tego zmieniać
export MINIO_SERVER_URL=http://127.0.0.1$MINIO_ADDR

Zmień odpowiednie wartości zgodnie z ich opisem w komentarzach.

Konfiguracja reverse proxy

MinIO posiada swój własny webowy panel kontrolny zwany MinIO Console, który wystawiony jest przez port inny od głównego. Zatem, MinIO w zasadzie wystawia dwie osobne usługi HTTP na osobnych portach. Aby wystawić je do internetu, możemy użyć nginx.

Nie będę tutaj opisywał całej konfiguracji samego nginxa, a jedynie samą część configu która będzie ci potrzebna:

server {
    # zamień 12345 na port zewnętrzny (patrz "Porty użyte w poradniku")
    listen 12345 ssl; 
    # zamień example.com na swoją domenę
    server_name minio.example.com;
    
    # ustaw tutaj ścieżki do certyfikatu SSL
    ssl_certificate /etc/ssl/minio/public.crt;
    ssl_certificate_key /etc/ssl/minio/private.key;

    # opcjonalnie, tu możesz ustawić maksymalny rozmiar pliku, np. 100m
    client_max_body_size 0;

    ignore_invalid_headers off;
    proxy_buffering off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;

        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;

        proxy_pass http://127.0.0.1:9000; # zmień 9000 na port *główny* (jeśli się różni)
    }
}

server {
    # zamień 12345 na port zewnętrzny (patrz "Porty użyte w poradniku")
    listen 12345 ssl; 
    # zamień example.com na swoją domenę
    server_name console.minio.example.com;
    
    # ustaw tutaj ścieżki do certyfikatu SSL
    ssl_certificate /etc/ssl/minio/public.crt;
    ssl_certificate_key /etc/ssl/minio/private.key;

    # opcjonalnie, tu możesz ustawić maksymalny rozmiar pliku, np. 100m
    client_max_body_size 0;

    ignore_invalid_headers off;
    proxy_buffering off;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;

        proxy_connect_timeout 300;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;

        proxy_pass http://127.0.0.1:9001; # zmień 9001 na port *konsoli* (jeśli się różni)
    }
}

Zmień odpowiednie wartości zgodnie z ich opisem w komentarzach.

Nie zapomnij zrestartować nginxa:

service nginx restart

E, działa to?

Upewnij się, że konfiguracja jest prawidłowa i uruchom MinIO:

service minio start

Jeśli nie pojawią się żadne błędy, wejdź na adres https://console.minio.twojadomena.pl:12345. Jeśli instalacja przebiegła bezbłędnie, powinieneś zobaczyć interfejs logowania do MinIO Console. Użyj wcześniej ustalonych poświadczeń (Konfiguracja serwera MinIO).

Działa?


↑ top ↑