2017-01-02 3 views
0

Я установил свой проект Django, DNS и ведро на Amazon S3, но python manage.py collectstatic и, следовательно, файлы, загруженные вручную, не будут работать.Django не будет обслуживать статические файлы от Amazon S3 с пользовательским доменом

AWS S3 Настройки:

Имя Ковш: files.domain.com

Bucket политика:

{ 
    "Id": "Policy1483363850641", 
    "Version": "2012-10-17", 
    "Statement": [ 
    { 
     "Sid": "Stmt1483363848944", 
     "Action": "s3:*", 
     "Effect": "Allow", 
     "Resource": "arn:aws:s3:::files.domain.com/*", 
     "Principal": "*" 
    } 
    ] 
} 

Настройки DNS:

files.domain.com -> CNAME -> files.domain.com.s3.amazonaws.com

Джанго Настройки:

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage' 
AWS_ACCESS_KEY_ID = 'XXXXXXXXXXXXXXXXXXXX' 
AWS_SECRET_ACCESS_KEY = 'XxXxXXxXXXXXxxxXxxXXXxXxxXXXXXXXXxxxXxxx' 
AWS_STORAGE_BUCKET_NAME = 'files.domain.com' 
AWS_AUTO_CREATE_BUCKET = False 
AWS_QUERYSTRING_AUTH = False 
AWS_S3_SECURE_URLS = False 
AWS_EXPIRY = 60 * 60 * 24 * 7 
AWS_HEADERS = { 
    'Cache-Control': six.b('max-age=%d, s-maxage=%d, must-revalidate' % (
     AWS_EXPIRY, AWS_EXPIRY)) 
} 

MEDIA_URL = 'http://%s/' % AWS_STORAGE_BUCKET_NAME 
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE 
STATIC_URL = MEDIA_URL 
+0

Есть ошибки? –

+0

Извините. Да. ssl.CertificateError: hostname 'files.domain.com.s3.amazonaws.com' не соответствует ни одному из * * .s3.amazonaws.com ',' s3.amazonaws.com ' –

+2

Проблема связана с использованием точек на имя ведра S3 и BOTO. Существует решение, но у меня нет моего компьютера со мной, чтобы дать вам ответ, но надеюсь, что это позволит вам найти ответ – dkarchmer

ответ

0

Я включил эти строки в моих настройках Django и Amazon S3 с пользовательским доменом работал нормально.

AWS_S3_CALLING_FORMAT = 'boto.s3.connection.OrdinaryCallingFormat' 
AWS_S3_HOST = 's3-sa-east-1.amazonaws.com' 
AWS_S3_CUSTOM_DOMAIN = AWS_STORAGE_BUCKET_NAME 
0

Проблема связана с использованием точек по имени. Попробуйте использовать:

AWS_S3_CALLING_FORMAT = boto.s3.connection.OrdinaryCallingFormat()

, но я не знаю, что до сих пор работает, как я лично просто отошел от использования точки на статике ведро. Я использую CDN в любом случае, поэтому имя байта S3 не имеет значения.

См https://github.com/boto/boto/issues/2836

Смежные вопросы