From b8d7cd0f2c292dfb3bf9fa52957049a36a8a0105 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 2 May 2023 15:21:18 +0200 Subject: [PATCH 01/31] Add requirments file for azure --- env/azure/azure-infos.md | 21 ++++ env/azure/commands.sh | 11 ++ env/azure/vbv-prod.json | 213 +++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 4 files changed, 246 insertions(+) create mode 100644 env/azure/azure-infos.md create mode 100644 env/azure/commands.sh create mode 100644 env/azure/vbv-prod.json create mode 100644 requirements.txt diff --git a/env/azure/azure-infos.md b/env/azure/azure-infos.md new file mode 100644 index 00000000..d26cc489 --- /dev/null +++ b/env/azure/azure-infos.md @@ -0,0 +1,21 @@ +# VBV installstion on Azure + +## Prerequisites + +- Azure subscription +- Azure CLI + + +## For this project we use the +vbv resource group. + +[Azure app services tutorial](https://learn.microsoft.com/en-us/azure/app-service/media/tutorial-python-postgresql-app/python-postgresql-app-architecture-240px.png) +![](https://learn.microsoft.com/en-us/azure/app-service/media/tutorial-python-postgresql-app/python-postgresql-app-architecture-240px.png) +For the app we use azure app services, wiht a potgres database. + + + +Deployment for django: +https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html + +az webapp deployment user set --user-name --password diff --git a/env/azure/commands.sh b/env/azure/commands.sh new file mode 100644 index 00000000..64e5d7e2 --- /dev/null +++ b/env/azure/commands.sh @@ -0,0 +1,11 @@ +# create a webapp deploment user +# you can not run these command wiht the free tier subscription... at least developer tier is needed. +az webapp deployment user set --user-name iterativ_developer --password 1password + +# Create plans for stage and prod +az appservice plan create --name stage --resource-group VBV --sku P1V2 --is-linux +az appservice plan create --name prod --resource-group VBV --sku P2V2 --is-linux + +# create the two applications on Python 3.10, change +az webapp create --resource-group VBV --plan stage --name app-stage --runtime "PYTHON|3.10" --deployment-local-git +az webapp create --resource-group VBV --plan prod --name app-prod --runtime "PYTHON|3.10" --deployment-local-git diff --git a/env/azure/vbv-prod.json b/env/azure/vbv-prod.json new file mode 100644 index 00000000..ea449371 --- /dev/null +++ b/env/azure/vbv-prod.json @@ -0,0 +1,213 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "sites_vbv_prod_name": { + "defaultValue": "vbv-prod", + "type": "String" + }, + "serverfarms_prod_externalid": { + "defaultValue": "/subscriptions/b93dcf47-7d82-4af9-8dbc-3317650d0ad7/resourceGroups/VBV/providers/Microsoft.Web/serverfarms/prod", + "type": "String" + } + }, + "variables": {}, + "resources": [ + { + "type": "Microsoft.Web/sites", + "apiVersion": "2022-09-01", + "name": "[parameters('sites_vbv_prod_name')]", + "location": "Switzerland North", + "kind": "app,linux", + "properties": { + "enabled": true, + "hostNameSslStates": [ + { + "name": "[concat(parameters('sites_vbv_prod_name'), '.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Standard" + }, + { + "name": "[concat(parameters('sites_vbv_prod_name'), '.scm.azurewebsites.net')]", + "sslState": "Disabled", + "hostType": "Repository" + } + ], + "serverFarmId": "[parameters('serverfarms_prod_externalid')]", + "reserved": true, + "isXenon": false, + "hyperV": false, + "vnetRouteAllEnabled": false, + "vnetImagePullEnabled": false, + "vnetContentShareEnabled": false, + "siteConfig": { + "numberOfWorkers": 1, + "linuxFxVersion": "PYTHON|3.10", + "acrUseManagedIdentityCreds": false, + "alwaysOn": true, + "http20Enabled": false, + "functionAppScaleLimit": 0, + "minimumElasticInstanceCount": 0 + }, + "scmSiteAlsoStopped": false, + "clientAffinityEnabled": false, + "clientCertEnabled": false, + "clientCertMode": "Required", + "hostNamesDisabled": false, + "customDomainVerificationId": "A2AB57353045150ADA4488FAA8AA9DFBBEDDD311934653F55243B336C2F3358E", + "containerSize": 0, + "dailyMemoryTimeQuota": 0, + "httpsOnly": true, + "redundancyMode": "None", + "publicNetworkAccess": "Enabled", + "storageAccountRequired": false, + "keyVaultReferenceIdentity": "SystemAssigned" + } + }, + { + "type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies", + "apiVersion": "2022-09-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/ftp')]", + "location": "Switzerland North", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ], + "properties": { + "allow": false + } + }, + { + "type": "Microsoft.Web/sites/basicPublishingCredentialsPolicies", + "apiVersion": "2022-09-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/scm')]", + "location": "Switzerland North", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ], + "properties": { + "allow": false + } + }, + { + "type": "Microsoft.Web/sites/config", + "apiVersion": "2022-09-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/web')]", + "location": "Switzerland North", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ], + "properties": { + "numberOfWorkers": 1, + "defaultDocuments": [ + "Default.htm", + "Default.html", + "Default.asp", + "index.htm", + "index.html", + "iisstart.htm", + "default.aspx", + "index.php", + "hostingstart.html" + ], + "netFrameworkVersion": "v4.0", + "linuxFxVersion": "PYTHON|3.10", + "requestTracingEnabled": false, + "remoteDebuggingEnabled": false, + "remoteDebuggingVersion": "VS2019", + "httpLoggingEnabled": false, + "acrUseManagedIdentityCreds": false, + "logsDirectorySizeLimit": 35, + "detailedErrorLoggingEnabled": false, + "publishingUsername": "$vbv-prod", + "scmType": "BitbucketGit", + "use32BitWorkerProcess": true, + "webSocketsEnabled": false, + "alwaysOn": true, + "managedPipelineMode": "Integrated", + "virtualApplications": [ + { + "virtualPath": "/", + "physicalPath": "site\\wwwroot", + "preloadEnabled": true + } + ], + "loadBalancing": "LeastRequests", + "experiments": { + "rampUpRules": [] + }, + "autoHealEnabled": false, + "vnetRouteAllEnabled": false, + "vnetPrivatePortsCount": 0, + "publicNetworkAccess": "Enabled", + "localMySqlEnabled": false, + "ipSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 2147483647, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictions": [ + { + "ipAddress": "Any", + "action": "Allow", + "priority": 2147483647, + "name": "Allow all", + "description": "Allow all access" + } + ], + "scmIpSecurityRestrictionsUseMain": false, + "http20Enabled": false, + "minTlsVersion": "1.2", + "scmMinTlsVersion": "1.2", + "ftpsState": "Disabled", + "preWarmedInstanceCount": 0, + "elasticWebAppScaleLimit": 0, + "functionsRuntimeScaleMonitoringEnabled": false, + "minimumElasticInstanceCount": 0, + "azureStorageAccounts": {} + } + }, + { + "type": "Microsoft.Web/sites/deployments", + "apiVersion": "2022-09-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/96334b4eb6a7ae5b0d86abd7febcbcc67323bb94')]", + "location": "Switzerland North", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ], + "properties": { + "status": 4, + "author_email": "ramon.wenger@iterativ.ch", + "author": "Ramon Wenger", + "message": "Merged in feature/VBV-304-praesenztag-ui (pull request #65)\n \n Feature/VBV-304 praesenztag ui\n \n Approved-by: Daniel Egger", + "start_time": "2023-05-02T12:43:38.4426574Z", + "end_time": "2023-05-02T12:43:58.307067Z", + "active": true + } + }, + { + "type": "Microsoft.Web/sites/hostNameBindings", + "apiVersion": "2022-09-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/', parameters('sites_vbv_prod_name'), '.azurewebsites.net')]", + "location": "Switzerland North", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ], + "properties": { + "siteName": "vbv-prod", + "hostNameType": "Verified" + } + }, + { + "type": "Microsoft.Web/sites/snapshots", + "apiVersion": "2015-08-01", + "name": "[concat(parameters('sites_vbv_prod_name'), '/2023-05-02T12_40_23_4355704')]", + "dependsOn": [ + "[resourceId('Microsoft.Web/sites', parameters('sites_vbv_prod_name'))]" + ] + } + ] +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..3ea08861 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +-r server/requirements/requirements.txt From 64d4762953e7a5982ff94d195c1fd935ef4f5191 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 4 May 2023 14:14:14 +0200 Subject: [PATCH 02/31] Switch guincorn port --- .azure/config | 7 +++++++ compose/django/docker_start.sh | 2 +- env/azure/azure-infos.md | 6 ++++++ env/azure/commands.sh | 5 +++++ env_secrets/production_azure.env | Bin 0 -> 139 bytes 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .azure/config create mode 100644 env_secrets/production_azure.env diff --git a/.azure/config b/.azure/config new file mode 100644 index 00000000..2204489e --- /dev/null +++ b/.azure/config @@ -0,0 +1,7 @@ +[defaults] +group = vbv-prod_group +sku = P2v2 +appserviceplan = prod +location = switzerlandnorth +web = vbv-prod + diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh index ea492112..16637c5b 100644 --- a/compose/django/docker_start.sh +++ b/compose/django/docker_start.sh @@ -9,4 +9,4 @@ python /app/manage.py collectstatic --no-input --no-post-process # TODO remove after stabilisation python /app/manage.py reset_schema -/usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:80 --chdir=/app -k uvicorn.workers.UvicornWorker +/usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:7555 --chdir=/app -k uvicorn.workers.UvicornWorker diff --git a/env/azure/azure-infos.md b/env/azure/azure-infos.md index d26cc489..bab329ba 100644 --- a/env/azure/azure-infos.md +++ b/env/azure/azure-infos.md @@ -19,3 +19,9 @@ Deployment for django: https://tonybaloney.github.io/posts/django-on-azure-beyond-hello-world.html az webapp deployment user set --user-name --password + +# Docker image for the app + + To be able to pull the docker image from dockerhub you need to create an access token on dockerhub. +the access token is then the password in azure and the username is the dockerhub username. + diff --git a/env/azure/commands.sh b/env/azure/commands.sh index 64e5d7e2..6e679b0f 100644 --- a/env/azure/commands.sh +++ b/env/azure/commands.sh @@ -9,3 +9,8 @@ az appservice plan create --name prod --resource-group VBV --sku P2V2 --is-linux # create the two applications on Python 3.10, change az webapp create --resource-group VBV --plan stage --name app-stage --runtime "PYTHON|3.10" --deployment-local-git az webapp create --resource-group VBV --plan prod --name app-prod --runtime "PYTHON|3.10" --deployment-local-git + + +az webapp up --resource-group VBV --plan prod --name app-prod --runtime "PYTHON|3.10" --logs + + diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env new file mode 100644 index 0000000000000000000000000000000000000000..7169a777e3376e577b46175a64778a5d42ed30cb GIT binary patch literal 139 zcmV;60CfKVM@dveQdv+`09LRFs0X_av5?+RBV)#sB-P>7UNF-)jxAz8oSj&44ATw5 zlivayYOLdm>6Q9?WClt?>gHPV&h$_p58}$xl{&ZROA383LO!xT%VrS?uG|}PU|b Date: Wed, 17 May 2023 15:51:50 +0200 Subject: [PATCH 03/31] Add additional Env variables --- compose/django/Dockerfile | 2 ++ compose/django/sshd_config | 0 docker-compose-pgbackup.yml | 10 ++++++++++ env/docker_local.env | 3 ++- env_secrets/pg_backup_local.env | Bin 0 -> 1093 bytes env_secrets/production_azure.env | Bin 139 -> 2612 bytes git-crypt-encrypted-files.txt | 1 + server/config/settings/base.py | 7 ++++++- 8 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 compose/django/sshd_config create mode 100644 docker-compose-pgbackup.yml create mode 100644 env_secrets/pg_backup_local.env diff --git a/compose/django/Dockerfile b/compose/django/Dockerfile index b3fa66f2..aa489641 100644 --- a/compose/django/Dockerfile +++ b/compose/django/Dockerfile @@ -104,4 +104,6 @@ RUN chown django:django ${APP_HOME} USER django +EXPOSE 7555 + ENTRYPOINT ["/entrypoint"] diff --git a/compose/django/sshd_config b/compose/django/sshd_config new file mode 100644 index 00000000..e69de29b diff --git a/docker-compose-pgbackup.yml b/docker-compose-pgbackup.yml new file mode 100644 index 00000000..2c265272 --- /dev/null +++ b/docker-compose-pgbackup.yml @@ -0,0 +1,10 @@ +version: '3' + +services: + postgres-backup: + image: kartoza/pg-backup:14-3.3 + container_name: postgres-backup + volumes: + - ./local_backups:/backups + env_file: + - ./env_secrets/pg_backup_local.env diff --git a/env/docker_local.env b/env/docker_local.env index 7919aebc..409e30f8 100644 --- a/env/docker_local.env +++ b/env/docker_local.env @@ -3,10 +3,11 @@ POSTGRES_HOST=postgres POSTGRES_PORT=5432 POSTGRES_DB=vbv_lernwelt -POSTGRES_USER=MRsLOrFLFqmAnAxxWMsHXfUSqWHThtGQ +POSTGRES_USER=postgres POSTGRES_PASSWORD=hNqfCdG6bwCLcnfboDtNM1L2Hiwp8GuKp1DJ6t2rcKl15Vls2QbByoIZ6IQlciKM # General # ------------------------------------------------------------------------------ IT_DJANGO_LOCAL_DOCKER=True IPYTHONDIR=/app/.ipython +IT_APP_ENVIRONMENT=local diff --git a/env_secrets/pg_backup_local.env b/env_secrets/pg_backup_local.env new file mode 100644 index 0000000000000000000000000000000000000000..ca8e7f15b1977abe1cc955625ba518ab505e6727 GIT binary patch literal 1093 zcmV-L1iJeGM@dveQdv+`0PTXrsU6_r2ff(}5&;5q&=pYY`@8R0pa{iINmq}1r!mrx zIIkfSlCXc^sU0EQ-QIzuo7;JzrANdIJqA=>$zw`}#JT4ANJd zD6!NCu{LnAUfD|^Ma zZ-bg{H2?9nXYEKl_=CevYBng1=lT*Uz6x6}`j2r@jCsnY21Kk#{#TmSwD;)_pQ>Ib zGyiwv96E8z7P2HpdIc3##3i5{OY=Qf1MB|NjH|bSg>+_BThpXD%@Td*scoHBb6$lr zVqT=U^Lt*m@%_B3%4`+D;SM>pGxdGi(0k_7=E!c_OO!3!Df%=B-;4y1il5}0ofG)h z*i_3ic=dP}OKO4?y0AqR1KD~0XE=RXo%$dJYCo@s@52g$rRz?@TY*46h*WW>5czsvm4C{0O*J3Y z+)n^OASIt4_>ESS+?seCb+Wi6=>SH0R2{E<)O}V|WZ@jA|O4W3#}T$io`aDT7J;HIv}N0|f44%=9ff>VfOvS&b^)Rj2X~VP zZ8=sQ4Q0)^M)mJF1B2-l0;PNb65u{40gv6W9U2eo>ge!1Na0SuhdB{gT$c>@D+HqP ztj*x~70wrF`=aW9yUFi=loUlgo3LUeB@(mUGA{SQvGG?*nghgE-))gOrMfL%_WpWUhxIQbjb7` zrolEuZ5|}j?b>(~_4M>pfeMNEyoH>5&$85TB@zt0wF%BS?wUz(Zm|*ud}-mMb_(Du zHiQ#pgKNJ98UDw~66HC6zsZf*#!_$dVy=4{iy$m$=}J8j1U*U|w*UV4P-)!g&bhw6 Low%Zy3u5J!`~52e literal 0 HcmV?d00001 diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index 7169a777e3376e577b46175a64778a5d42ed30cb..46a2267331a58cc9d8885666dde9eedf783e6557 100644 GIT binary patch literal 2612 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 W^Bf4YkXbDkL=5M5*$lbrZ;c^Lk{VqA literal 139 zcmV;60CfKVM@dveQdv+`09LRFs0X_av5?+RBV)#sB-P>7UNF-)jxAz8oSj&44ATw5 zlivayYOLdm>6Q9?WClt?>gHPV&h$_p58}$xl{&ZROA383LO!xT%VrS?uG|}PU|b Date: Wed, 17 May 2023 18:00:41 +0200 Subject: [PATCH 04/31] Add azure blob storage to django --- env_secrets/production_azure.env | Bin 2612 -> 2887 bytes server/backend/__init__.py | 0 server/backend/custom_azure.py | 18 ++++++++++++++++++ server/config/settings/base.py | 14 ++++++++++++++ 4 files changed, 32 insertions(+) create mode 100644 server/backend/__init__.py create mode 100644 server/backend/custom_azure.py diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index 46a2267331a58cc9d8885666dde9eedf783e6557..a6c56c0b6d2b365e6227609961ed86309b809f59 100644 GIT binary patch literal 2887 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 literal 2612 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 W^Bf4YkXbDkL=5M5*$lbrZ;c^Lk{VqA diff --git a/server/backend/__init__.py b/server/backend/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/server/backend/custom_azure.py b/server/backend/custom_azure.py new file mode 100644 index 00000000..fe0c9b08 --- /dev/null +++ b/server/backend/custom_azure.py @@ -0,0 +1,18 @@ + +from storages.backends.azure_storage import AzureStorage +from environs import Env + +env = Env() +env.read_env() +class AzureMediaStorage(AzureStorage): + account_name = env("AZURE_STORAGE_ACCOUNT") + account_key = env("AZURE_STORAGE_KEY") + azure_container = 'media' + expiration_secs = None + +class AzureStaticStorage(AzureStorage): + account_name = env("AZURE_STORAGE_ACCOUNT") + account_key = env("AZURE_STORAGE_KEY") + azure_container = 'static' + expiration_secs = None + diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 7cfba7f1..3fc03441 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -214,6 +214,20 @@ 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): + # 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' + + STATIC_LOCATION = "static" + MEDIA_LOCATION = "media" + + AZURE_ACCOUNT_NAME = "djangoaccountstorage" + 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}/' + + else: MEDIA_URL = "/server/media/" From 0a5a6fa4ce2d6116438ff41e78e7d811cc5b3dcc Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Mon, 22 May 2023 14:56:50 +0200 Subject: [PATCH 05/31] Add azure blob storage as default media storage --- azure_deploy.sh | 4 ++ env_secrets/production_azure.env | Bin 2887 -> 2896 bytes server/backend/custom_azure.py | 8 ++-- server/config/settings/base.py | 12 +++--- server/requirements/requirements-dev.txt | 48 ++++++++++++++++++--- server/requirements/requirements.in | 4 ++ server/requirements/requirements.txt | 52 +++++++++++++++++++---- 7 files changed, 104 insertions(+), 24 deletions(-) create mode 100644 azure_deploy.sh 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 a6c56c0b6d2b365e6227609961ed86309b809f59..f5900f62aaae2057973b0304494b54fb6a5b9084 100644 GIT binary patch literal 2896 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 literal 2887 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 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 From 2d97b0561c1565a56974552753e56f7802b8afc7 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 14:55:31 +0200 Subject: [PATCH 06/31] Add env_secrets to dockerignore --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index 83653a41..ab0ded02 100644 --- a/.dockerignore +++ b/.dockerignore @@ -13,3 +13,4 @@ venv .git .envrc /server/vbv_lernwelt/media/documents +env_secrets From 66047a95b7c93d3ba02a90c610a9e242de08dc8a Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 15:26:26 +0200 Subject: [PATCH 07/31] Remove reset schema from docker_start --- compose/django/docker_start.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh index 16637c5b..c4152b8e 100644 --- a/compose/django/docker_start.sh +++ b/compose/django/docker_start.sh @@ -6,7 +6,16 @@ set -o nounset python /app/manage.py collectstatic --no-input --no-post-process -# TODO remove after stabilisation -python /app/manage.py reset_schema + +if [ -z "${IT_RESET_SCHEMA}" ]; then + echo "IT_RESET_SCHEMA is not set, skipping schema reset" + python /app/manage.py migrate --no-input +else + echo "IT_RESET_SCHEMA is set, resetting schema" + python /app/manage.py reset_schema --no-input +fi + +python /app/manage.py collectstatic --no-input --no-post-process + /usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:7555 --chdir=/app -k uvicorn.workers.UvicornWorker From 6a080bdfe4665d9316cf811a13d9f868ccfac8e5 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 15:27:06 +0200 Subject: [PATCH 08/31] Use AWS -ch storage for azure prod --- env_secrets/production_azure.env | Bin 2896 -> 3337 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index f5900f62aaae2057973b0304494b54fb6a5b9084..82906ed759d1d78822c1c0cd578a40c7e8955c3c 100644 GIT binary patch literal 3337 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 From 705a146c93a3e7b14b6376df6d768725e728fa64 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 17:38:48 +0200 Subject: [PATCH 09/31] Remove reset DB from entryscript --- compose/django/docker_start.sh | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh index c4152b8e..5bcbd051 100644 --- a/compose/django/docker_start.sh +++ b/compose/django/docker_start.sh @@ -6,16 +6,9 @@ set -o nounset python /app/manage.py collectstatic --no-input --no-post-process - -if [ -z "${IT_RESET_SCHEMA}" ]; then - echo "IT_RESET_SCHEMA is not set, skipping schema reset" - python /app/manage.py migrate --no-input -else - echo "IT_RESET_SCHEMA is set, resetting schema" - python /app/manage.py reset_schema --no-input -fi - -python /app/manage.py collectstatic --no-input --no-post-process +python /app/manage.py migrate /usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:7555 --chdir=/app -k uvicorn.workers.UvicornWorker + + From 89716db561751a01e2efd693d1a0693c162d9850 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 17:40:05 +0200 Subject: [PATCH 10/31] Add azure deployment to pipelines --- server/backend/custom_azure.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/server/backend/custom_azure.py b/server/backend/custom_azure.py index 1621f1c0..910c309e 100644 --- a/server/backend/custom_azure.py +++ b/server/backend/custom_azure.py @@ -5,14 +5,16 @@ from environs import Env env = Env() env.read_env() class AzureMediaStorage(AzureStorage): - account_name = env("IT_AZURE_STORAGE_ACCOUNT") - account_key = env("IT_AZURE_STORAGE_KEY") - azure_container = 'media' - expiration_secs = None + if env("IT_USE_AZURE_BLOB_STORAGE", False): + 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("IT_AZURE_STORAGE_ACCOUNT") - account_key = env("IT_AZURE_STORAGE_KEY") - azure_container = 'static' - expiration_secs = None + if env("IT_USE_AZURE_BLOB_STORAGE", False): + account_name = env("IT_AZURE_STORAGE_ACCOUNT") + account_key = env("IT_AZURE_STORAGE_KEY") + azure_container = 'static' + expiration_secs = None From 8ee6952ec55765a481f6b22f839c0f85d2d05e2b Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Tue, 23 May 2023 17:57:21 +0200 Subject: [PATCH 11/31] Add local backup env file to secrets --- git-crypt-encrypted-files.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/git-crypt-encrypted-files.txt b/git-crypt-encrypted-files.txt index 3d93968c..2d34597a 100644 --- a/git-crypt-encrypted-files.txt +++ b/git-crypt-encrypted-files.txt @@ -7,3 +7,4 @@ encrypted: env_secrets/local_lorenz.env encrypted: env_secrets/production.env encrypted: env_secrets/production_azure.env + encrypted: env_secrets/pg_backup_local.env From 34cdc1c022c5795f43540df1e9672b90eb94d3c5 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 11:03:43 +0200 Subject: [PATCH 12/31] Add correct SENTRY tracking for django --- env_secrets/production_azure.env | Bin 3337 -> 3378 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index 82906ed759d1d78822c1c0cd578a40c7e8955c3c..4c6d3b9847a581e514a20ac8984b6a186ad7ac73 100644 GIT binary patch literal 3378 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 Date: Wed, 24 May 2023 11:08:03 +0200 Subject: [PATCH 13/31] Fix git crypt check --- git-crypt-encrypted-files.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git-crypt-encrypted-files.txt b/git-crypt-encrypted-files.txt index 2d34597a..1f3f9b38 100644 --- a/git-crypt-encrypted-files.txt +++ b/git-crypt-encrypted-files.txt @@ -5,6 +5,7 @@ encrypted: env_secrets/local_daniel.env encrypted: env_secrets/local_elia.env encrypted: env_secrets/local_lorenz.env + encrypted: env_secrets/pg_backup_local.env encrypted: env_secrets/production.env encrypted: env_secrets/production_azure.env - encrypted: env_secrets/pg_backup_local.env + From 7504f076ff9b0c500779a13e280c4901cf27ebe4 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 14:34:32 +0200 Subject: [PATCH 14/31] Add Newrelic and SSO variables --- env_secrets/production_azure.env | Bin 3378 -> 4849 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index 4c6d3b9847a581e514a20ac8984b6a186ad7ac73..d17776edd16bd9d1db8268e1380a51d9901107ef 100644 GIT binary patch literal 4849 zcmV(&Cg<-+^#yG&2cnEg zpJ&E)Q7p~6`91#~z$@PJiiywmMsdhbTw+scUDiGs2|IzI^;Sq%;Y%Pk8-vl7OFmd`VFU-5r#j}_}LzcsCCve?#8csm}PEl!s zPpg2~7Ck3oP7AcQq_NJi9OshzGUC)W0uzEa8s~1XuJ`fs8ZJ(0N*)h;lhPD<&52Y0 zSd`t1cw2U=%^_kFoueWS;PL*Exn#(Z@an=P0P%}G{~$w;4BK;K!R|O`bL%(mFIZae zmV@@TD_}QxJq@7A;zxq$$;W>#BV2{ z0=CV}i?|q09e|xH_?+W=uu4kc+v{z|yu*61kr@)Jh3{ zjDhw8m3VO~mM)&z$BL6eb=C^8Js#w5aqEwRU=LLI*AC?K{>1ULtcAmb+z3kWqad6}kN)yyn9eWU70H@v>{l%~khC7@!U?N8;3 zx9VgXIIuL^vJ{8&-j)6Y&N4O)Ifl2Y=;y7~WH;c{jfhw5%s#!dn?n#k^IPh(l{Yjy;ZhHfby3phlOH;JNSV^Q!BP&uipF}+5Rc@ zR>bX4`rX`x3xG7rbpRC-(eCh$bKdyMPm#JS1J+yhom-xMKMrv zes4AHvfak*XOE^6w*zR>SNvM#>d>VVizTkYC@2-awPbY$Q23&D-*)l}!*v#&c!}l) ztYL3_)C{fK@4#(;uOV++nAQ~UpgGm}q;ZC)D3gru3rFSd=guA8p-qWgyy10e?I!%u z5PuSHE>H#^fZZw|GbglwlUw!S7<^#^)V0-!red}%Kr;O#JKh9zv1)CH)7r5^7!hmJ zdoE_uOc+7pjhjC#zJT`J24a+p&;i*JQwJf76aT?>|3!&cxYM@$F#R}^Z;E&=Lk32f zhPa*egd-Cc=^ase71wrsUjy(CNf@?>HZ(F2zSqb;O0(XtWV+khWt+lkA14Q6oVl-Y>soMaqIoyGbdCU}wIm}k<6I~*quc6&qY%x$?b|Y1B1jdguOYC2xZ3GG7#g=bBZKBKK zTY5WxCl|fm`aarJz8sb%sXbG2!Kj~(yt3WkSDh2GytDYD${1=@rNM28Y?sGyjdsK# z1xYmV&vz<2%c(Quu68t3vcO&q99p3lP&bntyP~w(UB_`!F{6irm^3C7ew|rg%OT-w zba0LUSdxpH?MN!aE?^V<&keIL02W6LO8_+9O0(-FRkeoAg{ zJ-Z9OFioveNY?boA7zdPP#1|m^7@1pv`{6fR_Qz?`sDw}8d+=XqY)>jbPT%(` zO^f@jeS)$nqiTXaGaL*yd@l6vZ^#y_R z#%H@&k^K(qdwOvL4KqVw-H4ZEYODYr`cQ-MeB6tU8jm1v;&y3&EA-kLCVyz%p|3#* zA+YXm^$4-Ra(Tzh@ImF~q&9Kf;E*u0kfZZg=IuksyKM63FDO-yNd2(D68yd4T-@w~qFh^jN54R{MDlT@K^he|w28<9yM+@{dcORZRW1de^0 z2@@)NU6f-|N=ZL=V@Q?6nRMoV!TEyqxIPnIz4b(Yc(6NO)G;Q$i~S%L!9AU5kJn## z>?cox{ICgo$@LL@Z8+YEN6-~Ymv)lEsZY%mSa{=<CR=Ub$@kSt_9qa^6%|Hs?_5fOaXxz3PUi!82|E;u>Z z+gdZ_xm^6YBqua6r}yooZ`!m!dV*s}c6B;g>JF8KJUnE-CvyQSvERvUy@gD zVpB(=>L5WqR;4_T=7)QG?6K)?3PUm@3~h_v!sDE6gsZ47rVe?<7$nL_jss_A3W|Nm z@x}PRGxbIV0CcVJ6mk2zR1_A?GMiuj7zaqofL0wJmyVo#6)P<%Kr?BpH2sWnRr6s|&T5FUIe)YnXU%T!}GUbz?YSUqb?e^Nh+bOGB0 z4t75K5420NrH=N`7uR@5FEb50)9XG;%fhO`{*;c4XdBGrR!G>sWdNjdB^}o7LR4@^ zm6Df3Fs;tP98pIcvWS5`5_J=831$M#L4xx&O}_m}EU2K7YqZ@vH3E9zE{grJIwpNV zv{Id?Ekk#A=|6^FW0WNN)Ep+?AEUPCJQLrB!d*jSAF&RTxkBc9n{FSIpr+sVR=q4tVQZ4^6M$(At#5p8mJ^yZzLP z;zRK!H~)C?i3|b@1`s{=p#tf`v^8JTZ6se&Y$F}2s_c=ZWL}l}o1l9N=RcO|{=iMY zM<_ueu=xe%8T2&69P$?hOa}uUQ;ITsu8THNBH#|M^%6CDU_~c5R6c_7dmCn+SX;=z&fOP>d1Y1HvxMTUGJxV>y5i>m=*y) z6t9n`APmdJ=2&X9?f_47+1O$7m7_f7+vgOIPTUjGX$Sm4-(?k|Z&A1I*TY2xxJ|(1 z{c=I`*ci>)RjvWMTd|8E#NUdh zN8gk>@Y;#)3TlGO7oUXSqug-&tb6DqShxu;N0YqL3YT@y6p@jHLw##^tE+%gN&b(1 z#PcqA-?d8??^y;GXjb|_7S)$ASreYH(LIN}F>C;>PL@Mtn(Bj_9f>G9+(tXn=X}CJ zW}X5nN3n=a;ILg3cRX z$2AEwN0Pb+++%u1xJdXiK1QXNpmOs2&Opz|3HAdm(fs~~y}v>#cfg+K_UvHXD=O;) zi)WA{<92D+Cv(foIwc^@WVGlQzs=LS%%%pfBO!MZY-_T)%CUCk;DIXFR*L3`Df=qUc z#+y~MSJtQbm?R5X+iFK=Vo7-^%58DB{@fTC`)`ambAUkO@iNwxL$ise(FYH&Z%-9xPJ z5^9$d2VYcC>ZUV|^DH8;vcNNgaGtmvaX(bL)Nhe`)!$C7OPN%E;bQ+{`MT%#=w18X9ek4Yw9%I z%(K?(BN^tUnW$0-c4R94O1(84yf1{O!-Au<&zIoAgH1u#DOYg89_aTNws}+O0#Ei$ zm4j1sdu2)z4uJrX>!NZ~&lqaml&xj2e1b%>fXtunvvM~@<7u3x^erS1BOy>7!h7dY z=~+e!rpI=u_MrmXQo_xo@$bAxHaA0eck-wR0 z14^Q<=_mLGK()R1-0p`@(=}-4F%r^msrdo$UQ)SA7wunvQg+w)wUlamRJDW-i;4IT z?CYaLRyqD6jz!diU-RsZ?*}}s!CvOdahg9cuQXb?g_5&gkcGeq_dL^>8VIavtZxT; z!Jvhv19YY@3P2XS`G#&XJGv8NFN=U!?%q+GM$)aprN#z2?FsnBQyj&RYL!%GW5LT* z_PInwuGMr~u8g1CsS+vY683&S)Yt1Ri?N&8D5D0w#-KCC?nEBxKj>he*K$&r-IbwO2+L0E#9E*WhacFvAL5YO{VYJ3<_f{mq?yoRVqRbXS~MUhN2w$ygG X`^KGy!tlwL&~J9Ag_)}8!`Z)9f&pad literal 3378 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 Date: Wed, 24 May 2023 15:23:38 +0200 Subject: [PATCH 15/31] Add New Relic Logging key --- env_secrets/production_azure.env | Bin 4849 -> 5084 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index d17776edd16bd9d1db8268e1380a51d9901107ef..0dbdb542f92074e9c8a05c783a4f5b959b5a1a14 100644 GIT binary patch literal 5084 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 literal 4849 zcmV(&Cg<-+^#yG&2cnEg zpJ&E)Q7p~6`91#~z$@PJiiywmMsdhbTw+scUDiGs2|IzI^;Sq%;Y%Pk8-vl7OFmd`VFU-5r#j}_}LzcsCCve?#8csm}PEl!s zPpg2~7Ck3oP7AcQq_NJi9OshzGUC)W0uzEa8s~1XuJ`fs8ZJ(0N*)h;lhPD<&52Y0 zSd`t1cw2U=%^_kFoueWS;PL*Exn#(Z@an=P0P%}G{~$w;4BK;K!R|O`bL%(mFIZae zmV@@TD_}QxJq@7A;zxq$$;W>#BV2{ z0=CV}i?|q09e|xH_?+W=uu4kc+v{z|yu*61kr@)Jh3{ zjDhw8m3VO~mM)&z$BL6eb=C^8Js#w5aqEwRU=LLI*AC?K{>1ULtcAmb+z3kWqad6}kN)yyn9eWU70H@v>{l%~khC7@!U?N8;3 zx9VgXIIuL^vJ{8&-j)6Y&N4O)Ifl2Y=;y7~WH;c{jfhw5%s#!dn?n#k^IPh(l{Yjy;ZhHfby3phlOH;JNSV^Q!BP&uipF}+5Rc@ zR>bX4`rX`x3xG7rbpRC-(eCh$bKdyMPm#JS1J+yhom-xMKMrv zes4AHvfak*XOE^6w*zR>SNvM#>d>VVizTkYC@2-awPbY$Q23&D-*)l}!*v#&c!}l) ztYL3_)C{fK@4#(;uOV++nAQ~UpgGm}q;ZC)D3gru3rFSd=guA8p-qWgyy10e?I!%u z5PuSHE>H#^fZZw|GbglwlUw!S7<^#^)V0-!red}%Kr;O#JKh9zv1)CH)7r5^7!hmJ zdoE_uOc+7pjhjC#zJT`J24a+p&;i*JQwJf76aT?>|3!&cxYM@$F#R}^Z;E&=Lk32f zhPa*egd-Cc=^ase71wrsUjy(CNf@?>HZ(F2zSqb;O0(XtWV+khWt+lkA14Q6oVl-Y>soMaqIoyGbdCU}wIm}k<6I~*quc6&qY%x$?b|Y1B1jdguOYC2xZ3GG7#g=bBZKBKK zTY5WxCl|fm`aarJz8sb%sXbG2!Kj~(yt3WkSDh2GytDYD${1=@rNM28Y?sGyjdsK# z1xYmV&vz<2%c(Quu68t3vcO&q99p3lP&bntyP~w(UB_`!F{6irm^3C7ew|rg%OT-w zba0LUSdxpH?MN!aE?^V<&keIL02W6LO8_+9O0(-FRkeoAg{ zJ-Z9OFioveNY?boA7zdPP#1|m^7@1pv`{6fR_Qz?`sDw}8d+=XqY)>jbPT%(` zO^f@jeS)$nqiTXaGaL*yd@l6vZ^#y_R z#%H@&k^K(qdwOvL4KqVw-H4ZEYODYr`cQ-MeB6tU8jm1v;&y3&EA-kLCVyz%p|3#* zA+YXm^$4-Ra(Tzh@ImF~q&9Kf;E*u0kfZZg=IuksyKM63FDO-yNd2(D68yd4T-@w~qFh^jN54R{MDlT@K^he|w28<9yM+@{dcORZRW1de^0 z2@@)NU6f-|N=ZL=V@Q?6nRMoV!TEyqxIPnIz4b(Yc(6NO)G;Q$i~S%L!9AU5kJn## z>?cox{ICgo$@LL@Z8+YEN6-~Ymv)lEsZY%mSa{=<CR=Ub$@kSt_9qa^6%|Hs?_5fOaXxz3PUi!82|E;u>Z z+gdZ_xm^6YBqua6r}yooZ`!m!dV*s}c6B;g>JF8KJUnE-CvyQSvERvUy@gD zVpB(=>L5WqR;4_T=7)QG?6K)?3PUm@3~h_v!sDE6gsZ47rVe?<7$nL_jss_A3W|Nm z@x}PRGxbIV0CcVJ6mk2zR1_A?GMiuj7zaqofL0wJmyVo#6)P<%Kr?BpH2sWnRr6s|&T5FUIe)YnXU%T!}GUbz?YSUqb?e^Nh+bOGB0 z4t75K5420NrH=N`7uR@5FEb50)9XG;%fhO`{*;c4XdBGrR!G>sWdNjdB^}o7LR4@^ zm6Df3Fs;tP98pIcvWS5`5_J=831$M#L4xx&O}_m}EU2K7YqZ@vH3E9zE{grJIwpNV zv{Id?Ekk#A=|6^FW0WNN)Ep+?AEUPCJQLrB!d*jSAF&RTxkBc9n{FSIpr+sVR=q4tVQZ4^6M$(At#5p8mJ^yZzLP z;zRK!H~)C?i3|b@1`s{=p#tf`v^8JTZ6se&Y$F}2s_c=ZWL}l}o1l9N=RcO|{=iMY zM<_ueu=xe%8T2&69P$?hOa}uUQ;ITsu8THNBH#|M^%6CDU_~c5R6c_7dmCn+SX;=z&fOP>d1Y1HvxMTUGJxV>y5i>m=*y) z6t9n`APmdJ=2&X9?f_47+1O$7m7_f7+vgOIPTUjGX$Sm4-(?k|Z&A1I*TY2xxJ|(1 z{c=I`*ci>)RjvWMTd|8E#NUdh zN8gk>@Y;#)3TlGO7oUXSqug-&tb6DqShxu;N0YqL3YT@y6p@jHLw##^tE+%gN&b(1 z#PcqA-?d8??^y;GXjb|_7S)$ASreYH(LIN}F>C;>PL@Mtn(Bj_9f>G9+(tXn=X}CJ zW}X5nN3n=a;ILg3cRX z$2AEwN0Pb+++%u1xJdXiK1QXNpmOs2&Opz|3HAdm(fs~~y}v>#cfg+K_UvHXD=O;) zi)WA{<92D+Cv(foIwc^@WVGlQzs=LS%%%pfBO!MZY-_T)%CUCk;DIXFR*L3`Df=qUc z#+y~MSJtQbm?R5X+iFK=Vo7-^%58DB{@fTC`)`ambAUkO@iNwxL$ise(FYH&Z%-9xPJ z5^9$d2VYcC>ZUV|^DH8;vcNNgaGtmvaX(bL)Nhe`)!$C7OPN%E;bQ+{`MT%#=w18X9ek4Yw9%I z%(K?(BN^tUnW$0-c4R94O1(84yf1{O!-Au<&zIoAgH1u#DOYg89_aTNws}+O0#Ei$ zm4j1sdu2)z4uJrX>!NZ~&lqaml&xj2e1b%>fXtunvvM~@<7u3x^erS1BOy>7!h7dY z=~+e!rpI=u_MrmXQo_xo@$bAxHaA0eck-wR0 z14^Q<=_mLGK()R1-0p`@(=}-4F%r^msrdo$UQ)SA7wunvQg+w)wUlamRJDW-i;4IT z?CYaLRyqD6jz!diU-RsZ?*}}s!CvOdahg9cuQXb?g_5&gkcGeq_dL^>8VIavtZxT; z!Jvhv19YY@3P2XS`G#&XJGv8NFN=U!?%q+GM$)aprN#z2?FsnBQyj&RYL!%GW5LT* z_PInwuGMr~u8g1CsS+vY683&S)Yt1Ri?N&8D5D0w#-KCC?nEBxKj>he*K$&r-IbwO2+L0E#9E*WhacFvAL5YO{VYJ3<_f{mq?yoRVqRbXS~MUhN2w$ygG X`^KGy!tlwL&~J9Ag_)}8!`Z)9f&pad From afc7d2722a21e218db868a3dfda2da14f7ea6c36 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 16:06:37 +0200 Subject: [PATCH 16/31] Remove unused files --- .pre-commit-config.yaml | 33 --------------------- README_generated.md | 59 ------------------------------------- docker-compose-pgbackup.yml | 10 ------- requests.http | 2 -- 4 files changed, 104 deletions(-) delete mode 100644 .pre-commit-config.yaml delete mode 100644 README_generated.md delete mode 100644 docker-compose-pgbackup.yml delete mode 100644 requests.http diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 301f8b74..00000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,33 +0,0 @@ -exclude: "^docs/|/migrations/" -default_stages: [commit] - -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.1.0 - hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - - id: check-yaml - - - repo: https://github.com/psf/black - rev: 21.12b0 - hooks: - - id: black - - - repo: https://github.com/PyCQA/isort - rev: 5.10.1 - hooks: - - id: isort - - - repo: https://github.com/PyCQA/flake8 - rev: 4.0.1 - hooks: - - id: flake8 - args: ["--config=setup.cfg"] - additional_dependencies: [flake8-isort] - -# sets up .pre-commit-ci.yaml to ensure pre-commit dependencies stay up to date -ci: - autoupdate_schedule: weekly - skip: [] - submodules: false diff --git a/README_generated.md b/README_generated.md deleted file mode 100644 index ba101e7b..00000000 --- a/README_generated.md +++ /dev/null @@ -1,59 +0,0 @@ -# VBV Lernwelt - -Behold My Awesome Project! - -[![Built with Cookiecutter Django](https://img.shields.io/badge/built%20with-Cookiecutter%20Django-ff69b4.svg?logo=cookiecutter)](https://github.com/cookiecutter/cookiecutter-django/) -[![Black code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black) - -## Settings - -Moved to [settings](http://cookiecutter-django.readthedocs.io/en/latest/settings.html). - -## Basic Commands - -### Setting Up Your Users - -- To create a **normal user account**, just go to Sign Up and fill out the form. Once you submit it, you'll see a "Verify Your E-mail Address" page. Go to your console to see a simulated email verification message. Copy the link into your browser. Now the user's email should be verified and ready to go. - -- To create an **superuser account**, use this command: - - $ python manage.py createsuperuser - -For convenience, you can keep your normal user logged in on Chrome and your superuser logged in on Firefox (or similar), so that you can see how the site behaves for both kinds of users. - -### Type checks - -Running type checks with mypy: - - $ mypy vbv_lernwelt - -### Test coverage - -To run the tests, check your test coverage, and generate an HTML coverage report: - - $ coverage run -m pytest - $ coverage html - $ open htmlcov/index.html - -#### Running tests with pytest - - $ pytest - -### Live reloading and Sass CSS compilation - -Moved to [Live reloading and SASS compilation](http://cookiecutter-django.readthedocs.io/en/latest/live-reloading-and-sass-compilation.html). - -### Sentry - -Sentry is an error logging aggregator service. You can sign up for a free account at or download and host it yourself. -The system is set up with reasonable defaults, including 404 logging and integration with the WSGI application. - -You must set the DSN url in production. - -## Deployment - -The following details how to deploy this application. - -### Docker - -See detailed [cookiecutter-django Docker documentation](http://cookiecutter-django.readthedocs.io/en/latest/deployment-with-docker.html). diff --git a/docker-compose-pgbackup.yml b/docker-compose-pgbackup.yml deleted file mode 100644 index 2c265272..00000000 --- a/docker-compose-pgbackup.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: '3' - -services: - postgres-backup: - image: kartoza/pg-backup:14-3.3 - container_name: postgres-backup - volumes: - - ./local_backups:/backups - env_file: - - ./env_secrets/pg_backup_local.env diff --git a/requests.http b/requests.http deleted file mode 100644 index 01ddd65e..00000000 --- a/requests.http +++ /dev/null @@ -1,2 +0,0 @@ -# Logout -POST http://localhost:8000/core/logout/ From 04245f8512829176baf49e59dd9b5614cc0dc4cd Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 16:07:18 +0200 Subject: [PATCH 17/31] Add deployment to bitbucket-pipelines --- azure_deploy.sh | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 azure_deploy.sh diff --git a/azure_deploy.sh b/azure_deploy.sh old mode 100644 new mode 100755 index 54ce1861..01d63206 --- a/azure_deploy.sh +++ b/azure_deploy.sh @@ -1,3 +1,5 @@ +#!/bin/bash + npm install python server/manage.py collectstatic --noinput docker build --platform linux/amd64 -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django:azure . From 9f94191c7a669a9a3299cddacf9a4b6840b4dba2 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 16:18:58 +0200 Subject: [PATCH 18/31] Fix Allowed hosts --- env_secrets/production_azure.env | Bin 5084 -> 5056 bytes server/config/settings/base.py | 8 +------- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index 0dbdb542f92074e9c8a05c783a4f5b959b5a1a14..ab2085fa0b74a01c761624710faad93e94e41c38 100644 GIT binary patch literal 5056 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 literal 5084 zcmV<26C>;ZM@dveQdv+`0M`{}>NH$>yca*rNNnK1l^JiwWjvN#`28(@Dc)KXVDD7+ z<1d@M-!2wwC0UFs;H*v<1Ac4Qf@lK-C#UkS^MB$Hr$A15^WBd|(4ZqTR9);sXe#p= z`#tw7(7kI|I35vpr@kx+Cr>dsc5tSGsJ3Yt;w52j%KR&`DF$pFjBdPy`Gg5Tne=C~ zekD@$BCsI+%_qH)yKX30rZo904OELFk{;C`_xZFz=KqujNGWu;nYe;Vq5X|1-X?~r z`b&HiCQ~ledpTws>d3qHLHGJKy-;2VX6fNVP}f-+s%7t}jRUy@mkyFdNo9P@)>`JI z7_sO~4JBx$@MNP)n@LYW^@-ig)3;E`ZV&3JbkO7C6}ppYW_mfwjLheb&*GPaBcocS z#txvm!W***kLu?L{j7(`#o zj$2H1SC&jLveLOO_Ko!7VGQ7Z&dvaW*QN=j`qQ~tXs4w9JqWZX2v%^AFH_`+YA}DG z9Sj!}>zjoCKd%aP)r&dIw+ZI)0aUuEA z3~FdFQFRQ{ql1W^FM@m-sZ#NLfPlU0qc z--N@gfyOe+X|u!|T^dH{yg$>+zHm$GWq$ow>*O5J5y<@QtEPYE%9dyPn&wO2ud`c* z?56KcV#sakL?q$qM^i<=!bZv z3wok$6^6vk6Q@ikEsjtJX;K9N;-q9;SC80*8v5-Qq-7U3jtoXwNNKBdt(zLdLr(Ec zQjBVur#O`Sy$Y&XKLNX^buhcBM~zLx2VY`)8yM2L z9n-0*O=1Ky>y?K4$@tIVv1K1D$HrKfGoSrMSby5=_n(l70lw)i#3nUMp(e)@`n51O?gmP{! zf3iOqg=Lrc)~^N&urfk7U$BEahHHh{s59xPNE6$9Z`_`Q1X6uW!(!!S%l98*+%nYI z`XvOOA)XhkvVH05-%L@w$Y<_&)Yrm$v{k=zECPfnDsLrY%NiRjfns_T8~i(QhJI`g>)sjx*1UX_pek z=8rY2H8p!RK<^q}B2OAlmhz~<>XK_cEO&RaWWmOp{oZERs7J4DX+MlEHScwnbAQd` z(}@=_f$H^sM%|f>X zg*(2t=R<`5{HtqUc}Ro+5Z4Hab)(h*VsvIw6A-H9smSdHhwcKjn1%a}0 z3qWosj4o|ZwthU^T^1nb)Cy_YJ5&c?Eontu0$r7X@EUJhx|F;=lQ3KVq(({r0Sa2P z1;0d(R65(Jv`)q^49+0wtU>|G&KoCg1}b&g&_8yU|2YTtzBUG;@UO&&xqBpO(Lup? z!-5&dlGUX&yL-62SZN+ND+4$6MLS10A=$^bvQtsbJ@fW)5U(Wl`-42K@!9r&VOQ!^E~x`A+JMk`JGV=}? zg#l*##5~DN&Eg8!%9({7Wv+ukN)5A+Ha$Oy%{eAw=wI&Gs9`8rqNlIxAZl-yCZD|~ zxhYoICcQ3z9H&ceqR^3%)ZtvdY;3_XR{w;7B0x`Lp)T8>i7t>LBN4I35oqlT??^t| zxK`gIY+L?!>Wb&x&r^-k?v%(r5~oa10=&}t8c!WGc^+O+7R8OCGfV^L4zg?$%D zLryz6N^79ulmVEZ;`EC3?a0hPPE)f8Pt9|)dJ(a3eN>y5)A&`EwgeFMnQ@!isd5vs z>OkZMwiW8z`6gAu0E&iLK3Z4CI=s4PEB>Trss6fE$1Rf`+<5B1jUn>*X%ZdB-Vh6|8U z!wCX`<EU3HpeFVF6<4UupF-^@R|CW!rz52fGYfD4mX|_vnVJukA$OPCSpNqQNJq zRaW_M9YupEeZ8p&js))U!0@B=h#%pNat_umU*1 zP4=O(#42IA4oq?x73B(&(<=GOX(SI^m;g(IN2m(APWmLmdfn-@dBJ>Y4qQsPewZcE z#ZO*TmFW;_auM{Uy8}v6<2J{YLbbk{ZgtF3&G4B0Hc2h{MMP|(I+?ICmrQ*&)H^43 z3z>p)dtYDm@dmvA6{5S_j5JBaGASxhVjY3@YNe0BD!0|dQARt!?`XYf*j73W@jSrT zjsRCDq~3&w8s$dnOp;IuG%g?jTU~Z{a)%I!k8i;%T=$BP1TqY9 zkC^%C_$vw=lR(Ny@GVdZUEPo8*x~$@2^$L0OJGV|z^FSfl!4y?=ReQ*Vh)iE0n_Gz zGb)_-47hBMR8OOz3oht5CyBNqR=I91m}=VeIEh6oeV>1z=32WZ`CJ_yC!~2as6z%i z%9BzH#e*t7jvDZt>TbR(n?RB)>Yw=cZ&TQBuMbK1;Nx*fnrs-`mP!#AFFi^;5d{Ei z&3=pa?DoFasRnA+mI(JdJ=&gBT*_@(#2|QSbV(;G>AF}rfOU^xB2V8Uz=2JrsOf0h z19+*X)(!ZegX}eu5?*0Z$W=oQx1@+t;@WY=~6HBL1r7ti}(pVVwl6RjlCV(fe9vY#zrG0nQ{iVf=(>@PZ!pb znX+W1(CV|ZL{wPmxsYQCSl)$9c!?<(PEjE|MoSDk`Be_5#UN*hT#g=Cg&zIHHS4&r zI;HWIp@k=ZCfAeKx75f2YqJiGxFIYvSSaV3Fg#dlC&Jq}H5G@xO5I9Owe)?u>F%Dv zL2Ln<8L_T%Up!jYyV3JcxsJHD58V7XFbmX#-a&;(<594rN3zXwqTT0bu#`~ zzv~M6;4Tt%1jlS<_{wAo-P8e)NXsewUkA*>R4hxY*wPQ5Zib?Qo&A<5S&?`6jcKad z!FCs)#H}`AYt>|aVNqlVhdQfxUOq`5S&BH`OcLs%gCa{bF+?Nvam}XG@JJQZdd*4& z?K&L1RI&m3^3)8{%GONYV}cu*DbJKoKtA`yhJeR_m)$Xxfgnq-kEdY@ROS|c53D!# z6{!V@A;~xCbt`2JRMhQ&JAJ$f%SXVprFWZ%Dv@!`kr5qvju%ZWDz`-lkl=Sr<7{e6 zTTKQsu&akSUC<4{qpZ2_(%NPmvO!9|MbcN5b8J1<^v;5n010z!-4%@X-OnvzZ32b! zFLNKqJ$JwDz@HWSj-t+u4f)Gdm!P;b65SMkt-|`WLy0N%tV$>WX|g>M1&lQ^*e&J) zU0?1SK4sU!%^j=TX23CC^Oys!ifx2la4kha*Y`7#3clr2Zuni;AYvy?_Mw76?c+IV z!IVJP@16~l+V$%T8~5Y^E{XBb0In6pr1~u;zt_pC@Bs><^gpXs?(6<$I6ChDMxsh& zoEn~*Zwy(TafaK4ZGEe>QMd1Jedh7HXb;aXIu|@@97#o3G8=K*JHGsAG71_@-RZ3j z4KbWy!&D=p(HVA%7B64D_Z_&M5xp3yc~nhnOo|r+!PueEn1D&4Fi(u%$T{Q38Rb#)8!gNP1>* z^pz#ChsFCBWNzZAyX52~T1Oq#g{68ay>sUtQ%THu1sE97!YvO3&-(PY(7d8S&W7+9 z-cfk%vhZ#mfT+Y;GE|<8BoD~vV{_|dJWws`Y*qMZ-ryRBN+(7?ENQhgL}rCa%BOm~ zX()N+bZ%D+h^GX?0}5x~r)$VJsd(wakSm4hVkcrhm>vAm5*caAKO{iQ8tl^IP&2dNykEph*>|-jri^4bYU?=BgmYGD`7q zvWZXY+@uDw<#X@Nvemo?mTizoS%4UXvAOf>tAZ+{#35m6J@;dDjE)<8+6CMp!MU(xG=CC<7<ha<1 zh8fNF!QF@}{mG>$!8HSZttQtM6F*Aq4M*FdTafx9@pAyaymuHrSfIN_$kjm~8O?D& z)gS_$RG^S18~%>@g%UFs&&SRpZ*!fb5e^4ZtJN-e=6f%J#@;*=V&V>M7%sn@fh-P6RT-|YJerHbmbGs9WqbW!ZxL4#(Ny~1*-36;_b yZHmX8U^y%Y60XZ8g9twd@UAxHsPDV=KE62pzqO$h+MzU1Df*r1vQKF7$*s_kBj^eM diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 4648133e..78abed47 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -521,14 +521,8 @@ else: SECRET_KEY = env("IT_DJANGO_SECRET_KEY") # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts -ALLOWED_HOSTS = ['*'] -print("*"*100) -print(ALLOWED_HOSTS) -print("*"*100) -env.list( - "IT_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"] -) +ALLOWED_HOSTS = env.list("IT_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"]) # CACHES CACHES = { From d29e9c8c8ff12fa62fa54f1340be7b357f4a5625 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Wed, 24 May 2023 16:38:18 +0200 Subject: [PATCH 19/31] Add reset schema (the whole team has to know when we stop deleting the schema. --- compose/django/docker_start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh index 5bcbd051..5da944c9 100644 --- a/compose/django/docker_start.sh +++ b/compose/django/docker_start.sh @@ -5,8 +5,8 @@ set -o pipefail set -o nounset python /app/manage.py collectstatic --no-input --no-post-process +python manage.py reset_schema -python /app/manage.py migrate /usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:7555 --chdir=/app -k uvicorn.workers.UvicornWorker From 32457bcb6171115e683e6533430d557ed23b7d74 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 25 May 2023 12:00:29 +0200 Subject: [PATCH 20/31] Add build to azure deploy --- .gitignore | 1 + azure_deploy.sh | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 3d1e0c04..a511dff6 100644 --- a/.gitignore +++ b/.gitignore @@ -287,6 +287,7 @@ git-crypt-encrypted-files-check.txt /server/vbv_lernwelt/static/css/tailwind.css /server/vbv_lernwelt/static/vue/ +/server/vbv_lernwelt/static/storybook /server/vbv_lernwelt/templates/vue/index.html /server/vbv_lernwelt/media /client/src/gql/minifiedSchema.json diff --git a/azure_deploy.sh b/azure_deploy.sh index 01d63206..d376282d 100755 --- a/azure_deploy.sh +++ b/azure_deploy.sh @@ -1,6 +1,8 @@ #!/bin/bash npm install +npm run build + 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 From b73f27bd0f58c4a3a921cacea4d9ec0245b52b26 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 25 May 2023 12:00:45 +0200 Subject: [PATCH 21/31] Add azure docs for tipps --- docs/azure-tricks.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 docs/azure-tricks.md diff --git a/docs/azure-tricks.md b/docs/azure-tricks.md new file mode 100644 index 00000000..08fc8876 --- /dev/null +++ b/docs/azure-tricks.md @@ -0,0 +1,11 @@ +# Azure tricks + +This document should help the user with a few commands, how to handle the azure app. + + +# Get logs of the container + +```bash +az webapp log tail --resource-group VBV + + From ea1fe75ad710b6d0ad80b42cfa4125f19a10cd16 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 25 May 2023 12:04:31 +0200 Subject: [PATCH 22/31] Add backup from cloud env variables to secrets --- compose/django/docker_start.sh | 4 ++-- env_secrets/production_azure.env | Bin 5056 -> 5220 bytes env_secrets/production_azure_from_cloud.json | Bin 0 -> 4934 bytes git-crypt-encrypted-files.txt | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 env_secrets/production_azure_from_cloud.json diff --git a/compose/django/docker_start.sh b/compose/django/docker_start.sh index 5da944c9..e888148f 100644 --- a/compose/django/docker_start.sh +++ b/compose/django/docker_start.sh @@ -5,9 +5,9 @@ set -o pipefail set -o nounset python /app/manage.py collectstatic --no-input --no-post-process -python manage.py reset_schema - +# TODO remove after stabilisation +python /app/manage.py reset_schema /usr/local/bin/gunicorn config.asgi --bind 0.0.0.0:7555 --chdir=/app -k uvicorn.workers.UvicornWorker diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index ab2085fa0b74a01c761624710faad93e94e41c38..e0c09b6b2b44cc114712a2ae1b4a4a056918d20e 100644 GIT binary patch literal 5220 zcmV-q6r1Y+M@dveQdv+`03INFfuQ)kdaV#_Mj~_o(Aq)ADCj*v{RwNM_#;Fk(%Sgy z7)Si=9{DdxJbQOc$tzZXWAhA}wW`WKK|UtB+?OZrZ$%9S-oO|}gOKU7Hbu$gvsGd3|xAPdANX{hTrgu(I7hm|KjGgoc|&29Z_*1w-fihEO+$?EPJ|{nc~NGrDKBf zp;1E7u#}E_r2JddN0pdy_CRaL`%J;sl6di=9FU1SRyPGQuye5o9>*biO2xh(+#<(7 z&8LDH1u*lDLDLmgl+?5D(fS#`rD&$k*<+7;n|tgL^6NxgrpT5WY>sB8%*fTD-ZBHS zWUtuwhM+h-aY_JF#E#dM2BK{MxYz2nmc0HEUk#`Ui4j?XijwreE)Uf2W7a=s z83TiQyOKzO9aMA#+SMy$tZ_+}A;Jx~Yz4-wFU1N@67oVFbW~ezCS(@V#qj1aeL^!# zPqmWxsuJjxU(yj(bsI(kLtDolgSTeo-gtP`>EqW_QM_hcB_`~}hqOMjGec-MxF+ic z_lT68h@KGv!mAaCk5ZW}I}j4}l{ML3*`WX6J-cE?V8vsUBXkiK6H`zEdr) zRiXs2wNe?ZL?IBZaKdaOv6_zKo#W>uDaQek$XpN39M~4IpF%o@gxcZX%^no4ef4Zxx7(3H~1xrgSb$_?$q zf4>zB;1VLM#WB#uILSj;eZlqrz?&gi?;n?UG{@^D0w<*3Xl32IIi2~0{)APb@okDe zc%}q(L=qDY%sFWg*;;=)&OTy4_Ggx{$zUJm!`$vc<>-qeva>)2%bq4C6|(>UL!n+e z(Ap38fWNBC0Ge3`q4qYX-?p;xLhQ8+`*BDYNOhKEZ($)W8IPt^Ou9S)3EFP#B-MZQ zmdX9`O-ztEP4HbcBoE_G@7+UnmWbL+1)Y@LhDa&usPZX`x1;yk0 zCSamEsY(L80lgSvJng#wI~zq$7{U(wOcgZ2M1lO}qC&wj;sg58IfWoC=3WePib*@1 z^~GyjlJJ`Xtq>Vuxl2GF-Z`UqA;e-%EI$J2O!?Q2|4UX7dT!_j_~=)TJahj8FEquE zrw`GlB-SKZF~JR>Uh6FQO#A*_UR!Z~@!p7Ug_C(ny`RadrTFw(EZg2Ep@i+-4OYUdV?}g+V3|VXdPyRI=IoB`{`}f95iRaqJV5B^-EZ zSwm_mh?ix*OpXwZ!?FvVE__j%-w2T+e%$7jtw)>i!aJWmz>(--#0oYzoKh~f_XxzVgJ*RUtM zb$qPXfZYFZP>?CzTe4fQx67T`&dgH>wv5W_okk_zH$t>2Y=>hU49pJH<&y#ZTWWvl zZm~0C-$)e*jV#4OICQersbMM$14Ii-JS|c}U|18g0U(eZ= z-NX9<^6|MSP%3Q(IXk;@MEd2=U=A6`ECe=HS4Koj0Hx)i<~03zU%+zbuBN z4L6{MD)cOV(8zXO1hwz7kN9F6T;oppr`-G;-k69hs~iD%cID)4&D7sGtPS9i=QUL5 zdQeGM9Ww?Q<0ZF`z@=~hnG8@Ex#I$oH27&|3!;<)rr-7IP?b3jw&rNdBDo6`-?+!} zOQ_ZmQ-=aX?MuY^KI3Bu#>lm}N$B8(7OheYCY9p+sev=0R_CykpO;9I%d+;s zCu~8~JcNH|(lj;5L<9oJ@8Xhpje0eH|9MzreFBa!`FOIc=g!5gkIpUd=Jvd7d&T0A zUUwwFyw%VOQtxN}(euQnMk}hM7XL$?MXiBIcj&~=W{D&Se_2?iw2aR%D_m%9uS7&T zp9zw*&T%@mLTjeKU<~LP)2Y{h+0FAu8+=`#E&Qa z_aEs-3oPCQOygntPH`E&E{jKooWvqqQDvnAfbXl0`?~U9CXweCJklC-L3Bzmo>;xc z44!(1xwUz0CUWzk)L&{O>fC1V_b`;uC{Eh{qCqf+oZ!;5q`}xrt$2p?+|8m&ze86n zdd5;iX0vRu8tpjgIjCvR?QbRL`PmK^tc~D5`{~reZwN^pGI_}`tZ`4HqFb}i1;W6p zB=K#|Md1l#9@@aL4qy4Sr+C#7xpGhxjB~v{x}AY0Va+_HExg2VySZoI-;UI#4mLq_UBTsWcJnp6hs~~`-~0m^A(!87VblRkd>$1V@3Y?M zwW#cz?L0G+CWhWr2?X*`8gF;1ZdIl+Ep#IR;oE!lq|@kC3=EXysaE7E(NSzW z+Qp9VSIPuDw8RZQ4+8rasRJ_hx%e#N#NeCL!3NRWUknrwq@PiIpaT7B&2XKlH~+@! zMf;6H&W%S+FN?EWN7dX=nil@*@L`3L*d>wv+Q7dr%%P_MDPEG)r$wCa2}A75cS3s{ zS@&n{B0hhQ8rX?^RrDYzwZpH>nwp!%&DLKcgWw-Man=(h>9X`O8BRPW@wqQq06Xai z(#su)soN{TzXY3`GOmyeqm)j6Sotk!v~i$#DwGaWTS-wx=bf#H=gKN^}Z8~uf@yQM-fWNKWKR7vcw0A zd`SrpgC}BE3EUZ~xP-Dw*b+w9tw1HVx#6{*FPhtcM8Bm{c~bL8b%~4@NaA0IwJCh0 zQEw6|*1-*atAE+rIYs3iEgG}+Em$^bZ|G^beT$Y^dkE)RN-M34`}h@4GNn06k+b7S z(&CYRg4}U~wG>h2@#Eg%96guy*2bOu%Z@Q zyvYwW0RTkDSWU#C-AS>U4D4DEefyGKQO}^+49+ci{k)XyIKQB?W(z##vuT% zM#-KNUGH&}4Q9Ae$bA}ABe6xB=cB9OP9E(>C&hiwXJ%=x>~4#PEUE?~rJR{E1XzJJ zOTI3hUN4$KfC+w|W4_a@f6t8n9A+RhEJWIlW1`b&!oJ$C4mu$We%v@oqj4w5$curw zBL{oGIJA9K)@%`@vwC67_Q8QK*3mmiF5~9p5*LEuuPx$iO-5$p^d|-|Q=p$BM(JZE z9;}!D|GpPhTEzi+S1@`k@bBA+_>$brL4x#dE7uTT%9h;)s(PIT^iD$Ky$>gx{IQM! zxvoa3)sWiFF|Ma|$RmbNp_x2o_TDqlUxR_1OH&Al6%+h4KsB9j&q=fHNVZyucx^ppH_?Fvwi>iumwQpcD`$L4u0u$V%>MM=J+ zv!eMB=y2;VyuL#sletF<@gz+zxbA*`uk>9PYTu5`hznWkSXrLSdu$Cl&U?4kp!2j; zLRbfV2YyjZ!dN$9UbM|Ou4OR)Q(9(w;WcD_HUkQxCguBr>ea-m^2y6%(t95YuBkxV z7XLu2EzBlxTMRO-Sz1!oQs3Ys`Cc^RrBg?zr<+!maaLAocqj)s{{3HHzvyRCrh)`* zN$zRn=AI+Sw@@MqvCrLeN&FL#4aqVK@j|jQ(E%Zt20CRN?!B|-?$*{)Mo*VWpd(l3 zwoG{H1E|eX=;B<`*sINXZbg3K%!wCyf;MJ%k-e+^C+4}+3Gik<+p4>L&^GnZ-y3fE zVG*-)F}m9U{t&ckgRRIYqv?_Eg@crvnlNuzX%KV9&U&TYf4xAqI|Npzm$~HZv@*LjY1MBefs(_ju6FmxQUEfX7+blW zS%!~zk0nby->)$tj_;}3ZK(>rHctZE&v7N8u?AU*Y{VUtU^lH-vq>FU>jVl;spO^Q zLjV-mmLk-Jvb~B$Wc)53cc%{N5{XL2I2$7CU`z^Jb)+gtRI}IEYYt8kdq0W~U0CvR zHW4VxoUgjH41DVzV{tOzNe>b97ddO?BHfWAvjl=gY$QJ*&2mrCH8(o z9$v)fIm={~hih5go#8pKkXOdgAHoaiD)D0nbk=#-HqRzA?E%Mq{p4T$bksiKJqSgS zKLJ-kiSl)Mh4nf*&e7&xOxG*4`yXW#k^_oO^Hnxke^qa(Hl5vMiLuPnGL);tI1c?( z-`ayLyLFS@z;}=bIKgZNSYU-n3=A8hfS<{d19fDyC%#5z&3|9V8I|OxX*m2Mds_Kq zcRA2Lh1tXDG*NnsSG@}QkR{Ag!sB=%{5CEfSAF>0ip9A{J2dFS07B~+!iNg+$|E6` zeHEwTn3uDWhD)eW{;8i6NncG_8b-s%AO!>}Z*R_#pu;4g>+{_#eCjzj7y}E6K1g%; z%(;GEl{BLy+Jbj?w!NYCbWy#OYGF>@Q3WF%^|~4 z?4p1Q1fSH{7GccwITCevGO!nk1d(m0HG_df+cLGhUD_i;E?+N7-3%y9jA(jN<9WiD zX$dOVl~gURzvU}!L1rx|PNV~W_&#Xw6`eZ0;~97rViWbkvDR^KAD~eADF!nwl!Y5X zdTJZQ>PS-Y@xtiWz(fu_LGz3k_k@ZRO*^o!F4-hp+@z}Dd6duVwKW}O^2!>wm3Xt$ zdFe2fon7WKanC+sf7t3_l&PgX4_IBpJ@NycIlEL)M0ilya6s!?E+YoFcjRk)&4*{` zw>w=sNJvTGh-pzLxAZEM&0X*5iMPIz#x6+pRjKx`CBRJSaX;O5i#tmS{$D1t9?ftSTaE_o^w?;y7uID_2Qo5jjV<>!1mv$Q4GUv)Mi{K> z>v6K|`k>hB?oP-N(5HKqns!WT7ekhe{PyHHnYyu0Uu@iXl^)boF&+1Kg#MIV2Ygb6 exe#dvGrkYW*oEI(9T+fy+RFoW@>4vWlTS^LBQux) literal 5056 zcmV;x6F=+#M@dveQdv+`0GZB+m~oEc^_{WmwPJj>k;vW&k>T0gxhDAUkf1ais0C1^ zazxJbVJW^`++acyr}wM2vf;h-Q48oHoAUrD(r)*w9POxr5!3IIZnxSZ6dP1Z0@j%i zaP+TPqzk5Jm1$Tphh0&`5faL}xlUR7HzsE_DDB4O@{ai!jY|Xpm#DG#x{b(J7Gj(4 zdyrb_s8WEm5f2m@Up7;hG1r&*pR&>eu0%h?nHuk=M%Z`tmYuT9qc!lRwiB;A_T?lgENWe%`8`8fZbwAF& zS!pBA<*o(ucSl@ohb0xU?@_~ZKle@oPP#1ZytyXZ&hvJd?>v8m2Y&bK0qGquj4d3F~hhIz}l&8y!>? zetngG+R#IGdYgm{Ln}3YZk{}?z|q6y z03xsD_Ag-U<@St(IVXVN@)EAwJR+*v*;H!oTQp+3T(jZ8w5KFS=YI7y<7_{;yeTN8 zhO0j%Q5g5xU?g4Mb3R&VR_1NtiL~6nlCjKBg?)fgtB~9&>-JK)64x1y_8ddf5KNt~GX+ez7;9L1# z_$mvE;Esx1|4|5G7Fw)A0;i=noeUi)gmN2{icuC_Lxe)ng||6Lt$Q$=7napW9nI#S zY-G!LxavNMjpHI|ddf-_%mV(m!@z-k7>v-06v1*!(;Cj*W2kN-qeBk-C=dV7IFA%C z?L(K~bdG+KuN{j}p!J{q$+#it@L(&V3?;tb(KDp*KE@%O1otBfZvbRoh`7`Unf=F~ zxUNl6ctkM@;R{;70E|%Q#9FT=BWIsK+@FPv7%K(UBf z*L_z7roL{KcAC27IF4!p`sMi#9*<;ziR64bfR4rybA8pwOiC&LZ?kQ1ExIwDHuPDn zo%{ctc6;QQibEfDzo>}nVg#m+vB1{5^zDJE+fNG_RQ$V5Nalurk&WQr&y_(H9_oKJ zuY&d~Cd7cd*}a#QrN0*@-D&vI5N{pbCC%~Xz{H_aODI~g@vz};jb;pffxz9wU0Iat zsz6BpCKL5L$=+_Dgn}omOC?!4aU*_SxpxK~{ zzv<_h7`guikYuq^*LhPK1O+X3wxv6dgX2?!A2Ko;*MjMsgrI%3f9Re4FyBHbdc6&q zn#1;Fh)axyes!cAc#xf445s0JzS2=6ffe!kldS=H?LRBZ*g;D(&rna%F@Vl~yTz%v zr)Gsen=y(r0@-HCOxY{lkpunbGZ}(9M8rB9&aKT6w5%cF!NKhW4z}&(n)LKLx8WHT zg*@~vo*)!)Xm|Ukdl!l=Nq;OgqiPob?V3z#Z`8Y*K`Y858pv9 z7C87NYuh=7x1^ElTJT233z10fPJ5i^Skw_wUFIEP6RW+mDtW?IR|4mu)M$CJ7B82!h6)8+OdlwPw+X^zBee%ro8WH z6SEE@A4z1Y>I&#{&H(Sv4$2WTO665tnY&jPWBWJra9uJBH5o}8gG22$Jd2Hpdwo=s zm!w*&P9yz98TJ|-_<-3Qiqn;wp_t7+GcnMQw3#`b2a6z?0V4@t2`M&-So(BW(4+eT z7%F6Q>Q_nf5${*jsiI9ngB7~4fx2M*#5>iUX<|KacmMkzrArSHH3m*><|qJqD2d45^=+h? zXxVd*zw%LHKXfl3IU$V&tVCB&3xAdLxHE=&m>b4l0~V0hR(EjU-;j+6l_b;Gd7;jg zT9nd`+64VlT?+CoUSo{H+6-9OzpU+CcG2b$?aSw`1X%Z+@`R%!bbOo1!SR;pt(@Be zEt+rbS8Fn8$O@0JZ0@lN^VN8~ri*UX@^~q+k(Ci(SKlVFe)m z{$v|5+c<2z~EanBK2 zSn7)&NIkCk%@+Lefdl~(Ht>y*`&md9oQ#yig0F#WocS}ZoMq7-MPRYv?D<x z7#hgG!I+^1DDd5u`27to=!#(dFWC(?p(CeB7v^{9zA|tcyAgH)guF4`FTTBLJrKGG6x&|Hy@;K@eDnv;o%^CqKCPLm>F(}m8D6~oWO+Xd{0 ztVqYvm!h6Uj-=U?>YT1tI3G4edN&w(Zq)~}R|x-p%8>E%B9gr$QE5*|v~o;mzA-tJ z`>~wykJTR!BG}3mDdw5pV$Ga;F5y4yoSqn>#^n;sThm@2+a;qgL|+8XXy~>6n?UFc z@5Hwh7X0)*{qbDrPs*%idVRtdq2uOS*K(`OSF5FG1Kmq{a3JJDC0B3+6h)#~H8%7kJ{{cpGhs zJy!~c+(HR1bj04TP-{&cY{kDgFJ&Dv(J48&!5g-qaU@c^vmWM5ME%E6dw!60c7risyKzja!bK_M~2{D;Ym$7MqP>Aw+P1DYdsV z@y&^{O{=vB7uYNdLX5VrJoz5^&hFXW$YsbxNPtP1(D2|KdSJac8jit93;W9&VZ!du zqgbwN4*IE3BRd}#f}8Kg0$aEa3@D?_%h+43?$}drw&r8g0bA;<>%OW=bYIbAK#1U9 z`TV=1tTmob5+~*GhzED=%{e%wvNO1A`2&5XLu0$zWKQoirt_=V;{J1DcHzS~JOS9= zBN4N=jX5pg7N5x@%@BJVVkFBj6?o1$zyS93Tap8#?mK6luYGsE@JcK%JxhnH*Jz=9F8$824=R{*fD$S@T!6XJE>jqsN+3i&O{oL^W-uQCgTO)GoAH&#IoMo( z7}6Dkp5q@aDrnv4;HMO%cz;9X_2-6ity$bgsxNI%?PDu`C@@r zPDlI_D^cE81pW`02I+^Fi0owN5u)J*N66xPlG_j5ExJA>t2pZ~j9yyNr!CA+dU9Xx z{o8$UXK%5^1|j$qj9B!|G#s&rB#h$qsy#3B#%^9cjA=*rqB(Ffu+j}lSt&zJ_*Tf# zvHTUSr8%1L_ZooyaT>&*Q$;R^>c@eMujK1BdO`JrD~6>q?2|QQI3X^5(WF>XoBqmI zu&_aD6B$CKO4s8}@-OIWQ+p0h+NY4DtaB7NY1b6KDZwjxG~1R*mRk=wpK~%+U087^ zVJJ}KV$fN#bE%-*YbTkLe2-Jx@$TaHhPLtdce5RGjxYV5O;WyMR~hSbpfnCiFg zs@ujEIn$Y9J{V~Lz?@&THOw5lU0CWu;s$e1{_-(=F^XGKfm!z~2)=Qig|sf(!8y_{>>JiM<7UOpy96@W6mpbHx&yqh5kIl9yn_)n!%o*oN`<-VS5-x1h60u^Q-MflLE<^DbZX} zmQ%Otw)}g1c$`_X6R|t4^686G%r;OA9K)ubKLksbM=rBo7Cun)cOvF>0EgSc74Yl0 zzn4T=KKg}li}difpwKck0$#LCum3wzSaF#&g#`iW8^8=Xu0Lc*1Q}>=7Xq64z5hk$ z9ZnF>+))FWHpTL;0cCQY{SIh9`^b-H!qPKv3i?GfKYwHko+&Y>^0x#o4XRmz#yPnO zByiz|GQUdxC#WJbVqDx3EYp1nnD0TbnOfus>mEU^1$)DiLe@^!{-xKeTB>w3d^r_u zzi@`Gx=Q}rGERc0QbDtHoOv%S((lJLWNH75&~`-M`LXT=A$wWP#Y(xa5WBMCN~?P} zrUz6=fAr@M3W{NCzr~R)8<8kcI}Nqn0A<_LFo30K2^7l@z$WYBoQiFf@QgBhf6~{= zoG_Be;c^#6%j9@sZpr8hR-9!OGxU{B5Q54}T5e?7dKQizP~R6jBc}tYDV&hO$XO6r zF=F>IPA0HVQfKjK4+d<0Np2;R+AzJ0J6}lg~vw%T^ zj6qTwxWT}|0xPQI(;^|=%;*2RnuF7+NJ8n1+hy6G>&^~;dCBa|hS3V4V_$D|)^flR zXP>T8i4$SJ+T$jsAa>8!%PqGB@^!2}>75XXDpnOA{;t`p+xsdUl#TRHFJZnU|NpaC zWtVDb>?(F7fkjbjFr4|0$J&VfGx)%wYs=n2uKR5(@9}|3^*9P`j>sv2U)jL*7VKp{L#GpTvo)L5dt0Ych{?n7e5 zGoezGxPs4Imiu3}5-*$g?lafb0|Gw6%p*i-WxAiY`Dz3F%K!|dxf-Ke`ZFeUm>zt- zt{;>ATkwzSTlHZ>kaRaZA&lPSYw6d=n6ydiAR!1JJ&TfMxAh^t-3Pz436HDfpiH zUI$8+QXSX|FkQw-a{k+6dikhWOat1Hg5JDBD|& zD9oR5m8Vv6QD0d5Vvioo=gVlLs1i-E)7be)TuXMKY(l`bVZC-*+ruXV5K>|)lhtbe zc=MTCyd;SIb#1Jf0^d~U^Q24-*(%tH#H`8m?pkJC(vfQXg*(~mg;kNTLVq3zVLiXW z>>+`(0pws#h8>VYHNqAB*VNIu~x&X z8~J3^P(buG7BhE5sf=tQFzfX~5b`hGXeVFyWs2RklbrIp;7=`kK^fH;^wzBp$1@ow z#SDl<6-RQr=TCXzx6h;Qhuu`3A7o8!U}W59$^mu zrMS1&>%}<{bPY+co*qe)37VZ%YogMDPdRGH1L@qPG+-qOEK%8PNHE8*8Y33OJ$0O% z^=V}hqw9^n-FP9?Uo=Rrn;Knwp$EScPW*K6W}N&8Y52E*EX8EdmK?%&)C$l}C!$T2 z@@_Ow_$WN)R-gD_=1yATXq~pRmfWi0vDfOS0f>;xb8JgcUkq)73emC;PVN>s;8`lp7uHlhG9MC}{JemWY$uhE)DYqVx^z>< zIG7{&80Q|}7r+Kl9&2^d_|R!J`*??`G4q{+qd&V1hkqtY#ZwbBYK|u&hPP<$;h;67 z@{ANH$cJLk6xq@6-!+wUxtWJftfP4e2LYYix#Kp%SltB?RC*(9 zc8o~NY?lp>3oih_*)FAtOJTqAW{6!4>jNL|deD3uC diff --git a/env_secrets/production_azure_from_cloud.json b/env_secrets/production_azure_from_cloud.json new file mode 100644 index 0000000000000000000000000000000000000000..6948a54efb81b539976a68c1a7c8e91f0927e1ff GIT binary patch literal 4934 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 Date: Thu, 25 May 2023 13:28:27 +0200 Subject: [PATCH 23/31] Disable django debug --- env_secrets/production_azure_from_cloud.json | Bin 4934 -> 4935 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/env_secrets/production_azure_from_cloud.json b/env_secrets/production_azure_from_cloud.json index 6948a54efb81b539976a68c1a7c8e91f0927e1ff..0f4d6615c421c2eaa52f6d815ac52c4d7969e089 100644 GIT binary patch literal 4935 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 Date: Thu, 25 May 2023 13:36:54 +0200 Subject: [PATCH 24/31] Add azure ids to trufflehog allow --- trufflehog-allow.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/trufflehog-allow.json b/trufflehog-allow.json index c74e9e1d..a183a7c5 100644 --- a/trufflehog-allow.json +++ b/trufflehog-allow.json @@ -5,8 +5,10 @@ "ignore hash 4": "1NpUCSvAKLpDZL9e3tqDaUe8Kk2xAuF1tXosFjBanc4lFCgNcfBp02MD3UjB72ZS", "ignore hash 5": "1LhwZ0DvP4cGBgbBdCfaBQV7eiaOc4jWKdzO9WEXLFT7AaqBN6jqd0uyaZeAZ19K", "ignore hash 6": "A035C8C19219BA821ECEA86B64E628F8D684696D", + "ignore hash 7": "96334b4eb6a7ae5b0d86abd7febcbcc67323bb94", "json base64 content": "regex:\"content\": \"", "img base64 content": "regex:data:image/png;base64,.*", "sentry url": "https://2df6096a4fd94bd6b4802124d10e4b8d@o8544.ingest.sentry.io/4504157846372352", - "git commit": "bdadf52b849bb5fa47854a3094f4da6fe9d54d02" + "git commit": "bdadf52b849bb5fa47854a3094f4da6fe9d54d02", + "customDomainVerificationId": "A2AB57353045150ADA4488FAA8AA9DFBBEDDD311934653F55243B336C2F3358E" } From c66d25daa3c71ab8cc8c0127d4009ca2ef0abaa0 Mon Sep 17 00:00:00 2001 From: Lorenz Padberg Date: Thu, 25 May 2023 13:41:57 +0200 Subject: [PATCH 25/31] Format with ufmt --- server/backend/custom_azure.py | 11 ++++++----- server/config/settings/base.py | 16 +++++++++------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/server/backend/custom_azure.py b/server/backend/custom_azure.py index 910c309e..d84ec148 100644 --- a/server/backend/custom_azure.py +++ b/server/backend/custom_azure.py @@ -1,20 +1,21 @@ - -from storages.backends.azure_storage import AzureStorage from environs import Env +from storages.backends.azure_storage import AzureStorage env = Env() env.read_env() + + class AzureMediaStorage(AzureStorage): if env("IT_USE_AZURE_BLOB_STORAGE", False): account_name = env("IT_AZURE_STORAGE_ACCOUNT") account_key = env("IT_AZURE_STORAGE_KEY") - azure_container = 'media' + azure_container = "media" expiration_secs = None + class AzureStaticStorage(AzureStorage): if env("IT_USE_AZURE_BLOB_STORAGE", False): account_name = env("IT_AZURE_STORAGE_ACCOUNT") account_key = env("IT_AZURE_STORAGE_KEY") - azure_container = 'static' + azure_container = "static" expiration_secs = None - diff --git a/server/config/settings/base.py b/server/config/settings/base.py index 78abed47..d655b3c8 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -216,16 +216,16 @@ if USE_AWS: DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" 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' + DEFAULT_FILE_STORAGE = "backend.custom_azure.AzureMediaStorage" + # STATICFILES_STORAGE = 'backend.custom_azure.AzureStaticStorage' - #STATIC_LOCATION = "static" + # STATIC_LOCATION = "static" MEDIA_LOCATION = "media" 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}/{APP_ENVIRONMENT}/{STATIC_LOCATION}/' - MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{MEDIA_LOCATION}/' + AZURE_CUSTOM_DOMAIN = f"{AZURE_ACCOUNT_NAME}.blob.core.windows.net" + # STATIC_URL = f'https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{STATIC_LOCATION}/' + MEDIA_URL = f"https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{MEDIA_LOCATION}/" else: @@ -522,7 +522,9 @@ else: # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts -ALLOWED_HOSTS = env.list("IT_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"]) +ALLOWED_HOSTS = env.list( + "IT_DJANGO_ALLOWED_HOSTS", default=["localhost", "0.0.0.0", "127.0.0.1"] +) # CACHES CACHES = { From 428ba37bb394d48583e8715037788436634ae271 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 11:14:04 +0200 Subject: [PATCH 26/31] Use 7555 as devault container in caprover --- caprover_create_app.py | 17 +---------------- caprover_deploy.sh | 3 +++ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/caprover_create_app.py b/caprover_create_app.py index d67eb866..549b5b23 100644 --- a/caprover_create_app.py +++ b/caprover_create_app.py @@ -70,6 +70,7 @@ def main(app_name, image_name, environment_file): force_ssl=True, expose_as_web_app=True, image_name=image_name, + container_http_port=7555, environment_variables={ # 'DJANGO_SETTINGS_MODULE': 'config.settings.base', "IT_APP_ENVIRONMENT": env.str("IT_APP_ENVIRONMENT", "caprover_feature"), @@ -84,25 +85,9 @@ def main(app_name, image_name, environment_file): "IT_DJANGO_SECRET_KEY": env.str( "IT_DJANGO_SECRET_KEY", generate_random_string(63) ), - "IT_DJANGO_ADMIN_URL": env.str("IT_DJANGO_ADMIN_URL", "admin/"), "IT_DJANGO_DEBUG": "false", "IT_SERVE_VUE": "false", "IT_ALLOW_LOCAL_LOGIN": "true", - # used for deployment of "real" environments, not used now for feature branches - # 'IT_ALLOW_LOCAL_LOGIN': env.str('IT_ALLOW_LOCAL_LOGIN'), - # 'IT_SENTRY_DSN': env.str('IT_SENTRY_DSN'), - # 'IT_OAUTH_CLIENT_NAME': env.str('IT_OAUTH_CLIENT_NAME'), - # 'IT_OAUTH_CLIENT_ID': env.str('IT_OAUTH_CLIENT_ID'), - # 'IT_OAUTH_CLIENT_SECRET': env.str('IT_OAUTH_CLIENT_SECRET'), - # 'IT_OAUTH_ACCESS_TOKEN_URL': env.str('IT_OAUTH_ACCESS_TOKEN_URL'), - # 'IT_OAUTH_AUTHORIZE_URL': env.str('IT_OAUTH_AUTHORIZE_URL'), - # 'IT_OAUTH_API_BASE_URL': env.str('IT_OAUTH_API_BASE_URL'), - # 'IT_OAUTH_LOCAL_DIRECT_URI': env.str('IT_OAUTH_LOCAL_DIRECT_URI'), - # 'IT_OAUTH_TENANT_ID': env.str('IT_OAUTH_TENANT_ID'), - # 'IT_OAUTH_SCOPE': env.str('IT_OAUTH_SCOPE'), - # 'IT_OAUTH_SERVER_METADATA_URL': env.str('IT_OAUTH_SERVER_METADATA_URL'), - # 'IT_OAUTH_TOKEN_NAME': env.str('IT_OAUTH_TOKEN_NAME'), - # 'IT_OAUTH_LOGOUT_URL': env.str('IT_OAUTH_LOGOUT_URL'), }, ) diff --git a/caprover_deploy.sh b/caprover_deploy.sh index f31cdba0..57beb7c5 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -14,6 +14,8 @@ BRANCH_NAME_SLUG=$(echo "$BRANCH_NAME" | sed -e 's/[^[:alnum:]]/-/g' | tr -s '-' echo "$BRANCH_NAME_SLUG" DEFAULT_APP_NAME="vbv-$BRANCH_NAME_SLUG" + +# take app name as first argument or use default generated app name APP_NAME=${1:-$DEFAULT_APP_NAME} # shorten APP_NAME to 32 characters @@ -57,6 +59,7 @@ python server/manage.py collectstatic --no-input docker build --platform=linux/amd64 -f compose/django/Dockerfile -t "$REPO" -t "$LATEST" -t "$VERSION_TAG" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_COMMIT="$(git log -1 --format=%h)" . docker push "$VERSION_TAG" +# caprover specific stuff APP_URL="$APP_NAME.control.iterativ.ch" echo "Checking if $APP_URL is available..." From 956a685ac957aa488d1600306914d4d3f3d3f9cf Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 11:23:38 +0200 Subject: [PATCH 27/31] Refactor caprover deploy script --- caprover_deploy.sh | 78 +++++++++++++++++++++------------------------- 1 file changed, 36 insertions(+), 42 deletions(-) diff --git a/caprover_deploy.sh b/caprover_deploy.sh index 57beb7c5..ad5bdc50 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -3,52 +3,41 @@ # script should fail when any process returns non zero code set -ev -VERSION=$(git log -1 --pretty=%h) -REPO="iterativ/vbv-lernwelt-django" -LATEST="${REPO}:latest" -BUILD_TIMESTAMP=$( date '+%F_%H:%M:%S' ) -VERSION_TAG="${REPO}:$VERSION" +function generate_default_app_name() { + local branch_name=$(git rev-parse --abbrev-ref HEAD) + local branch_name_slug=$(echo "$branch_name" | sed -e 's/[^[:alnum:]]/-/g' | tr -s '-' | tr A-Z a-z) -BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) -BRANCH_NAME_SLUG=$(echo "$BRANCH_NAME" | sed -e 's/[^[:alnum:]]/-/g' | tr -s '-' | tr A-Z a-z) -echo "$BRANCH_NAME_SLUG" + local default_app_name="vbv-$branch_name_slug" -DEFAULT_APP_NAME="vbv-$BRANCH_NAME_SLUG" + # shorten default_app_name to 32 characters + if ((${#default_app_name} > 32)); then + local hash="$(echo -n "$default_app_name" | md5sum | cut -c1-4)" + default_app_name=$(echo -n "${default_app_name:0:28}-${hash}") + fi -# take app name as first argument or use default generated app name -APP_NAME=${1:-$DEFAULT_APP_NAME} + # remove multiple dashes and make sure it does not end with a dash + default_app_name=$(echo "$default_app_name" | sed -E 's/-+/-/g') + default_app_name=$(echo "$default_app_name" | sed 's/-\+$//') -# shorten APP_NAME to 32 characters -# app names with more character seem to fail in some steps in CapRover -# CapRover generates longer names out from the app name and there -# seems to be a limit in Docker of 64 characters -if (( ${#APP_NAME} > 32 )); then - hash="$(echo -n "$APP_NAME" | md5sum | cut -c1-4)" - APP_NAME=$(echo -n "${APP_NAME:0:28}-${hash}") -fi + echo "$default_app_name" +} -# remove multiple dashes and make sure it does not end with a dash -APP_NAME=$(echo "$APP_NAME" | sed -E 's/-+/-/g') -APP_NAME=$(echo "$APP_NAME" | sed 's/-\+$//') +# take app name as first argument or use the default generated app name +APP_NAME=${1:-$(generate_default_app_name)} echo "Deploy to $APP_NAME" -VITE_GRAPHQL_URL="/server/graphql/" -VITE_LOGOUT_REDIRECT="/" VITE_SENTRY_ENV="development" -if [[ "$APP_NAME" == "myvbv" ]] -then - VITE_LOGOUT_REDIRECT="https://edumgr.b2clogin.com/edumgr.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv.iterativ.ch/" - VITE_SENTRY_ENV="production" -elif [[ "$APP_NAME" == "myvbv-stage" ]] -then - VITE_LOGOUT_REDIRECT="https://vbvtst.b2clogin.com/vbvtst.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv-stage.iterativ.ch/" - VITE_SENTRY_ENV="stage" -elif [[ "$APP_NAME" == "vbv-lernwelt" ]] -then - VITE_LOGOUT_REDIRECT="https://vbvdev.b2clogin.com/vbvdev.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://vbv-lernwelt.control.iterativ.ch" - VITE_SENTRY_ENV="development" +if [[ "$APP_NAME" == "myvbv" ]]; then + VITE_LOGOUT_REDIRECT="https://edumgr.b2clogin.com/edumgr.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv.iterativ.ch/" + VITE_SENTRY_ENV="production" +elif [[ "$APP_NAME" == "myvbv-stage" ]]; then + VITE_LOGOUT_REDIRECT="https://vbvtst.b2clogin.com/vbvtst.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv-stage.iterativ.ch/" + VITE_SENTRY_ENV="stage" +elif [[ "$APP_NAME" == "vbv-lernwelt" ]]; then + VITE_LOGOUT_REDIRECT="https://vbvdev.b2clogin.com/vbvdev.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://vbv-lernwelt.control.iterativ.ch" + VITE_SENTRY_ENV="development" fi # create client for django @@ -56,6 +45,11 @@ npm run build python server/manage.py collectstatic --no-input # create and push new docker container +VERSION=$(git log -1 --pretty=%h) +REPO="iterativ/vbv-lernwelt-django" +LATEST="${REPO}:latest" +BUILD_TIMESTAMP=$(date '+%F_%H:%M:%S') +VERSION_TAG="${REPO}:$VERSION" docker build --platform=linux/amd64 -f compose/django/Dockerfile -t "$REPO" -t "$LATEST" -t "$VERSION_TAG" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_COMMIT="$(git log -1 --format=%h)" . docker push "$VERSION_TAG" @@ -64,16 +58,16 @@ APP_URL="$APP_NAME.control.iterativ.ch" echo "Checking if $APP_URL is available..." if ! curl --output /dev/null --silent --head --fail "$APP_URL"; then - echo "HTTP request to $APP_URL did not return a 200 status code, so we need to create the caprover app" - python caprover_cleanup.py -a "$APP_NAME*" --automated - python caprover_create_app.py -a "$APP_NAME" + echo "HTTP request to $APP_URL did not return a 200 status code, so we need to create the caprover app" + python caprover_cleanup.py -a "$APP_NAME*" --automated + python caprover_create_app.py -a "$APP_NAME" fi # deploy to caprover, explicitly use the version tag... so if there is a mismatch you get an error message caprover deploy -h https://captain.control.iterativ.ch -a "$APP_NAME" -i docker.io/"$VERSION_TAG" if [ -n "$CI" ]; then - echo "Running within Bitbucket Pipelines" - export CAPROVER_APP_URL="$APP_URL" - echo "https://$CAPROVER_APP_URL" > /tmp/caprover_app_url.txt + echo "Running within Bitbucket Pipelines" + export CAPROVER_APP_URL="$APP_URL" + echo "https://$CAPROVER_APP_URL" >/tmp/caprover_app_url.txt fi From 8eb87327df06a45a11ee0bcdb648c2acd30a8eb1 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 11:41:42 +0200 Subject: [PATCH 28/31] Remove references to `IT_USE_AZURE_BLOB_STORAGE` --- env_secrets/production_azure.env | Bin 5220 -> 4834 bytes server/backend/__init__.py | 0 server/backend/custom_azure.py | 21 --------------------- server/config/settings/base.py | 14 -------------- 4 files changed, 35 deletions(-) delete mode 100644 server/backend/__init__.py delete mode 100644 server/backend/custom_azure.py diff --git a/env_secrets/production_azure.env b/env_secrets/production_azure.env index e0c09b6b2b44cc114712a2ae1b4a4a056918d20e..b5149493afdd6d3d654f797aa3aba05059bb44f2 100644 GIT binary patch literal 4834 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 IT8&kxmntDjfB*mh literal 5220 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 diff --git a/server/backend/__init__.py b/server/backend/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/server/backend/custom_azure.py b/server/backend/custom_azure.py deleted file mode 100644 index d84ec148..00000000 --- a/server/backend/custom_azure.py +++ /dev/null @@ -1,21 +0,0 @@ -from environs import Env -from storages.backends.azure_storage import AzureStorage - -env = Env() -env.read_env() - - -class AzureMediaStorage(AzureStorage): - if env("IT_USE_AZURE_BLOB_STORAGE", False): - account_name = env("IT_AZURE_STORAGE_ACCOUNT") - account_key = env("IT_AZURE_STORAGE_KEY") - azure_container = "media" - expiration_secs = None - - -class AzureStaticStorage(AzureStorage): - if env("IT_USE_AZURE_BLOB_STORAGE", False): - 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 d655b3c8..06b57573 100644 --- a/server/config/settings/base.py +++ b/server/config/settings/base.py @@ -214,20 +214,6 @@ 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("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' - - # STATIC_LOCATION = "static" - MEDIA_LOCATION = "media" - - 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}/{APP_ENVIRONMENT}/{STATIC_LOCATION}/' - MEDIA_URL = f"https://{AZURE_CUSTOM_DOMAIN}/{APP_ENVIRONMENT}/{MEDIA_LOCATION}/" - - else: MEDIA_URL = "/server/media/" From b967147ff53ed01e5d1c9d56942e953186032894 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 11:54:21 +0200 Subject: [PATCH 29/31] Merge azure_deploy.sh into caprover_deploy.sh --- azure_deploy.sh | 8 -------- bitbucket-pipelines.yml | 16 +++++++++++----- caprover_deploy.sh | 8 +++++++- 3 files changed, 18 insertions(+), 14 deletions(-) delete mode 100755 azure_deploy.sh diff --git a/azure_deploy.sh b/azure_deploy.sh deleted file mode 100755 index d376282d..00000000 --- a/azure_deploy.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -npm install -npm run build - -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/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 0365e271..4e60ffd8 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -129,11 +129,17 @@ pipelines: name: prepare prod deployment script: - echo "Release ready!" - - step: - <<: *deploy - name: deploy prod - deployment: prod - trigger: manual + - parallel: + - step: + <<: *deploy + name: deploy prod + deployment: prod + trigger: manual + - step: + <<: *deploy + name: deploy prod-azure + deployment: prod-azure + trigger: manual custom: deploy-stage: - step: diff --git a/caprover_deploy.sh b/caprover_deploy.sh index ad5bdc50..7f0a0ba8 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -53,7 +53,13 @@ VERSION_TAG="${REPO}:$VERSION" docker build --platform=linux/amd64 -f compose/django/Dockerfile -t "$REPO" -t "$LATEST" -t "$VERSION_TAG" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_COMMIT="$(git log -1 --format=%h)" . docker push "$VERSION_TAG" -# caprover specific stuff +if [[ "$APP_NAME" == "vbv-azure" ]]; then + # build and push azure docker container + docker build --platform linux/amd64 -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django:azure . + docker image push iterativ/vbv-lernwelt-django:azure +fi + +# caprover specific deployment APP_URL="$APP_NAME.control.iterativ.ch" echo "Checking if $APP_URL is available..." From df9b608d6ede9397f704f0f7cfadb5dfff4ba667 Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 12:04:54 +0200 Subject: [PATCH 30/31] Merge azure_deploy.sh into caprover_deploy.sh --- caprover_deploy.sh | 58 +++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/caprover_deploy.sh b/caprover_deploy.sh index 7f0a0ba8..fece1bbf 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -44,36 +44,36 @@ fi npm run build python server/manage.py collectstatic --no-input -# create and push new docker container -VERSION=$(git log -1 --pretty=%h) -REPO="iterativ/vbv-lernwelt-django" -LATEST="${REPO}:latest" -BUILD_TIMESTAMP=$(date '+%F_%H:%M:%S') -VERSION_TAG="${REPO}:$VERSION" -docker build --platform=linux/amd64 -f compose/django/Dockerfile -t "$REPO" -t "$LATEST" -t "$VERSION_TAG" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_COMMIT="$(git log -1 --format=%h)" . -docker push "$VERSION_TAG" - -if [[ "$APP_NAME" == "vbv-azure" ]]; then +if [[ "$APP_NAME" == "prod-azure" ]]; then # build and push azure docker container docker build --platform linux/amd64 -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django:azure . docker image push iterativ/vbv-lernwelt-django:azure -fi - -# caprover specific deployment -APP_URL="$APP_NAME.control.iterativ.ch" - -echo "Checking if $APP_URL is available..." -if ! curl --output /dev/null --silent --head --fail "$APP_URL"; then - echo "HTTP request to $APP_URL did not return a 200 status code, so we need to create the caprover app" - python caprover_cleanup.py -a "$APP_NAME*" --automated - python caprover_create_app.py -a "$APP_NAME" -fi - -# deploy to caprover, explicitly use the version tag... so if there is a mismatch you get an error message -caprover deploy -h https://captain.control.iterativ.ch -a "$APP_NAME" -i docker.io/"$VERSION_TAG" - -if [ -n "$CI" ]; then - echo "Running within Bitbucket Pipelines" - export CAPROVER_APP_URL="$APP_URL" - echo "https://$CAPROVER_APP_URL" >/tmp/caprover_app_url.txt +else + # create and push new docker container + VERSION=$(git log -1 --pretty=%h) + REPO="iterativ/vbv-lernwelt-django" + LATEST="${REPO}:latest" + BUILD_TIMESTAMP=$(date '+%F_%H:%M:%S') + VERSION_TAG="${REPO}:$VERSION" + docker build --platform=linux/amd64 -f compose/django/Dockerfile -t "$REPO" -t "$LATEST" -t "$VERSION_TAG" --build-arg VERSION="$VERSION" --build-arg BUILD_TIMESTAMP="$BUILD_TIMESTAMP" --build-arg GIT_COMMIT="$(git log -1 --format=%h)" . + docker push "$VERSION_TAG" + + # caprover specific deployment + APP_URL="$APP_NAME.control.iterativ.ch" + + echo "Checking if $APP_URL is available..." + if ! curl --output /dev/null --silent --head --fail "$APP_URL"; then + echo "HTTP request to $APP_URL did not return a 200 status code, so we need to create the caprover app" + python caprover_cleanup.py -a "$APP_NAME*" --automated + python caprover_create_app.py -a "$APP_NAME" + fi + + # deploy to caprover, explicitly use the version tag... so if there is a mismatch you get an error message + caprover deploy -h https://captain.control.iterativ.ch -a "$APP_NAME" -i docker.io/"$VERSION_TAG" + + if [ -n "$CI" ]; then + echo "Running within Bitbucket Pipelines" + export CAPROVER_APP_URL="$APP_URL" + echo "https://$CAPROVER_APP_URL" >/tmp/caprover_app_url.txt + fi fi From a591585480e7c39088fe7e187f91eed4cd1598bc Mon Sep 17 00:00:00 2001 From: Daniel Egger Date: Tue, 30 May 2023 13:41:26 +0200 Subject: [PATCH 31/31] Add comment to manually restart in Azure --- caprover_deploy.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/caprover_deploy.sh b/caprover_deploy.sh index fece1bbf..8772aaf4 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -48,6 +48,8 @@ if [[ "$APP_NAME" == "prod-azure" ]]; then # build and push azure docker container docker build --platform linux/amd64 -f compose/django/Dockerfile -t iterativ/vbv-lernwelt-django:azure . docker image push iterativ/vbv-lernwelt-django:azure + # FIXME: It seems that in Azure we have to manually restart the container for now + echo "https://my.vbv-afa.ch/" >/tmp/caprover_app_url.txt else # create and push new docker container VERSION=$(git log -1 --pretty=%h)