Quickstart

Stand up the full Eddytor stack on one host, bootstrap the first admin, and sign in.

One command pulls the prebuilt public images, scaffolds an install directory, starts the stack, and prompts you to create the first admin.

Good to know

This is the single-host (Docker Compose) path - ideal for evaluation and small deployments. For production topologies and Kubernetes, see Self-host.

Prerequisites

  • A host with Docker and the Docker Compose plugin.
  • Outbound network access to pull images from ghcr.io/nordalf.

Install in one command

curl -fsSL https://get.eddytor.com | sh

This scaffolds ~/eddytor/:

~/eddytor/
├── docker-compose.yml   # replaced on upgrade - don't edit
├── config.toml          # non-secret settings (public URL, CORS, …) - edit this
├── HOSTING.md           # the self-hosting guide
└── .env                 # secrets + bundled-stack wiring (generated) - back up

It generates the required secrets into .env (including bundled object-store credentials), starts Compose, and offers the Web UI.

Heads up

Back up .env. It holds EDDYTOR_ENCRYPTION_KEY - lose it and every stored secret becomes unrecoverable.

Verify it's up

docker compose ps   # eddytor-server should show (healthy)

http://localhost:8080 is the REST + gRPC API, not a web page. If you enabled the Web UI, it serves at http://localhost:3000.

Bootstrap the first admin

There is no public setup endpoint - the first admin is provisioned inside the server container. The installer prompts you; by hand:

docker compose exec eddytor-server eddytoradm setup \
  --email you@example.com --org "Default"
# ✓ Admin you@example.com created in organisation 'Default'.

Good to know

eddytoradm setup is idempotent - once an admin exists it's a no-op.

On Kubernetes it runs in the server pod via kubectl exec - the chart's install NOTES print the command.

Sign in

Sign-in is magic-link / device-code. Point the CLI at your server and log in:

eddytor config set-api-url    http://localhost:8080
eddytor config set-flight-url http://localhost:8082   # Flight SQL port for `eddytor query`
eddytor login                                         # device-code flow; opens your browser
eddytor get tables

Heads up

With no SMTP configured (the default), the magic link is written to the server logs instead of emailed - fine for a solo operator, but to let teammates sign in you must configure SMTP.
docker compose logs eddytor-server | grep -i 'sign in to eddytor' -A2

Headless access (API key)

For scripting - and for eddytor query - mint a non-expiring API key inside the container, then point the CLI at it:

docker compose exec eddytor-server eddytoradm create-api-key --email you@example.com
# Admin API key for you@example.com (shown once): edd_live_…
eddytor config set-key edd_live_…

Heads up

Use the API key, not eddytor login, for eddytor query - the why and the failure signature are on Flight SQL endpoint.

A lost key is recoverable - the in-container tools are re-runnable; see Can't sign in / lost API key.

Driving it yourself

Every installer step is documented for manual use in Docker Compose (single host).

Upgrades

Bump EDDYTOR_VERSION in .env and re-pull - full procedure in Upgrades & migrations.

On this page