Files
project-managment/config/settings/production.py
T
sankalp ec350b1531 feat(config): add database connection options and cache backend
Add connection pooling and Django cache using Database backend for session persistence to improve performance and reliability in production environments.
2026-06-28 16:06:46 +05:45

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")