MinIO چیست؟

MinIO (به فارسی: مین آی او) یک نرم افزار متن باز، سمت سرور و سازگار با AWS S3 آمازون برای پیاده سازی Object Storage است. MinIO به صورت اختصاصی برای نگهداری داده در مقیاس بالا و ایجاد یک ابر خصوصی است که با زبان GO طراحی شده است. این ابزار با ساختار S3 سازگار است و S3 Compatible API در اختیار شما قرار می‌دهد.

وقتی با داده‌های بی‌ساختار و استاتیک با حجم بالا روبه‌رو باشید، بهترین روش ذخیره سازی دادها به صورت Object است و برای این که ذخیره سازی آبجکتی داشته باشید یکی از بهترین گزینه ها نصب MinIO در سمت سرور است. بدین ترتیب تصاویر، ویدیوها، بک‌آپ‌ها، لاگ‌ها و فایل‌های مختلف را با حجم چند کیلو بایت تا 5 ترابایت (تنها برای یک فایل) به راحتی و با سرعت ذخیره سازی می‌کنید. Minio از ذخیره سازی بر روی دیسک محلی، Kubernetes PVC، NAS که بر بستر ابرهای عمومی مثل Azure یا Google Cloud Platform قرارداشته باشند، پشتیبانی می‌کند.

MinIO قابلیت استقرار بر روی یک دیسک(هارد) واحد یا کلاسترهای توزیع شده را دارد. همچنین می‌تواند به عنوان رابط کاربری در راه‌کارهای ذخیره سازی ابجکتی مثل Azure Blob storage و آبجکت استوریج Google Cloud Platform یا در محیط داکر و Kubernetes برای ارائه آبجکت استوریج به عنوان میکرو سرویس، بکار گرفته شود.

مزایای MinIO چیست؟

  • API سازگار با ساختار S3
  • افزونگی داده (Data Redundancy)
  • دسترسی‌پذیری بالا
  • مقیاس پذیری به صورت عمودی و افقی
  • پشتیبانی از انواع بجکت استوریج‌ها
  • رمز نگاری داده‌ها سمت سرور و سمت کاربر

MinIO رابط کاربری سرویس Object Storage پشتیبان

با ساخت پارتیشن S3 در پشتیبان شما از طریق رابط کاربری MinIO به فضای ذخیره سازی ابری خودتان بر روی موقعیت جغرافیایی آسیا یا اورپا دسترسی دارید. در واقع با ایجاد پارتیشن S3 در لایه بالایی فضای ابری شما در پشتیبان به صورت اتوماتیک MinIO نصب و فعال می شود.

در ساختار S3 برای اتصال به Object Storage به سه مقدار کلید دسترسی، کلید خصوصی و آدرس اندپوینت نیاز دارید. همچنین با توجه به این که در روش ذخیره سازی آبجکی داده‌ها در یک ساختار flat ذخیره می شوند مفهومی به نام دایرکتوری یا پوشه وجود ندارد بنابراین برای دسته بندی فایل‌ها در آبجکت استوریج Bucket (سطل) ایجاد می‌کنید . میتوانید به تعداد مورد نیاز خودتان bucket بسازید. در MinIO فایل‌های ذخیره سازی شده در باکت می‌توانند مسیر (path) داشته باشند تا زمانی که فایلی در مسیر وجود داشته باشد میتوانید آن مسیر را به عنوان یک پوشه در نظر بگیرید ولی باید به یاد داشته باشید که در ذخیره سازی آبجکتی پوشه یا دایرکتوری وجود ندارد.

ساخت پارتیشن S3 پشتیبان

پس از ثبت نام در پشتیبان و ورود به پنل وب در بخش داشبورد پشتیبان دکمه ی خرید فضای بیشتر را کلیک کنید و در بین لیست پارتیشن های نمایش داده شده گزینه ی پارتیشن S3 را انتخاب نمایید و به مرحله ی بعد بروید.

در مرحله دوم باید نام پارتیشن و موقعیت مکانی پارتیشن و کلاس ذخیره سازی را تعیین کنید. شما میتوانید انتخاب کنید فایل های شما درزیرساخت ایران یا زیرساخت اروپا ذخیره سازی شود. باید بدانید که در معماری ابری پشتیبان فایل های شما در چندین نسخه ی مختلف بر روی سرور های متفاوت در دیتا سنتر های مختلفی ذخیره سازی میشود و خرابی یک هارد یا دیتا سنتر باعث عدم دسترسی شما به فایل های تان نخواهد بود.

در بخش کلاس ذخیره سازی شما می‌توانید انتخاب کنید فایل های شما و روی هاردهای کلاس استاندارد یا روی هاردهای کلاس NVMe ذخیره سازی بشوند.

در مرحله سوم، هزینه ی ساخت پارتیشن S3 نمایش داده خواهد شد که با کلیک روی دکمه پرداخت و ایجاد هزینه از کیف پول پشتیبان شما کسر شده و پارتیشن ساخته خواهد شد. اگر اعتبار کافی در کیف پول پشتیبان شما نباشد به درگاه بانک رفته و هزینه را در درگاه بانک پاسارگاد پرداخت خواهید کرد.

پس از ساخت پارتیشن در داشبورد پنل وب به قسمت پارتیشن S3 بروید و روی پارتیشنی که ساخته اید کلیک کنید تا اطلاعات پارتیشن را مشاهده کنید:

در بخش اطلاعات پارتیشن به مشخصات اتصال پارتیشن S3 دسترسی دارد و در بخش آدرس ها آدرس اندپوینت را مشاهده خواهید کرد.

مشخصات اتصال به فضای ابری S3 compatible  چیست؟

پس از ساختن پارتیشن S3 compatible  خود در پنل وب پشتیبان این مشخصات برای اتصال به آبجکت استوریج در اختیار شما قرار خواهد داشت.

کلید دسترسی (Access Key ID)

کلید خصوصی (Secret Access Key)

اندپوینت S3 (یک نام دامنه تایید شده برای فضای ابری شما یا FQDM)

نام  Bucket (که پس از ساخت پارتیشن به هر تعداد که نیازداشته باشید در پارتیشن ایجاد می‌کنید)

کلید دسترسی و کلید خصوصی مانند نام کاربری و رمز عبور پارتیشن S3 هستند و باید به خوبی از آنها محافظت کنید و در اختیار دیگران قرار ندهید.

اندپوینت S3 همان آدرس و موقعیت مکانی سرور شماست. با ورود آدرس اندپوینت پارتیشن S3 پشتیبان خود در مرورگروب به پنل وب S3 پشتیبان (MinIO)  دسترسی خواهید داشت و می‌توانید باکت‌های خود را ایجاد کنید و policy یا حق دسترسی‌های به باکت‌ها را تعریف کنید.

باکت (Bucket) اصطلاحی است که در Object Storage و ساختار S3 رواج دارد. همان ظرف ذخیره سازی شماست. شما می‌توانید به هر تعداد که بخواهید Bucket در پارتیشن S3 خود بسازید.

دسترسی به پارتیشن S3 از طریق پنل وب

برای دسترسی به پنل وب پارتیشن S3 آدرس اندپوینت پارتیشن S3 را در مرورگر وب وارد کنید و برای ورود از کلید دستتری و کلید خصوصی خود استفاده کنید :

در پنل وب پارتیشن S3 به سادگی می‌توانید Bucket ایجاد کرده فایل آپلود کنید و برای باکت ها policy های موردنظرتان را اعمال کنید.

مدیریت سطح دسترسی هر باکت

برای هر باکت در فضای ابری S3 پشتیبان می‌توانید سطح دسترسی مربوط به خود تعریف کنید تا فایل‌های ذخیره سازی شده از باکت بر اساس ان در دسترس قرار بگیرند. اگر باکتی را عمومی کنید تمام فایل های موجود در باکت عمومی و در دسترس خواهند بود (اصطلاحا لینک دانلود مستقیم خواهند داشت) یا میتوانید برای یک باکت دسترسی فقط اپلود تعریف کنید در این صورت دیگران فقط میتوانند فایل در باکت شما آپلود کنند.

به صورت کلی شما می‌توانید این دسترسی‌ها را ایجاد کنید:

  • :None حالت پیشفرض None است. در این حالت تمام ارتباطات برای دانلود یا آپلود فایل به باکت‌ها از طریق access key و secret key است.
  • :Read Onlyدر این حالت همه کاربران میتوانند بدون access key و secret key فایل‌ها را دانلود کنند.
  • :Write Onlyدر این حالت همه کاربران میتوانند بدون access key و secret key فایل‌ها را آپلود کنند و تغییر دهند.
  • :Read and Writeدر این حالت همه کاربران میتوانند بدون access key و secret key فایل‌ها را دانلود و آپلود کنند.

برای تغییر این سطح دسترسی‌ها می‌توانید از دو راه داشبورد گرافیکی یا CLI استفاده کنید. برای تغییر سطح دسترسی‌ها در حالت گرافیکی می‌توانید وارد داشبورد مدیریت فایل‌ها شوید و روی تنظیمات هر Bucket کلیک کنید و از طریق بخش Edit policy اقدام به تغییر Policy ها یا همان سطح دسترسی‌ها کنید. همچنین می توانید به جای تعیین پالیسی برای کل یک باکت برای یک مسیر در یک باکت پالیسی تنظیم کنید.

برای نمونه در پنل وب MinIO برای باکت public پالیسی Read Only تنظیم شده است و بنابراین تمامی فایل‌های موجود در باکت عمومی خواهند بود و لینک مستقیم دانلود دارند:

روی منوی مقابل باکت مورد نظر کلیک کنید
گزینه Edit policy را انتخاب کنید
در بخش Prefix * وارد کنید و Read only را انتخاب کرده و روی دکمه Add کلیک کنید بدین ترتیب تمامی فایل های باکت public عمومی خواهند بود

اگر بخواهید فقط برای فایل هایی که در یک مسیر وجود دارند پالیسی عمومی را انتخاب کنید مثل نمونه زیر پالیسی Read Only را تنظیم کنید:

در این نمونه تنها فایل هایی که در مسیر content/ باشند عمومی خواهند بود.

برای استفاده از Cli پارتیشن S3 و همچنین برای استفاده روی سرور و سیستم عامل های مختلف برای ذخیره سازی نیاز هست ه کلاینت MinIO را نصب کنید.

نصب کلاینت MinIO

نصب روی GNU/Linux

لینک دانلود :

PlatformArchitectureURL
GNU/Linux64-bit Intelhttps://dl.min.io/client/mc/release/linux-amd64/mc
64-bit PPChttps://dl.min.io/client/mc/release/linux-ppc64le/mc
123wget https://dl.min.io/client/mc/release/linux-amd64/mcchmod +x mc./mc --help

نصب روی Microsoft Windows

لینک دانلود :

PlatformArchitectureURL
Microsoft Windows64-bit Intelhttps://dl.min.io/client/mc/release/windows-amd64/mc.exe
1mc.exe --help

برای کانفیگ اطلاعات دسترسی پارتیشن S3 اطلاعات دسترسی را باید در فایل کانفیگ کلاینت MinIO وارد کنید.

دسترسی به فایل کانفیگ :

1~/.mc/config.json

دستور کانفیگ اتصال به پارتیشن S3:

1mc alias set <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> --api <API-SIGNATURE> --path <BUCKET-LOOKUP-TYPE>

مستندات کامل کلاینت MinIO را در اینجا مشاهده کنید.

استفاده از کتابخانه‌های AWS S3 برای اتصال به MinIO و پارتیشن S3 پشتیبان

از آنجایی پارتیشن S3 پشتیبان سازگار با ساختار S3 است، به راحتی با استفاده از کتابخانه‌های موجود در آن زبان برای S3 به فضای ابری خود در پشتیبان متصل می‌شوید. برای نمونه چند کتابخانه پر استفاده برای زبان‌ها یا فریم‌وورک‌های مختلف را در ادامه معرفی و روش تصال آنها به پشتیبان را آورده ایم.

در این نمونه‌ها آپلود و دانلود یا نمایش لیست باکت‌های موجود در فضای ابری پشتیبان نشان داده شده است برای عملیات های دیگر با مراجعه به لینک آمده در مقابل هر عنوان به مستندات اصلی کتابخانه موردنظر مراجعه کنید.

در این مثال عملیات putObject و getObject نشان داده شده است.

$ npm install aws-sdk

var AWS = require('aws-sdk');
const s3 = new AWS.S3({
    accessKeyId: ACCESS_KEY,
    secretAccessKey: SECRET_KEY,
    endpoint: ENDPOINT,
    s3ForcePathStyle: true
});
 // putObject operation.

var params = {Bucket: 'testbucket', Key: 'testobject', Body: 'Hello from MinIO!!'};

s3.putObject(params, function(err, data) {
      if (err)
       console.log(err)
      else   
       console.log("Successfully uploaded data to testbucket/testobject");
});

// getObject operation.

var params = {Bucket: 'testbucket', Key: 'testobject'};

var file = require('fs').createWriteStream('/tmp/mykey');

s3.getObject(params).
on('httpData', function(chunk) { file.write(chunk); }).
on('httpDone', function() { file.end(); }).
send();

اجرای برنامه:

node example.js
Successfully uploaded data to testbucket/testobject

در این نمونه نمایش لیست باکت‌های فضای ابری نمایش داده شده است.

// config/filesystems.php
<?php
return [
  // ...
  'cloud' => 'minio',
  'disks' => [
    // ...
    'minio' => [
      'driver' => 's3',
      'endpoint' => env('ENDPOINT'),
      'use_path_style_endpoint' => true,
      'key' => env('ACCESS_KEY'),
      'secret' => env('SECRET_KEY'),
      'region' => 'us-east-1',
      'bucket' => env('BUCKET_NAME'),
    ],
  ],
];

در این نمونه نمایش لیست باکت‌ها نمایش داده شده است.

$ composer require aws/aws-sdk-php

<?php
require 'vendor/autoload.php';
use AwsS3S3Client;
$client = new S3Client([
    'region' => 'us-east-1',
    'version' => '2006-03-01',
    'endpoint' => ENDPOINT,
    'credentials' => [
        'key' => ACCESS_KEY
        'secret' => SECRET_KEY
    ],
    'use_path_style_endpoint' => true
]);
$listResponse = $client->listBuckets();
print_r($listResponse);

SDKهای معرفی شده در بالا تنها نمونه هایی برای S3 در سه زبان و فریموورک پر استفاده بودند و هر سه مورد کتابخانه های مورد استفاده برای سرویس AWS S3 آمازون هستند. شما می توانید از هر ابزار S3 Compatible دیگری برای اتصال به فضای ابری استفاده کنید. همچنین توسعه دهندگان MinIO مجموعه‌ای از SDK هایی برای تعامل با S3 ارائه کرده اند که در مستندات MinIO در منوی MinIO SDKs به آنها دسترسی دارید. و می‌توانید مقاله استفاده از SDK برای تعامل با فضای ابری S3-Compatible پشتیبان در وبلاگ پشتیبان مطالعه کنید.