Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add option to serve with URL prefix #2008

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

Vinno97
Copy link

@Vinno97 Vinno97 commented Sep 19, 2022

Added the option to run Doccano with a URL prefix instead of always running from the domain root. The prefix is configured by specifying a BASE_URL environment variable. This PR fixes #1878

To run Doccano under /doccano/, set BASE_URL to /doccano/:

export BASE_URL=/doccano/

When we now compile the front-end, all routes are prefixed with BASE_URL.

We also need to let Django know about our new prefix. This is done using the same BASE_URL environment variable but needs to be set during runtime. I could not find a clean method to configure them both during runtime.

Since such a configuration will most likely only be used in combination with a load balancer, I also added the option to set USE_X_FORWARDED_HOST using environment variables.

Note that I did not write any tests for this (yet), both because I am unsure how this should be done and because I would first like to know if this PR would be acceptable.

Added the option to run Doccano with a URL prefix instead of always
running from the domain root. The prefix is configured by specifying a
`BASE_URL` environment variable.

To run Doccano under `/doccano/`, set `BASE_URL` to '/doccano/':

```sh
export BASE_URL=/doccano/
```

When we now compile the front-end, all routes are prefixed with BASE_URL.

We also need to let Django know about our new prefix. This is done using
the same BASE_URL, but needs to be set during runtime. I could not find
a clean method to do them both during runtime.

Since such a configuration will most likely only be used in combination
with a load balancer, I also added the option to set
`USE_X_FORWARDED_HOST` using environment variables.
@Hironsan
Copy link
Member

Thanks!

Please write some test cases. After that, I'll merge this PR.

Note that these URLs should probably not be defined in the view anyways.
I patched them here because I am not familiar enough with the project to
fix this cleanly.
@Vinno97
Copy link
Author

Vinno97 commented Sep 20, 2022

Great, will do. Any tips about where to start for someone unfamiliar with the project (and Django in general)? I expect I should extend backend/api/tests/test_config.py?

@lyingcrow
Copy link

lyingcrow commented Apr 18, 2023

Still in progress? @Vinno97

@Vinno97
Copy link
Author

Vinno97 commented Jul 3, 2023

This hasn't been on my radar for quite a long time. The project I needed this fix for, was finished up a while ago. I'd be willing to write some tests for it, but I'm still equally unfamiliar with the project and Django. So some pointers will be needed

@@ -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/"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BASE_URL + "media/" ?

Comment on lines +67 to +68
if settings.BASE_URL:
urlpatterns = [path(f'{settings.BASE_URL.strip("/")}/', include(urlpatterns))]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These lines seem to make the URL (e.g. http://127.0.0.1:8000/v1/projects) inaccessible. settings.BASE_URL is evaluated as True.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Deploy doccano in a subpath
3 participants