- 在Amazon上設置帳戶並獲取Amazon Web Services。 (它會檢查您的信用卡,但最初不會收費。)
- 轉到AWS Web控制檯,轉到S3(文件存儲)。創建一個新的存儲桶。
- 在存儲桶屬性中,向已認證的用戶添加寫入準備。
- 在AWS控制檯中,轉到服務>部署&管理> IAM(身份和訪問管理)。在其中創建一個用戶組和一個用戶。不要關閉POPUP窗口!在彈出窗口中,單擊「下載憑證」以保存密鑰。他們需要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,那麼它是用戶訪問策略問題。您需要前往用戶並設置訪問權限,並檢查經過身份驗證的用戶是否擁有權限。
只是爲了檢查文件是否可以從網上訪問,請將存儲桶的S3網址粘貼到STATIC_URL中。運行Django並查看statc資產的來源。
如果您需要CloudFront,還需要執行一些步驟。
在AWS中,轉到服務>存儲& Content Delivery> CloudFront。創建一個分配。分發就像一個可以訪問文件夾的虛擬Web服務器。
選擇:
- 下載
- 原產地域名=你在第一個步驟中創建的桶的域名。
- 分佈狀態=啓用
轉到新的分配設置,並複製該域名。將其作爲STATIC_URL
粘貼到settings_local.py
文件中。 來自CloudFront的新STATIC_URL
不應包含存儲桶名稱,因爲此域名專用於該存儲桶。
這個URL是一個敏感數據,因爲訪問它會花費你真正的錢,並且比本地開發服務器慢,所以它可能不應該在開發環境中運行。
這是星期五。去喝一杯啤酒,週一再試一次,頭部清潔。 :-) –
我還不夠大喝:(我一直在尋找關於如何做到這一點的方法,現在幾天了,我準備放棄了 – Zacharoo
有時你只需要退後一步並在休息一會兒再試一次,獲得一些分心(不是遊戲或電腦相關),並從明天開始從零開始 –