要回答您的问题,即我如何在您的 django 上的Google Cloud Storage 的当前实施之上使用 Google Cloud CDN 。您可以在下面使用django- storages
requirements.txt(版本是截至今天的最新版本:05-31-2020)
...
django-storages==1.19.1
google-cloud-storage==1.28.1
示例/示例/settings.py
...
...
SB_SA_FILE = os.environ.get('STORAGE_BUCKETS_FILE',
'storageBucketsBackendServiceKey.json')
STATICFILES_STORAGE = 'example.lib.storages.GoogleStaticFilesStorage' # static
DEFAULT_FILE_STORAGE = 'example.lib.storages.GoogleMediaFilesStorage' # media
GS_AUTO_CREATE_BUCKET = True
GS_DEFAULT_ACL = 'publicRead'
GS_CREDENTIALS = service_account.Credentials.from_service_account_file(
f'/usr/src/app/{SB_SA_FILE}'
)
GS_BUCKET_NAME = os.environ.get('GS_BUCKET_NAME')
CDN_HOSTNAME = os.environ.get('CDN_HOSTNAME', '')
示例/示例/lib/storages.py
from django.conf import settings
from storages.backends.gcloud import GoogleCloudStorage
class GoogleMediaFilesStorage(GoogleCloudStorage):
def _save(self, name, content):
name = f'{settings.MEDIA_URL[1:]}{name}'
return super()._save(name, content)
def url(self, name):
"""
@brief for implementation of CDN using image field url
@return Dynamic return of CDN or local URL
"""
if settings.CDN_HOSTNAME:
url = f'{settings.CDN_HOSTNAME}/{name}'
return url
return super().url(name)
class GoogleStaticFilesStorage(GoogleCloudStorage):
def url(self, name):
name = f'static/{name}'
if settings.CDN_HOSTNAME:
url = f'{settings.CDN_HOSTNAME}/{name}'
return url
return super().url(name)
最后,您需要使用CDN_HOSTNAME
环境变量运行 django 应用程序。环境变量的值CDN_HOSTNAME
必须是您的 Google Cloud Global Load Balancer 中映射的域,您所需的 Cloud Storage 设置为后端存储桶