mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
ed18c37903
Every file the release touches was read once more, and what survived an independent check against the code is fixed here, with a test for each. Data and credentials - A document sync connection edited to a new address no longer carries the stored token along: a blank form under another origin is refused, the same rule the probe route already had. Dawarich and AirTrail testConnection send the stored key only to the host it was stored for. - The key rotation script now covers document_connections.secrets and trip_document_links.webhook_secret, which it had skipped. - Turning a booked night into a pause in the road trip popup asks first and says that the booking and its expense go with it. Deleting a place says the same when a night is booked there, on the desktop and on the phone. - A moved version marker over unchanged bytes no longer replaces the TREK file and its attachments; a real revision carries the attachments over. Planner - A drop in the day plan names the row it lands ahead of in the full day, so a hidden hotel stop no longer shifts it one slot early; the store sorts before it splices. Via re-anchoring, the booked-night guard and the sidebar's day membership read the stored day, the index space the server uses. - A hotel stop placed mid-day re-pins the road trip vias of that day, and the booking session receives the new stop order too. The Public API and the iCal feed list a booked hotel once. A plugin can no longer write a stay against another trip's day. Road trip and map - The route overview paces its requests to the public routers and retries a rate limit, and it says which legs it could not route instead of quietly reporting a shorter trip. A click on a via handle no longer drops a second via; handles hide when zooming out. Read-only members cannot edit the driving limits. The phone shows a way back when no day is picked and prints the night drive departure in the chosen clock format. Integrations and search - Google transit keeps conventional trains when the train chip is on. TREK_PLACES_ENABLED=false stops the details and enrichment calls too, and accepts the whole boolean family. A caller-supplied description no longer lands in the instance-wide enrichment cache. Nominatim searches carry a timeout. An OSM place id is checked for shape before it reaches Overpass. - Dawarich puts a stay on the trip whose dates hold it, the Atlas hand-off knows what the Atlas already shows, and a host change with a new key clears the old instance's state. - Document sync: a webhook address pasted by hand works on the token alone, deleting a connection unregisters its subscriptions, Nextcloud under a sub-path connects, Synology answers a name collision before uploading and verifies a move into the bin, Paperless titles are capped at 128 characters, a DNS failure reads as unreachable rather than as a policy verdict, videos from the store are accepted like uploads, and remote_missing has a way out. Conflict buttons only for the owner, a refused choice is reported, a refused credential gets a Reconnect button, disconnecting asks first on the desktop as it does on the phone, and the folder picker no longer spins forever. Release - The server holds the release notice back from a bundle that cannot draw it, so the previous shell served from the service worker cache after an update no longer shows bare keys and no longer lets a click use the notice up. - Import into an existing list gets the same body limit as a new list. Chat images say when the limit is reached and the new controls are translated. The transit backend switch reports a failed save. The Helm chart carries the Amap credentials in its Secret; the shipped templates document the Places API and Amap variables and the Overpass default. The wiki follows.
209 lines
10 KiB
YAML
209 lines
10 KiB
YAML
|
|
image:
|
|
repository: mauriceboe/trek
|
|
# tag: latest
|
|
pullPolicy: IfNotPresent
|
|
|
|
# Deployment update strategy. Recreate is the safe default for the single-writer SQLite
|
|
# DB on a ReadWriteOnce volume (the old pod is torn down before the new one starts).
|
|
# Set to RollingUpdate only if you back the data volume with ReadWriteMany storage.
|
|
updateStrategy: Recreate
|
|
|
|
# Optional image pull secrets for private registries
|
|
imagePullSecrets: []
|
|
# - name: my-registry-secret
|
|
|
|
service:
|
|
type: ClusterIP
|
|
port: 3000
|
|
|
|
env:
|
|
NODE_ENV: production
|
|
PORT: 3000
|
|
# TZ: "UTC"
|
|
# Timezone for logs, reminders, and cron jobs (e.g. Europe/Berlin).
|
|
# LOG_LEVEL: "info"
|
|
# "info" = concise user actions, "debug" = verbose details.
|
|
# TREK_WIKI_DIR: "/app/wiki"
|
|
# Where the in-app Help pages (/help) read their content from. Leave unset: the
|
|
# image ships the wiki at /app/wiki and finds it automatically, so Help matches
|
|
# the version you are running. Only set this to serve your own docs from a mounted
|
|
# volume. If the path does not exist, Help falls back to fetching the public GitHub
|
|
# wiki, which needs egress and tracks the latest release rather than your version.
|
|
# DEFAULT_LANGUAGE: "en"
|
|
# Default language on the login page for users with no saved preference.
|
|
# Browser/OS language is auto-detected first; this is the fallback when no match is found.
|
|
# Supported: de, en, es, fr, hu, nl, br, cs, pl, ru, zh, zh-TW, it, ar
|
|
# ALLOWED_ORIGINS: ""
|
|
# NOTE: If using ingress, ensure env.ALLOWED_ORIGINS matches the domains in ingress.hosts for proper CORS configuration.
|
|
# APP_URL: "https://trek.example.com"
|
|
# Public base URL of this instance. Required when OIDC is enabled — must match the redirect URI registered with your IdP.
|
|
# Also used as the base URL for links in email notifications and other external links.
|
|
# FORCE_HTTPS: "false"
|
|
# Optional. When "true": HTTPS redirect, HSTS, CSP upgrade-insecure-requests, secure cookies. Only behind a TLS proxy. Requires TRUST_PROXY.
|
|
# HSTS_INCLUDE_SUBDOMAINS: "false"
|
|
# When "true": adds includeSubDomains to the HSTS header. Only effective when HSTS is active. Leave "false" if sibling subdomains still run over plain HTTP.
|
|
# COOKIE_SECURE: "true"
|
|
# Auto-derived (true in production or when FORCE_HTTPS=true). Set "false" to force cookies over plain HTTP. Not recommended for production.
|
|
# SESSION_DURATION: "24h"
|
|
# How long a login session stays valid when "Remember me" is unchecked (the default): trek_session JWT exp + a browser-session cookie. Accepts 1h, 12h, 7d, 30d, 90d. Defaults to 24h.
|
|
# SESSION_DURATION_REMEMBER: "30d"
|
|
# Session length when "Remember me" is ticked: a longer-lived JWT + persistent cookie that survives browser restarts. Same format as SESSION_DURATION. Defaults to 30d.
|
|
# TRUST_PROXY: "1"
|
|
# Trusted proxy hops for X-Forwarded-For/X-Forwarded-Proto. Defaults to 1 in production. Must be set for FORCE_HTTPS to work.
|
|
# ALLOW_INTERNAL_NETWORK: "false"
|
|
# Set to "true" if Immich or other integrated services are hosted on a private/RFC-1918 network address.
|
|
# Loopback (127.x) and link-local/metadata addresses (169.254.x) are always blocked.
|
|
# ALLOW_LINK_LOCAL_IPS: ""
|
|
# Comma-separated single link-local addresses TREK may reach after all, e.g. "169.254.1.2" for a host gateway.
|
|
# 169.254.169.x and 169.254.170.x (cloud metadata) cannot be listed; an invalid entry aborts startup.
|
|
# OIDC_ISSUER: ""
|
|
# OpenID Connect provider URL.
|
|
# OIDC_CLIENT_ID: ""
|
|
# OIDC client ID.
|
|
# OIDC_DISPLAY_NAME: "SSO"
|
|
# Label shown on the SSO login button.
|
|
# OIDC_ONLY: "false"
|
|
# Set to "true" to force SSO-only mode: disables password login and password registration.
|
|
# Overrides the granular toggles in Admin > Settings and cannot be changed at runtime.
|
|
# First SSO login becomes admin on a fresh instance.
|
|
# OIDC_ADMIN_CLAIM: ""
|
|
# OIDC claim used to identify admin users.
|
|
# OIDC_ADMIN_VALUE: ""
|
|
# Value of the OIDC claim that grants admin role.
|
|
# OIDC_SCOPE: "openid email profile groups"
|
|
# Space-separated OIDC scopes to request. Must include scopes for any claim used by OIDC_ADMIN_CLAIM.
|
|
# OIDC_DISCOVERY_URL: ""
|
|
# Override the OIDC discovery endpoint for providers with non-standard paths (e.g. Authentik).
|
|
# DEMO_MODE: "false"
|
|
# Enable demo mode (hourly data resets).
|
|
# MCP_RATE_LIMIT: "300"
|
|
# Max MCP API requests per user per minute. Defaults to 300.
|
|
# MCP_MAX_SESSION_PER_USER: "20"
|
|
# Max concurrent MCP sessions per user. Defaults to 20.
|
|
# NOMINATIM_URL: ""
|
|
# Custom Nominatim base URL for every geocoding call the server makes (place search, reverse lookup, Atlas region
|
|
# fill). When set it REPLACES the public OpenStreetMap service, with no fallback, so the instance behind it needs
|
|
# the coverage you expect and has to speak the Nominatim API. TREK keeps its ~1 request per second spacing either
|
|
# way. Defaults to https://nominatim.openstreetmap.org.
|
|
# OVERPASS_URL: ""
|
|
# Custom Overpass endpoint(s) for the map POI "explore" search, comma-separated. When set, REPLACES the bundled
|
|
# public mirrors — point it at an internal/self-hosted Overpass instance when the public mirrors are unreachable
|
|
# from the cluster (e.g. locked-down egress). Non-http(s) entries are ignored.
|
|
# OVERPASS_TIMEOUT_MS: "25000"
|
|
# Per-endpoint timeout (ms) for Overpass POI requests. The query itself gives Overpass 20 seconds of work, so a
|
|
# lower value hangs up on answers that were still coming. Raise it for a slow self-hosted Overpass instance.
|
|
# Defaults to 25000.
|
|
# TREK_PLACES_ENABLED: "false"
|
|
# Place search (suggestions, full search, category buttons, Road trip search, import geocoding, offline downloads)
|
|
# asks the TREK Places API at https://places.liketrek.com by default, so the pod makes outbound requests to that
|
|
# host. Set "false" to search the way it did before 4.3.0 (OpenStreetMap, or your Google/Amap key) and send
|
|
# nothing there. There is no switch in the admin panel on purpose: whether searches leave the instance is decided
|
|
# here. Defaults to on.
|
|
# TREK_PLACES_URL: ""
|
|
# Base URL of a copy of the Places API you run yourself; it has to answer the same /v1 API. Read from
|
|
# configuration rather than typed by a user, so an in-cluster address works without ALLOW_INTERNAL_NETWORK.
|
|
# Defaults to https://places.liketrek.com.
|
|
# AMAP_API_BASE: ""
|
|
# Send the Amap (高德地图) calls through an egress proxy, a cache or a gateway that speaks the same API instead of
|
|
# restapi.amap.com directly. The key itself is a credential and goes under secretEnv.AMAP_API_KEY, or into
|
|
# Admin > Settings > API Keys. Defaults to https://restapi.amap.com.
|
|
|
|
|
|
# Secret environment variables stored in a Kubernetes Secret.
|
|
# JWT_SECRET is managed entirely by the server (auto-generated into the data PVC,
|
|
# rotatable via the admin panel) — it is not configured here.
|
|
secretEnv:
|
|
# At-rest encryption key for stored secrets (API keys, MFA, SMTP, OIDC, etc.).
|
|
# Recommended: set to a random 32-byte hex value (openssl rand -hex 32).
|
|
# If left empty the server resolves the key automatically:
|
|
# 1. data/.jwt_secret (existing installs — encrypted data stays readable after upgrade)
|
|
# 2. data/.encryption_key auto-generated on first start (fresh installs)
|
|
ENCRYPTION_KEY: ""
|
|
# Initial admin account — only used on first boot when no users exist yet.
|
|
# If both values are non-empty the admin account is created with these credentials.
|
|
# If either is empty a random password is generated and printed to the server log.
|
|
ADMIN_EMAIL: ""
|
|
ADMIN_PASSWORD: ""
|
|
# OIDC client secret — set together with env.OIDC_ISSUER and env.OIDC_CLIENT_ID.
|
|
OIDC_CLIENT_SECRET: ""
|
|
# Optional Unsplash Access Key for trip-cover and place-image search.
|
|
# Without one, TREK uses Unsplash's unauthenticated endpoint, which some
|
|
# datacenter/VPS IPs (including many Kubernetes clusters) are blocked from.
|
|
# Get a free key at https://unsplash.com/developers. Can also be set per-admin
|
|
# in Admin > Settings; this value overrides that. Leave empty to disable.
|
|
UNSPLASH_ACCESS_KEY: ""
|
|
# Optional Amap (高德地图) Web 服务 key for place search and geocoding inside mainland
|
|
# China. Overrides the key set in Admin > Settings > API Keys. A Web 端 (JS API) key is
|
|
# a different credential and is rejected with INVALID_USER_KEY. Leave empty to use the
|
|
# key from the admin panel, or none.
|
|
AMAP_API_KEY: ""
|
|
# The private secret (数字签名) of that key. Required exactly when the key was created
|
|
# with signing enabled, because such a key rejects every unsigned request. Leave empty
|
|
# otherwise. The endpoint itself is not a secret and is set under env.AMAP_API_BASE.
|
|
AMAP_API_SECRET: ""
|
|
|
|
# If true, a random ENCRYPTION_KEY is generated at install and preserved across upgrades
|
|
generateEncryptionKey: false
|
|
|
|
# If set, use an existing Kubernetes secret that contains ENCRYPTION_KEY
|
|
existingSecret: ""
|
|
existingSecretKey: ENCRYPTION_KEY
|
|
|
|
persistence:
|
|
# When disabled, volumes fall back to an ephemeral emptyDir (data lost on pod restart).
|
|
enabled: true
|
|
data:
|
|
size: 1Gi
|
|
# Leave empty to use the cluster's default StorageClass; set to bind a specific class.
|
|
storageClassName: ""
|
|
# Bind an existing PVC. The other values (size, storageClassName, annotations) are then ignored.
|
|
existingClaim: ""
|
|
annotations: {}
|
|
uploads:
|
|
size: 1Gi
|
|
storageClassName: ""
|
|
# Specify an existing PVC to bind. The other values are then ignored.
|
|
existingClaim: ""
|
|
annotations: {}
|
|
|
|
# Readiness and liveness probes. Overrides are merged over these defaults, so a key you
|
|
# do not set stays as shipped: --set probes.liveness.initialDelaySeconds=60 keeps the
|
|
# httpGet handler. Switching handler means clearing the old one in the same override
|
|
# (httpGet: null together with tcpSocket), otherwise the API rejects the pod with
|
|
# "may not specify more than 1 handler type". Set probes.liveness to null to drop a probe.
|
|
probes:
|
|
liveness:
|
|
httpGet:
|
|
path: /api/health
|
|
port: 3000
|
|
initialDelaySeconds: 15
|
|
periodSeconds: 30
|
|
readiness:
|
|
httpGet:
|
|
path: /api/health
|
|
port: 3000
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 10
|
|
|
|
resources:
|
|
requests:
|
|
cpu: 100m
|
|
memory: 256Mi
|
|
limits:
|
|
cpu: 500m
|
|
memory: 512Mi
|
|
|
|
ingress:
|
|
enabled: false
|
|
className: ""
|
|
annotations: {}
|
|
hosts:
|
|
- host: chart-example.local
|
|
paths:
|
|
- /
|
|
tls: []
|
|
# - secretName: chart-example-tls
|
|
# hosts:
|
|
# - chart-example.local
|