diff --git a/CHANGELOG.md b/CHANGELOG.md index 55979f5e..73d5b155 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Fixed +- `docker-compose.yml` now uses the YAML list (exec) form for the SurrealDB `command`, so `SURREAL_USER` / `SURREAL_PASSWORD` values containing spaces are passed as single arguments instead of being split; the mirrored snippets in the installation docs and README (which had drifted — no credential interpolation, SurrealDB port published on all interfaces) are back in sync with the shipped file (#1093) - zh-CN and zh-TW podcast toast descriptions (speaker/episode profile created/updated/deleted/duplicated) now include the profile name via the `{{name}}` placeholder, matching the other 12 locales (#1084) - Docker images now force the Next.js frontend to bind to `0.0.0.0` in the supervisord command itself, so container runtimes that inject `HOSTNAME` (e.g. Podman pods, where it resolves to `127.0.1.1`) can no longer make the UI unreachable. The `HOSTNAME` variable is no longer honored as a frontend bind override — set the new `FRONTEND_BIND_HOST` variable instead (#994) diff --git a/README.md b/README.md index b19893fe..4fe9418d 100644 --- a/README.md +++ b/README.md @@ -114,26 +114,44 @@ Copy this into a new file called `docker-compose.yml`: services: surrealdb: image: surrealdb/surrealdb:v2 - command: start --log info --user root --pass root rocksdb:/mydata/mydatabase.db - user: root + # Credentials default to root:root for a zero-config local setup. Before + # exposing this instance to a network, set SURREAL_USER / SURREAL_PASSWORD + # in a .env file (see .env.example) — they are applied here and to the + # open_notebook service below, so the two always stay in sync. + # List (exec) form so each interpolated value stays a single argument — + # a password containing spaces would otherwise be split into several. + command: ["start", "--log", "info", "--user", "${SURREAL_USER:-root}", "--pass", "${SURREAL_PASSWORD:-root}", "rocksdb:/mydata/mydatabase.db"] + user: root # Required for bind mounts on Linux ports: - # Localhost only — the database uses default credentials, so never - # publish this port on 0.0.0.0 + # Bound to localhost only: the open_notebook service reaches this over + # the internal compose network regardless, so the host port is purely + # for local debugging (e.g. Surrealist, `surreal sql`). Exposing this + # on 0.0.0.0 would let anyone who can reach the host connect with the + # default root:root credentials. - "127.0.0.1:8000:8000" volumes: - ./surreal_data:/mydata + environment: + - SURREAL_EXPERIMENTAL_GRAPHQL=true restart: always + pull_policy: always open_notebook: image: lfnovo/open_notebook:v1-latest ports: - - "8502:8502" - - "5055:5055" + - "8502:8502" # Web UI + - "5055:5055" # REST API environment: + # REQUIRED: Change this to your own secret string + # This encrypts your API keys in the database - OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string + + # Database connection. SURREAL_USER / SURREAL_PASSWORD default to root:root + # for local use; override them in a .env file before exposing the instance + # (the same values configure the surrealdb service above). - SURREAL_URL=ws://surrealdb:8000/rpc - - SURREAL_USER=root - - SURREAL_PASSWORD=root + - SURREAL_USER=${SURREAL_USER:-root} + - SURREAL_PASSWORD=${SURREAL_PASSWORD:-root} - SURREAL_NAMESPACE=open_notebook - SURREAL_DATABASE=open_notebook volumes: @@ -141,6 +159,7 @@ services: depends_on: - surrealdb restart: always + pull_policy: always ``` ### Step 2: Set Your Encryption Key diff --git a/docker-compose.yml b/docker-compose.yml index a6f8841a..894c8a57 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,9 @@ services: # exposing this instance to a network, set SURREAL_USER / SURREAL_PASSWORD # in a .env file (see .env.example) — they are applied here and to the # open_notebook service below, so the two always stay in sync. - command: start --log info --user ${SURREAL_USER:-root} --pass ${SURREAL_PASSWORD:-root} rocksdb:/mydata/mydatabase.db + # List (exec) form so each interpolated value stays a single argument — + # a password containing spaces would otherwise be split into several. + command: ["start", "--log", "info", "--user", "${SURREAL_USER:-root}", "--pass", "${SURREAL_PASSWORD:-root}", "rocksdb:/mydata/mydatabase.db"] user: root # Required for bind mounts on Linux ports: # Bound to localhost only: the open_notebook service reaches this over diff --git a/docs/1-INSTALLATION/docker-compose.md b/docs/1-INSTALLATION/docker-compose.md index 3f12b281..e600aaae 100644 --- a/docs/1-INSTALLATION/docker-compose.md +++ b/docs/1-INSTALLATION/docker-compose.md @@ -33,17 +33,18 @@ services: image: surrealdb/surrealdb:v2 # Credentials default to root:root for a zero-config local setup. Before # exposing this instance to a network, set SURREAL_USER / SURREAL_PASSWORD - # in a .env file — they are applied here and to the open_notebook service - # below, so the two always stay in sync. - command: start --log info --user ${SURREAL_USER:-root} --pass ${SURREAL_PASSWORD:-root} rocksdb:/mydata/mydatabase.db + # in a .env file (see .env.example) — they are applied here and to the + # open_notebook service below, so the two always stay in sync. + # List (exec) form so each interpolated value stays a single argument — + # a password containing spaces would otherwise be split into several. + command: ["start", "--log", "info", "--user", "${SURREAL_USER:-root}", "--pass", "${SURREAL_PASSWORD:-root}", "rocksdb:/mydata/mydatabase.db"] user: root # Required for bind mounts on Linux ports: - # Localhost only: Open Notebook reaches the database over the internal - # compose network, so this host port exists purely for local debugging. - # The database uses default root credentials, so never publish it on - # 0.0.0.0. To reach it from another machine, use the opt-in override in - # docker-compose.override.yml.example (repo root) behind a firewall or - # SSH tunnel, with real SURREAL_USER / SURREAL_PASSWORD set. + # Bound to localhost only: the open_notebook service reaches this over + # the internal compose network regardless, so the host port is purely + # for local debugging (e.g. Surrealist, `surreal sql`). Exposing this + # on 0.0.0.0 would let anyone who can reach the host connect with the + # default root:root credentials. - "127.0.0.1:8000:8000" volumes: - ./surreal_data:/mydata @@ -59,11 +60,12 @@ services: - "5055:5055" # REST API environment: # REQUIRED: Change this to your own secret string + # This encrypts your API keys in the database - OPEN_NOTEBOOK_ENCRYPTION_KEY=change-me-to-a-secret-string - # Database connection. SURREAL_USER / SURREAL_PASSWORD default to - # root:root for local use; override them in a .env file before exposing - # the instance (the same values configure the surrealdb service above). + # Database connection. SURREAL_USER / SURREAL_PASSWORD default to root:root + # for local use; override them in a .env file before exposing the instance + # (the same values configure the surrealdb service above). - SURREAL_URL=ws://surrealdb:8000/rpc - SURREAL_USER=${SURREAL_USER:-root} - SURREAL_PASSWORD=${SURREAL_PASSWORD:-root} @@ -79,6 +81,7 @@ services: **Edit the file:** - Replace `change-me-to-a-secret-string` with your own secret (any string works, e.g., `my-super-secret-key-123`) +- (Optional) To use database credentials other than the default `root:root`, create a `.env` file next to `docker-compose.yml` with `SURREAL_USER=...` and `SURREAL_PASSWORD=...` — both services pick them up automatically ([.env.example](https://github.com/lfnovo/open-notebook/blob/main/.env.example) shows the full format) ---