Jak postawić MinIO na Saplo (własne S3 dla projektów)

MinIO to pamięć obiektowa kompatybilna z API Amazon S3, którą stawiasz na własnym Boxie. Te same biblioteki, ten sam protokół, zero rachunku za transfer i przechowywanie w chmurze publicznej.

Grzegorz Kalmus· ·41 wyświetleń

Amazon S3 jest wygodny, dopóki nie przyjdzie rachunek za transfer danych, bo to właśnie transfer, a nie samo przechowywanie, potrafi zaskoczyć najbardziej. MinIO to open source pamięć obiektowa, która mówi tym samym językiem co S3, czyli tym samym API, więc biblioteka boto3 albo aws-sdk, którą już masz w projekcie, działa bez zmiany ani linijki kodu, poza adresem endpointu. Różnica jest taka, że MinIO stawiasz na własnym Boxie, jednorazowo, i płacisz tylko za Box, bez osobnej faktury za każdy gigabajt transferu. Poniżej krok po kroku, jak postawić MinIO na Saplo.

Dlaczego MinIO zamiast Amazon S3

Amazon S3 ma dwie cechy, które w praktyce bolą najbardziej rosnące projekty:

  • rachunek za transfer danych wychodzących - samo przechowywanie plików jest tanie, ale każdy pobrany plik, każde zdjęcie wyświetlone użytkownikowi, jest liczone osobno i przy większym ruchu potrafi zdominować fakturę,
  • rozliczenie zależne od liczby operacji - listowanie plików, zapisy, odczyty, każda z tych akcji ma swoją stawkę, więc koszt trudno przewidzieć z góry.

MinIO implementuje ten sam protokół S3, więc migracja z jednego na drugie to zwykle zmiana adresu endpointu i kluczy dostępu, a nie przepisywanie kodu aplikacji. Stawiasz go na własnym Boxie, płacisz za sam Box niezależnie od tego, ile razy plik zostanie pobrany, a dane fizycznie zostają na Twojej infrastrukturze.

Wymagania

Żeby postawić MinIO na Saplo, potrzebujesz:

  • Boxa z uruchomionym Dockerem (silnik włącza go automatycznie przy instalacji z katalogu, wymagane jest nesting w kontenerze, co Saplo ma domyślnie),
  • minimum 512 MB RAM wolnego na Boxie i 5 GB miejsca na dysku pod dane, a docelowa ilość zależy od tego, ile plików planujesz trzymać,
  • domeny albo subdomeny *.saploapp.pl w cenie każdego planu, pod którą stanie konsola administracyjna.

MinIO wystawia dwa różne interfejsy, które warto rozróżnić od razu. Pierwszy to konsola webowa, czyli panel z przeglądarką plików, tworzeniem kubełków (bucketów) i zarządzaniem kluczami dostępu, wystawiony pod domeną tak jak każda inna aplikacja z katalogu. Drugi to samo API S3, czyli endpoint, do którego łączy się kod aplikacji przez boto3 albo podobną bibliotekę. Silnik przydziela aplikacji jeden port pod domenę publiczną, więc API S3 działa wyłącznie wewnątrz Boxa, na loopbacku, i nie jest widoczne z zewnątrz.

Instalacja krok po kroku

  1. W panelu Saplo wejdź w Katalog aplikacji i wybierz MinIO (kategoria "Serwer").
  2. Wskaż Box, na którym ma stanąć, i domenę albo subdomenę, pod którą będzie dostępna konsola administracyjna.
  3. Zatwierdź instalację. Silnik stawia kontener Docker z oficjalnym obrazem minio/minio, przygotowuje osobny wolumen na dane, generuje losowe konto administratora i wystawia konsolę pod wskazaną domeną przez nginx z darmowym SSL.
  4. Silnik sprawdza, czy kontener faktycznie wystartował, zanim uzna instalację za zakończoną, więc jeśli obraz się nie uruchomi, zobaczysz błąd zamiast martwej domeny.
  5. Po zakończeniu w katalogu aplikacji na Boxie znajdziesz plik MINIO-SETUP.txt z loginem i wygenerowanym hasłem do konsoli.

Pierwsza konfiguracja

MinIO, tak samo jak Directus czy Vaultwarden, generuje konto administratora automatycznie przy instalacji zamiast prosić o nie w kreatorze.

  1. Zaloguj się do konsoli danymi z pliku MINIO-SETUP.txt i zmień hasło w Identity -> Users, zanim zrobisz cokolwiek innego.
  2. Utwórz pierwszy kubełek (bucket) w zakładce Buckets -> Create Bucket, na przykład osobny dla plików użytkowników i osobny dla backupów.
  3. W Identity -> Service Accounts wygeneruj klucz dostępu (Access Key i Secret Key) dla aplikacji, która ma zapisywać i czytać pliki. Nie używaj do tego konta administratora w kodzie aplikacji.
  4. Endpoint API S3 działa wyłącznie na loopbacku Boxa i nie jest wystawiony publicznie. Jeśli aplikacja korzystająca z MinIO stoi na tym samym Boxie, łączy się przez http://127.0.0.1 na przydzielonym porcie. Dostęp z zewnątrz Boxa, na przykład z własnego komputera albo innego serwera, wymaga tunelu SSH dostępnego od Boxa L wzwyż, albo dodatku własnego portu TCP z katalogu dodatków.

MinIO na Saplo kontra Amazon S3

Amazon S3 MinIO na Saplo
Koszt przechowywanie plus transfer plus operacje, osobno rozliczane w cenie planu Saplo, bez dopłaty za transfer
Gdzie są dane infrastruktura Amazona Twój Box
Kompatybilność API standard S3 ten sam protokół, te same biblioteki (boto3 i inne)
Dostęp do API spoza serwera publiczny endpoint od razu wymaga tunelu SSH (Box L+) albo dodatku portu TCP
Kto administruje Amazon Ty, ale bez ręcznego stawiania serwera

Najczęstsze pytania

Czy muszę zmieniać kod aplikacji, żeby przejść z S3 na MinIO? Zwykle nie. MinIO implementuje ten sam protokół S3, więc zmieniasz adres endpointu, klucz dostępu i sekret w konfiguracji aplikacji, a reszta kodu korzystającego z boto3 czy podobnej biblioteki działa bez zmian.

Dlaczego API S3 nie jest dostępne spoza Boxa od razu? Silnik Saplo wystawia pod domeną publiczną dokładnie jeden port na aplikację, a w przypadku MinIO jest to konsola webowa. API S3 zostaje na loopbacku, więc aplikacje działające na tym samym Boxie łączą się z nim bezpośrednio, a dostęp spoza Boxa wymaga tunelu SSH albo dodatku portu TCP.

Czy mogę mieć więcej niż jeden bucket? Tak, liczba kubełków nie jest ograniczona przez samo MinIO, jedynym limitem jest miejsce na dysku Boxa.

Jak zabezpieczyć dostęp do plików, jeśli aplikacja łączy się z zewnątrz Boxa? Wygeneruj osobny klucz dostępu dla każdej aplikacji w Identity -> Service Accounts i ogranicz go polityką do konkretnego bucketu, zamiast używać konta administratora. Do połączenia spoza Boxa użyj tunelu SSH (Box L i wyżej) albo wykup dodatek własnego portu TCP.

Czy dane w MinIO są automatycznie kopiowane zapasowo? To zależy od wykupionego planu Boxa, backup działa na poziomie całego Boxa, tak samo jak przy innych aplikacjach z katalogu, nie jest to osobna funkcja samego MinIO.

Jeśli masz pytania przy stawianiu MinIO na własnym Boxie albo podłączaniu go do własnej aplikacji, napisz do nas, pomożemy z pierwszą konfiguracją.