mirror of
https://github.com/boostorg/website-v2.git
synced 2026-01-19 04:42:17 +00:00
204 lines
5.5 KiB
Python
204 lines
5.5 KiB
Python
import environs
|
|
import logging
|
|
import structlog
|
|
import sys
|
|
|
|
from django.core.exceptions import ImproperlyConfigured
|
|
from pathlib import Path
|
|
from pythonjsonlogger import jsonlogger
|
|
|
|
|
|
env = environs.Env()
|
|
|
|
READ_DOT_ENV_FILE = env.bool("DJANGO_READ_DOT_ENV_FILE", default=False)
|
|
if READ_DOT_ENV_FILE:
|
|
env.read_env()
|
|
print("The .env file has been loaded. See config/settings.py for more information")
|
|
|
|
# SECURITY WARNING: don't run with debug turned on in production!
|
|
DEBUG = env.bool("DJANGO_DEBUG", default=False)
|
|
|
|
if DEBUG:
|
|
root = logging.getLogger()
|
|
root.setLevel(logging.INFO)
|
|
|
|
lh = logging.StreamHandler(sys.stderr)
|
|
root.addHandler(lh)
|
|
|
|
env.log_level("LOG_LEVEL", default="DEBUG")
|
|
|
|
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
|
BASE_DIR = Path(__file__).parent.parent
|
|
APPS_DIR = BASE_DIR.joinpath("config")
|
|
|
|
|
|
# SECURITY WARNING: keep the secret key used in production secret!
|
|
SECRET_KEY = env("SECRET_KEY")
|
|
|
|
|
|
host_list = env.list("ALLOWED_HOSTS", default="localhost")
|
|
ALLOWED_HOSTS = [el.strip() for el in host_list]
|
|
|
|
|
|
INSTALLED_APPS = [
|
|
"django.contrib.admin",
|
|
"django.contrib.auth",
|
|
"django.contrib.contenttypes",
|
|
"django.contrib.sessions",
|
|
"django.contrib.messages",
|
|
"django.contrib.staticfiles",
|
|
]
|
|
|
|
# Third-party apps
|
|
INSTALLED_APPS += [
|
|
"rest_framework",
|
|
"django_extensions",
|
|
"health_check",
|
|
"health_check.db",
|
|
"health_check.contrib.celery",
|
|
]
|
|
|
|
# Our Apps
|
|
INSTALLED_APPS += ["ak", "users"]
|
|
|
|
AUTH_USER_MODEL = "users.User"
|
|
|
|
MIDDLEWARE = [
|
|
"tracer.middleware.RequestID",
|
|
"django.middleware.security.SecurityMiddleware",
|
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
"django.middleware.common.CommonMiddleware",
|
|
"django.middleware.csrf.CsrfViewMiddleware",
|
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
"django.contrib.messages.middleware.MessageMiddleware",
|
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
]
|
|
|
|
if DEBUG:
|
|
# These are necessary to turn on Whitenoise which will serve our static
|
|
# files while doing local development
|
|
MIDDLEWARE.append("whitenoise.middleware.WhiteNoiseMiddleware")
|
|
WHITENOISE_USE_FINDERS = True
|
|
WHITENOISE_AUTOREFRESH = True
|
|
|
|
ROOT_URLCONF = "config.urls"
|
|
|
|
TEMPLATES = [
|
|
{
|
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
|
"DIRS": [str(BASE_DIR.joinpath("templates"))],
|
|
"APP_DIRS": True,
|
|
"OPTIONS": {
|
|
"context_processors": [
|
|
"django.template.context_processors.debug",
|
|
"django.template.context_processors.request",
|
|
"django.contrib.auth.context_processors.auth",
|
|
"django.contrib.messages.context_processors.messages",
|
|
]
|
|
},
|
|
}
|
|
]
|
|
|
|
WSGI_APPLICATION = "config.wsgi.application"
|
|
|
|
|
|
# Database
|
|
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
|
|
|
|
try:
|
|
DATABASES = {"default": env.dj_db_url("DATABASE_URL")}
|
|
except (ImproperlyConfigured, environs.EnvError):
|
|
DATABASES = {
|
|
"default": {
|
|
"ENGINE": "django_db_geventpool.backends.postgresql_psycopg2",
|
|
"HOST": env("PGHOST"),
|
|
"NAME": env("PGDATABASE"),
|
|
"PASSWORD": env("PGPASSWORD"),
|
|
"PORT": env.int("PGPORT", default=5432),
|
|
"USER": env("PGUSER"),
|
|
"CONN_MAX_AGE": 0,
|
|
"OPTIONS": {"MAX_CONNS": 100},
|
|
}
|
|
}
|
|
|
|
# Password validation
|
|
# Only used in production
|
|
AUTH_PASSWORD_VALIDATORS = []
|
|
|
|
# Sessions
|
|
|
|
# Give each project their own session cookie name to avoid local development
|
|
# login conflicts
|
|
SESSION_COOKIE_NAME = "config-sessionid"
|
|
|
|
# Increase default cookie age from 2 to 12 weeks
|
|
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 12
|
|
|
|
# Internationalization
|
|
# https://docs.djangoproject.com/en/1.10/topics/i18n/
|
|
|
|
LANGUAGE_CODE = "en-us"
|
|
|
|
TIME_ZONE = "UTC"
|
|
|
|
USE_I18N = True
|
|
|
|
USE_L10N = True
|
|
|
|
USE_TZ = True
|
|
|
|
|
|
# Static files (CSS, JavaScript, Images)
|
|
# https://docs.djangoproject.com/en/1.10/howto/static-files/
|
|
|
|
# The relative URL of where we serve our static files from
|
|
STATIC_URL = "/static/"
|
|
|
|
# Additional directories from where we should collect static files from
|
|
STATICFILES_DIRS = [BASE_DIR.joinpath("static")]
|
|
|
|
# This is the directory where all of the collected static files are put
|
|
# after running collectstatic
|
|
STATIC_ROOT = str(BASE_DIR.joinpath("deployed_static"))
|
|
|
|
# Logging setup
|
|
# Configure struct log
|
|
structlog.configure(
|
|
processors=[
|
|
structlog.stdlib.filter_by_level,
|
|
structlog.stdlib.add_logger_name,
|
|
structlog.stdlib.add_log_level,
|
|
structlog.stdlib.PositionalArgumentsFormatter(),
|
|
structlog.processors.TimeStamper(fmt="iso"),
|
|
structlog.processors.StackInfoRenderer(),
|
|
structlog.processors.format_exc_info,
|
|
structlog.processors.UnicodeDecoder(),
|
|
structlog.stdlib.render_to_log_kwargs,
|
|
],
|
|
context_class=dict,
|
|
logger_factory=structlog.stdlib.LoggerFactory(),
|
|
wrapper_class=structlog.stdlib.BoundLogger,
|
|
cache_logger_on_first_use=True,
|
|
)
|
|
|
|
# Configure Python logging
|
|
root = logging.getLogger()
|
|
root.setLevel(logging.INFO)
|
|
|
|
|
|
handler = logging.FileHandler("./python.log")
|
|
handler.setFormatter(jsonlogger.JsonFormatter())
|
|
|
|
root.addHandler(handler)
|
|
|
|
# Configure Redis
|
|
REDIS_HOST = env("REDIS_HOST", default="redis")
|
|
|
|
# Configure Celery
|
|
CELERY_BROKER_URL = f"redis://{REDIS_HOST}:6379"
|
|
CELERY_RESULT_BACKEND = f"redis://{REDIS_HOST}:6379"
|
|
CELERY_ACCEPT_CONTENT = ["application/json"]
|
|
CELERY_TASK_SERIALIZER = "json"
|
|
CELERY_RESULT_SERIALIZER = "json"
|
|
CELERY_TIMEZONE = "UTC"
|