-
-
Notifications
You must be signed in to change notification settings - Fork 321
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
Self-managed Grist onboarding is confusing #733
Comments
Hi @edward-shen, thanks for synthesizing all that feedback! This is a very valuable thread. On the narrow question of the low-number userIds. Grist allocates a set of special user ids unconditionally, before doing anything else: grist-core/app/gen-server/lib/HomeDBManager.ts Lines 389 to 407 in 23782fd
Whether a user can log in with a specific user id is a separate question. Most of our effort and attention has so far been devoted to the SaaS we run, which uses one a particular configuration of Grist. We've tweaked things bit by bit to work for others in other situations. It would be lovely to catch our breath and rationalize things. Your write-up here is a great entry-point for that. Thank you! |
Hi @paulfitz! I'd like to apologize if any of the feedback is a little sharp -- I was a little frustrated trying to set it all up but from personal experience I know how valuable fresh, new user experience feedback can be so I chose to write feedback as soon as possible. I've attempted to make them constructive and actionable as possible. To be clear, I do recognize and appreciate the work put into self-hosting capabilities, especially since it can be often difficult to prioritize over business needs. The objective of this write-up was to start internal conversations. I'm not expecting much beyond that, so please feel free to close this issue as you see fit. As for the user ID feedback, I don't mind that I'm not the first user. Rather, it's that there exists the possibility for malicious actors to potentially abuse special default accounts (e.g. anon; previewer; etc), especially for self-hosted but not properly secured instances. It might not be too hard to imagine someone abusing the anonymous account to either spam or collect information from poorly secured documents on public exposed instances. Think self-managed enterprise instances where every user that should have permission is given an account, and those without permission can't even access the app (e.g. they are not given a seat license). In that case, none of the special accounts might be necessary: anonymous users and previewer users should already have a seat license to use; everyone should be disabled because it doesn't scale well; and IT might have their own flow that's not email. This is all hypothetical, of course, but I hope that this offers a reasonable scenario to why these users should be optional (and preferably opt-in). |
Don't apologize @edward-shen, your constructive objective was clear and I was in fact impressed by your restraint :-). I imagine most people who hit even a few of these problems just move on and we never hear about it. I'm not getting into responding bullet by bullet to what you've noted - not out of dismissal, but the contrary; it is clear that there is a lot to do. We will be having those conversations. |
Thank you @edward-shen for this! I was encountering all the same errors doing this and spent a lot more than 4 hours on this haha Another piece of feedback that I'd like to add on top of: "Define what is an organization, or what is a team anywhere on the documentation": Please document how to map the SAML roles/attributes to teams or single org when you do define what team, org , admin are |
@cgalo5758 Were you able to get different orgs to work? By that question it sounds like you were able to manage to achieve that. If so, could you post how you did that? |
@edward-shen No, but I thought that maybe roles/attributes had to do with it and that it was simply not documented. I had to add a "User Attribute Mapper For NameID" to make grist fetch the user's email, first name, and last name correctly. For documentation's sake, it is "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"... nothing else will work. |
Hi @edward-shen
Maybe @paulfitz Thanks for putting in the effort of making this a free, self-hosted solution along the way |
I have not been able to figure out how to get team pages working (I run a single person instance)--setting the single org name to docs gets you personal pages though -- not sure if it works for multiple people. |
@edward-shen Thanks for coming back to me. |
@mxcd a I see that fixing the ability to create team sites in |
Happy self-hoster for more than a year here 👋🏼 |
Thanks to all of your support, I got it working. For reference, here are my ENV vars:
This gives me a single Team page where the contents are shared with all members. Thanks to everyone for the support ❤️ |
Hi, Has anyone been able to successfully setup multi team site in subdomain? I am able to setup multi team sites with Tried setting So tried setting the server to support subdomain by configuring the web server, local name server and also the Grist environment variable by setting |
Multi team site in subdomain is what we use for Grist Lab's SaaS. Looking through our settings, I see It would be great if someone could fix the underlying document duplication issue, it may well be some small URL confusion when someone finally digs into it. |
Think a docker compose example with good defaults and explanations of the various environment variables would go a long way. |
Update: there is now a |
Adding to the list : #948 cc @jgranduel |
Multi-team sites on subdomains would be a great addition to self-hosted deployments. Looking forward to sorting that one out. Related, as it has come up above: |
Thanks @edward-shen for giving the clues regarding |
Hey folks.
I'd like to give feedback on the onboarding experience for a self-managed instance. Specifically, I think the documentation needs significant improvement for anyone to have a reasonable chance at onboarding.
I just got to a point where logging in doesn't give any error messages. I have not interacted with any of grist yet, nor set up sandboxing. I have instead set up requiring login and disabling anon flows to have a public instance.
It took me 4 hours to get to this point, judging by
stat
.As of right now, the guide results in generating the following environment variables:
As well as to mount the
/persist
directory in the docker container and to forward some ports.This results in a non-functioning instance if you have a reverse proxy that does not set the
Host
header to the correct domain. Specifically, this results in #228, where the frontend seems to ignoreAPP_HOME_URL
.Feedback: It's not sufficient to just say
on the initialization guide when your business logic extracts and utilizes specific headers that a reverse proxy (e.g. nginx) is not guaranteed to provide, especially when it's heavily implied that just setting
APP_HOME_URL
is all you need to do.(And if you're wondering which header is omitted, see #228; I've commented there with more details.)
I assume there's also some websocket configuration I was able to avoid because I just copied my nginx config from another virtual server's location block that uses websockets.
This led me to trying out a bunch of environment variables, reading source code, and trying to figure out why
APP_HOME_URL
wasn't being respected. Turns out, ignoringAPP_HOME_URL
is intentional as there's a function that overwrites it ifGRIST_SERVE_SAME_ORIGIN
is set, which is set to true for the Dockerfile.Feedback: Log more.
DEBUG=1
gives near-zero meaningful information when we're trying to debug how things are constructed. I often felt it was probably easier for me to just pull source and run it locally with locally added log statements.Feedback: Log a LOT more. I really would have loved a trace level to figure out where the client-side urls were being overwritten.
Feedback: Tell us what env variables are set during initialization. This lets the user verify that the env vars have been properly set.
But once this was fixed, I still ran into problems -- going to
https://grist.<DOMAIN>
and logging in lead me to an auth error where "I don't have access to this organization's documents" and I'll need to contact an administrator:Feedback: What organization? What administrator? I am the administrator!? Where am I suppose to set up a organization? Is there an administrator account?
Click on the Grist icon then leads you to a blank page. No, really:
The server side reveals no error message, so it must have served everything fine. It's only in the console logs that reveals the actual issue:
Feedback: There needs to be some error handling here. There's no way for a user to figure out what the issue is here, especially if they were just given a bad link.
Figuring why this was broken required me to look at #212. It looks like the default organization is actually
docs
, and not some random org I could set. It also looks like I needed to setGIRST_ORG_IN_PATH
to have the client figure out what I could set:I'm pretty sure this is unintentional but this was the first thing that worked for me.
Feedback: More docs on figuring out how to set a single org instance up is incredibly helpful.
Unsetting
GRIST_SINGLE_ORG
and just keepingGIRST_ORG_IN_PATH
enabled the "Create a new Team site" button, but just redirected me to the pricing page instead. I'm not sure if this is intentional or not, since I feel like grist-core should support team pages.Finally, once that got working, I nuked the instance and set these variables, as this is a publicly accessible instance and I want it to be gated on my SAML provider:
I started things up again and I'm finally able to get to a starter page. I take one last look at the logs and I see that my user account is Id 5:
Wait, shouldn't I be 1? Looking at the logs, I see this line:
Why is the first user
anon@getgrist.com
, even when I explicitly disabled anon login? Does that mean there's still an anon account that could still perform actions? Who areuserId
s 2-4?There's not much constructive feedback regarding this, though I really do wish that there was a way to guarantee that the anon user doesn't exist.
At this point in time, I'm still trying to figure out a couple of things:
@
)But hopefully this is valuable feedback!
The text was updated successfully, but these errors were encountered: