First commit

This commit is contained in:
2026-07-20 11:05:07 +02:00
commit b592ab669f
159 changed files with 10294 additions and 0 deletions
+77
View File
@@ -0,0 +1,77 @@
"""Settings de production : secrets et hôtes fournis par l'environnement."""
import os
from .base import * # noqa: F401,F403
SECRET_KEY = os.environ['DJANGO_SECRET_KEY']
DEBUG = False
ALLOWED_HOSTS = [h for h in os.environ.get('DJANGO_ALLOWED_HOSTS', '').split(',') if h]
CSRF_TRUSTED_ORIGINS = [o for o in os.environ.get('DJANGO_CSRF_TRUSTED_ORIGINS', '').split(',') if o]
# DB_ENGINE=mariadb (opt-in, voir "sudo ./install.sh install-mariadb") bascule
# vers MariaDB/MySQL via PyMySQL (pas de mysqlclient : évite une dépendance de
# compilation C côté paquets système) ; sqlite reste le défaut, sans rien à
# installer/configurer en plus.
#
# DB_ENGINE=postgresql (opt-in) : contrairement à mariadb, pas de
# sous-commande install.sh dédiée pour l'instant — provisionner le serveur
# PostgreSQL/la base/l'utilisateur reste manuel, puis renseigner DB_*
# ci-dessous dans .env. Driver requirements-postgresql.txt
# (psycopg[binary], pas de compilation C nécessaire non plus) à installer
# à la main dans le venv (pip install -r requirements-postgresql.txt)
# avant de basculer DB_ENGINE.
DB_ENGINE = os.environ.get('DB_ENGINE', 'sqlite')
if DB_ENGINE == 'mariadb':
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ.get('DB_NAME', 'fail2ban_emitter'),
'USER': os.environ.get('DB_USER', 'fail2ban_emitter'),
'PASSWORD': os.environ.get('DB_PASSWORD', ''),
'HOST': os.environ.get('DB_HOST', '127.0.0.1'),
'PORT': os.environ.get('DB_PORT', '3306'),
}
}
elif DB_ENGINE == 'postgresql':
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get('DB_NAME', 'fail2ban_emitter'),
'USER': os.environ.get('DB_USER', 'fail2ban_emitter'),
'PASSWORD': os.environ.get('DB_PASSWORD', ''),
'HOST': os.environ.get('DB_HOST', '127.0.0.1'),
'PORT': os.environ.get('DB_PORT', '5432'),
}
}
else:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.environ.get('DJANGO_DB_PATH', str(BASE_DIR / 'db.sqlite3')),
}
}
STATIC_ROOT = BASE_DIR / 'staticfiles'
STORAGES = {
'staticfiles': {
'BACKEND': 'whitenoise.storage.CompressedManifestStaticFilesStorage',
},
}
MIDDLEWARE = ['whitenoise.middleware.WhiteNoiseMiddleware'] + MIDDLEWARE
# Pas de TLS géré ici (pas de reverse proxy devant l'émetteur pour l'instant) :
# forcer le HTTPS casserait l'accès (redirection en boucle, cookies rejetés).
# À activer (DJANGO_SECURE_SSL=true) une fois un reverse proxy TLS en place.
DJANGO_SECURE_SSL = os.environ.get('DJANGO_SECURE_SSL', 'false').lower() == 'true'
SECURE_SSL_REDIRECT = DJANGO_SECURE_SSL
SESSION_COOKIE_SECURE = DJANGO_SECURE_SSL
CSRF_COOKIE_SECURE = DJANGO_SECURE_SSL
# Daphne ne voit que la connexion interne en clair depuis nginx (proxy_pass
# http://127.0.0.1:8050) : sans ceci, request.is_secure() est toujours faux
# côté Django, qui redirige alors indéfiniment (SECURE_SSL_REDIRECT actif
# mais jamais satisfait) — le gabarit generic/nginx/fail2ban-emitter.example.conf
# pose bien X-Forwarded-Proto, encore faut-il que Django lui fasse confiance.
if DJANGO_SECURE_SSL:
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')