# ═══════════════════════════════════════════════════════════════ # OpenVibe.Reviews — Environment Configuration # Copy to .env and fill in values. In production this lives at /etc/openvibe/reviews.env (0600); # the systemd unit sets NODE_ENV and PORT itself. Names only here: never commit values. # ═══════════════════════════════════════════════════════════════ # Server PORT=4830 HOST=127.0.0.1 NODE_ENV=development #BASE_URL=https://openvibe.reviews # Hops in front of Node that set X-Forwarded-For (Cloudflare → nginx → Node). #TRUST_PROXY=2 # Per-actor limits (server/http/actor-limits.js): API reads one caller (a signed-in person, an app, # else an address) may make per minute and per hour; past them 429 rate_limited with Retry-After. # Signed-out reads keep the per-address limit only. Edits, summaries and corrections have their own # numbers (README). The per-address limits stay. #REVIEWS_LIMITS_MINUTE=120 #REVIEWS_LIMITS_HOUR=3000 # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh reviews: the runtime role through PgBouncer # and the owner on a direct connection (schema migrations). Valkey holds the shared limit counters. # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= VALKEY_URL= VALKEY_PREFIX= # Identity — OpenVibe.Network signs user JWTs (SSO) and service tokens. The public key is fetched # from /api/.well-known/jwks (internal URL first) and retried every 30 s until it loads. OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 #OV_NETWORK_ISSUER=https://openvibe.network # Pin the key instead of fetching it (PEM; \n escapes allowed). #OV_NETWORK_PUBLIC_KEY= # A browser's user JWT is accepted when its aud contains one of these. #REVIEWS_USER_AUDIENCES=openvibe.reviews,openvibe.network # Editors: Network staff (admin, global_mod) plus these usr_ subject ids (comma-separated). #REVIEWS_EDITORS= # OAuth client `reviews` (browser sign-in, redirect /auth/callback) and service principal # svc:reviews (client credentials for Sources, Events and Community) — one registration. OV_OAUTH_CLIENT_ID=reviews OV_OAUTH_CLIENT_SECRET= #OV_OAUTH_REDIRECT_URI=https://openvibe.reviews/auth/callback #COOKIE_SECURE=true # OpenVibe.Sources — review items (sources.item.read, sources.source.read). Unset: nothing is read, # so there are no signals and no aggregates (the pages say so). #OV_SOURCES_INTERNAL_URL=http://127.0.0.1:4720 #REVIEWS_SOURCES_SYNC=true #REVIEWS_SOURCES_SYNC_INTERVAL_MS=300000 #REVIEWS_SOURCES_PAGE_SIZE=200 #REVIEWS_IMPORT_QUEUE_INTERVAL_MS=15000 # OpenVibe.Events — the outbox relay runs only when EVENTS_URL is set (events wait in the outbox until then). #EVENTS_URL=http://127.0.0.1:4300 #EVENTS_RELAY_INTERVAL_MS=2000 # Signing secret of the sources.item.* subscription (scripts/subscribe.js); comma-separated during rotation. #REVIEWS_EVENTS_SECRET= # OpenVibe.Community — discussion threads (community.comment.write). #OV_COMMUNITY_URL=https://openvibe.community #OV_COMMUNITY_INTERNAL_URL=http://127.0.0.1:4200 # Indexability gate policy for entity pages (openvibe-publishing/seo). Sources are always required. #REVIEWS_GATE_MIN_WORDS=60 #REVIEWS_GATE_MIN_SIGNALS=1 # How long the sitemaps' entity list (every entity's gate decision) is reused, in ms (production default 600000; # 0 rebuilds on every read, the default elsewhere). Concurrent reads share one build either way. #REVIEWS_SITEMAP_TTL_MS=600000 # Release reporting (openvibe-shared/release): the deployed commit, read from git when unset. #RELEASE_COMMIT= #MIN_CLIENT_RELEASE=