در این مقاله
نسخهٔ جدید اپ را دیپلوی کردهاید و تصویرهایی که کاربران دیروز آپلود کردند، دیگر باز نمیشوند. رکوردها هنوز در دیتابیساند، ولی فایلها در مسیر uploads/ کانتینر قبلی ماندهاند. همین مشکل پیش از دیپلوی هم رخ میدهد اگر یک نمونهٔ اپ فایل را بنویسد و درخواست دانلود به نمونهٔ دیگری برسد. اگر کد شما فایل را از طریق API میخواند و مینویسد، object storage فایل را از چرخهٔ عمر اپ جدا میکند. اگر برنامه به مسیر محلی وابسته است، هزینهٔ تغییر کد را با اتصال دیسک پایدار مقایسه کنید.
برای فایلهای اپ از کجا شروع کنید؟
برای عکس، پیوست، PDF و خروجی گزارش، یک سرویس سازگار با S3 را امتحان کنید. از محیط اجرای اپ، فایلی بیحساسیت را در یک Bucket خصوصی بنویسید و دوباره بخوانید. اگر برنامه باید فایل را از مسیر محلی باز کند یا بخشی از آن را درجا تغییر دهد، دیسک پایدار را بررسی کنید. با MinIO میتوانید سرویس سازگار با S3 را روی زیرساخت خودتان اجرا کنید. پیش از انتخاب نسخهٔ Community برای محیط عملیاتی، وضعیت نگهداری آن را بررسی کنید. مستندات دیسک پایدار Kubernetes · مخزن رسمی MinIO
object storage چه چیزی را در معماری اپ عوض میکند؟
در مدل S3، اپ فایل را به یک سرویس میفرستد. Endpoint آدرس API سرویس است، Bucket محفظهٔ فایلهاست و Object Key نام کامل فایل در آن محفظه است. در s3://app-files/invoices/example.pdf، نام Bucket برابر app-files و کلید invoices/example.pdf است. از پیشوند invoices/ میتوانید برای دستهبندی فایلها استفاده کنید. مدل ذخیرهسازی در مستندات Amazon S3
کلید فایل، مالک و نام نمایشی را در دیتابیس نگه دارید. هنگام دانلود، بکاند مجوز کاربر را بررسی میکند و اگر سرویس پشتیبانی کند، برای همان عملیات یک لینک امضاشده با زمان انقضای مشخص میسازد. هرکس لینک معتبر را داشته باشد، میتواند در محدودهٔ همان لینک از آن استفاده کند. آدرس کاملش را در لاگ ننویسید. راهنمای لینک امضاشدهٔ Amazon S3
دیسک پایدار، S3 مدیریتشده یا MinIO؟
|
گزینه |
چه زمانی مناسب است؟ |
چه کاری بر عهدهٔ شما میماند؟ |
|
دیسک پایدار |
برنامه به مسیر محلی و رفتار فایلسیستم وابسته است. |
مسیر اتصال دیسک، دسترسی نمونههای اپ و بازیابی داده را بررسی میکنید. |
|
سرویس مدیریتشدهٔ سازگار با S3 |
اپ با API کار میکند و میخواهید ادارهٔ زیرساخت را به ارائهدهنده بسپارید. |
دسترسی اپ، سیاست نگهداری فایل، هزینهٔ درخواست و ترافیک و مسیر بازیابی را بررسی میکنید. |
|
MinIO خودمیزبان |
کنترل محل داده یا شبکهٔ سرویس برایتان مهم است و تیم میتواند آن را اداره کند. |
بهروزرسانی، TLS، ظرفیت دیسک، پایش، بکاپ و بازیابی را مدیریت میکنید. |
در وردپرس، رسانههای آپلودی را جدا از فایلهایی بررسی کنید که وردپرس یا افزونهها از مسیر محلی میخوانند. اگر افزونه رسانه را به S3 میفرستد، انتشار تصویر، ساخت اندازههای مختلف و حذف آن را آزمایش کنید. اگر هنوز دربارهٔ محل اجرای وردپرس تصمیم میگیرید، راهنمای «دیپلوی وردپرس روی کوبرنتیز؛ کی ارزش دارد و چگونه» توضیح میدهد این انتخاب چه زمانی ارزش دارد و چطور انجام میشود.
اگر اپ به مسیر محلی وابسته است، بررسی کنید که فایلها را در همان مسیری مینویسد که دیسک پایدار به آن متصل است. راهنمای«Persistent Volume: چرا دیتای کانتینر شما پاک میشود» توضیح میدهد چرا فایلهای خارج از این مسیر ممکن است با جایگزینی کانتینر از دست بروند.
برای انتخاب سرویس S3 در ایران، هزینه را بر اساس حجم فایلها، تعداد دانلودها و ترافیک خروجی بسنجید. اتصال را از محیط اجرای اپ امتحان کنید. اگر مرورگر مستقیماً فایل میگیرد یا میفرستد، از شبکهٔ کاربران هم آزمایش کنید.
قبل از تغییر کد، یک فایل را آپلود و دانلود کنید
۱. محیط آزمایش را آماده کنید. یک Bucket خصوصی آزمایشی بسازید و Endpoint و Region را از ارائهدهنده بگیرید. در AWS CLI پروفایل storage-test را با مجوز خواندن و نوشتن روی پیشوند smoke/ آماده کنید. کلید را در خط فرمان یا Repository وارد نکنید. اگر ارائهدهنده قالبی برای قراردادن نام Bucket در URL مشخص کرده، پروفایل را مطابق مستندات آن تنظیم کنید.
۲. مسیر رفتوبرگشت را بسنجید. Endpoint رزروشده و نام Bucket را با مقادیر آزمایشی خودتان جایگزین کنید و دستورها را در Bash اجرا کنید. راهنمای AWS CLI برای MinIO
(
set -e
workdir=$(mktemp -d)
endpoint='https://s3.example.com'
object="s3://app-files-test/smoke/${workdir##*/}.txt"
printf '%s\n' 'storage smoke test' > "$workdir/original.txt"
aws --profile storage-test --endpoint-url "$endpoint" \
s3 cp "$workdir/original.txt" "$object"
aws --profile storage-test --endpoint-url "$endpoint" \
s3 cp "$object" "$workdir/download.txt"
cmp "$workdir/original.txt" "$workdir/download.txt"
)
دستورها یک Object میسازند و نسخهای از آن را دانلود میکنند. اگر بایتها برابر باشند، cmp بیصدا با موفقیت تمام میشود. هر اجرا پوشهٔ موقت و کلید تازهای میسازد و فایلهای آزمایش را نگه میدارد. اگر آپلود یا دانلود شکست خورد، مرحلهٔ ناموفق را جدا کنید و بخش رفع خطا را ببینید.
۳. همین آزمون را در خود اپ تکرار کنید. Endpoint، Region و نام Bucket را در تنظیمات اپ و اعتبارنامه را در Secret بگذارید. پاستا از متغیر محیطی و Secret پشتیبانی میکند. از طریق اپ یک فایل آپلود کنید و پس از استقرار مجدد آن را بگیرید. با حساب دیگری هم بررسی کنید که اپ دسترسی را رد میکند. اگر CLI موفق بود و اپ خطا داد، تنظیمات SDK و هویت سرویس را بررسی کنید.
هزینه و مسئولیت ذخیرهسازی کجا میماند؟
طبق وضعیت مخزن رسمی در ۸ نوامبر ۲۰۲۶، مخزن نسخهٔ Community مینآیاو آرشیو و فقطخواندنی است. README میگوید این نسخه بهصورت کد منبع عرضه میشود و باینریهای قدیمی دیگر بهروزرسانی نمیشوند. پیش از انتخاب آن برای محیط عملیاتی، مشخص کنید چه کسی مسئول وصلههای امنیتی و ارتقاست. مخزن و وضعیت توزیع MinIO Community
پاستا اپ را اجرا میکند، اعتبارنامه را در Secret میگیرد و میتواند به سرویسِ وابسته به فایلسیستم دیسک پایدار بدهد. اگر به کنترل مستقیم محل داده، توپولوژی دیسک یا زمان ارتقای سرور ذخیرهسازی نیاز دارید، آن بخش به زیرساختی نیاز دارد که خودتان اداره میکنید. برای لینک امضاشده، نسخهبندی و بازیابی Object، مستندات سرویس و پلن انتخابی را بررسی کنید.
بازیابی فایل و دیتابیس را با هم تمرین کنید. در محیطی جداگانه، یک رکورد بازیابیشده را باز کنید و ببینید کلید آن به فایلی قابلخواندن اشاره میکند. ممکن است رکورد برگردد و فایل متناظر در نسخهٔ بازیابیشده موجود نباشد. برای طراحی این آزمون، از راهنمای «بکاپ و بازیابی از فاجعه (DR) برای اپلیکیشنهای ابری» استفاده کنید.
نظرات کاربران (۰)
هنوز نظری ثبت نشده است. اولین نفر باشید.