- Amazon でアカウントを設定し、Amazon Web Services を取得します。(クレジット カードをチェックしますが、最初は請求されません。)
- AWS Web コンソールに移動し、S3 (ファイル ストレージ) に移動します。新しいバケットを作成します。
- バケットのプロパティで、Authenticated Users に書き込み権限を追加します。
- AWS コンソールで、[サービス] > [デプロイと管理] > [IAM (Identity and Access Management)] に移動します。ユーザー グループとその中に 1 人のユーザーを作成します。ポップアップ ウィンドウを閉じないでください。ポップアップ ウィンドウで、[資格情報のダウンロード] をクリックしてキーを保存します。それらは Django に必要です
settings_local.py
。
- キーを忘れた、または紛失した場合は、そのユーザー > [セキュリティ資格情報] > [アクセス資格情報] > [アクセス キーの管理] に移動します。キーを作成し、資格情報を保存します。
引き続き 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 からバケットへのアクセスの設定とテストを試すことができます。
次のパッケージをインストールします。
django-storages==1.1.8
boto==2.9.7
このコードを追加して、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'
このコードは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',
)
AWS S3 セクションに移動して、バケットの URL を取得し、それを設定ファイルに貼り付けて、それにSTATIC_URL
応じて設定します。
資格情報からキーを settings_local.py に貼り付けます。これで、Django は静的ファイルをストレージにアップロードできるようになります。
次のコマンドを実行します。
$ uenv/bin/python your_project/manage.py collectstatic
ファイルをアップロードする場合、すべてが正しいです。そうでない場合は、エラー メッセージを確認してください。
- Django がクラッシュした場合、それはローカル セットアップの問題です (ほとんどの場合、インポート エラー - その後、実行します
pyflakes your_project/settings*.py
)。
- リモート サーバーが 403 を返す場合、それはユーザー アクセス ポリシーの問題です。ユーザーに移動してアクセスを設定し、認証されたユーザーに権限があるかどうかをバケット化して確認する必要があります。
Web からファイルにアクセスできることを確認するには、バケットの S3 Web URL を STATIC_URL に貼り付けます。Django を実行して、statc アセットがどこから来ているかを確認します。
CloudFront が必要な場合は、さらにいくつかの手順があります。
AWS で、[サービス] > [ストレージとコンテンツ配信] > [CloudFront] に移動します。ディストリビューションを作成します。配布は、フォルダーにアクセスできる仮想 Web サーバーのようなものです。
選ぶ:
- ダウンロード
- オリジン ドメイン名 = 最初の手順で作成したバケットのドメイン名。
- 配布状態 = 有効
新しい配布設定に移動し、ドメイン名をコピーします。STATIC_URL
ファイルのように貼り付けsettings_local.py
ます。このドメイン名はそのバケット専用であるため、CloudFront からの newSTATIC_URL
にはバケット名を含めないでください。
この URL は、アクセスすると実際にお金がかかり、ローカルの開発サーバーよりも遅いという意味で機密データであるため、おそらく開発環境では実行しないでください。