2017-01-02 1 views
0

J'ai configuré mon projet Django, DNS et le seau sur Amazon S3 mais python manage.py collectstatic et par conséquent aussi les fichiers téléchargés manuellement ne fonctionnera pas.Django ne servira pas les fichiers statiques d'Amazon S3 avec le domaine personnalisé

AWS S3 Réglages:

Nom du godet: files.domain.com

politique Bucket:

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

Paramètres DNS:

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

Réglages Django:

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

Y at-il un message d'erreur? –

+0

Désolé. Oui. ssl.CertificateError: hostname 'files.domain.com.s3.amazonaws.com' ne correspond pas à '* .s3.amazonaws.com', 's3.amazonaws.com' –

+2

Le problème est lié à l'utilisation de points sur le nom du compartiment S3 et BOTO. Il y a une solution mais je n'ai pas mon ordinateur avec moi pour vous donner une réponse mais j'espère que cela vous permettra de chercher la réponse – dkarchmer

Répondre

0

J'inclus ces lignes sur mes paramètres Django et Amazon S3 avec le domaine personnalisé a bien fonctionné.

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

La question est liée à l'utilisation de points sur le nom. Essayez d'utiliser:

AWS_S3_CALLING_FORMAT = boto.s3.connection.OrdinaryCallingFormat()

mais je ne sais pas si cela fonctionne encore comme Personnellement, je viens de déménager loin d'utiliser des points sur le godet STATIQUE. J'utilise un CDN de toute façon, donc le nom du compartiment S3 n'est pas pertinent.

Voir https://github.com/boto/boto/issues/2836