WIUNIX ACADEMY
آموزش MinIO پس از بایگانی؛ آزمایشگاه خصوصی S3 از کد ثابت
کد بایگانیشدهٔ MinIO را در کانتینر مستقل بسازید؛ TLS خصوصی، دسترسی محدود باکت، نسخهبندی و بازگرداندن فایل نمونه را با مرز پشتیبانی امروز بررسی کنید.
محیطت را انتخاب کنآموزش متناسب با محیط تو
کجا اجرا میکنی؟
سیستمعامل و نسخه را انتخاب کن تا مراحل، دستورها و راهحلها برای همان محیط نمایش داده شوند.
آموزش متناسب با مقادیر تو
تنظیمات این آموزش
مقادیر نمونه را برای محیط خودت تنظیم کن؛ متن و دستورهای مرتبط با هم تغییر میکنند. رمز، کلید خصوصی و توکن وارد نکن. مقادیر فقط در همین زبانه نگهداری میشوند و به سرور یا لینک اشتراکگذاری فرستاده نمیشوند. پیش از اجرا، DNS، گواهیها و سیاست شبکهٔ واقعی را بررسی کن.
آیپی، دامنه یا پورت مثالها با محیط تو فرق دارد؟ دکمهٔ زیر را باز کن، مقادیر را تغییر بده و «اعمال در آموزش» را بزن؛ سپس دستورهای بهروزشده را کپی کن.
تنظیم مقادیر برای محیط من6 مقدار قابلتغییر
از اینجا شروع کن
در پایان چه چیزی خواهی داشت؟
رفتار S3 را مستقل بسنجید و سپس مسیر نگهداری مناسب محیط عملیاتی را انتخاب کنید.
سیستمعاملها و نسخههای پوششدادهشده
کد بایگانیشده و بدون نگهداری؛ فقط آزمایش مستقل. اجرای مشترک Ubuntu24.04 و بررسی مستنداتی دیگر توزیعها.
قبل از شروع
- ماشین مجازی مستقل x86_64 و Podman آماده.
- ۳گیگابایت RAM و۵گیگابایت فضای آزاد؛ بدون دادهٔ واقعی.
MinIO در۲۰۲۶؛ ابتدا وضعیت انتشار را بررسی کنید
این آموزش برای مدیر لینوکس است که میخواهد رفتار یک اتصال S3 را در محیط مستقل بسنجد. سرور و کلاینت را از کد رسمیِ ثابت میسازید، API و کنسول را جدا نگه میدارید، دسترسی یک اپلیکیشن را به یک باکت محدود میکنید و نسخههای یک فایل نمونه و خروجیگرفتن و بازگرداندن آن را میآزمایید. زمان مطالعه و اجرا حدود۶۰دقیقه است؛ دانلود و کامپایل ممکن است بیشتر طول بکشد.
مخزن رسمی minio/minio در۲۵آوریل۲۰۲۶ بایگانی شده و بالای README پایان نگهداری اعلام شده است. API آخرین release نام RELEASE.2025-10-15T17-29-55Z را برگرداند، اما هیچ فایل پیوستی نداشت. دریافت فایل اجرایی قدیمی پاسخ410 داد و درخواست عمومی latest از Quay مجاز نشد. وجود image در cache به معنی امکان دانلود یا پشتیبانی امروز نیست.
مسیر قابلتکرار این صفحه، آرشیو کد رسمی در commit7aac2a2c5b7c882e68c1ce017d8256be2feea27f است که با ابزار Go بررسیشده ساخته میشود. این آزمایشگاه آموزشی بر پایهٔ کد بایگانیشده و فاقد نگهداری است؛ برای راهاندازی تازهٔ Community در محیط عملیاتی توصیه نمیشود. کامپایل مجدد، آسیبپذیریهای کد ثابت را برطرف نمیکند. کلاینت mc نیز مستقل و از نسخهٔ ثابت بایگانیشده ساخته میشود.
مقادیر عمومی را تغییر دهید، Apply بزنید، سپس کپی کنید
بخش تنظیمات بسته است؛ آن را باز کنید، مقدارها را عوض کنید و پس از Apply دستور تازه را کپی کنید. تا زمانی که تغییرها اعمال نشده یا نامعتبر باشند، کپی غیرفعال است. academy-minio-lab نام کانتینر تازه و /srv/academy-minio مسیر اختصاصی داخل آن است. API روی19000 و کنسول روی19001 قرار میگیرند. باکت آزمایش academy-objects و فایل نمونه probe است؛ برای باکت دوم پسوند ثابت -outside اضافه میشود. نام باکت کوتاه و با حروف کوچک و نام فایل ساده انتخاب کنید؛ بررسی اجرایی، قواعد دقیقتر S3 را نیز کنترل میکند.
مرز آزمایشگاه را داخل کانتینر نگه دارید
یک ماشین مجازی آزمایشی x86_64 با Podman آماده، اینترنت، حداقل۳گیگابایت RAM آزاد و۵گیگابایت فضای کانتینر لازم است. این صفحه Podman را روی میزبان نصب نمیکند. کانتینر شبکهٔ مستقل دارد؛ نه پورت میزبان منتشر میشود و نه پوشهای از میزبان به آن وصل میشود. دستورهای بسته، ساخت و سرویس در شل همان کانتینر و با کاربر root کانتینر اجرا میشوند. این جداسازی برای آموزش است و سختسازی سرویس عملیاتی محسوب نمیشود.
پیشفرض بررسیشده Ubuntu26.10 است. نسخههای LTS شامل26.04 و24.04 و همچنین Debian13 و12 مسیرهای جایگزین userspace هستند. اجرای واقعی بخش مشترک در Ubuntu24.04 انجام شده؛ انتخابهای دیگر مستنداتیاند. سازگاری کرنل میزبان، معماری، Podman و نگاشت UID در حالت rootless را جداگانه بررسی کنید.
مقدارهای عمومی و پیشرفت شخصی در sessionStorage همین تب، زبان، مقاله و محیط میمانند؛ پیشرفت مقدارهای پیشفرض در localStorage است. شخصیسازی، اجرای آزمون نیست. کلید و رمز در فرم یا لینک قرار نمیگیرد؛ اعتبارنامهٔ root و اپلیکیشن مستقیماً داخل فایل خصوصی همین آزمایشگاه ساخته میشود.
قدم بعدی
کانتینر تازه را بدون پورت میزبان اجرا کنید
این کادر روی میزبان ماشین مجازی آزمایشی اجرا میشود. نام تکراری پذیرفته نمیشود. آخرین دستور شل تعاملی کانتینر را باز میکند؛ تا مرحلهٔ توقف داخل آن بمانید. فهرست پورت منتشرشده باید خالی باشد. image توزیع فقط userspace را فراهم میکند و فایل اجرایی MinIO در آن نیست.
میزبان ماشین مجازی آزمایشی · ترمینال
set -eu
test "$(uname -m)" = x86_64
if podman container exists 'academy-minio-lab'; then
printf '%s
' 'Container name already exists; stop here.' >&2
exit 1
fi
podman run --detach --name 'academy-minio-lab' --network private --memory 3g --cpus 2 docker.io/library/debian:12 sleep infinity
podman port 'academy-minio-lab'
podman exec -it 'academy-minio-lab' bash
academy-minio-lab تازه اجرا شده، پورت میزبان ندارد و شل داخل توزیع انتخابی است.
قدم بعدی
پیشنیازها را فقط داخل کانتینر نصب کنید
پیش از نصب، هویت توزیع کنترل میشود. این بستهها سرویس MinIO نصب نمیکنند و بستههای میزبان را تغییر نمیدهند. Python برای آرشیو و فایل خصوصی و OpenSSL برای گواهی کوتاهعمر آزمایشگاه است. پس از دریافت ورودیهای ساخت، همین مرز مستقل را حفظ کنید.
داخل کانتینر آزمایشگاهی · ترمینال
set -eu
. /etc/os-release
test "$ID" = debian && test "$VERSION_ID" = 12
apt-get update
apt-get install --no-install-recommends ca-certificates curl python3 openssl nano
python3 --version
python3 -c "import tarfile; assert hasattr(tarfile,'data_filter'), 'Python extraction data filter required; stop if unavailable'"
openssl version
نسخهٔ Python و OpenSSL داخل کانتینر نمایش داده میشود.
قدم بعدی
مسیر، پورت و نام باکت را پیش از ساخت کنترل کنید
فقط مسیر تازهٔ /srv/academy-minio پذیرفته میشود. والدها باید موجود، متعلق به root، بدون symlink و بدون دسترسی نوشتن دیگران باشند. پوشه یا فایل موجود باعث توقف میشود. بررسی پورت تداخل فعلی را پیدا میکند؛ سرور هنگام شروع دوباره آن را میسنجد، چون این بررسی پورت را برای همیشه رزرو نمیکند.
داخل کانتینر آزمایشگاهی · ترمینال
set -eu
python3 - <<'PY'
import os,stat,socket,shutil,re
from pathlib import Path
r=Path('/srv/academy-minio')
assert r.is_absolute() and len(r.parts)>2
assert re.fullmatch(r'[a-z][a-z0-9-]{1,30}[a-z0-9]','academy-objects'), 'Use a lowercase S3 bucket name,3-32 chars'
assert re.fullmatch(r'[a-z][a-z0-9_-]{0,31}','probe'), 'Use a simple lowercase object name'
for p in reversed(r.parents):
m=p.lstat()
assert stat.S_ISDIR(m.st_mode) and m.st_uid==0 and not m.st_mode & 0o022, 'Unsafe parent'
for port in (19000,19001):
with socket.socket() as s: s.bind(('127.0.0.1',port))
assert shutil.disk_usage(r.parent).free > 5*1024**3, 'Need 5GiB free'
r.mkdir(mode=0o700)
for n in ('downloads','bin','certs','data','private','root-client','app-client','run','backup','restored'):
(r/n).mkdir(mode=0o700)
for n in ('provision.go','start.py'):
fd=os.open(r/n,os.O_WRONLY|os.O_CREAT|os.O_EXCL|os.O_NOFOLLOW,0o600);os.close(fd)
print('New private lab root; ports free; no files replaced')
PY
مسیر خصوصی /srv/academy-minio ایجاد شده، هر دو پورت داخلی آزادند و۵گیگابایت فضا وجود دارد.