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 (Identity and Access Management)] に移動します。ユーザー グループとその中に 1 人のユーザーを作成します。ポップアップ ウィンドウを閉じないでください。ポップアップ ウィンドウで、[資格情報のダウンロード] をクリックしてキーを保存します。それらは 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_URLファイルのように貼り付けsettings_local.pyます。このドメイン名はそのバケット専用であるため、CloudFront からの newSTATIC_URLにはバケット名を含めないでください。

    この URL は、アクセスすると実際にお金がかかり、ローカルの開発サーバーよりも遅いという意味で機密データであるため、おそらく開発環境では実行しないでください。

お役に立てれば。

于 2013-08-17T09:46:21.333 に答える