قضیه از اونجایی شروع شد که من چند وقتیه در حال ضبط دوره های آموزشی برنامه نویسی هستم و چند هفته ای هست دنبال سرویس دهنده خوب برای میزبانی فایل میگردم. و دنبال راهی کم هزینه و با کارایی بالا برای ساخت لینک های زماندار میگردم. این کار باعث میشه کاربر ها نتونن لینک های دانلود رو به اشتراک بزارن (حداقل اگر هم این کار رو انجام بدن لینک بعد از n ساعت غیر قابل استفاده میشه)
این موضوع رو داخل یکی از انجمنهایی که که عضوش هستم مطرح کردم کاربرها راه های مختلفی رو پیشنهاد دادن، یکی از راه هایی که نظرم رو جلب کرد ساخت پوشه alias از طریق htaccess بود به این صورت:
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^virtual-path/(.*)$ original-path/$1 [QSA] </IfModule>
به این صورت مسیر original-path به صورت مجازی از طریق مسیر virtual-path در دسترس کاربر قرار میگیره و بعد از n ساعت اون خط از htaccess حذف میشه. برای این کار حتی نیازی به دیتابیس هم نیست چون میشه زمان غیر فعال شدن هر لینک رو جلوی کد htaccess به صورت کامنت اضافه کرد، به این صورت:
RewriteRule ^ds5d4s564ds54d5d45s4d5sd45/(.*)$ orginal-path/$1 [QSA] # User 51 - Order 6750 - Expire On 2020-05-04 12:53:05 RewriteRule ^4656asd4s5daw98ew9e8ww8ew5/(.*)$ orginal-path/$1 [QSA] # User 12 - Order 6700 - Expire On 2020-05-02 14:53:05 RewriteRule ^ghtft2fghf45ty45ytyt5ryrtt/(.*)$ orginal-path/$1 [QSA] # User 93 - Order 6732 - Expire On 2020-05-03 12:53:05
و در آخر یک فایل php که با cronjobs هر ساعت اجرا میشه و خط هایی که تاریخ گذشته هستن رو حذف میکنه.
واقعا روش جالبی هست. CPU سرور درگیر نمیشه، فضای اضافه ای از هارد اشغال نمیشه و نیازی به دیتابیس هم نداره! مشکلی که وجود داشت نگرانی از آپتایم سرور بود، من سروری میخواستم که قابل اعتماد باشه و تماس با پشتیبانی برای حل مشکلات یا تغییر تنظیمات و حل مشکلات سرور وقت زیادی از من نگیره.
همینطور که داخل انجمن میگشتم یکی از کاربر ها سایت آروان کلود رو معرفی کرد، و گفت که این سایت سرویس میزبانی فایل داخلی داره با امکانات مشابه s3 آمازون
من: O_O
سرور s3؟ داخل ایران؟ مگه میشه؟ مگه داریم؟
من از آروان خاطره خوبی نداشتم چون یک بار سرویس CDN این شرکت رو تست کردم و مقدار TTFB سایتم از حدود 200 میلی ثانیه به حدود 600 میلی ثانیه رسید، TTFB باید با CDN کاهش پیدا کنه یا حداقل ثابت بمونه. متاسفانه این مسئله باعث شد از CDN آروان استفاده نکنم. اولین واکنش من بعد از دیدن TTFB 600 میلی ثانیهای:
ولی این مساله باعث نشد که وارد سایت آروان کلود نشم! خوشبختانه فعلا پلن رایگان داره و بدون ریسک میتونم این سرویس رو تست کنم.
مستندات وبسرویس رو میتونید از لینک زیر ببینید:
https://docs.ceph.com/docs/master/radosgw/s3/
با زبان های مختلف میتونید از این وبسرویس استفاده کنید مثل C#, C++, Java, Perl, Ruby, Python من برای این پروژه از زبان PHP استفاده کردم. برای نصب SDK مربوط به PHP باید دستور زیر رو اجرا کنید:
composer require aws/aws-sdk-php
و برای دوستانی که با PHP آشنا نیستن، برای نصب composer میتونید از این سایت استفاده کنید:
https://getcomposer.org/
برای شروع باید پکیج رو لود کنید و کلید های دریافتی از آروان کلود رو وارد کنید:
use Aws\S3\S3Client; define('AWS_KEY', 'PASTE_AWS_KEY_HERE'); define('AWS_SECRET_KEY', 'PASTE_AWS_SECRET_KEY_HERE'); $ENDPOINT = 'https://s3.ir-thr-at1.arvanstorage.com'; require __DIR__.'/vendor/autoload.php';
و یک کلاینت s3 بسازید:
$client = new S3Client([ 'region' => '', 'version' => '2006-03-01', 'endpoint' => $ENDPOINT, 'credentials' => [ 'key' => AWS_KEY, 'secret' => AWS_SECRET_KEY ], 'use_path_style_endpoint' => true ]);
با این دستور میتونید لیست Bucket یا صندوق های فایلی که ساختید رو ببینید:
$listResponse = $client->listBuckets(); $buckets = $listResponse['Buckets']; foreach ($buckets as $bucket) { echo $bucket['Name']; }
و با این دستور میتونید لینک زماندار برای فایل ها بسازید:
$secret_plans_cmd = $client->getCommand('GetObject', ['Bucket' => 'BUCKET_NAME', 'Key' => 'FILE_NAME']); $request = $client->createPresignedRequest($secret_plans_cmd, 'TIME_HERE'); echo $request->getUri()."\n"
در این دستور
به جای BUCKET_NAME نام صندوق مثلا
python-course
به جای FILE_NAME اسم فایل مورد نظر مثلا
00_Introuduction.mp4
و به جای TIME_HERE زمان مورد نظر برای اکسپایر شدن لینک رو وارد کنید. مثلا
+120 second
+60 minute
+12 hour
هنوز درباره این سرویس مطمئن نیستم. یکی دیگه از اعضای انجمنی که بالاتر دربارش گفتم سایت های مشابه مثل liara رو هم معرفی کرده که سرویس مشابه آروان ارائه میده. اگر آروان کلود کیفیت مد نظرم رو نداشته باشه بقیه سرویس هارو هم تست میکنم.
شاید این مطلب یه جور تبلیغ برای آروان باشه، من این سرویس رو تازه تست کردم و نمیدونم روز های آینده هم پایداری خودش رو حفظ میکنه یا نه. از این که بدون هیچ مشکل خاصی تونستم از این سرویس استفاده کنم خوشحال شدم و این مطلب رو نوشتم. اگر تجربه ای از سرویس های مشابه ایرانی دارید لطفا کامنت بزارید و تجربه خودتونو بگید.