Cut the test environment over to the 3-node Proxmox NATS cluster.
Some checks are pending
offline / test (push) Waiting to run

Fleet/keep/middleware NATS_URL lists 10.10.10.21–23. Product streams
are replicas=3. px-worker worm/tree run on that cluster. Backup timer
and px-worker uptime watch are on. MOCK_VERAE and Zapier push unchanged.
This commit is contained in:
George Lambert 2026-09-11 23:59:38 -04:00
parent 69e28af4d8
commit a73875f4ef
29 changed files with 184 additions and 43 deletions

View file

@ -7,6 +7,7 @@ Type=simple
WorkingDirectory=%h/verae-keep
Environment=KEEP_UNITS=%h/verae-keep/units.ns1.json
Environment=KEEP_STATE=%h/verae-keep/data
Environment=NATS_URL=nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222
ExecStart=/usr/bin/bash %h/verae-keep/scripts/guard.sh
Restart=always
RestartSec=2

View file

@ -0,0 +1,15 @@
[Unit]
Description=Verae keep-alive guard (restarts watch + keep)
After=network.target
[Service]
Type=simple
WorkingDirectory=%h/verae-keep
Environment=KEEP_UNITS=%h/verae-keep/units.ns1.json
Environment=KEEP_STATE=%h/verae-keep/data
ExecStart=/usr/bin/bash %h/verae-keep/scripts/guard.sh
Restart=always
RestartSec=2
[Install]
WantedBy=default.target

View file

@ -7,15 +7,22 @@
{
"id": "nats",
"title": "NATS JetStream (loopback)",
"tcp": { "host": "127.0.0.1", "port": 4222 },
"tcp": {
"host": "10.10.10.21",
"port": 4222
},
"managed": false,
"defaultIntent": "run"
"defaultIntent": "run",
"env": {}
},
{
"id": "job-poller-0",
"health": "http://127.0.0.1:13200/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "job-poller",
"FLEET_SERVICE": "job-poller",
@ -23,14 +30,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13200",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/job-poller-0"
"FLEET_STATE_DIR": "data/job-poller-0",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "webhook-deliver-0",
"health": "http://127.0.0.1:13300/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "webhook-deliver",
"FLEET_SERVICE": "webhook-deliver",
@ -38,14 +50,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13300",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/webhook-deliver-0"
"FLEET_STATE_DIR": "data/webhook-deliver-0",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "archive-aggregator-0",
"health": "http://127.0.0.1:13400/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "archive-aggregator",
"FLEET_SERVICE": "archive-aggregator",
@ -53,14 +70,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13400",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/archive-aggregator-0"
"FLEET_STATE_DIR": "data/archive-aggregator-0",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "archive-worm-0",
"health": "http://127.0.0.1:13500/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "archive-worm",
"FLEET_SERVICE": "archive-worm",
@ -68,14 +90,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13500",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/archive-worm-0"
"FLEET_STATE_DIR": "data/archive-worm-0",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "archive-worm-1",
"health": "http://127.0.0.1:13501/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "archive-worm",
"FLEET_SERVICE": "archive-worm",
@ -83,14 +110,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13501",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/archive-worm-1"
"FLEET_STATE_DIR": "data/archive-worm-1",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "archive-worm-2",
"health": "http://127.0.0.1:13502/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "archive-worm",
"FLEET_SERVICE": "archive-worm",
@ -98,14 +130,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13502",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/archive-worm-2"
"FLEET_STATE_DIR": "data/archive-worm-2",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "tree-node-0",
"health": "http://127.0.0.1:13600/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "tree-node",
"FLEET_SERVICE": "tree-node",
@ -113,14 +150,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13600",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/tree-node-0"
"FLEET_STATE_DIR": "data/tree-node-0",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "tree-node-1",
"health": "http://127.0.0.1:13601/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "tree-node",
"FLEET_SERVICE": "tree-node",
@ -128,14 +170,19 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13601",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/tree-node-1"
"FLEET_STATE_DIR": "data/tree-node-1",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
},
{
"id": "tree-node-2",
"health": "http://127.0.0.1:13602/health",
"cwd": "~/verae-fleet-runtime",
"command": ["node", "src/worker.js"],
"command": [
"node",
"src/worker.js"
],
"env": {
"FLEET_ROLE": "tree-node",
"FLEET_SERVICE": "tree-node",
@ -143,7 +190,9 @@
"FLEET_MACHINE": "ns1",
"FLEET_HEALTH_PORT": "13602",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/tree-node-2"
"FLEET_STATE_DIR": "data/tree-node-2",
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222",
"JETSTREAM_REPLICAS": "3"
}
}
]

View file

@ -17,7 +17,7 @@
"FLEET_HEALTH_PORT": "13500",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/archive-worm-px-0",
"NATS_URL": "nats://10.10.10.1:4222"
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222"
}
},
{
@ -33,7 +33,7 @@
"FLEET_HEALTH_PORT": "13600",
"FLEET_HEALTH_BIND": "127.0.0.1",
"FLEET_STATE_DIR": "data/tree-node-px-0",
"NATS_URL": "nats://10.10.10.1:4222"
"NATS_URL": "nats://10.10.10.21:4222,nats://10.10.10.22:4222,nats://10.10.10.23:4222"
}
}
]