diff --git a/config/settings.py b/config/settings.py index 5ede656b..44328338 100755 --- a/config/settings.py +++ b/config/settings.py @@ -339,5 +339,20 @@ if ENV_NAME == "Development Environment": elif ENV_NAME == "Production Environment": ENVIRONMENT_COLOR = "#E53E3E" +# S3 Compatiable Storage Settings +if not LOCAL_DEVELOPMENT: + AWS_ACCESS_KEY_ID = env("AWS_ACCESS_KEY_ID", default="changeme") + AWS_SECRET_ACCESS_KEY = env("AWS_SECRET_ACCESS_KEY", default="changeme") + MEDIA_BUCKET_NAME = env("MEDIA_BUCKET", default="changeme") + AWS_STORAGE_BUCKET_NAME = MEDIA_BUCKET_NAME + AWS_S3_OBJECT_PARAMETERS = {"CacheControl": "max-age=86400"} + AWS_DEFAULT_ACL = None + AWS_S3_ENDPOINT_URL = env( + "AWS_S3_ENDPOINT_URL", default="https://sfo2.digitaloceanspaces.com" + ) + AWS_S3_REGION_NAME = env("AWS_S3_REGION_NAME", default="sfo2") + DEFAULT_FILE_STORAGE = "core.storages.MediaStorage" + MEDIA_URL = f"{AWS_S3_ENDPOINT_URL}/{MEDIA_BUCKET_NAME}/" + # Markdown content BASE_CONTENT = env("BOOST_CONTENT_DIRECTORY", "/website") diff --git a/config/test_settings.py b/config/test_settings.py index 14637a1b..514df096 100644 --- a/config/test_settings.py +++ b/config/test_settings.py @@ -1,5 +1,4 @@ import logging - from .settings import * # noqa @@ -30,3 +29,6 @@ GITHUB_TOKEN = "changeme" # Make content relative to the project root BASE_CONTENT = BASE_DIR / "core/tests/content" + +# Don't use S3 in tests +DEFAULT_FILE_STORAGE = "django.core.files.storage.FileSystemStorage" diff --git a/core/storages.py b/core/storages.py new file mode 100644 index 00000000..0c3d1d3f --- /dev/null +++ b/core/storages.py @@ -0,0 +1,10 @@ +from django.conf import settings + +from storages.backends.s3boto3 import S3Boto3Storage + + +class MediaStorage(S3Boto3Storage): + bucket_name = settings.MEDIA_BUCKET_NAME + default_acl = "public-read" + file_overwrite = True + custom_domain = False diff --git a/kube/boost/values.yaml b/kube/boost/values.yaml index c3533b40..06fd0807 100644 --- a/kube/boost/values.yaml +++ b/kube/boost/values.yaml @@ -89,19 +89,18 @@ Env: key: key - name: ENVIRONMENT_NAME value: "Development Environment" -# Bucket is setup already, but not using storages just yet -# - name: AWS_ACCESS_KEY_ID -# valueFrom: -# secretKeyRef: -# name: digital-ocean-keys -# key: do_access_key -# - name: AWS_SECRET_ACCESS_KEY -# valueFrom: -# secretKeyRef: -# name: digital-ocean-keys -# key: do_secret_key -# - name: MEDIA_BUCKET_NAME -# value: boost-dev-media + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: media-bucket + key: access_key + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: media-bucket + key: secret_key + - name: MEDIA_BUCKET_NAME + value: boost-dev-media # Volumes Volumes: diff --git a/requirements.in b/requirements.in index eb40feac..d3adc8f2 100755 --- a/requirements.in +++ b/requirements.in @@ -16,6 +16,7 @@ psycopg2-binary whitenoise django-click Pillow==9.4.0 +django-storages # Logging django-tracer diff --git a/requirements.txt b/requirements.txt index 9c128195..78918d0a 100755 --- a/requirements.txt +++ b/requirements.txt @@ -80,6 +80,7 @@ django==3.2.2 # django-machina # django-redis # django-rest-auth + # django-storages # djangorestframework # model-bakery django-admin-env-notice==0.4 @@ -110,6 +111,8 @@ django-redis==5.0.0 # via -r ./requirements.in django-rest-auth==0.9.5 # via -r ./requirements.in +django-storages==1.13.2 + # via -r ./requirements.in django-test-plus==1.4.0 # via -r ./requirements.in django-tracer==0.9.3