openvibers/openvibe.news .env.example

.env.example

main 4.5 KB · 94 lines · plaintext

1# ═══════════════════════════════════════════════════════════════
2# openvibe.news — environment configuration (names only; never commit values)
3# Copy to .env for development. Production: /etc/openvibe/news.env (0600).
4# ═══════════════════════════════════════════════════════════════
5
6# Server
7PORT=4820
8HOST=127.0.0.1
9NODE_ENV=development
10# Public origin: canonical URLs, feeds, sitemaps and JSON-LD are built from it
11BASE_URL=http://localhost:4820
12# Proxy hops that set X-Forwarded-For (Cloudflare → nginx → Node = 2)
13TRUST_PROXY=2
14# Per-actor limits (server/http/actor-limits.js): API reads one caller (a signed-in person, an app,
15# else an address) may make per minute and per hour; past them 429 rate_limited with Retry-After.
16# Signed-out reads keep the per-address limit only. Writes, AI drafts and pulls have their own numbers
17# (README). The per-address limits stay.
18#NEWS_LIMITS_MINUTE=120
19#NEWS_LIMITS_HOUR=3000
20
21# PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh news: the runtime role through PgBouncer,
22# the owner on a direct connection (migrations), and Valkey (shared limit counters).
23# Without DATABASE_URL, development uses an embedded PGlite database in data/pglite.
24DATABASE_URL=
25DATABASE_DIRECT_URL=
26VALKEY_URL=
27VALKEY_PREFIX=
28
29# OpenVibe.Network — SSO (OAuth2), JWKS, client-credentials tokens
30OV_NETWORK_URL=https://openvibe.network
31OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000
32# OAuth client `news` (redirect https://openvibe.news/auth/callback). The same client is News'
33# service principal svc:news for client-credentials grants (see README, "Grants").
34OV_OAUTH_CLIENT_ID=news
35OV_OAUTH_CLIENT_SECRET=
36# Production: https://openvibe.news/auth/callback (default: BASE_URL + /auth/callback)
37#OV_OAUTH_REDIRECT_URI=
38# Cookies: Secure by default in production; set false for plain-http local development
39#COOKIE_SECURE=false
40# Signs the editor-desk form tokens (CSRF). Unset: random per process.
41#NEWS_FORM_SECRET=
42
43# Editors: Network subjects (usr_…), comma-separated (a product role). Staff with staff.editorial.manage
44# (Network admins) are editors too.
45NEWS_EDITORS=
46
47# OpenVibe.Sources — news items (sources.item.read; optionally sources.source.read for outlet names)
48OV_SOURCES_INTERNAL_URL=http://127.0.0.1:4720
49# Cursor pull (backstop for missed webhook deliveries); 0 turns it off
50#NEWS_PULL_INTERVAL_MS=300000
51#NEWS_PULL_PAGE_SIZE=100
52#NEWS_PULL_MAX_PAGES=20
53#NEWS_SOURCES_TIMEOUT_MS=8000
54
55# Licensing: the longest source summary kept (and only when the source's terms allow short summaries)
56#NEWS_SUMMARY_MAX_CHARS=280
57# Indexing: independent sources a story must cite to be indexable (fewer: published but noindex,
58# out of sitemaps). Items from one Sources source, one publisher's domain or one outlet, or copies
59# of one report, count once. Minimum 1.
60#NEWS_MIN_INDEPENDENT_SOURCES=2
61# Clustering window
62#NEWS_CLUSTER_WINDOW_HOURS=72
63
64# OpenVibe.Events — the outbox relay runs only when EVENTS_URL and OV_OAUTH_CLIENT_SECRET are set
65#EVENTS_URL=http://127.0.0.1:4300
66#EVENTS_RELAY_INTERVAL_MS=2000
67# Signing secret(s) of News' subscriptions (sources.item.*, sources.fetch.failed), comma-separated
68# during rotation. Generate before `npm run subscribe` (e.g. `openssl rand -hex 32`).
69# Unset = webhook off (503); the cursor pull still runs.
70#NEWS_EVENTS_SECRET=
71
72# OpenVibe.Community — the comment thread of each public story (referenced by id, never copied).
73# Needs the grants community.comment.write and community.comment.moderate (audience openvibe.community);
74# without them a story page says comments are unavailable.
75# optional: defaults to https://openvibe.community
76# OV_COMMUNITY_URL=https://openvibe.community
77# optional: defaults to http://127.0.0.1:4200
78# OV_COMMUNITY_INTERNAL_URL=http://127.0.0.1:4200
79
80# OpenVibe.AI (optional) — news.summarize_story / news.compare_perspectives drafts (ai.run.create).
81# Unset: no AI; editors write every story from the source items.
82#OV_AI_INTERNAL_URL=http://127.0.0.1:4700
83#NEWS_AI_WAIT_MS=30000
84
85# Background worker (the Sources pull); off: NEWS_WORKER=off
86#NEWS_WORKER=on
87
88# Browser origins that may call /api/v1 with a Bearer Network JWT
89#API_CORS_ORIGINS=https://openvibe.network,https://openvibe.live,https://openvibe.community
90
91# release.json (openvibe-shared/release): the deployed commit when git is not available
92#RELEASE_COMMIT=
93#MIN_CLIENT_RELEASE=
94