diff --git a/Dockerfile b/Dockerfile index c21e599736..1803a59891 100644 --- a/Dockerfile +++ b/Dockerfile @@ -149,6 +149,22 @@ CMD gunicorn \ --access-logfile \ - cms.wsgi:application +################################################## +# Define LMS docker-based non-dev target. +FROM base as lms-docker +ENV SERVICE_VARIANT lms +ENV LMS_CFG="/vault-api-secrets/secrets/edx-platform.yml" +ENV EDX_PLATFORM_SETTINGS='docker-production' +ENV DJANGO_SETTINGS_MODULE="lms.envs.$EDX_PLATFORM_SETTINGS" +EXPOSE 8000 +CMD gunicorn \ + -c /edx/app/edxapp/edx-platform/lms/docker_lms_gunicorn.py \ + --name lms \ + --bind=0.0.0.0:8000 \ + --max-requests=1000 \ + --access-logfile \ + - lms.wsgi:application + ################################################## # Define intermediate dev target for LMS/CMS. @@ -160,6 +176,7 @@ CMD gunicorn \ # in a single layer, shared between `lms-dev` and `cms-dev`. FROM base as dev RUN pip install -r requirements/edx/development.txt +ENV LMS_CFG="$CONFIG_ROOT/lms.yml" # Link configuration YAMLs and set EDX_PLATFORM_SE1TTINGS. ENV EDX_PLATFORM_SETTINGS='devstack_docker' diff --git a/lms/envs/docker-production.py b/lms/envs/docker-production.py new file mode 100644 index 0000000000..73bf5e76ea --- /dev/null +++ b/lms/envs/docker-production.py @@ -0,0 +1,83 @@ +""" +Specific overrides to the base prod settings for a docker production deployment. +""" + +import platform +from .production import * # pylint: disable=wildcard-import, unused-wildcard-import + + +def get_docker_logger_config(log_dir='/var/tmp', + logging_env="no_env", + edx_filename="edx.log", + dev_env=False, + debug=False, + service_variant='lms'): + """ + Return the appropriate logging config dictionary. You should assign the + result of this to the LOGGING var in your settings. + """ + + hostname = platform.node().split(".")[0] + syslog_format = ( + "[service_variant={service_variant}]" + "[%(name)s][env:{logging_env}] %(levelname)s " + "[{hostname} %(process)d] [%(filename)s:%(lineno)d] " + "- %(message)s" + ).format( + service_variant=service_variant, + logging_env=logging_env, hostname=hostname + ) + + handlers = ['console'] + + logger_config = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'standard': { + 'format': '%(asctime)s %(levelname)s %(process)d ' + '[%(name)s] %(filename)s:%(lineno)d - %(message)s', + }, + 'syslog_format': {'format': syslog_format}, + 'raw': {'format': '%(message)s'}, + }, + 'handlers': { + 'console': { + 'level': 'DEBUG' if debug else 'INFO', + 'class': 'logging.StreamHandler', + 'formatter': 'standard', + 'stream': sys.stdout, + }, + }, + 'loggers': { + 'django': { + 'handlers': handlers, + 'propagate': True, + 'level': 'INFO' + }, + 'requests': { + 'handlers': handlers, + 'propagate': True, + 'level': 'WARNING' + }, + 'factory': { + 'handlers': handlers, + 'propagate': True, + 'level': 'WARNING' + }, + 'django.request': { + 'handlers': handlers, + 'propagate': True, + 'level': 'WARNING' + }, + '': { + 'handlers': handlers, + 'level': 'DEBUG', + 'propagate': False + }, + } + } + + return logger_config + +LOGGING = get_docker_logger_config()