5

我不知道如何设置 django-storages。所有的方向似乎都不完整或什么的。

我试过了: 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/ 和其他几个我现在找不到的。

4

1 回答 1

14

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

  1. 在 Amazon 上设置一个帐户并获取 Amazon Web Services。(它会检查您的信用卡,但最初不会向您收费。)
  2. 转到 AWS Web 控制台,转到 S3(文件存储)。创建一个新的存储桶
  3. 在存储桶属性中,向 Authenticated Users 添加写入权限。
  4. 在 AWS 控制台中,转到服务 > 部署和管理 > IAM(身份和访问管理)。在其中创建一个用户组和一个用户。不要关闭弹出窗口!在弹出窗口中,单击“下载凭据”以保存密钥。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 部分并获取存储桶的 url,将其粘贴到设置文件中,并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. 只是为了检查文件是否可以从 Web 访问,请将存储桶的 S3 Web url 粘贴到 STATIC_URL 中。运行 Django 并查看 statc 资产的来源。

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

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

    选择:

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

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

希望这可以帮助。

于 2013-08-17T09:46:21.333 回答