649 Commits

Author SHA1 Message Date
Will Anderson d40fb8c3f1 Add Docuseal e-signature service at sign.neuralplatform.ai
- k8s manifests: Deployment, Service, PVC, Ingress, ExternalSecret
- Argo CD app watching servers/legion/k8s/docuseal
- CF tunnel ingress rule for sign.neuralplatform.ai
- Vault secret at secret/docuseal (secret_key_base seeded)
2026-04-21 14:26:01 -05:00
Will Anderson 3b3811942c Update Legion LAN IP from 192.168.68.77 to 192.168.8.148
Static IP assigned on new network segment. Updates:
- variables.tf default legion_ip
- headscale nameserver config
- bootstrap.sh default target
- README/RUNBOOK documentation
- media ingress comment
2026-04-21 10:32:39 -05:00
Gitea CI 26c7d2259e chore(neuron): deploy efc982c605cacc6929f29382f293e2a2d4a4cf95 2026-04-18 20:28:36 +00:00
Will Anderson 4b548590ef config: add NEURON_DATA_DIR and NEURON_CHROMA_URL to neuron-dev configmap 2026-04-17 11:46:10 -05:00
Neuron CI 2398049678 ci(neuron-dev): deploy neuron@dev-d7a587e2 2026-04-17 16:07:58 +00:00
Neuron CI 313480555d ci(neuron-dev): deploy neuron@dev-057f5cb8 2026-04-17 15:50:36 +00:00
Will Anderson 5c9544246f fix(neuron-dev): use Recreate strategy to avoid OOM during rolling updates 2026-04-17 10:43:39 -05:00
Neuron CI 5c663ab714 ci(neuron-dev): deploy neuron@dev-c370733c 2026-04-17 15:41:57 +00:00
Neuron CI 3d9ead25ef ci(neuron-dev): deploy neuron@dev-4ceb26d0 2026-04-17 15:31:56 +00:00
Will Anderson 939e2574d2 fix(neuron): scale stage/prod to 0 replicas and reduce dev memory requests
- Stage and prod deployments scaled to 0 — not yet promoted, no need for running pods
- Dev memory requests reduced from 384Mi to 256Mi to allow scheduling on memory-constrained node
2026-04-17 10:18:50 -05:00
Neuron CI bbe3d14037 ci(neuron-dev): deploy neuron@dev-89280b55 2026-04-17 15:13:03 +00:00
Neuron CI 203b124f9c ci(neuron-dev): deploy neuron@dev- 2026-04-17 15:02:29 +00:00
Will Anderson 193bea7f3f fix(neuron): add ephemeral-storage limits to prevent eviction cascade 2026-04-17 09:59:21 -05:00
Will Anderson 1b8ea63541 feat(neuron): add stage and prod k8s manifests + Argo CD apps
Completes the three-env setup (dev was added previously). Each env has
deployments, services, ingress, PVC, ConfigMap, and ExternalSecret pulling
from Vault. Prod has larger resource limits and 10Gi PVC. Vault secret at
secret/neuron-technologies/prod seeded separately.
2026-04-17 09:43:23 -05:00
Will Anderson 912e129e0d feat(neuron-dev): add k8s manifests and Argo CD app for neuron-technologies dev environment 2026-04-17 08:46:47 -05:00
Will Anderson 6046b6ca3e Increase harmonic-wordpress MySQL memory limit to 1Gi for prod sync imports 2026-04-17 06:53:53 -05:00
Will Anderson 8aa01bc840 infra: add neurontechnologies.ai Cloudflare routing and k8s namespaces
- Add CNAME records for @, www, dev, stage → legion tunnel
- Add tunnel ingress rules for neurontechnologies.ai, www, dev, stage
- Add neuron-dev, neuron-stage, neuron-prod k8s namespaces on Legion
2026-04-16 21:55:19 -05:00
Will Anderson d1493f9ecd Wire Radarr/Sonarr/Jellyfin into fornax coordinator
Add service URLs as env vars and pull API keys from Vault via ESO.
The coordinator now has everything it needs to call catalog providers
on torrent delete/complete events.
2026-04-16 19:40:02 -05:00
Will Anderson ad84443131 add Google Workspace CNAME verification record for neurontechnologies.ai 2026-04-16 18:46:58 -05:00
Will Anderson a199ef3e85 add neurontechnologies.ai DNS records for Google Workspace 2026-04-16 18:45:12 -05:00
Will Anderson 61ea7eaaef add all Cloudflare zones to Terraform, migrate tunnel config to non-deprecated resource 2026-04-16 18:36:16 -05:00
Will Anderson d7205ca1d1 feat(fornax): add CF Access JWT and RBAC env vars to coordinator deployment 2026-04-16 16:22:09 -05:00
Will Anderson 1fd04c104b Add Cloudflare Zero Trust Access for fornax.neuralplatform.ai
Google OAuth gate on the public dashboard. Allows andersonwilliam85@gmail.com
and 1timlingo@gmail.com. Auto-redirects to Google; 24h session.
Sonarr/Radarr use the internal cluster service so are unaffected.
2026-04-16 16:08:37 -05:00
Will Anderson e567cbaef4 restart fornax-coordinator — pull #31 image (magnet name fix) 2026-04-15 22:44:24 -05:00
Will Anderson c4b57e2e7e restart fornax-coordinator for magnet name extraction fix 2026-04-15 22:32:51 -05:00
Will Anderson 6830e97c93 restart fornax-coordinator to pull new image with multer fix 2026-04-15 22:22:50 -05:00
Will Anderson d6237da906 restart fornax-coordinator to pick up multer multipart fix 2026-04-15 22:05:04 -05:00
Will Anderson a1f2ba86aa chore: restart coordinator to pick up /media/downloads save path fix 2026-04-15 21:07:43 -05:00
Will Anderson b38c4d7a11 chore: restart coordinator to pick up pre-seeded categories fix 2026-04-15 20:44:59 -05:00
Will Anderson 3f4646e92c chore: restart coordinator to pick up torrents/categories fix 2026-04-15 20:34:38 -05:00
Will Anderson 0d126cfaaf chore: restart coordinator to pick up /app/preferences fix 2026-04-15 20:24:46 -05:00
Will Anderson 9c961b963c chore: restart fornax-coordinator to pick up webapiVersion fix + UI redesign 2026-04-15 20:13:18 -05:00
Will Anderson 3a09f2fab5 Bump coordinator restartedAt to pull new image after CI deploy 2026-04-15 19:54:47 -05:00
Will Anderson 450aa8341d Bump coordinator restartedAt to pick up /app/version plain-text fix 2026-04-15 19:39:40 -05:00
Will Anderson 185a36e05b Restart fornax coordinator and UI — retry UI + worker health fix 2026-04-15 19:13:07 -05:00
Will Anderson c0d95d2ef0 Restart fornax-coordinator to pick up new qBittorrent accessor image 2026-04-15 18:15:33 -05:00
Will Anderson 5a50e2bb63 Fix NAT-PMP struct format and renewal interval
ProtonVPN returns 16-byte success responses (last field is uint32 lifetime,
not uint16). The previous !BBHIHHH format expected 14 bytes causing unpack
failure. Fixed to !BBHIHHI (16 bytes).

ProtonVPN grants 60s leases; request 60s and renew every 45s instead of
sleeping 240s which let leases expire between renewals.
2026-04-15 17:34:00 -05:00
Will Anderson 8a43279164 Switch fornax workers to custom WireGuard provider with correct server keys
The protonvpn provider mode uses gluetun's embedded server database which
doesn't contain US-TX#253 or US-TX#34. Our WireGuard keys are registered
for specific ProtonVPN servers, so connecting to other servers (US-TX#179,
US-TX#220) results in successful WireGuard handshake but ProtonVPN drops all
internet-bound traffic.

Fix: use VPN_SERVICE_PROVIDER=custom to directly configure the correct server
peer public key and endpoint IP for each worker. ExternalSecrets updated to
also pull public_key and endpoint_ip from Vault.

- tx253: endpoint=95.173.217.29, peer=mngiSxBpH7GU24nnWdBEcnhDnCPn2jq5+ZP3zwPwISA=
- tx34: endpoint=146.70.58.130, peer=wqJcz4akzVFxx35aJ5B7G/IJ9qsRvpcGNub3rLHcqXo=
2026-04-15 03:21:26 -05:00
Will Anderson 8a111a13b9 Add UPDATER_PERIOD to download fresh ProtonVPN server list
Will refresh gluetun's embedded server list from ProtonVPN API.
Need to extract public key for US-TX#253 (95.173.217.29) which
is not in gluetun's embedded database but should be in the live list.
2026-04-15 03:08:06 -05:00
Will Anderson 02dfeab975 Test free tier server to diagnose internet routing 2026-04-15 03:02:33 -05:00
Will Anderson d5f8955eb8 Test CA server with PF off to diagnose internet routing 2026-04-15 03:00:55 -05:00
Will Anderson 8d41fbfffc Test US-CA#20 for tx253 to diagnose internet routing failure 2026-04-15 02:59:34 -05:00
Will Anderson 91d0f4a130 Revert to valid gluetun server names (US-TX#179, US-TX#220)
US-TX#253 and US-TX#34 not in gluetun embedded server list — gluetun
crashes on startup. Reverted to valid names while investigating correct
server mapping. Need to find server public keys for Vault endpoint IPs.
2026-04-15 02:54:26 -05:00
Will Anderson 4f558ed576 Fix ProtonVPN server names to match registered WireGuard keys
Keys in Vault are registered for US-TX#253 (tx253 worker) and US-TX#34
(tx34 worker), but deployment was connecting to US-TX#179 and US-TX#220.
WireGuard handshake succeeded globally but ProtonVPN only routes internet
traffic through the server the key was registered with.
2026-04-15 02:48:47 -05:00
Will Anderson ff74ce644b Test: re-enable VPN_PORT_FORWARDING to check startup check behavior
With VPN_PORT_FORWARDING=off, gluetun startup check fails with TLS EOF
for generic IP-check services. Previous session showed startup check
PASSED with VPN_PORT_FORWARDING=on (only port-forwarding API failed).
Testing to confirm VPN routing works when startup check uses ProtonVPN
API instead of generic HTTPS services.
2026-04-15 02:40:56 -05:00
Will Anderson 8d6dd27435 Fix gluetun MTU for k3s Flannel network
eth0 MTU in pods is 1450 (Flannel VXLAN). gluetun's MTU discovery
was setting tun0 to 1440, making WireGuard outer packets ~1500 bytes
which exceeds the 1450 limit. TLS ClientHello gets dropped, causing
startup check to fail and loop. Fix: set MTU=1320 so WireGuard UDP
packets stay well under 1450.
2026-04-15 02:32:51 -05:00
Will Anderson de94ca216a Fix tx34 portforward-helper NATPMP: use single-line Python
Multiline NATPMP variable in tx34 had column-0 lines that broke
Go's YAML parser (same bug that was fixed in tx253). Replace with
identical single-line python3 -c approach.
2026-04-15 02:28:39 -05:00
Will Anderson c88f7022c6 Fix YAML: replace heredoc with inline Python for NAT-PMP portforward-helper 2026-04-15 02:24:40 -05:00
Will Anderson 6fc0fb2563 Disable gluetun port forwarding, use NAT-PMP directly in portforward-helper 2026-04-15 02:19:39 -05:00
Will Anderson c2a936f790 Fix gluetun routing deadlock: aggressively remove rule 100 from startup 2026-04-15 02:03:32 -05:00