سرو فایلهای استاتیک در آمازون s3

سلام خدمت دوستان .
چند مدتی هست که از آمازون s3 bucket storage برای سرو فایل ها استفاده میکنم به نظرم خیلی عالی هست ( نظره شخصی ) دلیلشم با یه مثال میتونم بگم که پروژه ای بود که هر کاربر آواتاری رو آپلود میکرد بعد مدتی غرق در عکسهای یوزر ها شده بودیم . با استفاده از این سرویس عملا همه ی این استاتیک فایل ها رو خارج از پروژه نگه داری کردیم .
یه مثال دیگه در مورد لاگ بود که به همین روش تمامیه فایل های لاگ رو در فضای دیگه ای نگه می‌داشتیم .
خوب بریم که کوتاه تموم کنیم :grimacing:

۱ ساختن aws S3 bucket storage
برای راه اندازی بر روی پروژه جنگو نیاز داریم یه سری اطلاعات رو داخل settings.py قرار بدیم که به ترتیب جلو می‌رویم .

S3 BUCKETS CONFIG

AWS_ACCESS_KEY_ID = ''
AWS_SECRET_ACCESS_KEY = ''
AWS_STORAGE_BUCKET_NAME = '
AWS_S3_FILE_OVERWRITE = 
AWS_DEFAULT_ACL = 
DEFAULT_FILE_STORAGE = ''
STATICFILES_STORAGE = ''

ابتدا یه اکانت آمازون بسازید و کارت اعتباری داخلش باید اضافه بشه . گر چه هیچ مبلغی از شما کسر نمیکنه چون خیلی از سرویس ها تقریبا رایگان هستن ( در حد استفاده کوچیک رایگانه )

بعد از داشبورد S3 رو جستجو کنید و به داشبوردش برید
روی create bucket کلیک کنید .


مرحله ۱.۱
Bucket name :
اسمتون باید یونیک باشه بدونه کارکتر های غیر مجاز
اسم انتخابی مثال :x-site-bucket

Region :
مهم نیست فعلا هر چی که براتون دیده شد بزارین بمونه
منطقه انتخابی مثال : US West

کلیک next
دوباره next تا ساخته بشه :grin:

بعد از دقایقی bucket storage شما حاضر میشه . نیازه که پرمیشن های مناسب برای دسترسی رو تایین کنیم


مرحله ۱.۲
روی x-site-bucket کلیک کرده و قسمت permission و زیر شاخه CORS configuration رو انتخاب کنید . خیلی خلاصه تیکه کد پایین رو قرار میدیم و سیو میکنیم

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>GET</AllowedMethod>
    <AllowedMethod>POST</AllowedMethod>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>

۲ ساختن کاربر برای دسترسی IAM

از داشبورد اینبار IAM رو جستجو کنید . بعد قسمت users

Username : xsiteusername
Access type : Programmer access


بعدی permission >
قسمت attach existing policies directly >
AmazonS3FullAccess رو انتخاب میکنیم

بعدی . Access key ID و secret access key برای تنظیمات جنگو مورد نیاز هست اینا رو یه جا دمه دست کپی میکنیم تا جا گذاری کنیم :grin:


مثال :

AWS_ACCESS_KEY_ID = 'AKIAVDJSGSKNFLSLFJRK'
AWS_SECRET_ACCESS_KEY = 'somelongstringandnumber'
AWS_STORAGE_BUCKET_NAME = 'x-site-bucket'

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


برای تموم کردن این قضیه چند تا کتابخونه هم نیازه نصب کنیم تو این مرحله :

۳ . پروژه جنگو

pip install django-storages
pip install boto3
settings.py

INSTALLED_APP = [
....
'storages',
[
AWS_S3_FILE_OVERWRITE = False
AWS_DEFAULT_ACL = None
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

به همین سادگی تمامی استاتیک فایل ها از آمازون سرو میشه . هر چی سعی کردم کتابی بنویسم نشد :woozy_face:


Source :
1 .
https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-STATICFILES_STORAGE
https://docs.djangoproject.com/en/3.0/ref/settings/#std:setting-STATIC_ROOT
2.
https://django-storages.readthedocs.io/en/latest/
3.
https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html
4.
https://boto3.amazonaws.com/v1/documentation/api/latest/index.html
5.
https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html
6.
https://docs.amazonaws.cn/en_us/IAM/latest/UserGuide/introduction.html

1 پسندیده

قیمتهای خیلی خوبی هم داره

1 پسندیده

https://aws.amazon.com/free/

تو اسکیل بزرگ خیلی گرون میشه یهو ولی حالت کلی خیلی خوبه ۱۲ ماه رایگان داره

1 پسندیده

راستش نه، خیلی بصرفه‌ تر از بیشتر سرویس های مشابه قیمت میده.
به هر حال هر چیزی در مقیاس زیاد هزینه زیادی داره :grin: بستگی داره منظورمون از اسکیل بالا چی باشه. مثلا اگر Github و فیسبوک پروژه های بزرگی بحساب میان و پروژه خونگی من کوچک، حالا کوچکی و بزرگی پروژه چطوری اندازه گیری میشه، و متوسط یعنی چی؟ بنظر پرت و پلا میاد چون هدفم فان بود اما در واقعیت درسته

اصلاح میکنم حرفمو . منظور از اسکیل بزرگ کمی از متوسط به بالا بود . خوب اینجوری بگم قسمت billing بعضی ماه ها رقمهای زیاد دیده شده که برای ما زیاده بزرگ حساب میشه :sweat_smile::sweat_smile::sweat_smile:

1 پسندیده

مشکل تبدیل ارز نیست، منظورم اینه که اگر یک میلیون تن نخودسیاه هم که بخوای سفارش بدی از کسی میخری که قیمتش نسبت به کیفیت از بقیه بهتر باشه :money_mouth_face:
بیشتر پروژه ها اهداف تجاری دارند پس دخل و خرج پروژه مهمه و سود دهی

1 پسندیده

از شیر مرغ تا جون آدمیزاد دارن :grin::grin::grin:

1 پسندیده


1 پسندیده

بله، و اگر وابسته بشی دیگه به این راحتی نمیشه‌ ازش خلاس شد، بهتره بخشهایی از سیستم که از آمازون قابل انتقال نیست خودت پیاده کنی و از آمازون فقط به عنوان زیرساخت استفاده کنی

1 پسندیده