From 9c3518e0829c58a854fe5627b763b4f639c6de6d Mon Sep 17 00:00:00 2001 From: "Tibor Bossanyi (Freelancer)" Date: Sat, 18 Sep 2021 08:10:01 +0200 Subject: [PATCH] BO1.28+8 --- Dockerfile | 2 +- .../aitrainer_backoffice/settings/__init__.py | 0 .../{settings.py => settings/deploy.py} | 25 +-- .../aitrainer_backoffice/settings/dev.py | 160 ++++++++++++++++ .../aitrainer_backoffice/settings/prod.py | 174 ++++++++++++++++++ aitrainer_backoffice/controlling/apps.py | 6 +- docker-compose.yml | 2 +- 7 files changed, 354 insertions(+), 15 deletions(-) create mode 100644 aitrainer_backoffice/aitrainer_backoffice/settings/__init__.py rename aitrainer_backoffice/aitrainer_backoffice/{settings.py => settings/deploy.py} (87%) create mode 100644 aitrainer_backoffice/aitrainer_backoffice/settings/dev.py create mode 100644 aitrainer_backoffice/aitrainer_backoffice/settings/prod.py diff --git a/Dockerfile b/Dockerfile index 297d605..e99d0bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -9,7 +9,7 @@ RUN pip install --no-cache-dir -r requirements.txt COPY uwsgi_params /var/www/aitrainer.info/ COPY .key ./ - +ENV DJANGO_KEY="9ö2345iőjfdsasd9ukjhlkdf9hg" ENV PORT=8000 EXPOSE 8000 diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/__init__.py b/aitrainer_backoffice/aitrainer_backoffice/settings/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings.py b/aitrainer_backoffice/aitrainer_backoffice/settings/deploy.py similarity index 87% rename from aitrainer_backoffice/aitrainer_backoffice/settings.py rename to aitrainer_backoffice/aitrainer_backoffice/settings/deploy.py index 99b0432..a177b04 100644 --- a/aitrainer_backoffice/aitrainer_backoffice/settings.py +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/deploy.py @@ -8,7 +8,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')] # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = "9ö2345iőjfdsasd9uhg" #os.environ['DJANGO_KEY'] +SECRET_KEY = os.environ['DJANGO_KEY'] # SECURITY WARNING: don't run with debug turned on in production! DEBUG = False @@ -16,8 +16,8 @@ DEBUG = False ALLOWED_HOSTS = ['62.171.188.119', "admin.aitrainer.app"] INSTALLED_APPS = [ - 'aitrainer_backoffice.aitrainer_backoffice', - 'aitrainer_backoffice.controlling.apps.ControllingConfig', + 'aitrainer_backoffice', + 'controlling.apps.ControllingConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -43,7 +43,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] -ROOT_URLCONF = 'aitrainer_backoffice.aitrainer_backoffice.urls' +ROOT_URLCONF = 'aitrainer_backoffice.urls' TEMPLATES = [ { @@ -137,15 +137,16 @@ LOGGING = { }, }, 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', - 'filters': ['require_debug_true'], - }, + 'file': { + 'level': 'ERROR', + 'class': 'logging.FileHandler', + 'filename': '/var/log/django_error.log', + } }, 'loggers': { - 'mylogger': { - 'handlers': ['console'], - 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), + 'django': { + 'handlers': ['file'], + 'level': 'DEBUG', 'propagate': True, }, }, @@ -158,5 +159,5 @@ LOGGING = { CRON_CLASSES = [ - 'aitrainer_backoffice.controlling.cron.cron.MyCronJob', + 'controlling.cron.cron.MyCronJob', ] diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py new file mode 100644 index 0000000..0b76b90 --- /dev/null +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/dev.py @@ -0,0 +1,160 @@ +import os + +BACKOFFICE_VERSION = 1.28 + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')] + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.environ['DJANGO_KEY'] +ALLOWED_HOSTS = ['localhost', "127.0.0.1"] + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True + +INSTALLED_APPS = [ + 'aitrainer_backoffice', + 'controlling.apps.ControllingConfig', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'ckeditor', + 'ckeditor_uploader', + 'django_admin_json_editor', + 'rangefilter', + 'adminsortable2', + 'inline_actions', + 'django_cron', +] + +MIDDLEWARE = [ + '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', +] + +ROOT_URLCONF = 'aitrainer_backoffice.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + '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', + ], + }, + }, +] + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'aitrainer2', + 'USER': 'aitrainer', + 'PASSWORD': 'andio2009', + 'HOST': '127.0.0.1', + 'PORT': 3306 + }, + 'live': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'aitrainer', + 'USER': 'aitrainer', + 'PASSWORD': 'andio2009', + 'HOST': '127.0.0.1', + 'PORT': 3306 + } +} + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + + +DATABASE_ROUTERS = ['aitrainer_backoffice.db_router.TestRouter'] + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'hu-HU' + +TIME_ZONE = 'Europe/Budapest' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, "static") + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') +CKEDITOR_UPLOAD_PATH = MEDIA_URL + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + 'handlers': { + 'console': { + 'class': 'logging.StreamHandler', + 'filters': ['require_debug_true'], + }, + }, + 'loggers': { + 'mylogger': { + 'handlers': ['console'], + 'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'), + 'propagate': True, + }, + }, +} + +# deployment settings +#SECURE_SSL_REDIRECT = False +#SESSION_COOKIE_SECURE = True +#CSRF_COOKIE_SECURE = True + + +CRON_CLASSES = [ + 'controlling.cron.cron.MyCronJob', +] diff --git a/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py new file mode 100644 index 0000000..5906676 --- /dev/null +++ b/aitrainer_backoffice/aitrainer_backoffice/settings/prod.py @@ -0,0 +1,174 @@ +import os + +BACKOFFICE_VERSION = 1.28 + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + +LOCALE_PATHS = [os.path.join(BASE_DIR, 'locale')] + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.environ['DJANGO_KEY'] + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = False + +ALLOWED_HOSTS = ['62.171.188.119', "admin.aitrainer.app"] + +INSTALLED_APPS = [ + 'aitrainer_backoffice.aitrainer_backoffice', + 'aitrainer_backoffice.controlling.apps.ControllingConfigLive', + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'ckeditor', + 'ckeditor_uploader', + 'django_admin_json_editor', + 'rangefilter', + 'adminsortable2', + 'inline_actions', + 'django_cron', +] + +MIDDLEWARE = [ + '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', +] + +ROOT_URLCONF = 'aitrainer_backoffice.aitrainer_backoffice.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [], + '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 = 'aitrainer_backoffice.aitrainer_backoffice.wsgi.application' + +# Database +# https://docs.djangoproject.com/en/3.0/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'aitrainer_test', + 'USER': 'aitrainer', + 'PASSWORD': 'andio2009', + 'HOST': '62.171.188.119', + 'PORT': 33060 + }, + 'live': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'aitrainer', + 'USER': 'aitrainer', + 'PASSWORD': 'andio2009', + 'HOST': '62.171.188.119', + 'PORT': 33060 + } +} + +DATABASE_ROUTERS = ['aitrainer_backoffice.db_router.TestRouter'] + +# Password validation +# https://docs.djangoproject.com/en/3.0/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', + }, + { + 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', + }, +] + +# Internationalization +# https://docs.djangoproject.com/en/3.0/topics/i18n/ + +LANGUAGE_CODE = 'hu-HU' + +TIME_ZONE = 'Europe/Budapest' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/3.0/howto/static-files/ + +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, "static") + +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') +CKEDITOR_UPLOAD_PATH = MEDIA_URL + +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'filters': { + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue', + }, + }, + 'handlers': { + 'file': { + 'level': 'ERROR', + 'class': 'logging.FileHandler', + 'filename': '/var/log/django_error.log', + } + }, + 'loggers': { + 'django': { + 'handlers': ['file'], + 'level': 'DEBUG', + 'propagate': True, + }, + }, +} + +CACHES = { + 'default': { + 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', + 'LOCATION': '/var/tmp/django_cache', + 'TIMEOUT': 300, + 'OPTIONS': { + 'MAX_ENTRIES': 50000 + } + } +} + +# deployment settings +#SECURE_SSL_REDIRECT = False +#SESSION_COOKIE_SECURE = True +#CSRF_COOKIE_SECURE = True + + +CRON_CLASSES = [ + 'aitrainer_backoffice.controlling.cron.cron.MyCronJob', +] diff --git a/aitrainer_backoffice/controlling/apps.py b/aitrainer_backoffice/controlling/apps.py index 87ca7a1..177a9d3 100644 --- a/aitrainer_backoffice/controlling/apps.py +++ b/aitrainer_backoffice/controlling/apps.py @@ -3,4 +3,8 @@ from django.apps import AppConfig class ControllingConfig(AppConfig): app_label = 'controlling' - name = 'aitrainer_backoffice.controlling' \ No newline at end of file + name = 'controlling' + +class ControllingConfigLive(AppConfig): + app_label = 'controlling' + name = 'aitrainer_backoffice.controlling' \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 49b070a..7311b3f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,7 +12,7 @@ services: - mysql-server ports: - "8002:8000" - command: gunicorn aitrainer_backoffice.aitrainer_backoffice.wsgi --env DJANGO_SETTINGS_MODULE=aitrainer_backoffice.aitrainer_backoffice.settings --bind 0.0.0.0:8000 --workers 3 + command: gunicorn aitrainer_backoffice.aitrainer_backoffice.wsgi --env DJANGO_SETTINGS_MODULE=aitrainer_backoffice.aitrainer_backoffice.settings.prod --bind 0.0.0.0:8000 --workers 3 mysql-server: image: mysql:8.0.21