Configuration et sécurité ========================= .. contents:: :depth: 4 :local: .. _Django: *Django* -------- Django settings: ^^^^^^^^^^^^^^^^ `Documentation Django `_ .. important:: Django refuse de démarrer si SECRET_KEY n’est pas défini. `Secret Key documentation `_ .. envvar:: SECRET_KEY SECRET_KEY = os.environ.get('SECRET_KEY') .. code-block:: python # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = os.environ.get('SECRET_KEY') Ici la clé secret à été stocké entant que variable d'environnement. voir `démarrage rapide - variable d'environnement `_ .. note:: Par défaut elle est composé d'un minimum de 50 caractère avec les caractères spéciaux autorisés. Afin quelle reste introuvable. Une solution pour la générer: .. code-block:: console python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())' .. envvar:: DEBUG .. code-block:: python # SECURITY WARNING: don't run with debug turned on in production! DEBUG = bool(os.environ.get('DEBUG', default=False)) ALLOWED_HOSTS = ['orange-county-lettings.azurewebsites.net', '127.0.0.1', '.localhost', '0.0.0.0', 'google.com', '[::1]'] if DEBUG is False else [] * Une variable d'environnement DEBUG ($Env:DEBUG = True) peut être crée afin de lancer Django en mode developpement. * ALLOWED_HOSTS sont les adresses que le serveur Django ou Gunicorn peuvent desservir. Ici sont les adresses du site de déploiement et les adresses afin de pouvoir utiliser le conteneur Docker en locale. WhiteNoise: """"""""""" `WhiteNoise `_ WhiteNoise permet de servir tous les fichiers "static", de django et de l'application Python, en les compressant. Il est conçu pour fonctionner sur un serveur WSGI, avec des fonctions intégré pour Django. Adapter pour être déployé, même sur des CDN, avec sa compression Gzip et Brotli, gérant les en tête Accept-Encoding, et Vary pour la réutilisation du cache. Afin d'utiliser whitenoise : (à insérer dans settings.py) .. code-block:: python MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', ... ] .. code-block:: python # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/3.0/howto/static-files/ STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = 'staticfiles/' STATICFILES_DIRS = [BASE_DIR / "static", ] STORAGES = { "default": { "BACKEND": "django.core.files.storage.FileSystemStorage", }, "staticfiles": { "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage", }, } Sentry: """"""" "Agissez sur les lignes de code brisées, les plantages et les appels d’API interrompus avec la seule plate-forme de surveillance des applications axée sur les développeurs, conçue pour vous donner des réponses, et non des indices." Nous avons choisi Sentry comme outil de surveillance afin de garder notre application competitive dans le temps. (à insérer dans settings.py) .. code-block:: python def profiles_sampler(sampling_context): # ... # return a number between 0 and 1 or a boolean return True sentry_sdk.init( dsn=os.environ.get('DSN'), # Set traces_sample_rate to 1.0 to capture 100% # of transactions for performance monitoring. # We recommend adjusting this value in production. traces_sample_rate=1.0, # Set profiles_sample_rate to 1.0 to profile 100% # of sampled transactions. # We recommend adjusting this value in production. profiles_sample_rate=1.0, # Alternatively, to control sampling dynamically profiles_sampler=profiles_sampler, integrations=[ DjangoIntegration( transaction_style='url', middleware_spans=True, signals_spans=True, cache_spans=True, ), ], send_default_pii=True ) Pour l'instant 100% des erreurs sont échantillonnés. .. envvar:: DSN A utiliser comme variable d'environnement. Voir la documentation ci dessous afin d'obtenir le DSN, et autres configuration possible pour Django. `Documentation officiel Sentry Platform Django `_ Gunicorn: """"""""" Déploiement de Django avec Gunicorn : `Gunicorn `_ (« Green Unicorn ») est un serveur WSGI en pur Python pour UNIX. Il n’a aucune dépendance et peut être installé avec pip. Microsoft Azure conseil pour une meilleure compatibilité avec les applications en Python de le mettre en place, ainsi que Django La configuration se trouve dans le fichier *dockerfile*, situé à la racine du projet, comme ceci : .. warning:: Gunicorn s'exécute seulement sous un system UNIX. .. code-block:: python CMD gunicorn --bind=0.0.0.0:8080 --timeout 200 oc_lettings_site.wsgi `Exemple de commandes de démarrage, pour Python, avec Azure. `_ ---- *Microsoft Azure* ----------------- `Documentation officiel `_ .. image:: _static/azure_web_app.png :height: 495 :width: 934 :alt: Azure_App_main_page .. role:: raw-html(raw) :format: html :raw-html:`
` Variables secrets utilisé par GitHub actions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. envvar:: APP_NAME - nom de l'application .. envvar:: RESOURCE_GROUP - nom du groupe de ressource utilisé pour la facturation .. envvar:: AZUREAPPSERVICE_PUBLISHPROFILE_ORANGE - contenu du profil de publication .. envvar:: AZURE_CREDENTIALS - voir `GitHub Action for Azure Login `_. Permet de pouvoir relancer l'application via *Azure CLI*, afin que le déploiement soit bien effectif. .. image:: _static/configuration_Azure_webb_app.png :height: 390 :width: 758 :alt: Config_Webb_App :raw-html:`
` **Le site est déployé avec un minimum de sécurité, en HTTPS avec protocole TLS 1.2, le certificat est fournis automatiquement par Microsoft Azure.**