Skip to content

Running the stack

Coolify runs the stack. Each service is its own Coolify resource with its own compose file under /data/coolify/services/<uuid>/, built from a GHCR image.

There is no longer a single compose.yml you drive by hand. The old dataland-infrastructure/compose.yml still exists in the repo as a record of the pre-Coolify layout, but nothing running on Spark reads it. Commands against it will look like they worked and change nothing.

For the deploy pipeline itself — how a push to main becomes a running container — see Deploy.

Finding a container

Coolify appends a UUID to every container name, so docker exec dataland-agent fails. The old names survive as network aliases, so service-to-service URLs such as http://dataland-rag:4143 still resolve unchanged.

scripts/dl --list              # every container on dataland-network, with status
scripts/dl --name agent        # -> agent-5qwdlo0cynw03kzaat5n1vpc
scripts/dl agent uv run alembic upgrade head
scripts/dl redis redis-cli PING

Day to day

You want to Do this
See what is running scripts/dl --list
Follow one service's logs Coolify → resource → Logs, or docker logs -f "$(scripts/dl --name agent)"
Restart a service Coolify → resource → Restart (or the API)
Ship a change Push to main — see Deploy
Roll back Coolify → Deployments → pick a previous sha-<commit>
Change a value Coolify → resource → Environment Variables. The .env files on disk are legacy; no container reads them.

Checks worth running

bash scripts/check-env-drift.sh   # cross-repo .env.example drift
bash scripts/smoke.sh             # read-only smoke suite against the running stack
bash backup-webui.sh              # knowledge catalog + image backup (repo root, not scripts/)
bash scripts/install-boot.sh      # host boot units, so the stack comes back after a reboot

The simulator is dev/test only and is not part of production; museum-api bridges the real RDC redis there. See Deploy → Simulator.

bash scripts/start-simulator.sh   # needs SIM_TICKET_ID
bash scripts/stop-simulator.sh

Teardown is a deliberate act

There is no one-command teardown, and that is on purpose. reset-stack.sh is gone. Deleting a volume in Coolify drops the data behind it — Postgres, Qdrant, Redis, and the auth signing key are each a separate, deliberate step through Coolify → resource → Storages, followed by a redeploy.

Old habits that now fail quietly

docker compose up inside a service repo does nothing useful: the per-repo compose files were removed because they drifted from the real stack and silently created a fake dataland-network when started first. The loud "no configuration file" error is the intended outcome.

For code-level work without a container, run uv run inside the service repo against its repo-local .env.