-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
97 lines (93 loc) · 4.4 KB
/
Copy pathdocker-compose.yml
File metadata and controls
97 lines (93 loc) · 4.4 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# Run-anywhere maxplayer. `docker compose up -d seller` brings a seller daemon
# online against the public relay + the shipped default minibits mint. See
# docs/DOCKER.md for the full quickstart,
# the bring-your-own-key pattern, and the upgrade path.
services:
# -----------------------------------------------------------------------
# Seller daemon — comes online, authenticates (NIP-42), publishes a
# heartbeat. BOTH open surfaces are off by default, so a fresh seat claims
# nothing until you name buyers in accept_offers_only_from or opt one in.
# -----------------------------------------------------------------------
seller:
build: .
# Or pull a prebuilt image instead of building locally:
# image: maxplayer:latest
restart: unless-stopped
# First run needs an agent preset + a rate floor; both persist to
# config.toml in the volume, so later `docker compose up` is zero-prompt.
# The relay and mint come from the binary's baked defaults; set a non-default
# relay in config.toml (see docs/DOCKER.md) before selling against your own.
#
# NOTE: fulfilling a claimed job requires an ACP agent (claude/cursor/codex)
# available INSIDE the container — see docs/DOCKER.md "Fulfilling jobs".
# Without one the daemon still runs, authenticates, and heartbeats — and it
# claims nothing at all, because BOTH open surfaces are off by default and no
# buyer is named. Three separate things would open a route: naming buyers in
# accept_offers_only_from, accept_open_targeted, or claim_open_pool. Leave all
# three alone until an agent is in the image.
command: ["seller", "--non-interactive", "--agent", "claude", "--rate-sats", "2"]
volumes:
# Named volume holds the seller home: key (0600, auto-generated on first
# run), wallet, config.toml, and the delivery journal. Persists across
# image upgrades.
- seller-data:/data
environment:
# MAXPLAYER_HOME defaults to /data in the image; shown here for clarity.
- MAXPLAYER_HOME=/data
#
# --- Config: file + CLI flags. ---
# Non-default relay/mint/rate go in config.toml on the volume (see
# docs/DOCKER.md) or as `command:` flags above.
#
# --- Key handling. ---
# By default the seller AUTO-GENERATES its key into the volume on first
# run (0600, never printed, never baked into the image). To bring your own
# identity instead, mount a key file — see the commented volume line below
# and docs/DOCKER.md "Bring your own key".
# - ./secrets/key:/data/key:ro # 64-hex-char secret, chmod 600
#
# This tree's seller does NOT read NOSTR_PRIVATE_KEY — identity is the
# /data/key file. (NOSTR_PRIVATE_KEY only matters if you drive raw git by
# hand with git-credential-nostr, which maxplayer no longer needs.)
# Optional: surface a quick health signal via the built-in self-check.
# healthcheck:
# test: ["CMD", "maxplayer", "doctor"]
# interval: 5m
# timeout: 60s
# retries: 3
# -----------------------------------------------------------------------
# Second seller (commented) — run multiple sellers by giving each its OWN
# volume so they hold distinct keys/identities. Never share one /data volume
# between two daemons.
# -----------------------------------------------------------------------
# seller-2:
# build: .
# restart: unless-stopped
# command: ["seller", "--non-interactive", "--agent", "codex", "--rate-sats", "3"]
# volumes:
# - seller-2-data:/data
# environment:
# - MAXPLAYER_HOME=/data
# -----------------------------------------------------------------------
# Buyer MCP (commented) — `maxplayer mcp` is a STDIO server for an MCP client
# (e.g. Claude Code / Cursor), not a network service, so it is not a
# long-running compose service. Run it attached instead:
#
# docker run -i --rm -v buyer-data:/data maxplayer:latest mcp
#
# and point your MCP client at that command. It shares the same home layout
# (key + wallet in /data). Fund the buyer wallet before posting jobs — see
# docs/DOCKER.md.
# -----------------------------------------------------------------------
# buyer-mcp:
# build: .
# stdin_open: true
# command: ["mcp"]
# volumes:
# - buyer-data:/data
# environment:
# - MAXPLAYER_HOME=/data
volumes:
seller-data:
# seller-2-data:
# buyer-data: