# OpenVibe.Food — environment (production: /etc/openvibe/food.env). Names only; never commit values. NODE_ENV=production PORT=4970 HOST=127.0.0.1 BASE_URL=https://openvibe.food TRUST_PROXY=2 # PostgreSQL (ADR-035), written by OpenVibe.Host roles/data/add-service.sh food: the runtime role through PgBouncer, # the owner on a direct connection (migrations), and Valkey (shared limit counters). # Without DATABASE_URL, development uses an embedded PGlite database in data/pglite. DATABASE_URL= DATABASE_DIRECT_URL= VALKEY_URL= VALKEY_PREFIX=ov:food: # Per-caller limits (server/http/caller-limits.js): requests one caller may make to the API per minute and per hour. #FOOD_LIMITS_MINUTE=120 #FOOD_LIMITS_HOUR=3000 # OpenVibe.Network: SSO (OAuth client `food`, PKCE S256) and its JWKS; app tokens for audience openvibe.food. OV_NETWORK_URL=https://openvibe.network OV_NETWORK_INTERNAL_URL=http://127.0.0.1:4000 OV_OAUTH_CLIENT_ID=food OV_OAUTH_CLIENT_SECRET= # OpenVibe.AI on loopback, for recipe ideas from the cupboard (workflow food.suggest_recipes). Unset = recipe ideas are off. OV_AI_INTERNAL_URL= # OV_OAUTH_REDIRECT_URI=https://openvibe.food/auth/callback # FOOD_AUDIENCE=openvibe.food # OpenVibe.Events → Food (ADR-033 account export and deletion): the secret signs a delivery (comma-separated for # rotation, 32+ characters each; unset makes POST /internal/events answer 503); the url is where the two subscriptions # are created at boot (off when unset); FOOD_EVENTS_SUBSCRIBE=0 turns that off. FOOD_EVENTS_SECRET= FOOD_EVENTS_URL= #FOOD_EVENTS_ENDPOINT=http://127.0.0.1:4970/internal/events # OpenStreetMap, the two services "food near you" stands on (server/food/places.js). Both are open data under ODbL 1.0 # with published usage policies; server/food/upstream.js paces every call (one a second per host) and caches every # answer for FOOD_GEO_CACHE_TTL_MS. Tests point these at a stand-in (test/helpers/osm.js); never at the public hosts. #FOOD_NOMINATIM_URL=https://nominatim.openstreetmap.org #FOOD_OVERPASS_URL=https://overpass-api.de/api/interpreter # Identifies OpenVibe.Food to OSM, as both policies require. Defaults to OpenVibeFood/0.1 (+). #FOOD_OSM_USER_AGENT= # The pace between two requests to the same host, in ms (the policies ask for at least 1000). #FOOD_OSM_MIN_INTERVAL_MS=1000 #FOOD_OSM_TIMEOUT_MS=25000 # Overpass servers tried after FOOD_OVERPASS_URL, comma-separated (default: private.coffee, then VK Maps: the OSM # wiki's public instances without request limits), each for FOOD_OVERPASS_TRY_MS of the budget. #FOOD_OVERPASS_FALLBACK_URLS=https://overpass.private.coffee/api/interpreter,https://maps.mail.ru/osm/tools/overpass/api/interpreter #FOOD_OVERPASS_TRY_MS=8000 # After an area query failed, the same query answers at once (its last result, or "busy") for this long, in ms. #FOOD_OSM_RETRY_AFTER_MS=180000 # The home's "food near" cities refreshed in the background (server/food/near-warm.js): how often, in ms (0 = off), # and each area query's budget there. #FOOD_NEAR_WARM_MS=21600000 #FOOD_NEAR_WARM_BUDGET_MS=150000 # How long a geocode or an area answer is kept, in ms (default 7 days). #FOOD_GEO_CACHE_TTL_MS=604800000 # optional: defaults to true in production # COOKIE_SECURE=true