diff --git a/cms/envs/aws.py b/cms/envs/aws.py
index fdf08b2e48e4e21e9379a8d9bf23f427b3f27364..4860c2c7d9850db9a77b4aa31243bb54d83a9a00 100644
--- a/cms/envs/aws.py
+++ b/cms/envs/aws.py
@@ -106,6 +106,10 @@ if STATIC_URL_BASE:
 # DEFAULT_COURSE_ABOUT_IMAGE_URL specifies the default image to show for courses that don't provide one
 DEFAULT_COURSE_ABOUT_IMAGE_URL = ENV_TOKENS.get('DEFAULT_COURSE_ABOUT_IMAGE_URL', DEFAULT_COURSE_ABOUT_IMAGE_URL)
 
+# MEDIA_ROOT specifies the directory where user-uploaded files are stored.
+MEDIA_ROOT = ENV_TOKENS.get('MEDIA_ROOT', MEDIA_ROOT)
+MEDIA_URL = ENV_TOKENS.get('MEDIA_URL', MEDIA_URL)
+
 # GITHUB_REPO_ROOT is the base directory
 # for course data
 GITHUB_REPO_ROOT = ENV_TOKENS.get('GITHUB_REPO_ROOT', GITHUB_REPO_ROOT)
diff --git a/cms/envs/bok_choy.py b/cms/envs/bok_choy.py
index 9c69e46020e8c0e5d670af6f58ed40d1ecbfcf49..acb4c5f93e127ae0faf315d790bc4f2379f5bb35 100644
--- a/cms/envs/bok_choy.py
+++ b/cms/envs/bok_choy.py
@@ -64,6 +64,9 @@ STATICFILES_DIRS = [
     (TEST_ROOT / "staticfiles" / "cms").abspath(),
 ]
 
+DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
+MEDIA_ROOT = TEST_ROOT / "uploads"
+
 WEBPACK_LOADER['DEFAULT']['STATS_FILE'] = TEST_ROOT / "staticfiles" / "cms" / "webpack-stats.json"
 
 # Silence noisy logs
diff --git a/cms/envs/common.py b/cms/envs/common.py
index ac8773df98b3e5812ae9817feb8c4dfaa71758ec..c1c5f651a1677126845d65792a453f7e159ba360 100644
--- a/cms/envs/common.py
+++ b/cms/envs/common.py
@@ -61,6 +61,10 @@ from lms.envs.common import (
     ENABLE_CREDIT_ELIGIBILITY, YOUTUBE_API_KEY,
     COURSE_MODE_DEFAULTS, DEFAULT_COURSE_ABOUT_IMAGE_URL,
 
+    # User-uploaded content
+    MEDIA_ROOT,
+    MEDIA_URL,
+
     # Django REST framework configuration
     REST_FRAMEWORK,
 
diff --git a/cms/envs/devstack.py b/cms/envs/devstack.py
index 02cd1ed8b17900a16d67c02764921be8923d62ff..3f7caf743879944c8665ddd548c5fc60a2cab610 100644
--- a/cms/envs/devstack.py
+++ b/cms/envs/devstack.py
@@ -10,7 +10,6 @@ from .aws import *  # pylint: disable=wildcard-import, unused-wildcard-import
 del DEFAULT_FILE_STORAGE
 COURSE_IMPORT_EXPORT_STORAGE = 'django.core.files.storage.FileSystemStorage'
 USER_TASKS_ARTIFACT_STORAGE = COURSE_IMPORT_EXPORT_STORAGE
-MEDIA_ROOT = "/edx/var/edxapp/uploads"
 
 DEBUG = True
 USE_I18N = True