MinIO: 入門指南
如何開始使用 MinIO 作為 S3 兼容的物件存儲
👋 歡迎來到 Stackhero 文件!
Stackhero 提供即用型 MinIO Object Storage 解決方案,帶來多項優勢,包括:
- 無限傳輸。
- 簡單、可預測且透明的定價。
- 使用 HTTPS 保護的可自訂域名(例如,https://object-storage.your-company.com)。
- 只需點擊即可輕鬆更新。
- 由專用私有 VM提供的最佳性能和強大安全性。
- 可在 🇪🇺 歐洲 和 🇺🇸 美國 使用。
節省時間並簡化您的生活:只需 5 分鐘即可嘗試 Stackhero 的 MinIO Object Storage hosting 解決方案!
MinIO 是一個實現 Amazon S3 協議的物件存儲服務。任何兼容 Amazon S3 的客戶端都可以連接到 MinIO,並無縫地與您的物件存儲互動。幾乎所有主要的編程語言,包括 Ruby、Node.js、Java、Python、Clojure 和 Erlang,都有可用的 Amazon S3 客戶端庫。
我們建議使用 MinIO SDK 來連接您的物件存儲。您可以在 MinIO 官方文檔中找到完整的 SDK 列表。
或者,您可以使用 MinIO CLI。它特別適合從終端直接管理大型文件。有關使用 MinIO CLI 的詳細指南,請參閱 MinIO CLI 官方文檔。
使用 MinIO CLI
您的 Stackhero for MinIO 實例默認包含 MinIO Console 網頁界面。對於更高級的任務,您可以選擇使用 MinIO CLI。
嘗試 MinIO CLI 最簡單的方法是運行其 Docker 容器。請按照以下步驟操作:
-
啟動容器:
docker run -it --entrypoint=/bin/sh minio/mc -
在容器內,使用以下命令添加您的服務器(相應替換佔位符值):
mc alias set minio https://<XXXXXX>.stackhero-network.com <ROOT_ACCESS_KEY> <MINIO_ROOT_SECRET_KEY> -
創建一個名為 "test" 的 bucket 以驗證設置:
mc mb minio/test -
列出您的 buckets:
mc ls minio
您可以通過運行 mc --help 查看其他 MinIO CLI 命令。
連接 Ruby 到 MinIO
首先,安裝 AWS SDK gem:
gem install aws-sdk
bundle install
以下是一個簡單的示例,展示如何使用 AWS SDK 在 Ruby 中與 MinIO 互動:
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 操作
rubys3_client.put_object(
key: 'testobject',
body: 'Hello from MinIO!',
bucket: 'testbucket',
content_type: 'text/plain'
)
# get_object 操作
rubys3_client.get_object(
bucket: 'testbucket',
key: 'testobject',
response_target: 'download_testobject'
)
print "Downloaded 'testobject' as 'download_testobject'."
有關更多詳細信息,請查看 MinIO Ruby 文檔。
連接 Python 到 MinIO
有兩種主要方法可以將 Python 應用程序連接到 MinIO。
使用 AWS SDK (boto) 連接到 MinIO
首先,安裝 AWS SDK 包 (boto3):
pip install boto3
pip freeze > requirements.txt
以下示例展示如何使用 boto3 連接到 MinIO:
#!/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')
# 上傳本地文件 '/home/john/piano.mp3' 到 bucket 'songs',對象名為 'piano.mp3'
s3.Bucket('songs').upload_file('/home/john/piano.mp3', 'piano.mp3')
# 從 bucket 'songs' 下載對象 'piano.mp3' 並本地保存為 '/tmp/classical.mp3'
s3.Bucket('songs').download_file('piano.mp3', '/tmp/classical.mp3')
print("'piano.mp3' downloaded as 'classical.mp3'.")
更多詳細信息可在 MinIO Python 文檔中找到。
使用 MinIO SDK 連接到 MinIO
或者,您可以使用 MinIO SDK for Python。首先,安裝 MinIO 包:
pip install minio
pip freeze > requirements.txt
以下是一個示例,展示如何使用 MinIO SDK 連接到 MinIO:
#!/usr/bin/env python
from minio import Minio
from minio.error import S3Error
def main():
# 使用您的訪問和密鑰創建 MinIO 服務器的客戶端
client = Minio(
endpoint='<XXXXXX>.stackhero-network.com:443',
secure=True,
access_key='YOUR_ACCESS_KEY',
secret_key='YOUR_SECRET_KEY'
)
# 檢查 bucket 'asiatrip' 是否存在,如果不存在則創建
found = client.bucket_exists("asiatrip")
if not found:
client.make_bucket("asiatrip")
else:
print("Bucket 'asiatrip' already exists")
# 上傳 '/home/user/Photos/asiaphotos.zip' 作為 'asiaphotos-2015.zip' 到 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)
有關更多信息,請參閱 MinIO Python SDK 文檔。
連接 PHP 到 MinIO
要將 PHP 連接到 MinIO,首先安裝 AWS SDK for PHP 包:
composer require aws/aws-sdk-php
以下示例展示如何使用 AWS SDK 從 PHP 連接到 MinIO:
<?php
// 使用 Composer 自動加載器包含 SDK
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'
],
]);
// 發送 PutObject 請求並獲取結果。
$insert = $s3->putObject([
'Bucket' => 'testbucket',
'Key' => 'testkey',
'Body' => 'Hello from MinIO!'
]);
// 下載對象的內容。
$retrieve = $s3->getObject([
'Bucket' => 'testbucket',
'Key' => 'testkey',
'SaveAs' => 'testkey_local'
]);
// 打印檢索結果的主體。
echo $retrieve['Body'];
連接 Go 到 MinIO
有兩個選擇可以將 Go 應用程序連接到 MinIO。
使用 AWS SDK 連接到 MinIO
首先,安裝 AWS SDK for Go 包:
go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
以下是一個示例,展示如何使用 AWS SDK 從 Go 連接到 MinIO:
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")
// 配置使用 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,
}
// 創建新 bucket
_, err := s3Client.CreateBucket(cparams)
if err != nil {
fmt.Println(err.Error())
return
}
// 上傳新對象,內容為 "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)
// 檢索我們的對象並本地存儲
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")
}
有關更多閱讀,請訪問 MinIO Go 文檔。
使用 MinIO SDK 連接到 MinIO
要使用 MinIO SDK for Go,請安裝以下包:
GO111MODULE=on go get github.com/minio/minio-go/v7
以下是一個示例,展示如何使用 MinIO SDK for Go 連接到 MinIO:
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
// 初始化 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 現在已設置
}
有關更多信息,請參閱 MinIO Go SDK 文檔。
連接 Node.js 到 MinIO
有兩種方法可以將 Node.js 應用程序連接到 MinIO。
使用 AWS SDK 連接到 MinIO
首先,安裝 AWS SDK for Node.js 包:
npm install aws-sdk
以下是一個示例,展示如何使用 AWS SDK 連接到 MinIO:
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, // 與 MinIO 一起使用時需要
signatureVersion: 'v4'
});
// 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');
}
);
// 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();
有關更多詳細信息,請訪問 MinIO Node.js 文檔。
使用 MinIO SDK 連接到 MinIO
如果您更喜歡使用 MinIO SDK for Node.js,請使用 npm 安裝:
npm install minio
以下是一個示例,展示如何使用 MinIO SDK for Node.js 連接到 MinIO:
const process = require('process');
const Minio = require('minio');
// 使用端點和訪問密鑰實例化 MinIO 客戶端
const minioClient = new Minio.Client({
endpoint: '<XXXXXX>.stackhero-network.com',
port: 443,
useSSL: true,
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_KEY',
});
// 要上傳的文件
const file = '/tmp/photos-europe.tar';
// 創建一個名為 'europetrip' 的 bucket
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
};
// 使用 fPutObject API 將文件上傳到 bucket 'europetrip'
minioClient.fPutObject(
'europetrip',
'photos-europe.tar',
file,
metaData,
(err, etag) => {
if (err) return console.log(err);
console.log('File uploaded successfully.');
}
);
}
);
有關更多信息,請參閱 MinIO Node.js SDK 文檔。