You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docker/: move compose stack to top-level docker/ folder
Mirror the charts/ layout — docker/docker-compose.yml + docker/README.md
sit at the repo root rather than being scattered across modules/ and
docs/deployment/. docker/README.md takes over as the canonical Docker
Compose deployment guide; old docs/deployment/ folder removed.
- Rewrite docker/README.md as a charts/README.md-shaped guide (no .env
references, paths relative to new home).
- Update internal paths in docker/docker-compose.yml: schema.sql volume
becomes ../modules/track-service/sql/schema.sql; quickstart hint reads
cd docker.
- Update root README.md and AGENTS.md call sites (compose/cd hints,
directory tree).
- Also gitignore */keyvault-secret-provider.local.yaml so per-cluster
AKS overrides don't get tracked.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: AGENTS.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -53,7 +53,7 @@ Storage:
53
53
ClickHouse ← track-service read/write
54
54
```
55
55
56
-
The runtime services (web, track-service, run-active-test) are wired together in `modules/docker-compose.yml`. The local-mode connector is published to npm and is **not** part of `docker compose` — each end user runs it themselves on their own machine.
56
+
The runtime services (web, track-service, run-active-test) are wired together in `docker/docker-compose.yml`. The local-mode connector is published to npm and is **not** part of `docker compose` — each end user runs it themselves on their own machine.
57
57
58
58
---
59
59
@@ -304,10 +304,11 @@ npm run deploy
304
304
305
305
## 🐳 Docker Compose
306
306
307
-
One self-contained compose file. All values are hard-coded — no `.env`, no `${}` substitution. To customize anything (image tag, passwords, FeatBit URL, signing key, sandbox0 key), edit `modules/docker-compose.yml` directly.
307
+
One self-contained compose file. All values are hard-coded — no `.env`, no `${}` substitution. To customize anything (image tag, passwords, FeatBit URL, signing key, sandbox0 key), edit `docker/docker-compose.yml` directly.
308
308
309
309
```
310
-
modules/
310
+
docker/
311
+
README.md ← deployment guide
311
312
docker-compose.yml ← single source of truth: image tags, ports, env, volumes, the x-signing-key anchor
312
313
```
313
314
@@ -327,7 +328,7 @@ The `Local Claude Code` chat path is **not** a docker service — users run `npx
327
328
### Start / Stop
328
329
329
330
```bash
330
-
cdmodules
331
+
cddocker
331
332
332
333
# 1. Replace REPLACE_ME in the x-signing-key anchor at the top of docker-compose.yml
Copy file name to clipboardExpand all lines: README.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ The FeatBit Release Decision Agent is built **on top of** the FeatBit feature-fl
25
25
26
26
**SaaS path** — sign up at **[featbit.co](https://featbit.co)** and you're done; FeatBit + RDA are bundled.
27
27
28
-
**Self-host path** — install FeatBit first from **[github.com/featbit/featbit](https://github.com/featbit/featbit)** (Docker Compose or Helm). Replace `FEATBIT_API_URL` on the `web` block in `modules/docker-compose.yml` (or set `web.featbit.apiUrl` in Helm values) to point RDA's web at your FeatBit — runtime env, no rebuild required.
28
+
**Self-host path** — install FeatBit first from **[github.com/featbit/featbit](https://github.com/featbit/featbit)** (Docker Compose or Helm). Replace `FEATBIT_API_URL` on the `web` block in `docker/docker-compose.yml` (or set `web.featbit.apiUrl` in Helm values) to point RDA's web at your FeatBit — runtime env, no rebuild required.
29
29
30
30
PostgreSQL and ClickHouse are bundled into the Docker Compose stack and bootstrap themselves on first boot — you don't have to provision them. You can override the connection strings to point at your own databases instead; see the deployment guides.
31
31
@@ -37,7 +37,7 @@ The fastest path is the hosted version: sign up at **[featbit.co](https://featbi
37
37
38
38
#### 2. Self-host with Docker Compose
39
39
40
-
Full step-by-step guide: **[`docs/deployment/docker.md`](docs/deployment/docker.md)**.
40
+
Full step-by-step guide: **[`docker/README.md`](docker/README.md)**.
41
41
42
42
#### 3. Self-host with Helm on Kubernetes
43
43
@@ -118,7 +118,7 @@ Every experiment carries a `dataSourceMode`. The default (`featbit-managed`) pul
118
118
119
119
-**[`AGENTS.md`](AGENTS.md)** — full service map, environment variables, troubleshooting, and the canonical metric storage contract.
120
120
-**[`WHITE_PAPER.md`](WHITE_PAPER.md)** — product thesis and market positioning.
121
-
-**[`docs/deployment/docker.md`](docs/deployment/docker.md)** — Docker Compose deployment, end to end.
121
+
-**[`docker/README.md`](docker/README.md)** — Docker Compose deployment, end to end.
Copy file name to clipboardExpand all lines: docker/README.md
+15-13Lines changed: 15 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,25 +1,27 @@
1
-
# Docker Compose deployment
1
+
# FeatBit RDA Docker Compose stack
2
2
3
-
The compose stack ships everything in one command — web, track-service, PostgreSQL, ClickHouse. Both database schemas bootstrap themselves on first boot, so there is nothing to apply by hand.
3
+
Self-contained Docker Compose stack — `web`, `track-service`, PostgreSQL, ClickHouse — for single-host deployments and local trials. Both database schemas bootstrap themselves on first boot, so there is nothing to apply by hand.
4
+
5
+
---
4
6
5
7
## What ships
6
8
7
9
| Service | Image | Port | Notes |
8
10
|---|---|---|---|
9
-
|`web`|`featbit/featbit-rda-web:${VERSION}`|`3000`| Runs `prisma migrate deploy` against `DATABASE_URL` on every container start. |
|`clickhouse`|`clickhouse/clickhouse-server:24-alpine`|`8123`, `9000`| Auto-applies `track-service/sql/schema.sql` from `/docker-entrypoint-initdb.d/` on first boot. Persistent volume `ch_data`. |
14
+
|`clickhouse`|`clickhouse/clickhouse-server:24-alpine`|`8123`, `9000`| Auto-applies `modules/track-service/sql/schema.sql` from `/docker-entrypoint-initdb.d/` on first boot. Persistent volume `ch_data`. |
13
15
14
-
External dependency that **isn't** in the stack: a running FeatBit instance ([`github.com/featbit/featbit`](https://github.com/featbit/featbit)). Defaults to FeatBit SaaS (`https://app-api-experimentation.featbit.co`); self-hosters set`FEATBIT_API_URL`in `.env`.
16
+
External dependency that **isn't** in the stack: a running FeatBit instance ([`github.com/featbit/featbit`](https://github.com/featbit/featbit)). Defaults to FeatBit SaaS (`https://app-api-experimentation.featbit.co`); self-hosters replace`FEATBIT_API_URL`on the `web` block.
15
17
16
18
---
17
19
18
20
## Quickstart
19
21
20
22
The compose file is self-contained — no `.env`, no variable substitution. Two steps:
21
23
22
-
**1. Set the cross-service signing key.** Open `modules/docker-compose.yml` and replace the `REPLACE_ME` placeholder in the `x-signing-key` anchor near the top with a long random string. Both `web` and `track-service` reference the anchor, so you only edit one place.
24
+
**1. Set the cross-service signing key.** Open `docker/docker-compose.yml` and replace the `REPLACE_ME` placeholder in the `x-signing-key` anchor near the top with a long random string. Both `web` and `track-service` reference the anchor, so you only edit one place.
23
25
24
26
Generate a key:
25
27
@@ -36,7 +38,7 @@ openssl rand -base64 48
36
38
**2. Bring the stack up.**
37
39
38
40
```bash
39
-
cdmodules
41
+
cddocker
40
42
docker compose up -d
41
43
```
42
44
@@ -50,7 +52,7 @@ RDA delegates authentication to **FeatBit** — there is no separate user databa
50
52
51
53
1. Make sure you have a FeatBit account on either:
52
54
-[**featbit.co**](https://featbit.co) (FeatBit SaaS — default), or
53
-
- your **self-hosted FeatBit instance** ([`github.com/featbit/featbit`](https://github.com/featbit/featbit)). Set`FEATBIT_API_URL` in `.env` and re-`up -d` web before logging in.
55
+
- your **self-hosted FeatBit instance** ([`github.com/featbit/featbit`](https://github.com/featbit/featbit)). Replace`FEATBIT_API_URL`on the `web` block in `docker-compose.yml` and re-`up -d` web before logging in.
54
56
2. On the login page, enter your FeatBit email + password. RDA forwards the credentials to FeatBit, gets back a JWT, and creates a session.
55
57
56
58
If FeatBit is unreachable, login fails — check the [troubleshooting](#troubleshooting) row for *Browser login redirects in a loop*.
@@ -59,7 +61,7 @@ If FeatBit is unreachable, login fails — check the [troubleshooting](#troubles
59
61
60
62
## Configuration
61
63
62
-
All knobs live in `modules/docker-compose.yml`. Edit the file directly — there is no `.env` layer. The fields you'll actually touch:
64
+
All knobs live in `docker-compose.yml`. Edit the file directly — there is no `.env` layer. The fields you'll actually touch:
63
65
64
66
| Field (in compose) | Default | What it does |
65
67
|---|---|---|
@@ -89,7 +91,7 @@ docker compose up -d web track-service postgres
89
91
Two things to know:
90
92
91
93
-**External PG**: the role in `DATABASE_URL` needs `CREATE` / `ALTER` privileges (web runs `prisma migrate deploy` on every start).
92
-
-**External CH**: apply the schema once before first run — `clickhouse-client --queries-file modules/track-service/sql/schema.sql` (idempotent).
94
+
-**External CH**: apply the schema once before first run — `clickhouse-client --queries-file modules/track-service/sql/schema.sql` (idempotent; path is repo-root-relative).
93
95
94
96
### Web only (no track-service / ClickHouse)
95
97
@@ -103,7 +105,7 @@ docker compose up -d web postgres
103
105
104
106
## Going to production
105
107
106
-
Compose is fine for a single host. For HA, autoscaling, ingress + TLS, secret projection from Key Vault, and pod disruption budgets, use the Helm chart instead — see [`charts/README.md`](../../charts/README.md).
108
+
Compose is fine for a single host. For HA, autoscaling, ingress + TLS, secret projection from Key Vault, and pod disruption budgets, use the Helm chart instead — see [`../charts/README.md`](../charts/README.md).
107
109
108
110
---
109
111
@@ -119,4 +121,4 @@ Compose is fine for a single host. For HA, autoscaling, ingress + TLS, secret pr
119
121
| Chat panel returns `401: missing authorization header`|`SANDBOX0_API_KEY` is `""` in `docker-compose.yml`. |
120
122
|`clickhouse` container doesn't apply `schema.sql`| The init scripts only run when the data dir is empty. Wipe and re-init: `docker compose down -v` then `docker compose up -d`|
121
123
122
-
For the full service map and env-var reference, see [`AGENTS.md`](../../AGENTS.md).
124
+
For the full service map and env-var reference, see [`../AGENTS.md`](../AGENTS.md).
0 commit comments