Docker
These instructions explain how to run Feldera on a single machine in a configuration suitable for demos, development, and testing. For production use, check out Feldera Enterprise.
Docker Quickstart
docker run --pull always -p 8080:8080 --tty --rm -it images.feldera.com/feldera/pipeline-manager:latest
Once you see the Feldera logo on your terminal, go ahead and open the Web Console
at http://127.0.0.1:8080 and try out one of our pre-packaged demo pipelines.
Optional: Docker Compose Quickstart
We also make a Docker Compose file available. It's useful if you want to use Feldera with auxiliary services included in the Docker Compose file like Redpanda, Prometheus and Grafana.
curl -L 'https://raw.githubusercontent.com/feldera/feldera/main/deploy/docker-compose.yml' | \
docker compose -f - up
You can enable specific services from the Docker Compose file as follows:
curl -L 'https://raw.githubusercontent.com/feldera/feldera/main/deploy/docker-compose.yml' | \
docker compose -f - up pipeline-manager redpanda
Similar to the previous section, once you see the Feldera logo on your
terminal, go ahead and open the Web Console at http://127.0.0.1:8080 and try
out one of our pre-packaged demo pipelines.
Serving Feldera under a URL subpath
By default the web console and the REST API are served from the root of the
origin: http://127.0.0.1:8080/ and http://127.0.0.1:8080/v0. Set
FELDERA_HTTP_BASE_PATH (or the --http-base-path flag) when a reverse proxy
or ingress mounts Feldera on a subpath instead, such as
https://example.com/feldera/:
docker run -p 8080:8080 -e FELDERA_HTTP_BASE_PATH=/feldera \
images.feldera.com/feldera/pipeline-manager:latest
The value must start with / and must not end with one; the default empty
value serves from the root. The console then lives at <base path>/, the API
at <base path>/v0, and the unauthenticated config API at <base path>/config.
The manager rewrites the embedded console bundle at startup, so one image
serves any subpath and no rebuild is needed.
The proxy must forward the prefix rather than strip it, and must pass WebSocket
upgrades through, because pipeline logs and performance charts stream over
WebSocket. With nginx, write proxy_pass without a URI part:
location /feldera/ {
# No path after the host: nginx forwards the original URI, prefix included.
proxy_pass http://feldera:8080;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
Caddy keeps the prefix with handle (handle_path would strip it) and
upgrades WebSockets on its own:
example.com {
handle /feldera/* {
reverse_proxy feldera:8080
}
}
Point API clients at the origin plus the prefix, for example fda --host https://example.com/feldera pipelines. Each client appends /v0 itself.
Health checks and robots.txt
With a base path set, /healthz and /robots.txt are available both:
at the origin root, where a probe that reaches the container directly
looks (a Kubernetes liveness probe, or a load balancer targeting the pod), and
under the prefix, which is the only path a proxy forwarding <base path>/*
can reach. Point a proxied health check at <base path>/healthz; no extra
proxy rule is needed.
Installing Docker
If you don't already have Docker or Docker Compose installed, follow one of these steps first:
-
On Mac OS, Windows, or Linux, install Docker Desktop. If you're on Apple Silicon, we recommend enabling Rosetta for x86/amd64 emulation.
-
On Linux only, first install Docker Engine and the Docker Compose plugin.
tipThe plugin implements Docker Compose v2, invoked as
docker compose. Feldera does not support the older Docker Compose v1, which was invoked withdocker-compose(note theversus-distinction).Then, follow the instructions to manage Docker as a non-root user.
tipIf you only want root to manage Docker, you can prefix the
docker composecommand below withsudo.
You also need curl and a web browser such as Chrome or Firefox.