假设已经有S3的bucket存储
安装依赖module
$ pip install django-storages boto
配置Django
static静态文件和media多媒体(多为用户上传)需要分目录存储,新建s3utils.py文件:
from storages.backends.s3boto import S3BotoStorage
StaticS3BotoStorage = lambda: S3BotoStorage(location='static')
MediaS3BotoStorage = lambda: S3BotoStorage(location='media')
settings.py添加S3配置:
AWS_STORAGE_BUCKET_NAME = 'horoscope-cxclient'
DEFAULT_FILE_STORAGE = 'horoscope_web.src.s3utils.MediaS3BotoStorage'
STATICFILES_STORAGE = 'horoscope_web.src.s3utils.StaticS3BotoStorage'S3_URL = 'http://%s.s3.amazonaws.com' % AWS_STORAGE_BUCKET_NAME
STATIC_DIRECTORY = '/static/'
MEDIA_DIRECTORY = '/media/'
STATIC_URL = S3_URL + STATIC_DIRECTORY
MEDIA_URL = S3_URL + MEDIA_DIRECTORY
因为S3开放了本机访问权限,因为不需要认证。
需要认证的添加 KEY_ID 和ACCESS_KEY:
AWS_ACCESS_KEY_ID = 'YOURACCESSKEY'
AWS_SECRET_ACCESS_KEY = 'YOURSECRETACCESSKEY'
部署
运行collectstaticDjango管理命令
:
静态文件应该以http://horoscope-cxclient.s3.amazonaws.com/static/为结尾。
任何上传的文件FileField或ImageField模型上的属性都应该在http://horoscope-cxclient.s3.amazonaws.com/media/中。如果这些模型属性指定upload_to路径,则存储于/media/***
。
CDN配置
如上配置配置成功后,资源访问域名是https://horoscope-cxclient.s3.amazonaws.com/media/
https://horoscope-cxclient.s3.amazonaws.com/media/fortunes_wci_img/wci_c013086e41c4e4159dc42b6b0448b6c8.png
发现资源加载速度慢了很多,17K耗时将近两秒,而且不同区域访问不稳定。
此时就应该祭出CDN了 知乎CDN
CDN HOST:http://***.cloudfront.net/
,解析至http://static.mobileapp666.com
域名下,settings配置:
AWS_S3_SECURE_URLS = False
#AWS_S3_USE_SSL = False
AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat'
AWS_S3_CUSTOM_DOMAIN = 'static.mobileapp666.com'
重启后资源通过http://static.mobileapp666.com/**
访问,速度有了明显的提高。
AWS_S3_SECURE_URLS: 是否启动安全网址,即是否使用https, 默认为True,因为https需要申请证书等等一系列处理,暂时设置为False后将使用http协议。
使用 staticfiles
The one from staticfiles ({% load static from staticfiles %}) is smarter - it uses whatever storage class you've configured for static files to come up with the URL.
By using the one from staticfiles from the start, you'll be prepared for any storage class you might decide to use in the future.
常用命令:
-
查看
aws s3 ls s3://bucketname/
aws s3 ls s3://bucketname/dir_name
-
上传
单个文件
aws s3 cp 目标文件 上传路径
aws s3 cp source_file s3://bucktename/dir_name
上传目录 需要添加参数 --recursive
aws s3 cp source_file s3://bucktename/dir_name --recursive
AWS CLI命令参考:AWS CLI Command Reference
参考:
cname-support-aws_s3_custom_domain-doesnt
django-wont-serve-static-files-from-amazon-s3-with-custom-domain
Using-Amazon-S3-to-store-your-Django-sites-static-and-media-files
网友评论