Noethysweb

Application de gestion multi-activités

Outils pour utilisateurs

Outils du site


settings_production_detail

Détails du fichier settings_production.py

Valeurs à personnaliser

SECRET_KEY : # Saisissez une clé aléatoire complexe de votre choix 50 caractères minimum, vous pouvez utiliser un générateur, tels que KeePass ou encore BitWarden.
ALLOWED_HOSTS : # Ce sont les hôtes pouvant accéder à Django
URL_GESTION : # Il s'agit de l'URL d'administration du site, permettant la gestion des utilisateurs, des groupes et des comptes bloqués. 
DATABASES : # C'est la configuration de l'accès à la base de donnée utilisée par noethysweb.

Sections a ne pas modifier

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

Ces deux valeurs sont à conserver à False en production. Nota: il est possible d'utiliser le mode DEBUG en cas de dysfocntionnement uniquement.

MODE_DEMO = False
DEBUG = False

Urls

URLS : à personnaliser selon les souhaits
Il est fortement conseillé de définir une URL aléatoire pour l'URL_GESTION
Et de définir une URL un peu plus complexe pour le URL_BUREAU

URL_GESTION = "administrateur/"
URL_BUREAU = "utilisateur/"
URL_PORTAIL = "portail/"
PORTAIL_ACTIF = True

Hosts

Cette variable ALLOWED_HOSTS défini les hôtes autorisés à accéder a Django, soit le localhost, mais aussi le nom de domaine du site de la structure.

On note que trois hôtes sont définis mon-association.org est le nom de domaine de l'association, qui peut dont accéder a à Django localhost et 127.0.0.1 représentent la même entité, à savoir l'hôte du serveur.

ALLOWED_HOSTS = ["mon-association.org","localhost","127.0.0.1"]

Base de données

Modifier si besoin (en cas d'utilisation de MySQL par exemple) Le moteur par défaut SQLITE est à utiliser uniquement pour des tests en local.

Exemple : Django#connection-management

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'nom_de_la_base_de_donnée',
        'USER': 'mon_utilisateur',
        'PASSWORD': 'mon_mot_de_passe', 
        'HOST': 'mon_hôte',
        'PORT': 3306,
    }
}

Sauvegardes

Permet de générer et envoyer des sauvegardes chiffrées des données vers un répertoire du serveur ou vers Dropbox. Pour plus d'infos, consulter https://django-dbbackup.readthedocs.io/en/master/

ID de la clé GPG pour le chiffrement de la sauvegarde nécessaire pour effectuer la sauvegarde.
 
DBBACKUP_GPG_RECIPIENT = ""
 
Pour un stockage de la sauvegarde sur le disque dur (Renseigner ci-dessous un répertoire existant)
DBBACKUP_STORAGE = "django.core.files.storage.FileSystemStorage"
DBBACKUP_STORAGE_OPTIONS = {"location": "C:/Users/XXXXXX/Desktop/sauvegardes/"}
DBBACKUP_CONNECTORS = {"default": {"dump_suffix": "--hex-blob"}}
 
Pour un stockage de la sauvegarde sur Dropbox (Renseigner ci-dessous le token de Dropbox)
1. Connectez-vous à Dropbox et accédez à Developper Apps : https://www.dropbox.com/developers/apps
2. Cliquez sur le bouton 'Create app' et saisissez un nom de votre choix. Ex : "Mes sauvegardes".
3. Une fois l'appli créée, cochez les permissions files.metadata et files.content.
4. Générez le token et copiez-le ci-dessous.
DBBACKUP_STORAGE = "storages.backends.dropbox.DropBoxStorage"
DBBACKUP_STORAGE_OPTIONS = {"oauth2_access_token": "Token Dropbox à coller ici"}

Stockage de documents

Indiquer le type de stockage souhaité pour chaque information : Pour un stockage sur le disque dur (par défaut) : django.core.files.storage.FileSystemStorage Pour un stockage sur Dropbox : storages.backends.dropbox.DropBoxStorage

STORAGE_PROBLEME = "django.core.files.storage.FileSystemStorage"
STORAGE_PIECE = "django.core.files.storage.FileSystemStorage"
STORAGE_QUOTIENT = "django.core.files.storage.FileSystemStorage"
STORAGE_ASSURANCE = "django.core.files.storage.FileSystemStorage"
STORAGE_PHOTO = "django.core.files.storage.FileSystemStorage"
 
Si l'un des champs ci-dessus utilise Dropbox, renseignez le token Dropbox ci-dessous :
DROPBOX_OAUTH2_TOKEN = "XXXXXXXXXXXXXXX"

Plugins

PLUGINS = [“monpluginperso”]

CRONTAB (tâches planifiées)

Décommentez les lignes ci-dessous pour activer les tâches automatisées et modifiez si besoin les horaires de déclenchement et le path python :

CRONTAB_PYTHON_EXECUTABLE = "/usr/bin/python3.9"
CRONTAB_COMMAND_SUFFIX = '2>&1'
CRONJOBS = [
("* * * * *", "noethysweb.cron.Test_cron", ">> " + os.path.join(BASE_DIR, "debug_cron.log")) # Pour des tests
("00 23 * * *", "noethysweb.cron.Sauvegarder_db", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour sauvegarder la base de données
("25 23 * * *", "noethysweb.cron.Vider_rep_temp", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour purger le répertoire temp
("30 23 * * *", "noethysweb.cron.Sauvegarder_media", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour sauvegarde le répertoire media
("45 23 * * *", "noethysweb.cron.Traiter_attentes", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour traiter les réservations en attente
]

Sécurité

Les paramètres par défaut conviendront généralement.
Nota : Lorsque vous voulez utiliser un serveur dédié en passthrough permettant notamment de passer en production. il est conseillé de désactiver l'ensemble des variables de sécurité.
En effet, le mode ProxyPass des serveurs n’autorise pas de transit de flux brut.

CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = 'Strict'
SESSION_COOKIE_SECURE = False
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_SSL_REDIRECT = False
X_FRAME_OPTIONS = 'DENY'
SECURE_HSTS_SECONDS = 15768000
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SESSION_COOKIE_AGE = 60*60*12 # 12 heures
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
AXES_META_PRECEDENCE_ORDER = ('HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR', 'REMOTE_ADDR')

Exemple de fichier

settings_production.py
#  Copyright (c) 2019-2021 Ivan LUCAS.
#  Noethysweb, application de gestion multi-activités.
#  Distribué sous licence GNU GPL.
 
#########################################################################################
#              FICHIER DE CONFIGURATION A MODIFIER SELON LES BESOINS
#
# Valeurs à personnaliser impérativement avant une mise en ligne :
# SECRET_KEY, ALLOWED_HOSTS, URL_GESTION, DATABASES
#
#########################################################################################
 
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
#########################################################################################
# CLE SECRETE : Saisissez une clé aléatoire complexe de votre choix (50 caract. minimum)
#########################################################################################
 
SECRET_KEY = 'ceciestlaclédesécuritéutiliséepourmonsitenoethysweb!'
 
#########################################################################################
# MODE DEMO : Pour désactiver des fonctionnalités
#########################################################################################
 
MODE_DEMO = False
 
#########################################################################################
# MODE DEBUG : Conserver False en production impérativement
#########################################################################################
 
DEBUG = False
 
#########################################################################################
# URLS : à personnaliser selon les souhaits
# Il est fortement conseillé de définir une URL aléatoire pour le URL_GESTION
# Et de définir une URL un peu plus complexe pour le URL_BUREAU
#########################################################################################
 
URL_GESTION = "administrateur/"
URL_BUREAU = "utilisateur/"
URL_PORTAIL = "portail/"
PORTAIL_ACTIF = True
 
#########################################################################################
# HOSTS : Saisissez les hosts autorisés (IP ou urls du serveur).
# Obligatoire pour fonctionner sur un serveur.
# Exemple : ALLOWED_HOSTS = ["127.0.0.1", "www.monsite.com"]
#########################################################################################
 
ALLOWED_HOSTS = ["www.monsite.fr","localhost","127.0.0.1"]
 
#########################################################################################
# BASE DE DONNEES : Modifier si besoin (en cas d'utilisation de MySQL par exemple)
# Le moteur ici est MySql.
# Exemple : https://docs.djangoproject.com/fr/4.0/ref/databases/#connection-management
#########################################################################################
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'bdd',
        'USER': 'user',
        'PASSWORD': 'pass', 
        'HOST': 'localhost',
        'PORT': 3306,
    }
}
 
#########################################################################################
# SAUVEGARDES : Permet de générer et envoyer des sauvegardes chiffrées des données
# vers un répertoire du serveur ou vers Dropbox.
# Pour plus d'infos, consulter https://django-dbbackup.readthedocs.io/en/master/
#########################################################################################
 
PLUGINS = ["monpluginperso"]
 
# ID de la clé GPG pour le chiffrement de la sauvegarde
DBBACKUP_GPG_RECIPIENT = "TESTESTESTESTESTESTESTESTEST"
 
# Pour un stockage de la sauvegarde sur le disque dur (Renseigner ci-dessous un répertoire existant)
# DBBACKUP_STORAGE = "django.core.files.storage.FileSystemStorage"
# DBBACKUP_STORAGE_OPTIONS = {"location": "C:/Users/XXXXXX/Desktop/sauvegardes/"}
# DBBACKUP_CONNECTORS = {"default": {"dump_suffix": "--hex-blob"}}
 
# Pour un stockage de la sauvegarde sur Dropbox (Renseigner ci-dessous le token de Dropbox)
# 1. Connectez-vous à Dropbox et accédez à Developper Apps : https://www.dropbox.com/developers/apps
# 2. Cliquez sur le bouton 'Create app' et saisissez un nom de votre choix. Ex : "Mes sauvegardes".
# 3. Une fois l'appli créée, cochez les permissions files.metadata et files.content.
# 4. Générez le token et copiez-le ci-dessous.
# DBBACKUP_STORAGE = "storages.backends.dropbox.DropBoxStorage"
# DBBACKUP_STORAGE_OPTIONS = {"oauth2_access_token": "Token Dropbox à coller ici"}
 
#########################################################################################
# STOCKAGE DE DOCUMENTS
# Indiquer le type de stockage souhaité pour chaque information :
# Pour un stockage sur le disque dur (par défaut) : django.core.files.storage.FileSystemStorage
# Pour un stockage sur Dropbox : storages.backends.dropbox.DropBoxStorage
#########################################################################################
 
# STORAGE_PROBLEME = "django.core.files.storage.FileSystemStorage"
# STORAGE_PIECE = "django.core.files.storage.FileSystemStorage"
# STORAGE_QUOTIENT = "django.core.files.storage.FileSystemStorage"
# STORAGE_ASSURANCE = "django.core.files.storage.FileSystemStorage"
# STORAGE_PHOTO = "django.core.files.storage.FileSystemStorage"
 
# Si l'un des champs ci-dessus utilise Dropbox, renseignez le token Dropbox ci-dessous :
# DROPBOX_OAUTH2_TOKEN = "XXXXXXXXXXXXXXX"
 
#########################################################################################
# CRONTAB (tâches planifiées)
# Décommentez les lignes ci-dessous pour activer les tâches automatisées
# et modifiez si besoin les horaires de déclenchement et le path python :
#########################################################################################
 
# CRONTAB_PYTHON_EXECUTABLE = "/usr/bin/python3.9"
# CRONTAB_COMMAND_SUFFIX = '2>&1'
# CRONJOBS = [
#     ("* * * * *", "noethysweb.cron.Test_cron", ">> " + os.path.join(BASE_DIR, "debug_cron.log")) # Pour des tests
#     ("00 23 * * *", "noethysweb.cron.Sauvegarder_db", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour sauvegarder la base de données
#     ("25 23 * * *", "noethysweb.cron.Vider_rep_temp", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour purger le répertoire temp
#     ("30 23 * * *", "noethysweb.cron.Sauvegarder_media", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour sauvegarde le répertoire media
#     ("45 23 * * *", "noethysweb.cron.Traiter_attentes", ">> " + os.path.join(BASE_DIR, "debug_cron.log")), # Pour traiter les réservations en attente
# ]
 
#########################################################################################
# SECURITE : Les paramètres par défaut conviendront généralement.
#########################################################################################
 
CSRF_COOKIE_SECURE = False
CSRF_COOKIE_SAMESITE = 'Strict'
SESSION_COOKIE_SECURE = False
SECURE_BROWSER_XSS_FILTER = False
SECURE_CONTENT_TYPE_NOSNIFF = False
SECURE_SSL_REDIRECT = False
X_FRAME_OPTIONS = 'DENY'
SECURE_HSTS_SECONDS = 15768000
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
SECURE_HSTS_PRELOAD = False
SESSION_COOKIE_AGE = 60*60*12 # 12 heures
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
AXES_META_PRECEDENCE_ORDER = ('HTTP_X_FORWARDED_FOR', 'X_FORWARDED_FOR', 'REMOTE_ADDR')

Voir aussi

Dans la rubrique installation-hébergement :

settings_production_detail.txt · Dernière modification : 2023/12/08 22:40 de fred.th