diff --git a/azure_deploy.sh b/azure_deploy.sh new file mode 100644 index 00000000..54ce1861 --- /dev/null +++ b/azure_deploy.sh @@ -0,0 +1,4 @@ +npm install +python server/manage.py collectstatic --noinput +docker build --platform linux/amd64 -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django:azure . +docker image push iterativ/vbv-lernwelt-django:azure diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index a6c56c0b..f5900f62 100644 Binary files a/env_secrets/production_azure.env and b/env_secrets/production_azure.env differ diff --git a/server/backend/custom_azure.py b/server/backend/custom_azure.py index fe0c9b08..1621f1c0 100644 --- a/server/backend/custom_azure.py +++ b/server/backend/custom_azure.py @@ -5,14 +5,14 @@ from environs import Env env = Env() env.read_env() class AzureMediaStorage(AzureStorage): - account_name = env("AZURE_STORAGE_ACCOUNT") - account_key = env("AZURE_STORAGE_KEY") + account_name = env("IT_AZURE_STORAGE_ACCOUNT") + account_key = env("IT_AZURE_STORAGE_KEY") azure_container = 'media' expiration_secs = None class AzureStaticStorage(AzureStorage): - account_name = env("AZURE_STORAGE_ACCOUNT") - account_key = env("AZURE_STORAGE_KEY") + account_name = env("IT_AZURE_STORAGE_ACCOUNT") + account_key = env("IT_AZURE_STORAGE_KEY") azure_container = 'static' expiration_secs = None diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 3fc03441..4648133e 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -214,18 +214,18 @@ if USE_AWS: # https://wagtail.org/blog/amazon-s3-for-media-files/ MEDIA_URL = "https://%s/" % AWS_S3_CUSTOM_DOMAIN DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" -elif env(USE_AZURE_BLOB_STORAGE): +elif env("IT_USE_AZURE_BLOB_STORAGE", False): # https://medium.com/@DawlysD/django-using-azure-blob-storage-to-handle-static-media-assets-from-scratch-90cbbc7d56be DEFAULT_FILE_STORAGE = 'backend.custom_azure.AzureMediaStorage' - STATICFILES_STORAGE = 'backend.custom_azure.AzureStaticStorage' + #STATICFILES_STORAGE = 'backend.custom_azure.AzureStaticStorage' - STATIC_LOCATION = "static" + #STATIC_LOCATION = "static" MEDIA_LOCATION = "media" - AZURE_ACCOUNT_NAME = "djangoaccountstorage" + AZURE_ACCOUNT_NAME = env("IT_AZURE_STORAGE_ACCOUNT") AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.blob.core.windows.net' - STATIC_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{STATIC_LOCATION}/' - MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{MEDIA_LOCATION}/' + #STATIC_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{STATIC_LOCATION}/' + MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{MEDIA_LOCATION}/' else: diff --git a/server/requirements/requirements-dev.txt b/server/requirements/requirements-dev.txt index f3875c8b..62594c31 100644 --- a/server/requirements/requirements-dev.txt +++ b/server/requirements/requirements-dev.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: # # pip-compile --output-file=requirements-dev.txt requirements-dev.in # @@ -10,6 +10,8 @@ anyascii==0.3.1 # via wagtail anyio==3.5.0 # via watchfiles +appnope==0.1.3 + # via ipython argon2-cffi==21.3.0 # via -r requirements.in argon2-cffi-bindings==21.2.0 @@ -29,6 +31,16 @@ attrs==21.4.0 # usort authlib==1.0.0 # via -r requirements.in +azure-core==1.26.4 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.13.0 + # via -r requirements.in +azure-storage-blob==12.16.0 + # via + # -r requirements.in + # django-storages backcall==0.2.0 # via ipython beautifulsoup4==4.9.3 @@ -82,7 +94,12 @@ coverage==6.3.2 # -r requirements-dev.in # django-coverage-plugin cryptography==36.0.2 - # via authlib + # via + # authlib + # azure-identity + # azure-storage-blob + # msal + # pyjwt decorator==5.1.1 # via # ipdb @@ -155,7 +172,7 @@ django-ratelimit==3.0.1 # via -r requirements.in django-redis==5.2.0 # via -r requirements.in -django-storages==1.13.1 +django-storages[azure]==1.13.1 # via -r requirements.in django-stubs==1.10.1 # via @@ -241,6 +258,8 @@ ipdb==0.13.9 # via -r requirements-dev.in ipython==8.2.0 # via ipdb +isodate==0.6.1 + # via azure-storage-blob isort==5.10.1 # via # flake8-isort @@ -281,6 +300,12 @@ moreorless==0.4.0 # via # ufmt # usort +msal==1.22.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.0.0 + # via azure-identity mypy==0.942 # via # -r requirements-dev.in @@ -330,7 +355,9 @@ pluggy==1.0.0 polib==1.1.1 # via wagtail-localize portalocker==2.4.0 - # via concurrent-log-handler + # via + # concurrent-log-handler + # msal-extensions pre-commit==2.17.0 # via -r requirements-dev.in promise==2.3 @@ -353,6 +380,8 @@ pyflakes==2.4.0 # via flake8 pygments==2.11.2 # via ipython +pyjwt[crypto]==2.7.0 + # via msal pylint==2.13.4 # via # pylint-django @@ -409,9 +438,11 @@ redis==4.2.1 # django-redis requests==2.27.1 # via + # azure-core # caprover-api # coreapi # djangorestframework-stubs + # msal # wagtail s3transfer==0.6.0 # via boto3 @@ -422,8 +453,11 @@ sentry-sdk==1.5.8 six==1.16.0 # via # asttokens + # azure-core + # azure-identity # django-coverage-plugin # html5lib + # isodate # l18n # promise # python-dateutil @@ -490,8 +524,10 @@ types-pytz==2021.3.6 # via django-stubs types-pyyaml==6.0.5 # via django-stubs -typing-extensions==4.1.1 +typing-extensions==4.5.0 # via + # azure-core + # azure-storage-blob # django-stubs # django-stubs-ext # djangorestframework-stubs diff --git a/server/requirements/requirements.in b/server/requirements/requirements.in index cd4615ef..7910d91e 100644 --- a/server/requirements/requirements.in +++ b/server/requirements/requirements.in @@ -25,6 +25,7 @@ django-ratelimit django-ipware django-csp django-storages +django-storages[azure] django-notifications-hq django-jsonform @@ -42,4 +43,7 @@ wagtail-factories>=4 wagtail-localize>=1.5 wagtail_grapple>=0.19.2 +azure-storage-blob +azure-identity + boto3 diff --git a/server/requirements/requirements.txt b/server/requirements/requirements.txt index 230e6b7d..b3015ddd 100644 --- a/server/requirements/requirements.txt +++ b/server/requirements/requirements.txt @@ -1,6 +1,6 @@ # -# This file is autogenerated by pip-compile with Python 3.10 -# by the following command: +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: # # pip-compile --output-file=requirements.txt requirements.in # @@ -22,6 +22,16 @@ attrs==21.4.0 # via jsonschema authlib==1.0.0 # via -r requirements.in +azure-core==1.26.4 + # via + # azure-identity + # azure-storage-blob +azure-identity==1.13.0 + # via -r requirements.in +azure-storage-blob==12.16.0 + # via + # -r requirements.in + # django-storages beautifulsoup4==4.9.3 # via wagtail boto3==1.26.11 @@ -50,7 +60,12 @@ click==8.1.1 concurrent-log-handler==0.9.20 # via -r requirements.in cryptography==36.0.2 - # via authlib + # via + # authlib + # azure-identity + # azure-storage-blob + # msal + # pyjwt deprecated==1.2.13 # via redis dj-database-url==1.0.0 @@ -104,7 +119,7 @@ django-ratelimit==3.0.1 # via -r requirements.in django-redis==5.2.0 # via -r requirements.in -django-storages==1.13.1 +django-storages[azure]==1.13.1 # via -r requirements.in django-taggit==2.1.0 # via wagtail @@ -154,6 +169,8 @@ idna==3.3 # requests inflection==0.5.1 # via drf-spectacular +isodate==0.6.1 + # via azure-storage-blob jmespath==1.0.1 # via # boto3 @@ -166,6 +183,12 @@ l18n==2021.3 # via wagtail marshmallow==3.15.0 # via environs +msal==1.22.0 + # via + # azure-identity + # msal-extensions +msal-extensions==1.0.0 + # via azure-identity openpyxl==3.1.2 # via wagtail packaging==21.3 @@ -179,13 +202,17 @@ pillow==9.0.1 polib==1.1.1 # via wagtail-localize portalocker==2.4.0 - # via concurrent-log-handler + # via + # concurrent-log-handler + # msal-extensions promise==2.3 # via graphene-django psycopg2-binary==2.9.3 # via -r requirements.in pycparser==2.21 # via cffi +pyjwt[crypto]==2.7.0 + # via msal pyparsing==3.0.7 # via packaging pyrsistent==0.18.1 @@ -221,7 +248,10 @@ redis==4.2.1 # -r requirements.in # django-redis requests==2.27.1 - # via wagtail + # via + # azure-core + # msal + # wagtail s3transfer==0.6.0 # via boto3 sendgrid==6.9.7 @@ -230,7 +260,10 @@ sentry-sdk==1.5.8 # via -r requirements.in six==1.16.0 # via + # azure-core + # azure-identity # html5lib + # isodate # l18n # promise # python-dateutil @@ -252,8 +285,11 @@ text-unidecode==1.3 # via # graphene-django # python-slugify -typing-extensions==4.2.0 - # via wagtail-localize +typing-extensions==4.5.0 + # via + # azure-core + # azure-storage-blob + # wagtail-localize uritemplate==4.1.1 # via drf-spectacular urllib3==1.26.9