Skip to content

Instantly share code, notes, and snippets.

@haferman
Created August 20, 2025 16:47
Show Gist options
  • Select an option

  • Save haferman/c6863605fad073ad86c44dbeb8873bcf to your computer and use it in GitHub Desktop.

Select an option

Save haferman/c6863605fad073ad86c44dbeb8873bcf to your computer and use it in GitHub Desktop.
boundless compose.yml
name: bento
# Anchors:
x-base-environment: &base-environment
DATABASE_URL: postgresql://${POSTGRES_USER:-worker}:${POSTGRES_PASSWORD:-password}@${POSTGRES_HOST:-postgres}:${POSTGRES_PORT:-5432}/${POSTGRES_DB:-taskdb}
REDIS_URL: redis://${REDIS_HOST:-redis}:6379
S3_URL: http://${MINIO_HOST:-minio}:9000
S3_BUCKET: ${MINIO_BUCKET:-workflow}
S3_ACCESS_KEY: ${MINIO_ROOT_USER:-admin}
S3_SECRET_KEY: ${MINIO_ROOT_PASS:-password}
RUST_LOG: ${RUST_LOG:-info}
RUST_BACKTRACE: 1
x-agent-common: &agent-common
image: risczero/risc0-bento-agent:stable@sha256:c6fcc92686a5d4b20da963ebba3045f09a64695c9ba9a9aa984dd98b5ddbd6f9
restart: always
runtime: nvidia
depends_on:
- postgres
- redis
- minio
environment:
<<: *base-environment
x-exec-agent-common: &exec-agent-common
<<: *agent-common
mem_limit: 4G
cpus: 3
environment:
<<: *base-environment
RISC0_KECCAK_PO2: ${RISC0_KECCAK_PO2:-17}
entrypoint: /app/agent -t exec --segment-po2 ${SEGMENT_SIZE:-21}
x-broker-environment: &broker-environment
RUST_LOG: ${RUST_LOG:-info,broker=debug,boundless_market=debug}
# RUST_BACKTRACE: 1
PRIVATE_KEY: ${PRIVATE_KEY}
RPC_URL: ${RPC_URL}
BOUNDLESS_MARKET_ADDRESS:
SET_VERIFIER_ADDRESS:
ORDER_STREAM_URL:
# TODO these env vars are temporary for handling cancellations. These should be removed when
# updated.
POSTGRES_HOST:
POSTGRES_DB:
POSTGRES_PORT:
POSTGRES_USER:
POSTGRES_PASS:
x-broker-common: &broker-common
restart: always
depends_on:
- rest_api
- gpu_prove_agent0
- exec_agent0
- exec_agent1
- aux_agent
- snark_agent
- redis
- postgres
profiles: [broker]
build:
context: .
dockerfile: dockerfiles/broker.dockerfile
mem_limit: 2G
cpus: 2
stop_grace_period: 3h
network_mode: host
services:
redis:
hostname: ${REDIS_HOST:-redis}
image: ${REDIS_IMG:-redis:7.2.5-alpine3.19}
restart: always
ports:
- 6379:6379
volumes:
- redis-data:/data
postgres:
hostname: ${POSTGRES_HOST:-postgres}
image: ${POSTGRES_IMG:-postgres:16.3-bullseye}
restart: always
environment:
POSTGRES_DB: ${POSTGRES_DB:-taskdb}
POSTGRES_USER: ${POSTGRES_USER:-worker}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-password}
expose:
- '${POSTGRES_PORT:-5432}'
ports:
- '${POSTGRES_PORT:-5432}:${POSTGRES_PORT:-5432}'
volumes:
- postgres-data:/var/lib/postgresql/data
command: -p ${POSTGRES_PORT:-5432}
minio:
hostname: ${MINIO_HOST:-minio}
image: ${MINIO_IMG:-minio/minio:RELEASE.2024-05-28T17-19-04Z}
restart: always
ports:
- '9000:9000'
- '9001:9001'
volumes:
- minio-data:/data
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=${MINIO_ROOT_USER:-admin}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASS:-password}
- MINIO_DEFAULT_BUCKETS=${MINIO_BUCKET:-workflow}
healthcheck:
test: ["CMD", "mc", "ready", "local"]
interval: 5s
timeout: 5s
retries: 5
grafana:
image: ${GRAFANA_IMG:-grafana/grafana:11.0.0}
restart: unless-stopped
ports:
- '3000:3000'
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_LOG_LEVEL=WARN
- POSTGRES_HOST=${POSTGRES_HOST:-postgres}
- POSTGRES_DB=${POSTGRES_DB:-taskdb}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- POSTGRES_USER=${POSTGRES_USER:-worker}
- POSTGRES_PASS=${POSTGRES_PASSWORD:-password}
- GF_INSTALL_PLUGINS=frser-sqlite-datasource
volumes:
- ./dockerfiles/grafana:/etc/grafana/provisioning/
- grafana-data:/var/lib/grafana
- broker-data:/db
depends_on:
- postgres
- redis
- minio
exec_agent0:
<<: *exec-agent-common
exec_agent1:
<<: *exec-agent-common
aux_agent:
<<: *agent-common
mem_limit: 256M
cpus: 1
entrypoint: /app/agent -t aux --monitor-requeue
gpu_prove_agent0:
<<: *agent-common
mem_limit: 4G
cpus: 4
entrypoint: /app/agent -t prove
deploy:
resources:
reservations:
devices:
- driver: nvidia
device_ids: ['0']
capabilities: [gpu]
snark_agent:
<<: *agent-common
entrypoint: /app/agent -t snark
ulimits:
stack: 90000000
rest_api:
image: risczero/risc0-bento-rest-api:stable@sha256:7b5183811675d0aa3646d079dec4a7a6d47c84fab4fa33d3eb279135f2e59207
restart: always
depends_on:
- postgres
- minio
mem_limit: 1G
cpus: 1
environment:
<<: *base-environment
ports:
- '8081:8081'
entrypoint: /app/rest_api --bind-addr 0.0.0.0:8081 --snark-timeout ${SNARK_TIMEOUT:-180}
broker:
<<: *broker-common
volumes:
- type: bind
source: ./broker.toml
- type: bind
source: ./broker.toml
- type: bind
source: ./broker.toml
target: /app/broker.toml
- broker-data:/db/
# Uncomment when using locally built set-builder and assessor guest programs
# - type: bind
# source: ./target/riscv-guest/guest-set-builder/set-builder/riscv32im-risc0-zkvm-elf/release/set-builder.bin
# target: /target/riscv-guest/guest-set-builder/set-builder/riscv32im-risc0-zkvm-elf/release/set-builder.bin
# - type: bind
# source: ./target/riscv-guest/guest-assessor/assessor-guest/riscv32im-risc0-zkvm-elf/release/assessor-guest.bin
# target: /target/riscv-guest/guest-assessor/assessor-guest/riscv32im-risc0-zkvm-elf/release/assessor-guest.bin
environment:
<<: *broker-environment
PRIVATE_KEY: ${PRIVATE_KEY}
RPC_URL: ${RPC_URL}
entrypoint: /app/broker --db-url 'sqlite:///db/broker.db' --config-file /app/broker.toml --bento-api-url http://localhost:8081
# # Example second broker with different configuration
# broker2:
# <<: *broker-common
# volumes:
# - type: bind
# source: ./broker2.toml
# target: /app/broker.toml
# - broker2-data:/db/
# environment:
# <<: *broker-environment
# # Note: use a different variable if you want to use different private keys in each broker
# PRIVATE_KEY: ${PRIVATE_KEY}
# RPC_URL: ${RPC_URL_2}
# entrypoint: /app/broker --db-url 'sqlite:///db/broker2.db' --config-file /app/broker.toml --bento-api-url http://localhost:8081
volumes:
redis-data:
postgres-data:
minio-data:
grafana-data:
broker-data:
# broker2-data:
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment