openvibers/openvibe.run .env.example

.env.example

main 6.9 KB · 132 lines · plaintext

1# ═══════════════════════════════════════════════════════════════
2# openvibe.run — Environment Configuration
3# Copy to .env for development. In production this lives at /etc/openvibe/run.env (0600).
4# Names only here; never commit a value.
5# ═══════════════════════════════════════════════════════════════
6
7# Server
8PORT=4920
9HOST=127.0.0.1
10NODE_ENV=development
11BASE_URL=http://localhost:4920
12TRUST_PROXY=1
13
14# ── Data: PostgreSQL + Valkey (ADR-035) ──────────────────────
15# In production OpenVibe.Host writes all four (roles/data/add-service.sh run). Unset in development:
16# an embedded PGlite database in data/pglite (one process). Tests need neither.
17DATABASE_URL=
18DATABASE_DIRECT_URL=
19VALKEY_URL=
20VALKEY_PREFIX=ov:run:
21
22# ── Identity: OpenVibe.Network ──────────────────────────────
23OV_NETWORK_URL=https://openvibe.network
24OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000
25#OV_NETWORK_ISSUER=https://openvibe.network
26# Optional: pin the Network's RS256 public key (PEM, \n escaped) instead of fetching the JWKS.
27#OV_NETWORK_PUBLIC_KEY=
28# Audience Run accepts on incoming service tokens; a token must also name a project (project_id).
29RUN_AUDIENCE=openvibe.run
30OV_OAUTH_CLIENT_ID=run
31OV_OAUTH_CLIENT_SECRET=
32#COOKIE_SECURE=true
33
34# ── OpenVibe.Events ─────────────────────────────────────────
35# Relay of Run's outbox (run.job.*); off when unset (rows wait in run_events_outbox).
36#EVENTS_URL=http://127.0.0.1:4300
37#EVENTS_RELAY_INTERVAL_MS=2000
38
39# ── Jobs ────────────────────────────────────────────────────
40# Background jobs: the events relay and the dispatcher's poller. RUN_JOBS=off runs the API alone.
41#RUN_JOBS=on
42
43# ── GitHub checks on shared nodes (server/checks/) ──────────
44# RUN_SECRETS_KEY seals the checks App's private key, webhook secret and installation tokens at rest:
45# one 32-byte key, base64 (standard or URL-safe) or 64 hex characters. Unset: /admin/checks says so and
46# POST /webhooks/github answers 503. RUN_CHECKS_PROJECT is the project a check job belongs to.
47#RUN_SECRETS_KEY=
48#RUN_CHECKS_PROJECT=
49# The repositories/accounts the scheduler accepts (default OpenVibers) and the org the App is registered in.
50#RUN_CHECKS_OWNERS=OpenVibers
51#RUN_CHECKS_ORG=OpenVibers
52# The network owner allowed on /admin/checks: their subject (usr_…), or OWNER_USERNAME (default goosely).
53#RUN_CHECKS_OWNER=
54#OWNER_USERNAME=goosely
55#RUN_CHECKS=off
56# The repositories whose checks report live on GitHub (owner/repo, comma-separated, or *). Every other repository is
57# in quiet shadow: no queued or in-progress check run, and a finished check that did not succeed shows as neutral
58# (the node's own conclusion in its title and in the shadow table), so a shadow check never holds a merge.
59#RUN_CHECKS_LIVE=
60#RUN_CHECKS_TICK_MS=5000
61#RUN_CHECKS_TIMEOUT_MS=8000
62#RUN_CHECKS_GITHUB_API=https://api.github.com
63#RUN_CHECKS_GITHUB_WEB=https://github.com
64
65# ── Project caps on a job's limits (run.job-create-request@1); over one is 422 run.limits.exceeded ──
66#RUN_LIMITS_MAX_WALL_MS=3600000
67#RUN_LIMITS_MAX_CPU_MS=3600000
68#RUN_LIMITS_MAX_MEM_BYTES=4gb
69#RUN_LIMITS_MAX_TTL_MS=86400000
70#RUN_LIMITS_MAX_ARGS_BYTES=512kb
71
72# ── The job stream's ticket (a two-minute single-use RS256 compact JWS Run signs) ──
73# A PEM in the environment, or a key file. In production with neither set, stream tickets answer 503
74# (every other route still serves); in development a key is generated in memory at boot.
75#RUN_STREAM_PRIVATE_KEY=
76#RUN_STREAM_KEY_FILE=data/keys/run-stream.pem
77#RUN_STREAM_KEY_ID=run-stream-1
78#RUN_STREAM_TTL_S=120
79#RUN_STREAM_RING_BYTES=1mb
80#RUN_STREAM_MAX_PER_JOB=64
81#RUN_STREAM_HEARTBEAT_MS=25000
82
83# ── The dispatcher bridge to Bot (plan T14 step 6, R1c) ──
84# Bot holds the node link and the meter; Run places each job on a node from the Fabric offers and mirrors
85# what Bot answers. Needs OV_OAUTH_CLIENT_SECRET above (Run mints its token for audience openvibe.bot);
86# without it nothing is sent and every job stays queued.
87#RUN_BOT_URL=http://127.0.0.1:4630
88#RUN_BOT_AUDIENCE=openvibe.bot
89#RUN_POLL_MS=1000
90#RUN_DISPATCH_TIMEOUT_MS=8000
91# How long the offers Run places from are cached (one read serves a whole tick).
92#RUN_OFFERS_TTL_MS=5000
93# Polls Bot may answer 404 for a job Run sent before that job fails.
94#RUN_DISPATCH_UNKNOWN_POLLS=5
95# Jobs one tick places and mirrors; the next tick takes the rest.
96#RUN_DISPATCH_MAX_PER_TICK=200
97
98# Bot owns the node link and the per-second metering of the jobs it carries (plan T14 L1).
99
100# ── The managed-browser provider (plan T14 R4a) ──
101# Class browser jobs placed on a kind=provider offer named browser-provider go to this API instead of Bot.
102# Off while the URL or the key is unset (browser jobs then stay queued). The key lives here only: never in an
103# offer, a job or a log. Outside development the URL must be https (or loopback).
104#RUN_BROWSER_PROVIDER_URL=https://browser-provider.example/v1
105#RUN_BROWSER_PROVIDER_API_KEY=
106#RUN_BROWSER_PROVIDER_TIMEOUT_MS=8000
107
108# ── Run's usage relay to Billing (the provider's jobs only; Bot meters its own) ──
109# Run mints its own token for audience openvibe.billing (billing.usage.record) from OV_OAUTH_CLIENT_SECRET.
110# Unset: the readings wait in run_usage_outbox, nothing is sent, and the jobs still run.
111#RUN_BILLING_URL=http://127.0.0.1:4600
112#RUN_BILLING_AUDIENCE=openvibe.billing
113#RUN_BILLING_INTERVAL_MS=5000
114#RUN_BILLING_TIMEOUT_MS=8000
115
116# ── The Arena's race (compare-arena-ecosystem.md §3) ──
117# POST /api/v1/races starts one blind child job per entrant; the judgement is a bench.match@1 recorded on
118# Bench (POST /api/v1/matches) with Run's Network client token. That client needs bench.judgement.cast.
119# Bench has no matchmaker endpoint yet, so matchmaker: true picks two entrants of different model families
120# from this list (comma-separated bench.entrant@1 ids). Unset: matchmaker: true answers 422.
121#RUN_RACE_ENTRANTS=model:gpt-5-mini,model:glm-5.3,model:deepseek-flash
122# The key for the keyed hash of the person in a judgement (never the person's id). Unset: Run uses its
123# Network client secret; set a dedicated key to rotate it without touching the Network client.
124#RUN_RACE_HASH_KEY=
125#RUN_BENCH_URL=https://bench.openvibe.services
126#RUN_BENCH_AUDIENCE=openvibe.bench
127#RUN_BENCH_TIMEOUT_MS=8000
128
129# ── IndexNow (search engines are told when the public pages change) ──
130# 8-128 letters and digits. Unset: nothing is sent and GET /<key>.txt is 404. When set, the key file is served there.
131#INDEXNOW_KEY=
132