mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-18 21:16:47 +00:00
a869269591
Changing PORT left the Dockerfile and compose healthchecks, the chart's containerPort, Service target and probes on 3000, so the container went unhealthy and Kubernetes restarted it in a loop. All of them follow PORT now. The chart gains a startup probe (ten minutes for a first boot, a long migration or a restore at boot, which liveness used to kill after about 105 s), a readiness probe on the new /api/health/ready that asks the database, extraEnv and extraEnvFrom for the settings the chart does not list, slots for the four secrets it had none for, and the DEFAULT_LANGUAGE and MCP_MAX_SESSION_PER_USER values it documented but never set. The Dockerfile no longer hides a failed npm ci behind a ';', pins gosu, and the language lists name all 27 locales.
TREK Helm Chart
This is a minimal Helm chart for deploying the TREK app.
Features
- Deploys the TREK container
- Exposes port 3000 via Service
- Optional persistent storage for
/app/dataand/app/uploads - Configurable environment variables and secrets
- Optional generic Ingress support
- Configurable health checks (liveness/readiness probes) on
/api/health
Helm Repository
A hosted Helm repository is available:
helm repo add trek https://chart.liketrek.com
helm repo update
helm install trek trek/trek
Note:
chart.liketrek.comis a custom domain (CNAME) for the GitHub Pages site athttps://liketrek.github.io/TREK— both URLs serve the same repository. The github.io URL keeps working (it redirects tochart.liketrek.com), but the custom domain is the canonical one to use.
Usage
Or install directly from the local chart:
helm install trek ./chart \
--set ingress.enabled=true \
--set ingress.hosts[0].host=yourdomain.com
See values.yaml for more options.
Files
Chart.yaml— chart metadatavalues.yaml— configuration valuestemplates/— Kubernetes manifests
Notes
- Ingress is off by default. Enable and configure hosts for your domain.
- PVCs use the cluster's default StorageClass. Set
persistence.data.storageClassNameand/orpersistence.uploads.storageClassNameto bind a specific class. - To use your own PVCs, set
persistence.data.existingClaimand/orpersistence.uploads.existingClaim. The other values for that volume (size, storageClassName, annotations) are then ignored. - With
persistence.enabled: false, the data and uploads volumes use anemptyDir— storage is ephemeral and lost on pod restart. Intended for testing only. JWT_SECRETis managed entirely by the server — auto-generated into the data PVC on first start and rotatable via the admin panel (Settings → Danger Zone). No Helm configuration needed.ENCRYPTION_KEYencrypts stored secrets (API keys, MFA, SMTP, OIDC) at rest. Recommended: set viasecretEnv.ENCRYPTION_KEYorexistingSecret. If left empty, the server falls back automatically: existing installs usedata/.jwt_secret(no action needed on upgrade); fresh installs auto-generate a key persisted to the data PVC.- Liveness and readiness probes are configurable under
probes. Overrides are merged over the defaults, so--set probes.liveness.initialDelaySeconds=60keeps thehttpGethandler. When switching toexecortcpSocket, clearhttpGetin the same override. Setprobes.liveness: nullto remove a probe. - If using ingress, you must manually keep
env.ALLOWED_ORIGINSandingress.hostsin sync to ensure CORS works correctly. The chart does not sync these automatically. - Set
env.ALLOW_INTERNAL_NETWORK: "true"if Immich or other integrated services are hosted on a private/RFC-1918 address (e.g. a pod on the same cluster or a NAS on your LAN). Loopback (127.x) and link-local/metadata addresses (169.254.x) remain blocked regardless. - Set
env.ALLOW_LINK_LOCAL_IPSto a single link-local address (e.g."169.254.1.2") only when a service TREK needs sits behind one, such as a host gateway. Cloud metadata addresses (169.254.169.x,169.254.170.x) cannot be listed. FORCE_HTTPSis optional. Setenv.FORCE_HTTPS: "true"only when ingress (or another proxy) terminates TLS. It enables HTTPS redirects, HSTS, CSPupgrade-insecure-requests, and forces the session cookiesecureflag. RequiresTRUST_PROXYto be set.- Set
env.TRUST_PROXY: "1"(or the number of proxy hops) when running behind ingress or a load balancer. Required forFORCE_HTTPSto detect the forwarded protocol correctly. In production it defaults to1automatically. COOKIE_SECUREis auto-derived (on whenNODE_ENV=productionorFORCE_HTTPS=true). Setenv.COOKIE_SECURE: "false"only during local testing without TLS. Not recommended for production.- Web Push needs no chart settings: TREK generates its key pair on first start and keeps it in the database on the data PVC. To bring your own pair, set
env.VAPID_PUBLIC_KEYandsecretEnv.VAPID_PRIVATE_KEYtogether (and optionallyenv.VAPID_SUBJECT); changing the pair later means every device has to turn push on again. - Set
env.OIDC_DISCOVERY_URLto override the auto-constructed OIDC discovery endpoint. Required for providers (e.g. Authentik) that expose it at a non-standard path.