docker/docker-compose.yml runs the ingest server in a container against
the local backend by default. It needs no Sia node, no wallet, and
nothing beyond Docker itself.
The local-backend path
Every command here is a plaindocker compose invocation, identical on
macOS, Linux, and Windows, except for step 4’s curl, which needs a
different form on Windows.
1. Start the ingest server (builds the image on first run).
config.toml
(written to ./docker/config, so you can inspect/edit it).
-w (or
.StatusCode on Windows) is what actually prints something (a 200 on its
own line).
- macOS / Linux
- Windows
obsidianlog-data named
volume. They survive docker compose restart/down (without -v), so you
only run step 2 once. The key lands in that volume rather than a host
keychain because a bare container has no keychain daemon to talk to. The
same file-based fallback described in
Security Model kicks in
automatically. To ship real logs instead of the curl smoke test,
see Sending Logs with Vector.
Optional: hosted Sia storage
Point the container at the hosted sia.storage indexer instead of local disk, with no self-hostedindexd to run.
Replace step 2 of the local-backend path above with an interactive
setup instead, so you can choose Sia and complete the browser approval:
sia.storage
default at the indexer URL prompt. The recovery-phrase and
browser-approval flow works the same as outside Docker, see
Connecting to Sia for what to expect. Then
continue with steps 3–6 above unchanged, restarting the container picks
up the generated key and Sia app key together.
Optional: self-hosted indexd
The sia Compose profile adds indexd + the PostgreSQL database it
requires, matching indexd’s own official example. It’s off by default.
docker compose up alone never starts it:
indexd itself needs its own one-time setup first (indexd’s own documented
flow, not an ObsidianLog step):
obsidianlog init interactively, choose the Sia backend, and enter
http://localhost:9982 at the indexer URL prompt in place of the
https://sia.storage default. Onboarding happens inline, no separate
command needed. See
Bring Your Own Indexer for when
this is the right choice.
