Skip to content

Run in Docker

The headless engine (src/node/service.ts) on a vault folder, for a machine without Obsidian: a VPS, a NAS, a Linux server.

Terminal window
npm run build:service
DATANOTES_VAULT=/path/to/vault docker compose -f deploy/docker/docker-compose.yml up -d --build
  • Settings: /config/service.json (volume datanotes-config). It is created on first start with port 27150 and a random token. See the settings (semantic search, logs, …).
  • Token: docker compose exec datanotes cat /config/service.json. It gives full access: keep it for administration and create an app token for each agent or device.
  • Apps (datanotes-planning, datanotes-agent, …) run as their own containers or processes, register with POST /datanotes/apps/create/ and reach the engine over HTTP (see the main README).
  • Files: changes are picked up by polling (DATANOTES_WATCH=poll, every 3 s). Bind mounts from Windows and macOS hosts deliver no file events. On a Linux host, DATANOTES_WATCH=events reacts immediately.
  • One engine per vault: the engine holds .datanotes/engine.lock in the vault; a second engine refuses to start on a folder a live engine holds.
  • Permissions: the container runs as the user engine: the vault folder must be writable by it (the engine writes notes and .datanotes/), e.g. set user: in the compose file to the owner of the folder, or chown it.
  • Port: the compose file publishes it on 127.0.0.1. Put a reverse proxy or a tunnel in front to reach it from outside.
  • Agents: run the MCP server next to it, npx -y datanotes-mcp serve --engine http://127.0.0.1:27150 (see Connect agents).