diff --git a/backend/config/settings/base.py b/backend/config/settings/base.py index 863292ac4f..4beeee72ba 100644 --- a/backend/config/settings/base.py +++ b/backend/config/settings/base.py @@ -30,6 +30,10 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = env.bool("DEBUG", True) +BASE_URL = env("BASE_URL", "/") + +USE_X_FORWARDED_HOST = env.bool("USE_X_FORWARDED_HOST", False) + # Application definition INSTALLED_APPS = [ "whitenoise.runserver_nostatic", @@ -103,7 +107,7 @@ # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.0/howto/static-files/ -STATIC_URL = "/static/" +STATIC_URL = BASE_URL + "static/" STATIC_ROOT = path.join(BASE_DIR, "staticfiles") STATICFILES_DIRS = [ path.join(BASE_DIR, "client/dist/static"), @@ -179,9 +183,9 @@ TEST_RUNNER = "xmlrunner.extra.djangotestrunner.XMLTestRunner" TEST_OUTPUT_DIR = path.join(BASE_DIR, "junitxml") -LOGIN_URL = "/login/" -LOGIN_REDIRECT_URL = "/projects/" -LOGOUT_REDIRECT_URL = "/" +LOGIN_URL = BASE_URL + "login/" +LOGIN_REDIRECT_URL = BASE_URL + "projects/" +LOGOUT_REDIRECT_URL = BASE_URL # Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases @@ -245,7 +249,7 @@ # User media files MEDIA_ROOT = env("MEDIA_ROOT", path.join(BASE_DIR, "media")) -MEDIA_URL = "/media/" +MEDIA_URL = BASE_URL + "/media/" # Filepond settings DJANGO_DRF_FILEPOND_UPLOAD_TMP = path.join(BASE_DIR, "filepond-temp-uploads") diff --git a/backend/config/urls.py b/backend/config/urls.py index 80e10fe9a6..98a2620791 100644 --- a/backend/config/urls.py +++ b/backend/config/urls.py @@ -63,3 +63,6 @@ path("swagger/", schema_view.with_ui("swagger", cache_timeout=0), name="schema-swagger-ui"), re_path("", TemplateView.as_view(template_name="index.html")), ] + +if settings.BASE_URL: + urlpatterns = [path(f'{settings.BASE_URL.strip("/")}/', include(urlpatterns))] diff --git a/frontend/components/configAutoLabeling/form/FileField.vue b/frontend/components/configAutoLabeling/form/FileField.vue index bb348504a0..ae71d75209 100644 --- a/frontend/components/configAutoLabeling/form/FileField.vue +++ b/frontend/components/configAutoLabeling/form/FileField.vue @@ -35,7 +35,7 @@ export default { return { myFiles: [], server: { - url: '/v1/fp', + url: `${process.env.baseUrl}/fp`, headers: { 'X-CSRFToken': Cookies.get('csrftoken') }, diff --git a/frontend/nuxt.config.js b/frontend/nuxt.config.js index 6baf886ad3..a53593e1eb 100644 --- a/frontend/nuxt.config.js +++ b/frontend/nuxt.config.js @@ -1,7 +1,12 @@ import colors from 'vuetify/es5/util/colors' import i18n from './i18n' +const BASE_URL = process.env.BASE_URL || '/' + export default { + router: { + base: BASE_URL + }, ssr: false, /* ** Headers of the page @@ -26,7 +31,7 @@ export default { }, env: { - baseUrl: '/v1' + baseUrl: `${BASE_URL}v1` }, /* diff --git a/frontend/pages/projects/_id/dataset/import.vue b/frontend/pages/projects/_id/dataset/import.vue index 3aede52af6..2ed86d0045 100644 --- a/frontend/pages/projects/_id/dataset/import.vue +++ b/frontend/pages/projects/_id/dataset/import.vue @@ -119,7 +119,7 @@ export default { ], requiredRules: [(v) => !!v || 'Field value is required'], server: { - url: '/v1/fp', + url: `${process.env.baseUrl}/fp`, headers: { 'X-CSRFToken': Cookies.get('csrftoken') },