-
Notifications
You must be signed in to change notification settings - Fork 16.4k
feat: Allow superset to be deployed under a prefixed URL #30134
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
Conversation
|
Thanks for tackling this... it's a popular request, no doubt about it. If you think it's relevant, we might also want to add an entry in the documentation somewhere. |
Yes agreed I definitely need to add some documentation for how to use this. I wanted to wait until I was more confident that the general approach was acceptable before working on describing how to use it. In terms of a review as part of #26319 is there anything I need to do at the moment? |
superset-frontend/packages/superset-ui-core/src/connection/SupersetClientClass.ts
Fixed
Show fixed
Hide fixed
|
I think this may be quite an undertaking and might have to be tackled in phases. Would love to see this done :) I remember giving it a shot early on in the project at least once, and never wrapped up the work. My main advice would be to avoid taking in side mission or bigger refactor while tackling this. |
docker/docker-frontend.sh
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there's a recent fix in master for this
Thanks for these changes. |
|
For what it's worth, we've been running this fork to serve superset on a path prefix in a Kubernetes(K3S) + traefik context without any problems so far. Though testing has been limited. Thanks for the work so far |
93d66c7 to
09a05b3
Compare
09a05b3 to
fe3b01a
Compare
Sorry for the delay in replying to this. I've had zero time to spend on this lately. The latest commits rebase on the current master and I have also added some documentation to the configuring superset pages that describe the new variables with an example |
|
If you think it's ready for review, I'd say you can go ahead and move it from Draft to "Ready for Review" - though it looks like CI might need a little more love still. As for the SIP, since @sfirke reopened the GitHub issue, I set the SIP itself back to "pre-discussion" state for its official consensus. Did you want to re-kindle that pre-existing SIP, or would it be easier to open a new one? I'm happy to help you carry that SIP through to fruition if you'd like. Feel free to DM me on slack if it's easier. |
|
When clicking on the user list or role list, and then clicking on datasets, a 404 error appears. |
Thanks a lot for the response. Also dashboard menu items export to PDF/image not working (Dashboard -> Download -> Export to PDF/Download as Image) |
I tried to fix above issue of missing prefixes in top-level menu. Please check this PR 2 |
|
The solution really works. Solved a long term issue in our deployment behind proxies. Hoping to get merged soon with official code base |
|
Very good, looking forward to merging the code soon |
|
For whom it may concern, I'm testing with a port of this work to 3.1.1rc1 available from watercraft:superset branch prefix |
|
Hi, I can see this PR is still flagged as DRAFT. What's left to do to get it "Ready for Review" ? @martyngigg do you need help in completing this PR ? I'm quite a superset newbie, but I'm willing to provide some help if necessary to get this merged. |
|
For those who want to try deploying superset to k8s using the Helm chart before its official release, the following modifications are required:
|
#140) the branch is rebased on top of upstream's master, ahead of 5.0.0rc2, and includes: - apache/superset#30134 (deploy under a prefix) - apache/superset#33059 (missing prune.py) - apache/superset#33060 (fix invalid query strings on role list page) assets have been rebuilt with SCARF_ANALYTICS=false in the env, thus the tracking pixel is correctly disabled (cf georchestra/superset#1)
| return redirect(f"/superset/dashboard/{new_dashboard.id}/?edit=true") | ||
| return redirect( | ||
| url_for( | ||
| "Superset.dashboard", dashboard_id_or_slug=new_dashboard.id, edit=True |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Somehow this line broke some tests on master but I don't understand how it didn't get caught by CI (????).
Issues is with the capitalize True here... Maybe you IDE did this? Linter?
|
Debugging something funky that happening with this PR, somehow it failed when it merged on master and digging in the last commit's run here https://github.com/apache/superset/actions/runs/14382934496/job/40331066514, it appears that it skipped the python-related test, presumably because of an issue with our logic that checks which files have been touched by the PR and triggers/skips based on whether it sees the backend/frontend getting touched. I'm guessing the issue is around the logic checking for files touched by the PR, and specific to [maybe] having a merge-based workflow instead of a rebase-type workflow. Regardless, tests fail here and it's a bit tricky to sort this out, could use some help here to fix master |
|
Related: #33092 |
|
@martyngigg anyway you can fix the issues that landed through this PR on |
Sure. I'll take a look now. |
|
It looks like the Python unit tests on HEAD of master seem to have a different failure: Is that expected? |
I think that the problem is that wsgiref types is available since Python 3.11 and master branch runs on 3.10. But I can’t understand why those tests passed in this branch though… |
Opened a fix here #33114 |
seems it doesn't work in 5.0.0rc2 |
Co-authored-by: Kamil Gabryjelski <[email protected]> (cherry picked from commit 09b92e7)
|
5.0.0 was released, seems still doesn't work |
|
5.0 was cut in Feb ... took a while to stabilize and release the branch. 6.0 should be a fast-follow though, hoping around a month from now. |
|
this has been merged a while ago and is working fine, but i think the swagger link doesnt have the prefix, eg going to https://instance/path/swagger/v1 tries to fetch looking at the code but so far i fail to see where this should be configured/handled, eg in FAB or superset frontend itself or somewhere else... edit bah i guess that's already been reported as #33304 |
|
labeled #33304 as "good first issue" for hopefully someone to pick up. |
|
I'm using Superset 4.1.2, but the solution isn't working for me. Can anyone explain why? Here’s the relevant output from my logs: [notice] A new release of pip is available: 25.0.1 -> 25.2
[notice] To update, run: pip install --upgrade pip
Starting web app (using development server)...
Usage: flask run [OPTIONS]
Try 'flask run --help' for help.
Error: The factory "create_app(superset_app_root='/archipel')" in module 'superset' could not be called with the specified arguments.
+ '[' 0 -eq 1 ']'
+ [[ 1 -gt 0 ]]
+ [[ dev == \d\e\v ]]
+ echo 'Skipping gunicorn, running app in dev mode'
+ bash /app/docker/docker-bootstrap.sh app
Skipping gunicorn, running app in dev mode
Installing local overrides at /app/docker/requirements-local.txt
Requirement already satisfied: psycopg2-binary==2.9.6 in /usr/local/lib/python3.10/site-packages (from -r /app/docker/requirements-local.txt (line 1)) (2.9.6)
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager, possibly rendering your system unusable. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv. Use the --root-user-action option if you know what you are doing and want to suppress this warning.
[notice] A new release of pip is available: 25.0.1 -> 25.2
[notice] To update, run: pip install --upgrade pip
Starting web app (using development server)...
Usage: flask run [OPTIONS]
Try 'flask run --help' for help.
Error: The factory "create_app(superset_app_root='/archipel')" in module 'superset' could not be called with the specified arguments. |
|
Hi @Ayoub-BOUCHACHIA |




SUMMARY
Introduces changes in the front and backend to allow Superset to be deployed under a prefixed-URL path rather than the root of the domain.
The backend
superset.app:create_apphas been augemented with a newapp_rootargument that accepts a root path for the application. This is passed through either aSUPERSET_APP_ROOTenvironment variable or by customizing theFLASK_APPenvironment variable or theflask --appcli argument, e.g.FLASK_APP="superset:create_app(superset_app_root='/analytics')"When the path is not
/a middleware is created that intercepts paths and updates them to strip theapp_rootand forward them to the rest of the application. This was inspired by Application Dispatching.The backend has also been refactored to avoid using hardcoded paths in redirects and instead uses
Flask.url_forto construct all references.The frontend has been updated to include the prefix in any resource links along with two new helper utilities,
assetUrl&pathUtils, to help construct the paths. TheSupersetClienthas been updated to remove the unusedbaseUrlfield and rename it asbasePathsuch that the object can be initialized with the base path and calling any endpoints through this class can use the same relative link as before. QUESTION: Have I broken an API here?Documentation has been added to the "Configuring Superset" pages that demonstrate how to use the new argument.
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
TESTING INSTRUCTIONS
ADDITIONAL INFORMATION