【问题标题】:How do I set up django-storages?如何设置 django-storages?
【发布时间】:2013-08-17 05:41:20
【问题描述】:

我不知道如何设置 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/ 还有一些我现在找不到的。

【问题讨论】:

    标签: django python-django-storages


    【解决方案1】:

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

    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. 只是为了检查文件是否可以从网络访问,请将存储桶的 S3 网络 URL 粘贴到 STATIC_URL 中。运行 Django 并查看 statc 资产的来源。

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

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

      选择:

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

      从某种意义上说,此 URL 是敏感数据,访问它需要花费真金白银,并且比本地开发服务器慢,因此它可能不应该在开发环境中运行。

    希望这会有所帮助。

    【讨论】:

    • 我应该在settings.pyINSTALLED_APPS 中添加“存储”吗?尽管我没有使用它,但据我测试它确实适用于 s3
    • @umi0410 这个我不记得了,我已经有 5 年没用这个了。请尝试并在此处发布结果。
    猜你喜欢
    • 1970-01-01
    • 2013-07-18
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2019-08-30
    • 2020-03-26
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多