Add connection pooling and Django cache using Database backend for session persistence to improve performance and reliability in production environments.
83 lines
3.8 KiB
Python
83 lines
3.8 KiB
Python
"""Production settings — MySQL, SMTP email, strict CORS, HTTPS enforced."""
|
|
|
|
from .base import * # noqa: F401, F403
|
|
|
|
# ── Core ──────────────────────────────────────────────────────────────────────
|
|
|
|
DEBUG = False
|
|
SECRET_KEY = env("SECRET_KEY")
|
|
ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=[])
|
|
|
|
# ── Database (MySQL) ──────────────────────────────────────────────────────────
|
|
|
|
DATABASES = {
|
|
"default": {
|
|
"ENGINE": "django.db.backends.mysql",
|
|
"NAME": env("DB_NAME"),
|
|
"USER": env("DB_USER"),
|
|
"PASSWORD": env("DB_PASSWORD"),
|
|
"HOST": env("DB_HOST"),
|
|
"PORT": env("DB_PORT", default="3306"),
|
|
"CONN_MAX_AGE": 600,
|
|
"OPTIONS": {
|
|
"charset": "utf8mb4",
|
|
"sql_mode": "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION",
|
|
"connect_timeout": 10,
|
|
"read_timeout": 30,
|
|
"write_timeout": 30,
|
|
},
|
|
}
|
|
}
|
|
|
|
# ── Static Files ──────────────────────────────────────────────────────────────
|
|
|
|
STORAGES = {
|
|
"default": {
|
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
|
},
|
|
"staticfiles": {
|
|
# Compressed + hashed filenames for long-term caching in production
|
|
"BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
|
|
},
|
|
}
|
|
|
|
# ── Tailwind ──────────────────────────────────────────────────────────────────
|
|
|
|
TAILWIND_CLI_VERSION = "4.1.3"
|
|
TAILWIND_CLI_AUTOMATIC_DOWNLOAD = False # use pre-installed CLI in CI/CD
|
|
TAILWIND_CLI_DIST_CSS = "static/css/tailwind.min.css"
|
|
|
|
# ── Email (SMTP) ──────────────────────────────────────────────────────────────
|
|
|
|
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
|
|
EMAIL_HOST = env("EMAIL_HOST", default="smtp.gmail.com")
|
|
EMAIL_PORT = env.int("EMAIL_PORT", default=587)
|
|
EMAIL_USE_TLS = env.bool("EMAIL_USE_TLS", default=True)
|
|
EMAIL_HOST_USER = env("EMAIL_HOST_USER", default="")
|
|
EMAIL_HOST_PASSWORD = env("EMAIL_HOST_PASSWORD", default="")
|
|
DEFAULT_FROM_EMAIL = env("EMAIL_HOST_USER", default="")
|
|
SERVER_EMAIL = env("EMAIL_HOST_USER", default="")
|
|
|
|
# ── CORS ──────────────────────────────────────────────────────────────────────
|
|
|
|
CORS_ALLOWED_ORIGINS = env.list("FRONTEND_URL", default=[])
|
|
CORS_ALLOW_CREDENTIALS = True
|
|
CORS_ALLOW_PRIVATE_NETWORK = False
|
|
|
|
# ── Security ──────────────────────────────────────────────────────────────────
|
|
|
|
SECURE_SSL_REDIRECT = True
|
|
SECURE_HSTS_SECONDS = 31536000
|
|
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
|
|
SECURE_HSTS_PRELOAD = True
|
|
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
|
|
|
|
SESSION_COOKIE_SECURE = True
|
|
CSRF_COOKIE_SECURE = True
|
|
|
|
# ── Google OAuth ──────────────────────────────────────────────────────────────
|
|
|
|
GOOGLE_CLIENT_ID = env("GOOGLE_CLIENT_ID")
|
|
GOOGLE_CLIENT_SECRET = env("GOOGLE_CLIENT_SECRET")
|
|
GOOGLE_REDIRECT_URI = env("GOOGLE_REDIRECT_URI")
|