Deploying Conduit
The deploy/ directory in the Conduit repository has
worked examples for running Conduit outside a laptop. They are examples, not supported products: Conduit does not
ship or version a systemd package, an ECS module or a Nomad pack. Read them, then adapt them. Only the Docker Compose
quickstart is run in CI.
Docker Compose quickstart
git clone https://github.com/ConduitIO/conduit.git
cd conduit/deploy/docker-compose
docker compose up -d --wait
docker compose exec conduit tail -n 3 /data/records.ndjson
docker compose down # keeps the state volume; add -v to delete it
This starts a pinned, signed release image (ghcr.io/conduitio/conduit:v0.20.0) with a pipeline already running: the
built-in generator writes records to the built-in file destination. Conduit's state is on a named volume, so a
restart resumes the pipeline from its saved position. The API and web UI are on http://localhost:8080, published on
loopback only. Replace pipelines/quickstart.yaml with your own pipeline to go further.
Other examples
| Example | Notes |
|---|---|
| systemd | A sandboxed unit with its state in StateDirectory. |
| ECS | A Fargate task definition. State is in Postgres, since container disk is ephemeral. |
| Nomad | A service job with a readiness check and the allocation's sticky disk for state. |
What every example gets right
- Pin the image by version and verify its signature.
Do not run
latest. - Stop timeout above 30 seconds. On
SIGTERMConduit drains in-flight records and saves its position, and gives up after 30 seconds. The examples set 45 seconds so the orchestrator does notSIGKILLa drain in progress. ASIGKILLloses nothing already acknowledged (records replay from the last saved position), but it is the fallback. - Keep state on durable storage. Pipeline positions live in Conduit's database. On an ephemeral filesystem a restart replays from the start of the source.
- Probe
/healthzfor liveness and/readyzfor readiness. See health and readiness. - Do not expose the API directly. The HTTP and gRPC APIs have no authentication. Bind to loopback or put an authenticating proxy in front.