Grist Homepage vs. Docs functionality in self hosted Docker

Hello all,

I am very impressed with Grist and looking forward to trying it out on my self hosted Docker setup.

I have encountered some challenges as follows:
With the APP_HOME_URL environmental variable, I can manipulate that to make grist accessible either with https and from a custom domain, or without https at my local IP. So that all looks good.

However, when the APP_HOME_URL is set to my custom domain, only the home page loads. When I click to open a doc, it goes to a blank grist page. It will load, but only to an empty Grist page with no real options to click and no interactive document.
What is odd is that this error seems to persist no matter how I set the other three environmental variables APP_DOC_URL, APP_DOC_INTERNAL_URL, or APP_HOME_INTERNAL_URL.

The domain routing is handled through nginx reverse proxy manager.

I believe I tried all iterations amongst the four environmental variables and none worked with the APP_HOME_URL set to my custom domain. Any ideas what may be driving the issue?

And, what would the four environmental variables ‘supposed’ to be in this setup? To confirm for myself.

I have used:
htps://grist.customdomaincom/o/docs [tried with and without the suffix for the DOC_URL variable]
htp://192.168.1,163:8484/o/docs/ [tried with and without the suffix for the DOC_URL variable]
(htp not http due to link limited in posting)

When the APP_HOME_URL is set to my local domain, both the home page and doc page are functional.

Thank you

Hi @Jonathan, if using nginx, can you confirm that webhook websocket connections are being proxied? That is often the problem if the home page loads fine but document pages don’t, since document pages make heavy use of a websocket connection. Related threads:

One thing you could try for debugging purposes is Grist Omnibus which has a reverse proxy built in.

Otherwise, there may be some informative error messages in the docker log for the container.

For most setups, you should not need any of APP_DOC_URL, APP_DOC_INTERNAL_URL, or APP_HOME_INTERNAL_URL. The only one of those I’ve seen people need is APP_DOC_INTERNAL_URL if their own domain can’t be looked up or reached from the Grist container itself. The correct setting for it then would be whatever the equivalent of APP_HOME_URL would be from within the container - often http://localhost:8484 if Grist is running at port 8484. For the ip of you mention (I’m assuming the comma was a typo of a posting restriction), I’d want to check that within the container that works as you expect.


Thanks Paul, this is exceptionally helpful!

I am 90% sure I will find my problem by checking webhooks because that makes sense. I will try and follow up with a docker log if I’m unsuccessful.