Psymon25
Psymon25

Reputation: 356

Django static url with digitalocean spaces

I have an droplet on digitalocean which for the most part is working great, however i have enabled the cdn option in digitalocean spaces (similar to aws s3 storage) and in trying to load static files using the cdn url, i cannot seem to get the url working correctly so suspect i am missing the obvious?

For example when i change the STATIC_URL in settings to the cdn no change is seen in the web page source? If i change the AWS_S3_ENDPOINT_URL and MEDIA_ENDPOINT_URL then the source does change but the files are not found and as one can guess a collectstatic no longer works, So i assume that the AWS_S3_ENDPOINT_URL & MEDIA_ENDPOINT_URL need to remain as is and i merely need to ensure the static_url is used?

I did read somewhere that it was not good practice to change the templates from {%static.... to {%static_url so have not done that, is this something i should update or not?

Settings:

AWS_S3_ENDPOINT_URL     = 'https://nyc3.digitaloceanspaces.com'
MEDIA_ENDPOINT_URL      = 'https://nyc3.digitaloceanspaces.com/media/'
AWS_STORAGE_BUCKET_NAME = 'mysitestaging'

#STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# if False it will create unique file names for every uploaded file
AWS_S3_FILE_OVERWRITE = False
STATICFILES_STORAGE = 'mysite.settings.storage_backends.StaticStorage'
DEFAULT_FILE_STORAGE = 'mysite.settings.storage_backends.MediaStorage'

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400',
}


# the sub-directories of media and static files
STATIC_ROOT = 'static'
MEDIA_ROOT = 'media'
AWS_DEFAULT_ACL = 'public-read'

BUCKET_ROOT =   '{}/{}/'.format(AWS_S3_ENDPOINT_URL, STATIC_ROOT)

# the regular Django file settings but with the custom S3 URLs
STATIC_URL = '{}/{}/'.format('https://cdn.mysite.com', STATIC_ROOT)
MEDIA_URL = '{}/{}/'.format('https://cdn.mysite.com', MEDIA_ROOT)

Source view returns:

https://nyc3.digitaloceanspaces.com/mysitestaging/static/img/apple-touch-icon.png?AWSAccessKeyId=37FLLPUJLEUO5IG7R4GQ&Signature=eof5%2BZvHPo%2FRSzvKQsrobXkcOZ0%3D&Expires=1586789962

cdn.mysite.com

is an alias of

mysitestaging.nyc3.cdn.digitaloceanspaces.com.

My storage_backends.py:


import os
from storages.backends.s3boto3 import S3Boto3Storage
from my_site.settings import core_settings

class StaticStorage(S3Boto3Storage):
    location = core_settings.STATIC_ROOT

class MediaStorage(S3Boto3Storage):
location = core_settings.MEDIA_ROOT

Upvotes: 2

Views: 1139

Answers (1)

Psymon25
Psymon25

Reputation: 356

Ok figured this out by actually re-reading the docs:

https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html

Adding the following worked immediately:

AWS_S3_CUSTOM_DOMAIN = 'cdn.mysite.com'

Hope it helps someone else.

Upvotes: 5

Related Questions