Repository navigation
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
80 lines (73 loc) · 3.32 KB
/
Copy pathdocker-compose.yml
File metadata and controls
80 lines (73 loc) · 3.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# Warren home-server compose file.
#
# `docker compose up -d` on a fresh clone PULLS the published control-plane
# image from ghcr.io (warren-26be) — it does not build from source. Pin a
# release with `WARREN_IMAGE_TAG=v0.10.4` (or the moving minor, `0.10`) in
# .env or the environment; the default `latest` tracks main.
#
# It boots a single warren container with:
# - the four bwrap-friendly security flags (docs/design/runtime-and-supervisor.md / mx-94901b /
# mx-c085ba). They relax the outer container so warren's own bwrap
# userns sandboxes can come up (warren runs bwrap itself since the
# burrow daemon was internalized, warren-9a26).
# - a named volume mounted at /data for warren.db (SQLite default)
# and cloned project repos. When WARREN_DB_URL points at an external
# Postgres (R-13, shipped 2026-05-14), warren.db is unused but the
# volume still holds project clones, so the mount stays in place
# either way.
# - the runtime env loaded from .env (`cp .env.example .env` first).
#
# The supervisor inside the container spawns `warren` as its single child
# and forwards signals to it — there is no burrow service anywhere in this
# topology (warren-9a26), so no BURROW_API_TOKEN / WARREN_BURROW_TOKEN /
# WARREN_BURROW_SOCKET belongs in .env. See
# docs/design/runtime-and-supervisor.md for the supervisor contract and src/supervisor/main.ts for
# the implementation.
services:
warren:
image: ghcr.io/jayminwest/warren:${WARREN_IMAGE_TAG:-latest}
# Contributors who want to run THIS checkout instead of the published
# image: uncomment the build block and `docker compose up -d --build`.
# Compose then builds from the local Dockerfile and tags the result as
# the `image:` above, so nothing else in this file has to change.
# build:
# context: .
# dockerfile: Dockerfile
container_name: warren
restart: unless-stopped
# Required for nested bwrap (docs/design/runtime-and-supervisor.md, mx-94901b/mx-c085ba). Remove
# any one of these and warren's in-process sandbox engine cannot bring
# up a bwrap sandbox inside the container.
security_opt:
- apparmor=unconfined
- seccomp=unconfined
- systempaths=unconfined
cap_add:
- SYS_ADMIN
ports:
- "${WARREN_HOST_PORT:-8080}:8080"
# Dedicated path-mode preview origin (warren-3f8a): previews are
# served from WARREN_PREVIEW_PORT (default: bind port + 1) so
# agent-authored preview code cannot read the operator token off
# the warren UI origin. Publish it next to the API port.
- "${WARREN_HOST_PREVIEW_PORT:-8081}:8081"
# Cap and rotate container logs (warren-26c2 / pl-f700 step 4) so the
# per-request access log can't fill the host disk. json-file is the
# default driver; the options bound each file to 10MB and keep 5
# rotated files (50MB ceiling per container).
logging:
driver: json-file
options:
max-size: "10m"
max-file: "5"
# Long-form so a missing .env on a fresh clone is not a hard error
# (warren-9cda). Compose concatenates env_file across base+overrides,
# so the base entry itself must tolerate the file being absent — an
# override cannot suppress it.
env_file:
- path: .env
required: false
volumes:
- warren_data:/data
volumes:
warren_data: