openvibers/openvibe.network .env.example

.env.example

main 9.6 KB · 164 lines · plaintext

1# ═══════════════════════════════════════════════════════════════
2# openvibe.network — Environment Configuration
3# Copy to .env and fill in values. No secrets belong in this file.
4# Production env lives at /etc/openvibe/network.env (mode 0600).
5# ═══════════════════════════════════════════════════════════════
6
7# Server
8PORT=4000
9HOST=0.0.0.0
10NODE_ENV=development
11BASE_URL=http://localhost:4000
12OV_NETWORK_URL=http://localhost:4000
13OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000
14OV_NETWORK_LOGIN_URL=http://localhost:4000
15
16# IndexNow (openvibe-shared/indexnow): 8–128 letters or digits. Set, the key file answers at
17# /<key>.txt; unset, it is off and nothing is served. The key goes in /etc/openvibe/network.env only.
18INDEXNOW_KEY=
19
20# Per-actor limits on API writes by a person's session (server/auth/actor-limits.js, roadmap WS-R task 4),
21# per minute and per hour; account, project, theme, avatar, follow and block writes have tighter numbers of their own.
22#NETWORK_LIMITS_MINUTE=120
23#NETWORK_LIMITS_HOUR=3000
24
25# Sign in on another device (server/auth/qr-signin.js): a QR on one device, a scan on another and a two-digit match.
26# Off unless this is explicitly on; off means /auth/qr/* and /q are not mounted.
27# NETWORK_QR_SIGNIN=1
28
29# Security — CHANGE THESE IN PRODUCTION
30# /internal/* takes capability-scoped service tokens; the shared internal key is retired (plan T2).
31SETUP_TOKEN=change-me-to-a-second-random-secret
32BOOTSTRAP_PROFILE=local-dev
33
34# Project secrets (ADR-056, server/developer/secrets.js): 32 random bytes, base64 or hex (openssl rand -base64 32).
35# Unset = project secrets are off (503 secrets.unavailable). Changing it makes every stored secret unreadable.
36# NETWORK_SECRETS_KEY=
37
38# Developer projects (docs/developer-projects.md)
39# Audiences that accept sandbox app tokens, comma-separated. Leave it UNSET for the code default
40# (openvibe.media,openvibe.events,openvibe.tools); set it to an empty value to accept none.
41# DEV_SANDBOX_AUDIENCES=openvibe.media,openvibe.events,openvibe.tools,openvibe.services,openvibe.ai,openvibe.quest,openvibe.play
42# Public capabilities every project's SANDBOX apps may hold without staff, comma-separated. Leave it
43# UNSET for the code default (media.object.upload/read, events.app.publish/read/subscribe,
44# tools.job.create/read/cancel; ids the installed contracts do not define are skipped); empty = none.
45# Production apps only ever use the staff-set project allowance.
46# DEV_SANDBOX_ALLOWANCE=media.object.upload,media.object.read,events.app.publish,events.app.read,events.app.subscribe,tools.job.create,tools.job.read,tools.job.cancel
47# Seconds a rotated client secret keeps working (0..604800; default 86400)
48DEV_CREDENTIAL_OVERLAP_S=86400
49# Public capabilities every new project's allowance starts with, comma-separated. Empty = staff grant each one.
50DEV_DEFAULT_ALLOWANCE=
51DEV_MAX_PROJECTS_PER_OWNER=10
52DEV_MAX_APPS_PER_PROJECT=20
53# First-party services (OAuth client ids) that may host a project member's agents, comma-separated
54# (docs/t2-projects-and-grants.md). Leave it UNSET for the code default (actor); empty = none.
55# AGENT_HOST_SERVICES=actor
56# OpenVibe.Events base URL for relaying developer-project events (network.app.*, network.credential.*,
57# network.grant.changed). Unset = no relay (events stay in dev_audit and are backfilled once it is set).
58# OV_EVENTS_INTERNAL_URL=http://127.0.0.1:4300
59
60# Admin account auto-created on first run
61ADMIN_USERNAME=admin
62ADMIN_PASSWORD=change-me
63
64# Owner account (gates owner-only admin areas: Deploy, SSH, secrets)
65OWNER_USERNAME=
66
67# PostgreSQL (ADR-035, plan T2), written by OpenVibe.Host roles/data/add-service.sh network: the runtime
68# role through PgBouncer, the owner on a direct connection (migrations), and Valkey (shared limit counters).
69# Without DATABASE_URL, development uses an embedded PGlite database in data/pglite (PGLITE_DIR overrides it);
70# production refuses to boot.
71DATABASE_URL=
72DATABASE_DIRECT_URL=
73VALKEY_URL=
74#VALKEY_PREFIX=ov:network:
75
76# Paths (relative to project root)
77DATA_DIR=data
78AVATAR_PATH=data/avatars
79JWT_PRIVATE_KEY=data/keys/private.pem
80JWT_PUBLIC_KEY=data/keys/public.pem
81
82# Public service URLs (defaults shown; override for local dev / white-label)
83#OV_LIVE_URL=https://openvibe.live
84#OV_TOOLS_URL=https://openvibe.tools
85#OV_GAMES_URL=https://openvibe.games
86#OV_MEDIA_URL=https://openvibe.media
87
88# Connected services (internal, not proxied through Cloudflare)
89OV_LIVE_INTERNAL_URL=http://127.0.0.1:3000
90OV_TOOLS_INTERNAL_URL=http://127.0.0.1:4001
91OV_GAMES_INTERNAL_URL=http://127.0.0.1:8000
92OV_MEDIA_INTERNAL_URL=http://127.0.0.1:4100
93OV_CHAT_INTERNAL_URL=http://127.0.0.1:4400
94# OpenVibe.Mail: the account home's Receipts card reads the person's own receipt summaries here.
95OV_MAIL_INTERNAL_URL=http://127.0.0.1:5250
96# The publication reviewer queue (/admin/review): each product's staff review-queue endpoint.
97OV_WIKI_INTERNAL_URL=http://127.0.0.1:4800
98OV_BLOG_INTERNAL_URL=http://127.0.0.1:4810
99OV_NEWS_INTERNAL_URL=http://127.0.0.1:4820
100OV_TRADE_INTERNAL_URL=http://127.0.0.1:4860
101
102# Optional: SSH admin-tab context (non-secret display values)
103#SSH_SERVER_HOST=
104#SSH_PROJECTS_ROOT=/opt/openvibe.network /opt/openvibe.live
105
106# openvibe.my is Network's own first-party OAuth client 'my' (redirect https://openvibe.my/auth/callback).
107# The client row and its secret are seeded in oauth_clients and read from there at boot; nothing needs setting.
108# To change the secret, rotate the row (setup/service-principal.js rotate my, WITHOUT --write-env) and restart.
109#OV_MY_OAUTH_CLIENT_ID=my
110#OV_MY_OAUTH_CLIENT_SECRET=
111#OV_MY_URL=https://openvibe.my
112
113# ═══════════════════════════════════════════════════════════════
114# Provider secrets (server/secrets.js). Each one is read from its variable first; the admin
115# panel's database copy is only a fallback, and the panel cannot change one set here. In
116# production put them in /etc/openvibe/network.env; scripts/secrets-out-of-db.js then blanks
117# the database copies (README "Provider secrets").
118# ═══════════════════════════════════════════════════════════════
119#RESEND_API_KEY=
120#RESEND_WEBHOOK_SECRET=
121#DISCORD_BOT_TOKEN=
122#DISCORD_OAUTH_CLIENT_SECRET=
123#VAPID_PRIVATE_KEY=
124#VAPID_PUBLIC_KEY= (optional: derived from VAPID_PRIVATE_KEY)
125
126# ═══════════════════════════════════════════════════════════════
127# Email Notifications (optional)
128#
129# From-addresses are managed through the admin panel; the Resend API key is RESEND_API_KEY
130# above (or, as a fallback, the admin panel).
131# ═══════════════════════════════════════════════════════════════
132
133# ═══════════════════════════════════════════════════════════════
134# Notifications
135# ═══════════════════════════════════════════════════════════════
136# Enable/disable the notification system globally
137NOTIFICATIONS_ENABLED=true
138# Days to keep old notifications before cleanup (default: 30)
139NOTIFICATION_MAX_AGE_DAYS=30
140# Only send emails for CRITICAL priority notifications (recommended)
141NOTIFICATION_EMAIL_CRITICAL_ONLY=true
142
143# ═══════════════════════════════════════════════════════════════
144# RSA Key Generation (run once during setup):
145#
146# mkdir -p data/keys
147# openssl genrsa -out data/keys/private.pem 2048
148# openssl rsa -in data/keys/private.pem -pubout -out data/keys/public.pem
149#
150# The private key stays on openvibe.network only. Other services verify
151# tokens OFFLINE via the JWKS endpoint (/api/.well-known/jwks).
152# ═══════════════════════════════════════════════════════════════
153
154# ═══════════════════════════════════════════════════════════════
155# OpenVibe Link on Android (server/auth/app-links.js)
156# ═══════════════════════════════════════════════════════════════
157# The SHA-256 fingerprints of the certificate that signs the RELEASE build of network.openvibe.link, comma-separated,
158# colon-hex (AA:BB:…). They are what /.well-known/assetlinks.json publishes so Android hands the https://
159# openvibe.network/link/auth sign-in return to the app alone; the certificates are public values, not secrets.
160#
161# Leave it unset until the owner's release key exists. With no fingerprint, Android verifies nothing, /link/auth opens
162# this site's page, and OpenVibe Link gets the extension's read-only Dock token instead of a session.
163# LINK_ANDROID_CERT_SHA256=AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33:44:55:66:77:88:99
164