设置django-storage

时间:2013-08-17 05:41:20

标签: django django-storage

我无法为我的生活弄清楚如何设置django-storage。所有的方向似乎都是不完整的。

我试过了: http://django-storages.readthedocs.org/en/latest/backends/amazon-S3.html http://blog.doismellburning.co.uk/2012/07/14/using-amazon-s3-to-host-your-django-static-files/ 还有一些我现在找不到的。

我已经在youtube上查看了一个跟随的视频教程,但没有任何内容。

我看了看stackoverflow,我只是输了。我不知道该怎么做。

1 个答案:

答案 0 :(得分:11)

这是我为同事们制作的设置清单。

  1. 在亚马逊上设置帐户并获取Amazon Web Services。 (它会检查您的信用卡,但最初不会向您收费。)
  2. 转到AWS Web控制台,转到S3(文件存储)。创建一个新的存储桶
  3. 在存储桶属性中,向已验证用户添加写入预留。
  4. 在AWS控制台中,转到服务>部署和管理> IAM(身份和访问管理)。在其中创建一个用户组和一个用户。不要关闭POPUP窗口!在弹出窗口中,单击“下载凭据”以保存密钥。 Django需要它们settings_local.py
  5. 如果您忘记或丢失了密钥,请转到该用户>安全证书>访问凭据>管理访问密钥。创建密钥并保存凭据。
  6. 仍在IAM中,设置用户访问权限:

    {
      "Version": "2013-08-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "s3:*",
         "Resource": ["*"]
        }
      ]
    }
    

    此策略允许访问用户组的所有存储桶:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Action": [
            "s3:ListAllMyBuckets"
          ],
          "Effect": "Allow",
          "Resource": "arn:aws:s3:::*"
        },
        {
          "Action": [
            "cloudfront:*"
          ],
          "Effect": "Allow",
          "Resource": "*"
        }
      ]
    }
    

    现在,存储桶已设置,用户可以访问它。您可以尝试从Django设置和测试对存储桶的访问。

  7. 安装以下软件包:

    django-storages==1.1.8
    boto==2.9.7
    
  8. 我将此代码添加到settings_local.py,以免将其公开给那些查看提交的人:

    USE_AMAZON = False  # Set this to True when ready
    STATIC_URL = 'your-bucket-s3-url'
    DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXX'
    AWS_SECRET_ACCESS_KEY = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'
    AWS_STORAGE_BUCKET_NAME = 'your-bucket-name'
    
  9. 此代码转到settings.py

    from settings_local import *
    
    if USE_AMAZON:
        BASE_MEDIA_URL = 'static'
                    MEDIA_URL = '/media/'
    
        DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
    
        STATIC_ROOT = os.path.join(settings.BASE_PATH, 'static')
        MEDIA_ROOT = os.path.join(settings.BASE_PATH, 'old_media')
        STATICFILES_DIRS = (
            ('img', os.path.join(STATIC_ROOT, 'img'),
            ('js', os.path.join(STATIC_ROOT, 'js'),
        )
    
        INSTALLED_APPS += (
            'django.contrib.staticfiles',
            'storages',
        )
    
  10. 转到AWS S3部分,获取您的存储桶的网址,将其粘贴到设置文件中,相应地设置STATIC_URL

  11. 将凭据中的密钥粘贴到settings_local.py中。 现在Django应该能够将静态文件上传到存储。

  12. 运行此命令:

    $ uenv/bin/python your_project/manage.py collectstatic
    
  13. 如果上传文件,那么一切都是正确的。如果没有,请检查错误消息。

    1. 如果Django崩溃,那么它是本地设置问题(最可能是导入错误 - 然后执行pyflakes your_project/settings*.py)。
    2. 如果远程服务器响应403,那么它是用户访问策略问题。您需要转到用户并设置访问权限,并进行存储并检查经过身份验证的用户是否具有权限。
  14. 只是检查文件是否可以从网络访问,将存储桶的S3网址粘贴到STATIC_URL中。运行Django并查看statc资产的来源。

    如果您想要CloudFront,还需要更多步骤。

  15. 在AWS中,转到服务>存储&内容传递> CloudFront的。创建分发。分发就像一个可以访问文件夹的虚拟Web服务器。

    选择:

    • 下载
    • 原始域名=您在第一步中创建的存储桶的域名。
    • 分发状态=已启用
  16. 转到新的分发设置并复制域名。将其粘贴为STATIC_URL文件中的settings_local.py。 来自CloudFront的新STATIC_URL不应包含存储桶名称,因为此域名专门针对该存储桶。

    此URL是一种敏感数据,因为访问它会花费您真正的金钱并且比本地开发服务器慢,因此可能不应该在开发环境中运行。

  17. 希望这有帮助。