MinIO: Erste Schritte

Wie man mit MinIO für S3-kompatiblen Objektspeicher beginnt

👋 Willkommen bei der Stackhero-Dokumentation!

Stackhero bietet eine einsatzbereite MinIO Object Storage Lösung, die zahlreiche Vorteile bietet, darunter:

  • Unbegrenzte Übertragungen.
  • Einfache, vorausschauende und transparente Preisgestaltung.
  • Anpassbarer Domainname gesichert mit HTTPS (zum Beispiel, https://object-storage.ihre-firma.com).
  • Mühelose Updates mit nur einem Klick.
  • Optimale Leistung und robuste Sicherheit durch eine private und dedizierte VM.
  • Verfügbar in 🇪🇺 Europa und 🇺🇸 USA.

Sparen Sie Zeit und vereinfachen Sie Ihr Leben: Es dauert nur 5 Minuten, um die MinIO Object Storage Hosting Lösung von Stackhero auszuprobieren!

MinIO ist ein Objektspeicherdienst, der das Amazon S3-Protokoll implementiert. Jeder Amazon S3-kompatible Client kann sich mit MinIO verbinden und nahtlos mit Ihrem Objektspeicher interagieren. Eine Amazon S3-Clientbibliothek ist für fast jede große Programmiersprache verfügbar, einschließlich Ruby, Node.js, Java, Python, Clojure und Erlang.

Wir empfehlen die Verwendung der MinIO SDKs, um sich mit Ihrem Objektspeicher zu verbinden. Eine vollständige Liste der verfügbaren SDKs finden Sie in der offiziellen MinIO-Dokumentation.

Alternativ können Sie die MinIO CLI verwenden. Sie ist besonders nützlich, um große Dateien direkt von Ihrem Terminal aus zu verwalten. Ausführliche Anleitungen zur Verwendung der MinIO CLI finden Sie in der offiziellen MinIO CLI-Dokumentation.

Ihre Stackhero for MinIO-Instanz enthält standardmäßig die MinIO Console Web-UI. Für fortgeschrittenere Aufgaben können Sie die MinIO CLI verwenden.

Der einfachste Weg, die MinIO CLI auszuprobieren, ist das Ausführen ihres Docker-Containers. Folgen Sie diesen Schritten:

  1. Starten Sie den Container:

    docker run -it --entrypoint=/bin/sh minio/mc
    
  2. Fügen Sie innerhalb des Containers Ihren Server mit folgendem Befehl hinzu (ersetzen Sie die Platzhalterwerte entsprechend):

    mc alias set minio https://<XXXXXX>.stackhero-network.com <ROOT_ACCESS_KEY> <MINIO_ROOT_SECRET_KEY>
    
  3. Erstellen Sie einen Bucket namens "test", um die Einrichtung zu überprüfen:

    mc mb minio/test
    
  4. Listen Sie Ihre Buckets auf:

    mc ls minio
    

Weitere MinIO CLI-Befehle können Sie durch Ausführen von mc --help anzeigen.

Installieren Sie zuerst das AWS SDK-Gem:

gem install aws-sdk
bundle install

Nachfolgend ein einfaches Beispiel, das zeigt, wie man mit dem AWS SDK in Ruby mit MinIO interagiert:

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

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

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

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

Weitere Details finden Sie in der MinIO Ruby-Dokumentation.

Es gibt zwei Hauptmethoden, um Python-Anwendungen mit MinIO zu verbinden.

Installieren Sie zuerst das AWS SDK-Paket (boto3):

pip install boto3
pip freeze > requirements.txt

Das folgende Beispiel zeigt, wie man sich mit boto3 mit MinIO verbindet:

#!/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')

# Laden Sie eine lokale Datei '/home/john/piano.mp3' in den Bucket 'songs' mit dem Objektnamen 'piano.mp3' hoch
s3.Bucket('songs').upload_file('/home/john/piano.mp3', 'piano.mp3')

# Laden Sie das Objekt 'piano.mp3' aus dem Bucket 'songs' herunter und speichern Sie es lokal als '/tmp/classical.mp3'
s3.Bucket('songs').download_file('piano.mp3', '/tmp/classical.mp3')

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

Weitere Details finden Sie in der MinIO Python-Dokumentation.

Alternativ können Sie das MinIO SDK für Python verwenden. Installieren Sie zuerst das MinIO-Paket:

pip install minio
pip freeze > requirements.txt

Nachfolgend ein Beispiel, das zeigt, wie man sich mit dem MinIO SDK mit MinIO verbindet:

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

def main():
  # Erstellen Sie einen Client für Ihren MinIO-Server mit Ihren Zugangs- und Geheimschlüsseln
  client = Minio(
    endpoint='<XXXXXX>.stackhero-network.com:443',
    secure=True,
    access_key='YOUR_ACCESS_KEY',
    secret_key='YOUR_SECRET_KEY'
  )

  # Überprüfen Sie, ob der Bucket 'asiatrip' existiert, und erstellen Sie ihn, falls nicht
  found = client.bucket_exists("asiatrip")
  if not found:
    client.make_bucket("asiatrip")
  else:
    print("Bucket 'asiatrip' already exists")

  # Laden Sie '/home/user/Photos/asiaphotos.zip' als 'asiaphotos-2015.zip' in den Bucket 'asiatrip' hoch
  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)

Weitere Informationen finden Sie in der MinIO Python SDK-Dokumentation.

Um PHP mit MinIO zu verbinden, installieren Sie zuerst das AWS SDK für PHP-Paket:

composer require aws/aws-sdk-php

Das folgende Beispiel zeigt, wie man sich mit MinIO von PHP aus unter Verwendung des AWS SDK verbindet:

<?php

// Integrieren Sie das SDK mit dem Composer-Autoloader
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'
  ],
]);

// Senden Sie eine PutObject-Anfrage und erhalten Sie das Ergebnis.
$insert = $s3->putObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'Body'   => 'Hello from MinIO!'
]);

// Laden Sie den Inhalt des Objekts herunter.
$retrieve = $s3->getObject([
  'Bucket' => 'testbucket',
  'Key'    => 'testkey',
  'SaveAs' => 'testkey_local'
]);

// Drucken Sie den Körper des abgerufenen Ergebnisses.
echo $retrieve['Body'];

Es gibt zwei Optionen, um Go-Anwendungen mit MinIO zu verbinden.

Installieren Sie zuerst die AWS SDK-Pakete für Go:

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

Nachfolgend ein Beispiel, wie man sich mit MinIO von Go aus unter Verwendung des AWS SDK verbindet:

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")

  // Konfigurieren Sie die Nutzung des MinIO-Servers
  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,
  }

  // Erstellen Sie einen neuen Bucket
  _, err := s3Client.CreateBucket(cparams)
  if err != nil {
    fmt.Println(err.Error())
    return
  }

  // Laden Sie ein neues Objekt mit dem String "Hello from MinIO!" hoch
  _, 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)

  // Rufen Sie unser Objekt ab und speichern Sie es lokal
  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")
}

Für weitere Lektüre besuchen Sie die MinIO Go-Dokumentation.

Um das MinIO SDK für Go zu verwenden, installieren Sie das folgende Paket:

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

Nachfolgend ein Beispiel, das zeigt, wie man sich mit dem MinIO SDK für Go mit MinIO verbindet:

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

  // Initialisieren Sie den MinIO-Client
  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 ist jetzt eingerichtet
}

Für weitere Informationen siehe die MinIO Go SDK-Dokumentation.

Es gibt zwei Methoden, um Node.js-Anwendungen mit MinIO zu verbinden.

Installieren Sie zuerst das AWS SDK-Paket für Node.js:

npm install aws-sdk

Nachfolgend ein Beispiel, das zeigt, wie man sich mit MinIO unter Verwendung des AWS SDK verbindet:

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, // erforderlich mit MinIO
  signatureVersion: 'v4'
});

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

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

Für weitere Details besuchen Sie die MinIO Node.js-Dokumentation.

Wenn Sie das MinIO SDK für Node.js verwenden möchten, installieren Sie es mit npm:

npm install minio

Hier ist ein Beispiel, wie man sich mit dem MinIO SDK für Node.js mit MinIO verbindet:

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

// Instanziieren Sie den MinIO-Client mit dem Endpoint und den Zugangsschlüsseln
const minioClient = new Minio.Client({
  endpoint: '<XXXXXX>.stackhero-network.com',
  port: 443,
  useSSL: true,
  accessKeyId: 'YOUR_ACCESS_KEY',
  secretAccessKey: 'YOUR_SECRET_KEY',
});

// Datei, die hochgeladen werden soll
const file = '/tmp/photos-europe.tar';

// Erstellen Sie einen Bucket namens '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
    };
    // Laden Sie die Datei in den Bucket 'europetrip' mit der fPutObject-API hoch
    minioClient.fPutObject(
      'europetrip',
      'photos-europe.tar',
      file,
      metaData,
      (err, etag) => {
        if (err) return console.log(err);
        console.log('File uploaded successfully.');
      }
    );
  }
);

Für weitere Informationen siehe die MinIO Node.js SDK-Dokumentation.