美文网首页
Django使用S3服务

Django使用S3服务

作者: Andrew玩Android | 来源:发表于2017-08-03 16:25 被阅读126次

    假设已经有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.


    常用命令:

    1. 查看
      aws s3 ls s3://bucketname/
      aws s3 ls s3://bucketname/dir_name

    2. 上传

    单个文件
    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


    参考:

    django-s3-temporary

    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

    相关文章

      网友评论

          本文标题:Django使用S3服务

          本文链接:https://www.haomeiwen.com/subject/tifjlxtx.html