MinIO: Iniziare

Come iniziare a utilizzare MinIO per lo storage di oggetti compatibile con S3

👋 Benvenuti nella documentazione di Stackhero!

Stackhero offre una soluzione MinIO Object Storage pronta all'uso che fornisce numerosi vantaggi, tra cui:

  • Trasferimenti illimitati.
  • Prezzi semplici, predittivi e trasparenti.
  • Nome di dominio personalizzabile sicuro con HTTPS (ad esempio, https://object-storage.tua-azienda.com).
  • Aggiornamenti senza sforzo con un solo clic.
  • Prestazioni ottimali e sicurezza robusta grazie a una VM privata e dedicata.
  • Disponibile in 🇪🇺 Europa e 🇺🇸 USA.

Risparmia tempo e semplifica la tua vita: bastano 5 minuti per provare la soluzione di hosting MinIO Object Storage di Stackhero!

MinIO è un servizio di storage di oggetti che implementa il protocollo Amazon S3. Qualsiasi client compatibile con Amazon S3 può connettersi a MinIO e interagire senza problemi con il tuo storage di oggetti. Una libreria client Amazon S3 è disponibile per quasi tutti i principali linguaggi di programmazione, inclusi Ruby, Node.js, Java, Python, Clojure ed Erlang.

Raccomandiamo di utilizzare gli SDK di MinIO per connettersi al tuo storage di oggetti. Puoi trovare un elenco completo degli SDK disponibili nella documentazione ufficiale di MinIO.

In alternativa, puoi utilizzare la CLI di MinIO. È particolarmente utile per gestire file di grandi dimensioni direttamente dal tuo terminale. Una guida dettagliata sull'uso della CLI di MinIO è disponibile nella documentazione ufficiale della CLI di MinIO.

La tua istanza Stackhero for MinIO include di default l'interfaccia web MinIO Console. Per compiti più avanzati, puoi scegliere di utilizzare la CLI di MinIO.

Il modo più semplice per provare la CLI di MinIO è eseguire il suo container Docker. Segui questi passaggi:

  1. Avvia il container:

    docker run -it --entrypoint=/bin/sh minio/mc
    
  2. All'interno del container, aggiungi il tuo server utilizzando il seguente comando (sostituisci i valori segnaposto di conseguenza):

    mc alias set minio https://<XXXXXX>.stackhero-network.com <ROOT_ACCESS_KEY> <MINIO_ROOT_SECRET_KEY>
    
  3. Crea un bucket chiamato "test" per verificare la configurazione:

    mc mb minio/test
    
  4. Elenca i tuoi bucket:

    mc ls minio
    

Puoi visualizzare ulteriori comandi della CLI di MinIO eseguendo mc --help.

Per prima cosa, installa il gem AWS SDK:

gem install aws-sdk
bundle install

Di seguito è riportato un semplice esempio che dimostra come interagire con MinIO utilizzando l'AWS SDK in 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

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

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

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

Per maggiori dettagli, consulta la documentazione Ruby di MinIO.

Ci sono due modi principali per connettere applicazioni Python a MinIO.

Per prima cosa, installa il pacchetto AWS SDK (boto3):

pip install boto3
pip freeze > requirements.txt

Il seguente esempio dimostra come connettersi a MinIO utilizzando 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')

# Carica un file locale '/home/john/piano.mp3' nel bucket 'songs' con il nome oggetto 'piano.mp3'
s3.Bucket('songs').upload_file('/home/john/piano.mp3', 'piano.mp3')

# Scarica l'oggetto 'piano.mp3' dal bucket 'songs' e salvalo localmente come '/tmp/classical.mp3'
s3.Bucket('songs').download_file('piano.mp3', '/tmp/classical.mp3')

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

Maggiori dettagli sono disponibili nella documentazione Python di MinIO.

In alternativa, puoi utilizzare il SDK MinIO per Python. Per prima cosa, installa il pacchetto MinIO:

pip install minio
pip freeze > requirements.txt

Di seguito è riportato un esempio che mostra come connettersi a MinIO utilizzando il SDK MinIO:

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

def main():
  # Crea un client per il tuo server MinIO utilizzando le tue chiavi di accesso e segrete
  client = Minio(
    endpoint='<XXXXXX>.stackhero-network.com:443',
    secure=True,
    access_key='YOUR_ACCESS_KEY',
    secret_key='YOUR_SECRET_KEY'
  )

  # Verifica se il bucket 'asiatrip' esiste, e crealo se non esiste
  found = client.bucket_exists("asiatrip")
  if not found:
    client.make_bucket("asiatrip")
  else:
    print("Bucket 'asiatrip' already exists")

  # Carica '/home/user/Photos/asiaphotos.zip' come 'asiaphotos-2015.zip' nel bucket '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)

Per ulteriori informazioni, consulta la documentazione del SDK Python di MinIO.

Per connettere PHP a MinIO, installa prima il pacchetto AWS SDK per PHP:

composer require aws/aws-sdk-php

L'esempio seguente mostra come connettersi a MinIO da PHP utilizzando l'AWS SDK:

<?php

// Includi il SDK utilizzando l'autoloader di 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'
  ],
]);

// Invia una richiesta PutObject e ottieni il risultato.
$insert = $s3->putObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'Body'   => 'Hello from MinIO!'
]);

// Scarica il contenuto dell'oggetto.
$retrieve = $s3->getObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'SaveAs' => 'testkey_local'
]);

// Stampa il corpo del risultato recuperato.
echo $retrieve['Body'];

Ci sono due opzioni per connettere applicazioni Go a MinIO.

Per prima cosa, installa i pacchetti AWS SDK per Go:

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

Di seguito è riportato un esempio di come connettersi a MinIO da Go utilizzando l'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")

  // Configura per utilizzare il server 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,
  }

  // Crea un nuovo bucket
  _, err := s3Client.CreateBucket(cparams)
  if err != nil {
    fmt.Println(err.Error())
    return
  }

  // Carica un nuovo oggetto con la stringa "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)

  // Recupera il nostro oggetto e salvalo localmente
  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")
}

Per ulteriori letture, visita la documentazione Go di MinIO.

Per utilizzare il SDK MinIO per Go, installa il seguente pacchetto:

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

Di seguito è riportato un esempio che mostra come connettersi a MinIO utilizzando il SDK MinIO per 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

  // Inizializza il client 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 è ora configurato
}

Per maggiori informazioni, consulta la documentazione del SDK Go di MinIO.

Ci sono due metodi per connettere applicazioni Node.js a MinIO.

Per prima cosa, installa il pacchetto AWS SDK per Node.js:

npm install aws-sdk

Di seguito è riportato un esempio che mostra come connettersi a MinIO utilizzando l'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, // richiesto con MinIO
  signatureVersion: 'v4'
});

// operazione 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');
  }
);

// operazione 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();

Per ulteriori dettagli, visita la documentazione Node.js di MinIO.

Se preferisci utilizzare il SDK MinIO per Node.js, installalo utilizzando npm:

npm install minio

Ecco un esempio di come connettersi a MinIO utilizzando il SDK MinIO per Node.js:

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

// Instanzia il client MinIO con l'endpoint e le chiavi di accesso
const minioClient = new Minio.Client({
  endpoint: '<XXXXXX>.stackhero-network.com',
  port: 443,
  useSSL: true,
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
});

// File da caricare
const file = '/tmp/photos-europe.tar';

// Crea un bucket chiamato '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
    };
    // Carica il file nel bucket 'europetrip' utilizzando l'API fPutObject
    minioClient.fPutObject(
      'europetrip',
      'photos-europe.tar',
      file,
      metaData,
      (err, etag) => {
        if (err) return console.log(err);
        console.log('File uploaded successfully.');
      }
    );
  }
);

Per maggiori informazioni, consulta la documentazione del SDK Node.js di MinIO.