Skip to main content

Upgrade

This page covers upgrading the Proxy Agent (Forager) binary after the initial installation. All install methods support in-place upgrades that preserve your config and data directory.

When to Upgrade

  • After a security advisory or bug-fix release.
  • When you hit behavior the latest release has fixed — check the release notes for the list of issues addressed in each version.
  • Before opening a support request: reproducing on the latest build eliminates a large class of already-fixed issues.

Stay within recent versions to avoid protocol drift between the agent and the NudgeBee server.

Check Your Current Version

Forager prints its build version with --version:

nudgebee-forager --version
# Docker: docker exec nudgebee-forager nudgebee-forager --version
# Helm: kubectl -n <namespace> exec deploy/nudgebee-forager-nudgebee-forager-chart -- nudgebee-forager --version

The agent also reports this version in its WebSocket greeting, so the NudgeBee UI (Admin → Integrations → Servers → Proxy Agent) shows the running version and last-connected time. That's the fastest cross-check.

For older agents that predate the --version flag, fall back to the binary's build timestamp and hash:

Linux (systemd):

stat -c '%y' /usr/local/bin/nudgebee-forager
sha256sum /usr/local/bin/nudgebee-forager

Windows:

Get-Item "C:\Program Files\Nudgebee\nudgebee-forager.exe" | Select-Object LastWriteTime, Length
Get-FileHash "C:\Program Files\Nudgebee\nudgebee-forager.exe"

Docker / Docker Compose:

docker inspect nudgebee-forager --format '{{.Image}} created {{.Created}}'
docker image inspect registry.nudgebee.com/nudgebee-forager:latest --format '{{.RepoDigests}}'

Helm-a includes chart defaults so the image tag shows even if you never overrode it:

helm get values nudgebee-forager -a -o yaml | grep -A1 image
kubectl -n <namespace> get deploy nudgebee-forager-nudgebee-forager-chart \
-o jsonpath='{.spec.template.spec.containers[0].image}'; echo

Replace nudgebee-forager-nudgebee-forager-chart with <release-name>-nudgebee-forager-chart if you installed under a different Helm release name.

Upgrade by Install Method

In every method below, your config file and data directory are preserved. Only the binary (or container image) is replaced.

Option 1: Linux Install Script (systemd)

Re-run the installer. It stops the service, replaces the binary in /usr/local/bin/, reinstalls the systemd unit file, and restarts the service. Existing /etc/nudgebee/forager.yaml is not overwritten.

curl -fsSL https://registry.nudgebee.com/downloads/forager/latest/install.sh | \
NB_RELAY_URL=<RELAY_URL> \
NB_ACCESS_KEY=<ACCESS_KEY> \
NB_ACCESS_SECRET=<ACCESS_SECRET> \
bash

Pin a specific version (useful for staged rollouts or rollback) — the script reads NB_VERSION from the environment:

curl -fsSL https://registry.nudgebee.com/downloads/forager/latest/install.sh | \
NB_VERSION=<version> NB_RELAY_URL=... NB_ACCESS_KEY=... NB_ACCESS_SECRET=... bash

Check the service is back up:

systemctl status nudgebee-forager
journalctl -u nudgebee-forager -f

Option 2: Windows Install Script (Windows Service)

Re-run the PowerShell installer in an Administrator shell. It stops the NudgebeeForager service, replaces C:\Program Files\Nudgebee\nudgebee-forager.exe, and restarts the service. Existing C:\ProgramData\Nudgebee\forager.yaml is preserved.

$env:NB_RELAY_URL="<RELAY_URL>"
$env:NB_ACCESS_KEY="<ACCESS_KEY>"
$env:NB_ACCESS_SECRET="<ACCESS_SECRET>"
Set-ExecutionPolicy Bypass -Scope Process -Force
iwr -useb https://registry.nudgebee.com/downloads/forager/latest/install.ps1 | iex

Verify:

Get-Service NudgebeeForager
Get-EventLog -LogName Application -Source NudgebeeForager -Newest 20

Option 3: Docker

docker pull registry.nudgebee.com/nudgebee-forager:latest
docker stop nudgebee-forager
docker rm nudgebee-forager
docker run -d --name nudgebee-forager \
-e NB_RELAY_URL=<RELAY_URL> \
-e NB_ACCESS_KEY=<ACCESS_KEY> \
-e NB_ACCESS_SECRET=<ACCESS_SECRET> \
-v forager-data:/data \
# -v /path/to/forager.yaml:/etc/nudgebee/forager.yaml \ # uncomment if you use a config file instead of env vars
--restart unless-stopped \
registry.nudgebee.com/nudgebee-forager:latest

The forager-data named volume survives the rm, so data persists. If your original container mounted a config file, re-add the same -v line on the new container — otherwise the agent falls back to the NB_* environment variables shown above.

Option 4: Docker Compose

# From the directory containing docker-compose.yaml
docker compose pull
docker compose up -d

Compose re-creates the container with the fresh image and keeps the volume. If you pinned a specific tag in the compose file (instead of :latest), edit it first:

# docker-compose.yaml
services:
forager:
image: registry.nudgebee.com/nudgebee-forager:2026-04-03T09-18-00_05dfc46 # change this

Then:

docker compose pull
docker compose up -d

Option 5: Helm

With a custom values.yaml (recommended — keeps your config explicit and survives chart upgrades that introduce new defaults):

helm upgrade nudgebee-forager \
oci://registry.nudgebee.com/nudgebee-forager-chart \
-f values.yaml

To a specific image tag (overrides only the tag from your values file):

helm upgrade nudgebee-forager \
oci://registry.nudgebee.com/nudgebee-forager-chart \
-f values.yaml \
--set image.tag=<tag>

Avoid --reuse-values unless you've verified the new chart hasn't added new required values or restructured existing ones. --reuse-values ignores the new chart defaults entirely, which can leave you on a broken release. If you need that behavior on Helm 3.14+, prefer --reset-then-reuse-values, which merges your overrides on top of the new defaults.

Watch the rollout:

kubectl -n <namespace> rollout status deployment/nudgebee-forager-nudgebee-forager-chart
kubectl -n <namespace> logs -l app.kubernetes.io/name=nudgebee-forager-chart --tail=100 -f

Verify the Upgrade

After any upgrade:

  1. Connection status — the NudgeBee UI should show the agent as "Connected" within ~10 seconds. If it flips to "Not Connected" and stays there, see Troubleshooting.
  2. Datasources healthy — each configured datasource should show status: healthy in the agent's connection status JSON. Check via the UI or by running SELECT 1 against one of them through NudgeBee's AI.
  3. Log sanity — tail logs for any ERROR or repeated reconnect loops for 2–3 minutes:
    journalctl -u nudgebee-forager -f            # Linux
    docker logs -f nudgebee-forager # Docker
    kubectl logs -f deploy/nudgebee-forager-nudgebee-forager-chart -n <ns> # Helm

Rollback

If the new version misbehaves, roll back to a known-good tag. The image registry keeps all past builds indexed by git SHA and by timestamp-SHA. List them:

curl -s https://registry.nudgebee.com/v2/nudgebee-forager/tags/list | jq -r .tags[]

If registry.nudgebee.com requires auth in your environment, add -u <user>:<token> (basic) or -H "Authorization: Bearer <token>". The full list of available tags is also visible in the NudgeBee UI under Admin → Integrations → Servers → Proxy Agent.

Linux / Windows: re-run the installer with NB_VERSION=<older-tag>:

curl -fsSL https://registry.nudgebee.com/downloads/forager/<older-tag>/install.sh | \
NB_VERSION=<older-tag> NB_RELAY_URL=... NB_ACCESS_KEY=... NB_ACCESS_SECRET=... bash

Docker: pull the older tag and recreate the container with it:

docker pull registry.nudgebee.com/nudgebee-forager:<older-tag>
docker stop nudgebee-forager && docker rm nudgebee-forager
docker run -d --name nudgebee-forager ... registry.nudgebee.com/nudgebee-forager:<older-tag>

Helm: use helm rollback (fastest, no need to know the old tag):

helm history nudgebee-forager
helm rollback nudgebee-forager <revision>

Zero-downtime Upgrades (Helm only)

For Helm deployments with replicaCount: 2+, Kubernetes handles rolling updates automatically — one pod is replaced at a time, and the NudgeBee Relay Server tolerates the brief reconnect. Single-replica Linux/Windows/Docker installs will see a ~5–10 second outage while the binary restarts; user-driven queries arriving in that window will surface as a transient error in the UI. For maintenance windows, prefer the Helm path or schedule the upgrade outside of active investigation periods.

Common Upgrade Problems

SymptomLikely causeFix
Service won't start after upgrade on LinuxStale systemd unit filesystemctl daemon-reload && systemctl restart nudgebee-forager
Agent connects but datasources show Not ConnectedConfig push from relay not yet received after reconnectWait 30–60s. If it persists, restart: systemctl restart nudgebee-forager.
401 authentication failed after upgradeAccess key/secret rotated separatelyRegenerate and re-run installer with new values
Windows installer fails with "cannot overwrite running binary"Service didn't stop cleanlyStop-Service NudgebeeForager -Force then re-run the installer
Docker Unable to find image on rollbackOlder tag no longer cached locallydocker pull registry.nudgebee.com/nudgebee-forager:<tag> first
Helm rollback leaves pods stuck TerminatingPod's preStop hook is slowkubectl delete pod <name> --grace-period=0 --force (last resort)

For deeper diagnostics see Troubleshooting.