Skip to content

Commit 772cdf0

Browse files
committed
Update documentation for unified Docker image
Update guides, configuration reference, architecture notes, and the domain glossary to reflect the single proxy-routed image: remove the public/proxy endpoint connection fields, document that all requests flow through the proxy server (which requires network access to the database), and add the Proxy Server glossary term.
1 parent 8e43047 commit 772cdf0

9 files changed

Lines changed: 35 additions & 48 deletions

CONTEXT.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ A directed relationship between two vertices (source → target), with a type an
1313
_Avoid_: Relationship, link
1414

1515
**Connection**:
16-
A saved database profile — the URL, query engine, authentication settings, and proxy routing needed to reach a graph database. Users create and manage these in the UI.
17-
_Avoid_: Configuration (legacy term being phased out — previously bundled connection + schema + Styles into one object)
16+
A saved database profile — the graph database endpoint URL (`graphDbUrl`), query language, and optional IAM authentication settings. The client always reaches the database through the same-origin **Proxy Server**, so no proxy endpoint is configured. Users create and manage these in the UI.
17+
_Avoid_: Configuration (legacy term being phased out — previously bundled connection + schema + Styles into one object); proxy endpoint / `proxyConnection` (removed — see ADR `unify-docker-image-remove-sagemaker-variant`)
1818

1919
**Active Connection**:
2020
The one Connection a single browser tab is currently exploring — what the entire app reads to decide which Schema, Session, and queries are in play. Held per-tab (sessionStorage): it survives that tab's reload but dies with the tab, and one tab activating a Connection never changes another tab's Active Connection.
@@ -86,6 +86,10 @@ _Avoid_: Save state (ambiguous with Session)
8686
The UI element in the nav bar (after the page title) that renders Persistence Status. It surfaces only on `failed` — a standing danger "Changes not saved" button — and stays absent at `idle` and `saving`. Clicking it opens a dialog showing the raw failure records (key, reason, attempt count, last attempt, and the underlying error's name/message/cause) in a read-only JSON editor. The dialog offers to save the configuration to a file via `saveLocalForageToFile` (`core/StateProvider/localDb.ts`) when storage is full (quota) — IndexedDB is still readable then — but not when storage is inaccessible (private mode, blocked), since the database never opened and there is nothing to read. Recovery scope is retry (transient failures) plus that backup (terminal-quota failures) — it does not guarantee the write eventually lands.
8787
_Avoid_: Save-status indicator
8888

89+
**Proxy Server**:
90+
The Node.js server that serves the frontend (mounted at `/explorer`) and proxies all database requests (mounted at `/`). The client resolves API endpoints relative to its own origin via `apiUrl()``../endpoint` from the static mount — so the frontend and proxy are always same-origin. This means every database request routes through the Proxy Server, which has network access to the database and handles SigV4 signing. See ADR `unify-docker-image-remove-sagemaker-variant`.
91+
_Avoid_: proxy endpoint URL (no longer user-configured)
92+
8993
## Relationships
9094

9195
- Each browser tab has at most one **Active Connection**; different tabs may have different ones
@@ -120,3 +124,4 @@ _Avoid_: Save-status indicator
120124
- "Node" means **Vertex** in code but is the preferred UI term for property graphs — resolved: use **Vertex** in code, "node" in UI copy.
121125
- "Attribute" vs "Property" — resolved: **Property** is canonical, "attribute" is legacy code term being phased out.
122126
- "Active connection" meant a single shared per-origin value, but the app consumed it as if it were per-tab — resolved: **Active Connection** is per-tab (sessionStorage), **Last Active Connection** is the shared persisted breadcrumb. The legacy `activeConfigurationAtom` / `active-configuration` key is reused as the breadcrumb.
127+
- Connection URL field — `url` and `proxyConnection` are legacy fields that survive only in `LegacyConnectionConfig` and are migrated at read time to the canonical `graphDbUrl` (see `migrateLegacyConnection`, ADR `unify-docker-image-remove-sagemaker-variant`). Use `graphDbUrl` in code.

docs/architecture.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,16 @@ Graph Explorer is a client-heavy web application with a thin backend proxy. The
1313
graph LR
1414
Browser["Browser\n(React)"] -- HTTP --> Proxy["Proxy Server\n(Express)"]
1515
Proxy -- HTTP --> DB["Graph Database\n(Neptune, etc.)"]
16-
Browser -. direct .-> DB
1716
Browser -- persistence --> IDB["IndexedDB\n(localforage)"]
1817
```
1918

20-
The React client constructs queries and sends them through the proxy server, which forwards requests to the graph database. When connecting to Amazon Neptune, the proxy signs requests with AWS SigV4 credentials. For non-Neptune databases, the proxy is optional — the client can connect directly to a publicly accessible endpoint (shown as the dotted line above).
19+
The React client constructs queries and sends them through the proxy server using relative URLs, which forwards requests to the graph database. When connecting to Amazon Neptune, the proxy signs requests with AWS SigV4 credentials.
2120

2221
The proxy does not store any user data — all preferences, connections, and query history live in the browser's IndexedDB.
2322

24-
This split exists because browsers cannot perform SigV4 signing directly (it requires AWS credentials that should not be exposed to the client), and because the proxy can run inside a VPC alongside the database while the browser runs outside it.
23+
This architecture allows the app to work behind any reverse proxy (SageMaker, custom paths) without build-time configuration, since the client resolves API endpoints relative to its own location. The proxy can run inside a VPC alongside the database while the browser runs outside it.
24+
25+
Because all requests flow through the proxy, the server must have network access to the target database. If the server is in a restricted network (e.g., a private subnet with no NAT gateway), it will not be able to reach databases outside that network even if the user's browser could reach them directly.
2526

2627
## Monorepo Structure
2728

docs/features/connections.md

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,11 @@ For guides on connecting to specific databases, see [Connecting to databases](..
1010

1111
- **Name:** Enter a name for your connection (e.g., `MyNeptuneCluster`).
1212
- **Query Language:** Choose a query language that corresponds to your graph database.
13-
- **Public or proxy endpoint:** Provide the publicly accessible endpoint URL for a graph database, e.g., Gremlin Server. If connecting to Amazon Neptune, then provide a proxy endpoint URL that is accessible from outside the VPC, e.g., EC2.
14-
- **Note:** For connecting to Amazon Neptune, ensure that the graph connection URL is in the format `https://[NEPTUNE_ENDPOINT]:8182`, and that the proxy endpoint URL is either `https://[EC2_PUBLIC_HOSTNAME]:443` or `http://[EC2_PUBLIC_HOSTNAME]:80`, depending on the protocol used. Ensure that you don't end either of the URLs with `/`.
15-
- **Using proxy server:** Check this box if using a proxy endpoint.
16-
- **Graph connection URL:** Provide the endpoint for the graph database
17-
- **AWS IAM Auth Enabled:** Check this box if connecting to Amazon Neptune using IAM Auth and SigV4 signed requests
18-
- **Service Type:** Choose the service type
19-
- **AWS Region:** Specify the AWS region where the Neptune cluster is hosted (e.g., us-east-1)
20-
- **Fetch Timeout:** Specify the timeout for the fetch request
13+
- **Graph Connection URL:** Provide the endpoint URL for your graph database (e.g., `https://[NEPTUNE_ENDPOINT]:8182`). Ensure that the URL does not end with `/`.
14+
- **AWS IAM Auth Enabled:** Check this box if connecting to Amazon Neptune using IAM Auth and SigV4 signed requests.
15+
- **Service Type:** Choose the service type (`neptune-db` or `neptune-graph`).
16+
- **AWS Region:** Specify the AWS region where the Neptune cluster is hosted (e.g., us-east-1).
17+
- **Fetch Timeout:** Specify the timeout for the fetch request.
2118
- **Neighbor Expansion Limit:** Specify the default limit for neighbor expansion. This will override the app setting for neighbor expansion.
2219

2320
## Available Connections

docs/guides/connecting-to-gremlin-server.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ Then open Graph Explorer and add a new connection with the following settings:
1515

1616
- Name: `Gremlin Server`
1717
- Query Language: `Gremlin`
18-
- Public or Proxy Endpoint: `https://localhost`
19-
- Using Proxy Server: `true`
2018
- Graph Connection URL: `http://localhost:8182`
2119

2220
## Enable REST

docs/guides/connecting-to-neptune.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ Graph Explorer connects to Amazon Neptune through its proxy server, which forwar
88

99
- Name: `My Neptune Cluster`
1010
- Query Language: Choose the query language for your graph
11-
- Public or Proxy Endpoint: `https://localhost` (or wherever Graph Explorer is hosted)
12-
- Using Proxy Server: `true`
1311
- Graph Connection URL: `https://{your-cluster-endpoint}:8182`
1412
- AWS IAM Auth Enabled: `true` if IAM authentication is enabled on your cluster
1513
- Service Type: `neptune-db` (or `neptune-graph` for Neptune Analytics)

docs/guides/deploy-to-ecs-fargate.md

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,6 @@ After the request is processed, the console will return you to your certificate
107107
"name": "IAM",
108108
"value": "false"
109109
},
110-
{
111-
"name": "USING_PROXY_SERVER",
112-
"value": "true"
113-
},
114-
{
115-
"name": "PUBLIC_OR_PROXY_ENDPOINT",
116-
"value": "https://{FQDN_from_step3}"
117-
},
118110
{
119111
"name": "HOST",
120112
"value": "localhost"
@@ -164,7 +156,6 @@ After the request is processed, the console will return you to your certificate
164156
- `GRAPH_TYPE`: The query language for your initial connection.
165157
- `IAM`: Set this to `true` to use SigV4 signed requests, if your Neptune cluster has IAM db authentication enabled.
166158
- `GRAPH_CONNECTION_URL`: Set this as `https://{NEPTUNE_ENDPOINT}:8182`.
167-
- `PUBLIC_OR_PROXY_ENDPOINT`: Set this as `https://{Domain name set in Step 5 of "Request an ACM Public Certificate"}`.
168159
- `SERVICE_TYPE`: Set this as `neptune-db` for Neptune database or `neptune-graph` for Neptune Analytics.
169160
6. Click **Create**.
170161

docs/guides/deploy-to-sagemaker.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ When the notebook has been started and is in "Ready" state, you can access Graph
1414
https://graph-explorer-notebook-name.notebook.us-west-2.sagemaker.aws/proxy/9250/explorer/
1515
```
1616

17+
## Network Requirements
18+
19+
All database requests from Graph Explorer are routed through the proxy server running on the SageMaker notebook instance. This means the instance must have network access to any database you want to explore.
20+
21+
If your notebook instance is in a private subnet without a NAT gateway or internet gateway, it will not be able to reach databases outside the VPC. To connect to external databases, ensure the instance has the appropriate network routing (VPC peering, NAT gateway, transit gateway, etc.).
22+
1723
## Minimum Database Permissions
1824

1925
By default, the permission policy for the IAM role of the SageMaker instance will have full access to the Neptune Database or Neptune Analytics instance. This means queries executed within Graph Explorer could contain mutations.

docs/guides/deploy-with-docker.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ You can find the latest version of the image on
99

1010
> [!NOTE]
1111
>
12-
> Make sure to use the version of the image that does not include `sagemaker` in the tag.
12+
> Both the regular and `sagemaker-*` image tags contain the same image. You can use either.
1313
1414
## Prerequisites
1515

docs/references/configuration.md

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,6 @@ All environment variables for configuring Graph Explorer, organized by concern.
88

99
These variables control server behavior, networking, and security.
1010

11-
### `GRAPH_EXP_ENV_ROOT_FOLDER`
12-
13-
Base path used to serve the `graph-explorer` front end application.
14-
15-
Example: `/explorer`
16-
17-
- Optional
18-
- Default: `/`
19-
- Type: `string`
20-
2111
### `HOST`
2212

2313
The public hostname of the server. This is used to generate the self-signed SSL certificate at container startup.
@@ -115,6 +105,14 @@ Override path for the folder containing `.env` and `defaultConnection.json`. Whe
115105
- Default: `<client root>` (`packages/graph-explorer`)
116106
- Type: `string`
117107

108+
### `NEPTUNE_NOTEBOOK`
109+
110+
Runtime convenience preset for SageMaker/Jupyter deployments. When set to `true`, configures port 9250, cloudwatch logging, and disables SSL automatically.
111+
112+
- Optional
113+
- Default: not set
114+
- Type: `boolean`
115+
118116
## Default Connection
119117

120118
To provide a default connection such that initial loads of Graph Explorer always result with the same starting connection, modify the `docker run ...` command to either take in a JSON configuration or runtime environment variables. If you provide both a JSON configuration and environmental variables, the JSON will be prioritized.
@@ -124,19 +122,16 @@ To provide a default connection such that initial loads of Graph Explorer always
124122
These are the valid environment variables used for the default connection, their defaults, and their descriptions.
125123

126124
- Required:
127-
- `PUBLIC_OR_PROXY_ENDPOINT` - `None`
125+
- `GRAPH_CONNECTION_URL` - `None` - The URL of the graph database endpoint.
128126
- Optional
129127
- `GRAPH_TYPE` - `None` - If not specified, multiple connections will be created for every available query language.
130-
- `USING_PROXY_SERVER` - `False`
131128
- `IAM` - `False`
132129
- `GRAPH_EXP_HTTPS_CONNECTION` - `True` - Controls whether Graph Explorer uses SSL or not
133130
- `PROXY_SERVER_HTTPS_CONNECTION` - `True` - Controls whether the server uses SSL or not
134131
- `GRAPH_EXP_FETCH_REQUEST_TIMEOUT` - `240000` - Controls the timeout for the fetch request. Measured in milliseconds (i.e. 240000 is 240 seconds or 4 minutes).
135132
- `GRAPH_EXP_NODE_EXPANSION_LIMIT` - `None` - Controls the limit for node counts and expansion queries.
136133
- Conditionally Required:
137-
- Required if `USING_PROXY_SERVER=True`
138-
- `GRAPH_CONNECTION_URL` - `None`
139-
- Required if `USING_PROXY_SERVER=True` and `IAM=True`
134+
- Required if `IAM=True`
140135
- `AWS_REGION` - `None`
141136
- `SERVICE_TYPE` - `neptune-db`, Set this as `neptune-db` for Neptune database or `neptune-graph` for Neptune Analytics.
142137

@@ -146,9 +141,7 @@ First, create a `config.json` file containing values for the connection attribut
146141

147142
```json
148143
{
149-
"PUBLIC_OR_PROXY_ENDPOINT": "https://public-endpoint",
150144
"GRAPH_CONNECTION_URL": "https://{your-cluster-id}.us-west-2.neptune.amazonaws.com:8182",
151-
"USING_PROXY_SERVER": true,
152145
"IAM": true,
153146
"SERVICE_TYPE": "neptune-db",
154147
"AWS_REGION": "us-west-2",
@@ -178,11 +171,9 @@ Provide the desired connection variables directly to the `docker run` command, a
178171
```bash
179172
docker run -p 80:80 -p 443:443 \
180173
--env HOST={hostname-or-ip-address} \
181-
--env PUBLIC_OR_PROXY_ENDPOINT=https://public-endpoint \
182-
--env GRAPH_TYPE=gremlin \
183-
--env USING_PROXY_SERVER=true \
184-
--env IAM=false \
185174
--env GRAPH_CONNECTION_URL=https://{your-cluster-id}.us-west-2.neptune.amazonaws.com:8182 \
175+
--env GRAPH_TYPE=gremlin \
176+
--env IAM=true \
186177
--env AWS_REGION=us-west-2 \
187178
--env SERVICE_TYPE=neptune-db \
188179
--env PROXY_SERVER_HTTPS_CONNECTION=true \

0 commit comments

Comments
 (0)