Commit Graph

567 Commits

Author SHA1 Message Date
Will Anderson dda07ae269 Route /oauth2, /connect, /.well-known at neurontechnologies.ai to MCP 2026-04-27 17:51:59 -05:00
Will Anderson f5a691be3c Remove media (torrents) and headscale VPN — no longer needed on GCP 2026-04-27 17:44:08 -05:00
Will Anderson 03495962e0 fix(daemon): use neuron-rest cluster service instead of local JVM (--jar was circular proxy) 2026-04-27 17:26:58 -05:00
Will Anderson 498979ec90 fix(redis): remove image tag override, use chart default 2026-04-27 17:18:46 -05:00
Will Anderson bba12f3156 fix: remove static volumeNames for GCP migration, fix redis image tag
Dynamic PVC provisioning needed on new GCP instance.
Redis image 7.4.3-debian-12-r0 was removed from Docker Hub;
use floating 7.4-debian-12 tag instead.
2026-04-27 16:53:01 -05:00
Will Anderson a55b53f1bd fix: add registry.neuralplatform.ai to Cloudflare tunnel config
Was missing from tunnel ingress rules, causing 404 on all registry
requests through Cloudflare. Disabled chunked encoding for Docker
push compatibility.
2026-04-27 16:51:58 -05:00
Will Anderson a7a1b6a778 fix: remove static volumeName from registry PVC, restore public Vault URL
New GCP instance needs dynamic PVC provisioning for registry.
Vault now accessible via neuralplatform.ai tunnel.
2026-04-27 16:45:11 -05:00
Will Anderson be6bee2c5b fix: use internal Vault URL for ESO ClusterSecretStore during GCP migration
Cloudflare tunnel not yet running on new instance. Use cluster-internal
URL until tunnel is established. Revert to neuralplatform.ai once tunnel
is configured.
2026-04-27 16:21:52 -05:00
Will Anderson 55a38bb693 fix: update Gitea URL to new GCP cluster instance
Legion hardware died April 27, 2026. New GCP k3s instance at 104.197.5.199.
Gitea now at gitea.git.svc.cluster.local:3000 within cluster.
2026-04-27 16:20:46 -05:00
Will Anderson 3943ebc204 feat: scale marketing to 1 replica, add notification + turnstile secrets
Single replica required for in-memory pending leads Map used by SMS
double-opt-in flow. ExternalSecret adds Resend, Twilio, and Turnstile
keys to the marketing pod environment.
2026-04-27 03:31:45 -05:00
will.anderson b2940c70e0 fix(swarm): add runAsUser: 1001 to all swarm containers (#44) 2026-04-27 05:13:50 +00:00
Neuron CI e9da888512 ci(neuron-prod): update rest+license to v0.18.14 2026-04-26 17:26:16 +00:00
Neuron CI cdadd723b6 ci(neuron-prod): blue-green flip to blue@v0.18.14 (registry.neuralplatform.ai/neuron-technologies/neuron-mcp:v0.18.14) 2026-04-26 17:26:05 +00:00
Neuron CI 41f94d93be ci(daemon): deploy main neuron-daemon@0f5dbd6a 2026-04-26 17:02:49 +00:00
Neuron CI 9d7bc48ed0 ci(daemon): deploy main neuron-daemon@10cd48e0 2026-04-26 16:55:20 +00:00
Neuron CI 15482b9241 ci(neuron-prod): update rest+license to v0.18.8 2026-04-26 16:49:46 +00:00
Neuron CI bd7d5efa66 ci(neuron-prod): blue-green flip to green@v0.18.8 (registry.neuralplatform.ai/neuron-technologies/neuron-mcp:v0.18.8) 2026-04-26 16:49:02 +00:00
Neuron CI 726510d7d9 ci(daemon): deploy main neuron-daemon@5dc2d833 2026-04-26 16:34:07 +00:00
Will Anderson fdbbfdb0ad iam: grant ci-pusher serviceAccountUser on all Cloud Run runtime SAs 2026-04-26 11:18:50 -05:00
will.anderson 66bffc5a4b Merge pull request 'fix(rest): run as UID 1000 to match PVC file ownership' (#35) from feat/daemon-image-c190e6e5 into main 2026-04-26 16:07:02 +00:00
Will Anderson c6245d1170 fix(rest): run as UID 1000 to match PVC file ownership — SQLite needs write access 2026-04-26 11:06:23 -05:00
will.anderson f056806cbd Merge pull request 'fix(rest): Recreate strategy to avoid SQLite write lock on rollout' (#34) from feat/daemon-image-c190e6e5 into main 2026-04-26 16:05:24 +00:00
Will Anderson 58513835e2 fix(rest): use Recreate strategy to avoid SQLite write lock on rollout 2026-04-26 11:04:16 -05:00
Neuron CI f525437c77 ci(daemon): deploy main neuron-daemon@b2bed846 2026-04-26 16:03:29 +00:00
Will Anderson e22dce6b5a iam: grant ci-pusher run.developer for Cloud Run deploys 2026-04-26 10:53:21 -05:00
Will Anderson baf147543c ci(daemon): deploy main neuron-daemon@c190e6e5 2026-04-26 10:37:29 -05:00
Will Anderson 714a7c7a8d launch: deploy daemon StatefulSet, fix neuron-rest security context, add daemon Argo CD app
- Add neuron-daemon Argo CD Application (apps/neuron-daemon.yaml) pointing to
  k8s/neuron-technologies/daemon/ on main — daemon will deploy once image is built
- Add daemon k8s manifests: StatefulSet (2 replicas, imagePullPolicy: Always),
  Service (ClusterIP :7749, session affinity), ExternalSecret (Anthropic API key from Vault)
- Fix neuron-rest runAsNonRoot: remove constraint since v0.15.3 image runs as root,
  clears the CreateContainerConfigError on the 11h-old stale pod
- Add NEURON_DAEMON_WS_URL env var to marketing deployment for chat UI connectivity
- Add neuron.neurontechnologies.ai Cloudflare DNS record and tunnel ingress rule (Terraform)
2026-04-26 10:13:48 -05:00
Will Anderson 655ab38558 Deploy neuron-mcp:a837369 — VBD marketplace architecture 2026-04-26 08:51:07 -05:00
Will Anderson 6041ac3b25 Deploy neuron-mcp:514db58 — STATELESS, built from current main 2026-04-26 08:33:03 -05:00
Will Anderson 623a6828e8 Deploy neuron-mcp:05d978f — STATELESS from main branch 2026-04-26 08:24:55 -05:00
Will Anderson d804d71040 Remove sticky session from MCP IngressRoute — STATELESS is sessionless 2026-04-26 08:21:16 -05:00
Will Anderson 5f1c9adaa6 Deploy neuron-mcp:1b26e3e — STATELESS HTTP transport
Removes STREAMABLE session state. No sticky sessions needed.
Works across all pods, survives restarts, scales cleanly.
2026-04-26 08:18:07 -05:00
Will Anderson 08ef13c40d Add sticky session affinity to MCP IngressRoute
STREAMABLE transport holds session state in-memory per-pod. With HPA
scaling to 2+ replicas and round-robin routing, requests hit different
pods and fail with "Session not found". Pin each client to one pod via
a secure HttpOnly cookie.
2026-04-26 08:07:23 -05:00
Will Anderson 20397e9831 Restore neuron-mcp:97bd19ba (rollback to v0.15.3 was incompatible) 2026-04-26 04:28:19 -05:00
Will Anderson 5fa8cf45d5 Rollback neuron-mcp to v0.15.3 to restore MCP connectivity 2026-04-26 04:20:57 -05:00
Will Anderson 83b8d0768e Add Traefik IngressRoute for neuron.neurontechnologies.ai MCP endpoint 2026-04-26 03:52:24 -05:00
Will Anderson 6ac4faabc5 Deploy neuron-mcp:97bd19ba — Postgres marketplace datasource 2026-04-26 03:27:46 -05:00
Will Anderson 2550786965 Revert CI to host Docker socket, remove buildkitd
BuildKit rootless failed on k3s (mount propagation), privileged mode
fixed that but buildkitd gRPC is incompatible with the Docker REST API
that forgejo-runner needs to manage job containers. Net security change
vs. the original socket approach was zero (privileged ≈ socket access).

Remove buildkitd.yaml entirely. Restore docker-sock hostPath mount on
both runners. Builds work again.
2026-04-26 02:50:27 -05:00
Will Anderson e18d953ff9 Wire marketplace Postgres datasource for neuron-mcp
Add MARKETPLACE_DB_URL/USER to ConfigMap and MARKETPLACE_DB_PASSWORD
ExternalSecret (sourced from secret/legion-db in Vault). Remove the
SQLite subPath volume mount and fix-data-ownership initContainer from
the blue deployment — marketplace storage is now in Postgres.
2026-04-26 02:33:26 -05:00
Will Anderson 952e781550 Pre-create neuron-marketplace.db in initContainer for subPath mount
subPath mounts require the source file to exist on the PVC before the
main container starts. Add 'touch /data/neuron-marketplace.db' to the
initContainer so the subPath mount can bind the file at /app/neuron-marketplace.db.
2026-04-26 02:06:02 -05:00
Will Anderson 702faca691 Mount neuron-marketplace.db from PVC via subPath at /app/neuron-marketplace.db
App hard-codes relative path 'neuron-marketplace.db' from working dir /app.
Mount the PVC file at /app/neuron-marketplace.db via subPath so the app can
write to it as UID 1000. PVC persists the file across pod restarts.
Also keep NEURON_MARKETPLACE_DB_PATH in ConfigMap for future app versions.
2026-04-26 02:03:09 -05:00
Will Anderson a6b0dc9211 Force pod restart to pick up NEURON_MARKETPLACE_DB_PATH configmap change
Add config-hash annotation to template to cycle the ReplicaSet and
ensure pods restart with the updated ConfigMap env var.
2026-04-26 01:52:19 -05:00
Will Anderson ddaab28638 Fix marketplace DB: revert workingDir, add NEURON_MARKETPLACE_DB_PATH
workingDir: /data broke the JVM (app.jar is a relative path in /app).
Add NEURON_MARKETPLACE_DB_PATH=/data/neuron-marketplace.db env var
following the same pattern as NEURON_DB_PATH for the core DB.
2026-04-26 01:49:48 -05:00
Will Anderson 26ed92ca38 Set workingDir: /data so relative DB paths resolve to PVC
neuron-marketplace.db was opening relative to /app (image root,
not writable by UID 1000). Set workingDir to /data so all relative
file opens land on the writable PVC volume.
2026-04-26 01:47:02 -05:00
Will Anderson 754cd72df5 Fix SQLite READONLY: chown /data to UID 1000 via initContainer
PVC was written as root before runAsUser: 1000 was added; SQLite
refused writes with SQLITE_READONLY. initContainer runs as root to
chown the volume, then the app runs as UID 1000 as required.
2026-04-26 01:43:37 -05:00
Will Anderson 01245a6278 Fix Neuron MCP: runAsUser + move to neuron.neurontechnologies.ai
Pod was crash-looping: image has no USER directive so kubelet rejected it
with runAsNonRoot. Add runAsUser: 1000 at both pod and container level.

MCP paths moved from neurontechnologies.ai (now a GCP Cloud Run A record,
unreachable on Legion) to private subdomain neuron.neurontechnologies.ai.
Cloudflare tunnel and DNS CNAME updated out-of-band.
2026-04-26 01:35:20 -05:00
Will Anderson ffac2161bc Use TCP readiness probe for BuildKit — exec fails on k3s privileged containers 2026-04-26 01:23:52 -05:00
Will Anderson 6e67f62ffe Switch BuildKit to privileged mode — rootless fails on k3s mount propagation 2026-04-26 01:20:45 -05:00
Will Anderson e138c45d51 Fix BuildKit rootless: allow privilege escalation for newuidmap/newgidmap 2026-04-26 01:17:41 -05:00
Will Anderson 5b16aebdcb Remove stage environment from GCP — staging is local only 2026-04-26 01:09:44 -05:00