MinIO: Pierwsze kroki

Jak rozpocząć korzystanie z MinIO do przechowywania obiektów zgodnych z S3

👋 Witamy w dokumentacji Stackhero!

Stackhero oferuje gotowe do użycia rozwiązanie MinIO Object Storage, które zapewnia wiele korzyści, w tym:

  • Nieograniczone transfery.
  • Proste, przewidywalne i przejrzyste ceny.
  • Dostosowywalna nazwa domeny zabezpieczona HTTPS (na przykład, https://object-storage.twoja-firma.com).
  • Bezproblemowe aktualizacje za jednym kliknięciem.
  • Optymalna wydajność i solidne zabezpieczenia dzięki prywatnej i dedykowanej VM.
  • Dostępne w 🇪🇺 Europie i 🇺🇸 USA.

Oszczędzaj czas i upraszczaj swoje życie: wystarczy 5 minut, aby wypróbować rozwiązanie hostingowe MinIO Object Storage Stackhero!

MinIO to usługa przechowywania obiektów, która implementuje protokół Amazon S3. Każdy klient zgodny z Amazon S3 może połączyć się z MinIO i bezproblemowo współpracować z Twoim magazynem obiektów. Biblioteka klienta Amazon S3 jest dostępna dla niemal każdego głównego języka programowania, w tym Ruby, Node.js, Java, Python, Clojure i Erlang.

Zalecamy korzystanie z SDK MinIO do łączenia się z magazynem obiektów. Pełną listę dostępnych SDK można znaleźć w oficjalnej dokumentacji MinIO.

Alternatywnie, można użyć MinIO CLI. Jest szczególnie przydatne do zarządzania dużymi plikami bezpośrednio z terminala. Szczegółowe instrukcje dotyczące korzystania z MinIO CLI są dostępne w oficjalnej dokumentacji MinIO CLI.

Twoja instancja Stackhero for MinIO domyślnie zawiera webowy interfejs MinIO Console. Do bardziej zaawansowanych zadań można wybrać użycie MinIO CLI.

Najprostszym sposobem na wypróbowanie MinIO CLI jest uruchomienie jego kontenera Docker. Wykonaj następujące kroki:

  1. Uruchom kontener:

    docker run -it --entrypoint=/bin/sh minio/mc
    
  2. Wewnątrz kontenera dodaj swój serwer za pomocą następującego polecenia (odpowiednio zastąp wartości zastępcze):

    mc alias set minio https://<XXXXXX>.stackhero-network.com <ROOT_ACCESS_KEY> <MINIO_ROOT_SECRET_KEY>
    
  3. Utwórz bucket o nazwie "test", aby zweryfikować konfigurację:

    mc mb minio/test
    
  4. Wyświetl listę swoich bucketów:

    mc ls minio
    

Dodatkowe polecenia MinIO CLI można zobaczyć, uruchamiając mc --help.

Najpierw zainstaluj gem AWS SDK:

gem install aws-sdk
bundle install

Poniżej znajduje się prosty przykład pokazujący, jak współpracować z MinIO za pomocą AWS SDK w Ruby:

require 'aws-sdk'

Aws.config.update(
  endpoint: 'https://<XXXXXX>.stackhero-network.com',
  access_key_id: 'YOUR_ACCESS_KEY',
  secret_access_key: 'YOUR_SECRET_KEY',
  force_path_style: true,
  region: 'us-east-1'
)

rubys3_client = Aws::S3::Client.new

# operacja put_object
rubys3_client.put_object(
  key: 'testobject',
  body: 'Hello from MinIO!',
  bucket: 'testbucket',
  content_type: 'text/plain'
)

# operacja get_object
rubys3_client.get_object(
  bucket: 'testbucket',
  key: 'testobject',
  response_target: 'download_testobject'
)

print "Downloaded 'testobject' as 'download_testobject'."

Więcej szczegółów można znaleźć w dokumentacji Ruby MinIO.

Istnieją dwa główne sposoby łączenia aplikacji Python z MinIO.

Najpierw zainstaluj pakiet AWS SDK (boto3):

pip install boto3
pip freeze > requirements.txt

Poniższy przykład pokazuje, jak połączyć się z MinIO za pomocą boto3:

#!/usr/bin/env python
import os
import boto3
from botocore.client import Config

s3 = boto3.resource('s3',
                    endpoint_url='https://<XXXXXX>.stackhero-network.com',
                    aws_access_key_id='YOUR_ACCESS_KEY',
                    aws_secret_access_key='YOUR_SECRET_KEY',
                    config=Config(signature_version='s3v4'),
                    region_name='us-east-1')

# Prześlij lokalny plik '/home/john/piano.mp3' do bucketu 'songs' z nazwą obiektu 'piano.mp3'
s3.Bucket('songs').upload_file('/home/john/piano.mp3', 'piano.mp3')

# Pobierz obiekt 'piano.mp3' z bucketu 'songs' i zapisz go lokalnie jako '/tmp/classical.mp3'
s3.Bucket('songs').download_file('piano.mp3', '/tmp/classical.mp3')

print("'piano.mp3' downloaded as 'classical.mp3'.")

Więcej szczegółów można znaleźć w dokumentacji Python MinIO.

Alternatywnie, można użyć SDK MinIO dla Python. Najpierw zainstaluj pakiet MinIO:

pip install minio
pip freeze > requirements.txt

Poniżej znajduje się przykład pokazujący, jak połączyć się z MinIO za pomocą SDK MinIO:

#!/usr/bin/env python
from minio import Minio
from minio.error import S3Error

def main():
  # Utwórz klienta dla swojego serwera MinIO, używając kluczy dostępu i sekretu
  client = Minio(
    endpoint='<XXXXXX>.stackhero-network.com:443',
    secure=True,
    access_key='YOUR_ACCESS_KEY',
    secret_key='YOUR_SECRET_KEY'
  )

  # Sprawdź, czy bucket 'asiatrip' istnieje, i utwórz go, jeśli nie istnieje
  found = client.bucket_exists("asiatrip")
  if not found:
    client.make_bucket("asiatrip")
  else:
    print("Bucket 'asiatrip' already exists")

  # Prześlij '/home/user/Photos/asiaphotos.zip' jako 'asiaphotos-2015.zip' do bucketu 'asiatrip'
  client.fput_object(
    "asiatrip", "asiaphotos-2015.zip", "/home/user/Photos/asiaphotos.zip"
  )
  print(
    "'/home/user/Photos/asiaphotos.zip' has been successfully uploaded as "
    "object 'asiaphotos-2015.zip' to bucket 'asiatrip'."
  )


if __name__ == "__main__":
  try:
    main()
  except S3Error as exc:
    print("An error occurred.", exc)

Więcej informacji można znaleźć w dokumentacji SDK Python MinIO.

Aby połączyć PHP z MinIO, najpierw zainstaluj pakiet AWS SDK dla PHP:

composer require aws/aws-sdk-php

Poniższy przykład pokazuje, jak połączyć się z MinIO z PHP za pomocą AWS SDK:

<?php

// Dołącz SDK, używając autoloadera Composer
date_default_timezone_set('America/Los_Angeles');
require 'vendor/autoload.php';

$s3 = new Aws\S3\S3Client([
  'version' => 'latest',
  'region'  => 'us-east-1',
  'endpoint' => 'https://<XXXXXX>.stackhero-network.com',
  'use_path_style_endpoint' => true,
  'credentials' => [
    'key'    => 'YOUR_ACCESS_KEY',
    'secret' => 'YOUR_SECRET_KEY'
  ],
]);

// Wyślij żądanie PutObject i uzyskaj wynik.
$insert = $s3->putObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'Body'   => 'Hello from MinIO!'
]);

// Pobierz zawartość obiektu.
$retrieve = $s3->getObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'SaveAs' => 'testkey_local'
]);

// Wyświetl ciało pobranego wyniku.
echo $retrieve['Body'];

Istnieją dwie opcje łączenia aplikacji Go z MinIO.

Najpierw zainstaluj pakiety AWS SDK dla Go:

go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config

Poniżej znajduje się przykład, jak połączyć się z MinIO z Go za pomocą AWS SDK:

package main

import (
  "fmt"
  "os"
  "strings"

  "github.com/aws/aws-sdk-go/aws"
  "github.com/aws/aws-sdk-go/aws/credentials"
  "github.com/aws/aws-sdk-go/aws/session"
  "github.com/aws/aws-sdk-go/service/s3"
  "github.com/aws/aws-sdk-go/service/s3/s3manager"
)

func main() {
  bucket := aws.String("newbucket")
  key := aws.String("testobject")

  // Skonfiguruj do użycia serwera MinIO
  s3Config := &aws.Config{
    Credentials:      credentials.NewStaticCredentials("YOUR_ACCESS_KEY", "YOUR_SECRET_KEY", ""),
    Endpoint:         aws.String("https://<XXXXXX>.stackhero-network.com"),
    Region:           aws.String("us-east-1"),
    DisableSSL:       aws.Bool(false),
    S3ForcePathStyle: aws.Bool(true),
  }
  newSession := session.New(s3Config)

  s3Client := s3.New(newSession)

  cparams := &s3.CreateBucketInput{
    Bucket: bucket,
  }

  // Utwórz nowy bucket
  _, err := s3Client.CreateBucket(cparams)
  if err != nil {
    fmt.Println(err.Error())
    return
  }

  // Prześlij nowy obiekt z ciągiem "Hello from MinIO!"
  _, err = s3Client.PutObject(&s3.PutObjectInput{
    Body:   strings.NewReader("Hello from MinIO!"),
    Bucket: bucket,
    Key:    key,
  })
  if err != nil {
    fmt.Printf("Failed to upload data to %s/%s, %s\n", *bucket, *key, err.Error())
    return
  }
  fmt.Printf("Successfully created bucket %s and uploaded data with key %s\n", *bucket, *key)

  // Pobierz nasz obiekt i zapisz go lokalnie
  file, err := os.Create("testobject_local")
  if err != nil {
    fmt.Println("Failed to create file", err)
    return
  }
  defer file.Close()

  downloader := s3manager.NewDownloader(newSession)
  numBytes, err := downloader.Download(file,
    &s3.GetObjectInput{
      Bucket: bucket,
      Key:    key,
    })
  if err != nil {
    fmt.Println("Failed to download file", err)
    return
  }
  fmt.Println("Downloaded file", file.Name(), numBytes, "bytes")
}

Więcej informacji można znaleźć w dokumentacji Go MinIO.

Aby użyć SDK MinIO dla Go, zainstaluj następujący pakiet:

GO111MODULE=on go get github.com/minio/minio-go/v7

Poniżej znajduje się przykład pokazujący, jak połączyć się z MinIO za pomocą SDK MinIO dla Go:

package main

import (
  "log"

  "github.com/minio/minio-go/v7"
  "github.com/minio/minio-go/v7/pkg/credentials"
)

func main() {
  endpoint := "<XXXXXX>.stackhero-network.com"
  accessKeyID := "YOUR_ACCESS_KEY"
  secretAccessKey := "YOUR_SECRET_KEY"
  useSSL := true

  // Zainicjuj klienta MinIO
  minioClient, err := minio.New(endpoint, &minio.Options{
    Creds:  credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
    Secure: useSSL,
  })
  if err != nil {
    log.Fatalln(err)
  }

  log.Printf("%#v\n", minioClient) // minioClient jest teraz skonfigurowany
}

Więcej informacji można znaleźć w dokumentacji SDK Go MinIO.

Istnieją dwie metody łączenia aplikacji Node.js z MinIO.

Najpierw zainstaluj pakiet AWS SDK dla Node.js:

npm install aws-sdk

Poniżej znajduje się przykład pokazujący, jak połączyć się z MinIO za pomocą AWS SDK:

const process = require('process');
const AWS = require('aws-sdk');

const s3 = new AWS.S3({
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
  endpoint: 'https://<XXXXXX>.stackhero-network.com',
  s3ForcePathStyle: true, // wymagane z MinIO
  signatureVersion: 'v4'
});

// operacja putObject
s3.putObject(
  { Bucket: 'testbucket', Key: 'testobject', Body: 'Hello from MinIO!' },
  (err, data) => {
    if (err)
      console.log(err);
    else
      console.log('Successfully uploaded data to testbucket/testobject');
  }
);

// operacja getObject
const file = require('fs').createWriteStream('/tmp/mykey');
s3.getObject({ Bucket: 'testbucket', Key: 'testobject' })
  .on('httpData', chunk => file.write(chunk))
  .on('httpDone', () => file.end())
  .send();

Więcej szczegółów można znaleźć w dokumentacji Node.js MinIO.

Jeśli wolisz używać SDK MinIO dla Node.js, zainstaluj go za pomocą npm:

npm install minio

Poniżej znajduje się przykład pokazujący, jak połączyć się z MinIO za pomocą SDK MinIO dla Node.js:

const process = require('process');
const Minio = require('minio');

// Zainicjuj klienta MinIO z endpointem i kluczami dostępu
const minioClient = new Minio.Client({
  endpoint: '<XXXXXX>.stackhero-network.com',
  port: 443,
  useSSL: true,
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
});

// Plik do przesłania
const file = '/tmp/photos-europe.tar';

// Utwórz bucket o nazwie 'europetrip'
minioClient.makeBucket(
  'europetrip',
  'us-east-1',
  err => {
    if (err) return console.log(err);

    console.log('Bucket created successfully in "us-east-1".');

    const metaData = {
      'Content-Type': 'application/octet-stream',
      'X-Amz-Meta-Testing': 1234,
      'example': 5678
    };
    // Prześlij plik do bucketu 'europetrip' używając API fPutObject
    minioClient.fPutObject(
      'europetrip',
      'photos-europe.tar',
      file,
      metaData,
      (err, etag) => {
        if (err) return console.log(err);
        console.log('File uploaded successfully.');
      }
    );
  }
);

Więcej informacji można znaleźć w dokumentacji SDK Node.js MinIO.