Skip to main content

Installation

Prerequisites

  • Network access to your NudgeBee Relay Server on port 443 (the relay URL is provided in the NudgeBee UI when you create a Proxy Agent account)
  • Network access from the agent to each datasource you want to monitor
  • Access key and secret from the NudgeBee UI (Admin → Integrations → Servers → Proxy Agent)

Replace <RELAY_URL>, <ACCESS_KEY>, and <ACCESS_SECRET> in the commands below with the values from the UI.

Option 1: Linux Install Script

Downloads and installs Forager as a systemd service on Linux. Requires root / sudo.

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

After installation:

PathDescription
/usr/local/bin/nudgebee-foragerBinary
/etc/nudgebee/forager.yamlConfig file
/var/lib/nudgebee/Data directory
nudgebee-foragersystemd service name

Service management:

systemctl status nudgebee-forager   # check status
journalctl -u nudgebee-forager -f # stream logs
systemctl restart nudgebee-forager # restart

Using a local config file: The installer creates /etc/nudgebee/forager.yaml with your access credentials. To add datasources, edit that file and restart:

sudo nano /etc/nudgebee/forager.yaml
# Add your datasources (see Configuration Reference), then restart:
sudo systemctl restart nudgebee-forager

Option 2: Windows Install Script

Downloads and installs Forager as a Windows Service that starts automatically on boot. Must be run in an Administrator PowerShell session.

$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://github.com/nudgebee/forager/releases/latest/download/install.ps1 | iex

After installation:

PathDescription
C:\Program Files\NudgeBee\nudgebee-forager.exeBinary
C:\ProgramData\NudgeBee\forager.yamlConfig file
C:\ProgramData\NudgeBee\Data directory
NudgebeeForagerWindows Service name

Service management:

Get-Service NudgebeeForager                  # check status
Restart-Service NudgebeeForager # restart
Stop-Service NudgebeeForager # stop

Using a local config file: The installer creates C:\ProgramData\NudgeBee\forager.yaml with your access credentials. To add datasources, edit that file and restart the service:

notepad C:\ProgramData\NudgeBee\forager.yaml
# Add your datasources (see Configuration Reference), then restart:
Restart-Service NudgebeeForager

Upgrading: Re-run the install script. It stops the existing service, replaces the binary, and starts the service again. Your existing config file is preserved.

Option 3: Docker

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 \
--restart unless-stopped \
ghcr.io/nudgebee/forager:latest

Using a local config file: Mount your config file into the container at /etc/nudgebee/forager.yaml. Forager automatically looks for it there — no extra flags needed:

docker run -d --name nudgebee-forager \
-v /path/to/forager.yaml:/etc/nudgebee/forager.yaml:ro \
-v forager-data:/data \
--restart unless-stopped \
ghcr.io/nudgebee/forager:latest

When using a config file, you can put relay_url, access_key, and access_secret in the YAML instead of passing them as env vars.

Option 4: Docker Compose

# docker-compose.yaml
services:
forager:
image: ghcr.io/nudgebee/forager:latest
restart: unless-stopped
environment:
- NB_RELAY_URL=<RELAY_URL>
- NB_ACCESS_KEY=<ACCESS_KEY>
- NB_ACCESS_SECRET=<ACCESS_SECRET>
volumes:
- forager-data:/data

volumes:
forager-data:
docker compose up -d

Using a local config file: Mount the file at /etc/nudgebee/forager.yaml:

# docker-compose.yaml
services:
forager:
image: ghcr.io/nudgebee/forager:latest
restart: unless-stopped
volumes:
- ./forager.yaml:/etc/nudgebee/forager.yaml:ro
- forager-data:/data

volumes:
forager-data:

Place your forager.yaml in the same directory as docker-compose.yaml, then run docker compose up -d.

Option 5: Helm

helm install nudgebee-forager \
oci://ghcr.io/nudgebee/charts/forager \
--set forager.relayURL=<RELAY_URL> \
--set forager.accessKey=<ACCESS_KEY> \
--set forager.accessSecret=<ACCESS_SECRET>

Helm Values Reference

Create a values.yaml to customize the deployment:

replicaCount: 1

image:
repository: ghcr.io/nudgebee/forager
pullPolicy: IfNotPresent
tag: "latest"

forager:
relayURL: wss://<RELAY_HOST>/register # provided in the NudgeBee UI
accessKey: ""
accessSecret: ""
dataDir: /data

# Cloud secret provider config (only needed for cloud credential sources)
gcp:
projectID: my-gcp-project
credentialsFile: "" # optional, uses ADC if omitted

aws:
region: us-east-1

azure:
vaultURL: https://myvault.vault.azure.net
tenantID: ""
clientID: ""

datasources:
- name: my-postgres
type: postgresql
host: postgres.default
port: 5432
database: mydb
credential_source: gcp_sm
credential_ref: projects/my-project/secrets/pg-creds/versions/latest

- name: cloud-sql
type: postgresql
host: 10.0.1.60
port: 5432
database: appdb
ssl_mode: require
credential_source: gcp_sm
credential_ref: projects/my-project/secrets/cloudsql-creds/versions/latest

- name: cache
type: redis
host: redis-master.default
port: 6379
credential_source: gcp_sm
credential_ref: projects/my-project/secrets/redis-creds/versions/latest

resources:
limits:
memory: 256Mi
requests:
cpu: 50m
memory: 128Mi

serviceAccount:
create: true
annotations: {}

# Additional environment variables
extraEnv: []

# Additional volume mounts for the forager container
extraVolumeMounts: []

# Additional volumes for the pod
extraVolumes: []

Datasources listed under forager.datasources are rendered into a ConfigMap and mounted as /etc/nudgebee/forager.yaml inside the pod automatically — no extra volume setup needed.

Then install with:

helm install nudgebee-forager \
oci://ghcr.io/nudgebee/charts/forager \
-f values.yaml

GKE with GCP Secret Manager

When running on GKE without Workload Identity, mount a GCP service account key:

serviceAccount:
create: true
annotations:
iam.gke.io/gcp-service-account: forager@my-project.iam.gserviceaccount.com

extraEnv:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: /var/secrets/gcp/key.json

extraVolumeMounts:
- name: gcp-sa-key
mountPath: /var/secrets/gcp
readOnly: true

extraVolumes:
- name: gcp-sa-key
secret:
secretName: forager-gcp-sa-key

Create the Kubernetes secret with the SA key:

kubectl create secret generic forager-gcp-sa-key \
--from-file=key.json=/path/to/sa-key.json

If Workload Identity is enabled, you only need the service account annotation — no key file or extra volumes required.

EKS with AWS Secrets Manager

On EKS, use IRSA (IAM Roles for Service Accounts):

serviceAccount:
create: true
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::123456789:role/forager-role

No extra volumes needed — the AWS SDK picks up credentials from the IRSA token automatically.

AKS with Azure Key Vault

On AKS, use pod-managed identity or workload identity:

serviceAccount:
create: true
annotations:
azure.workload.identity/client-id: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Verify

Check that the service is running:

Linux:

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

Windows — check service status:

Get-Service NudgebeeForager

Expected output:

Status   Name               DisplayName
------ ---- -----------
Running NudgebeeForager NudgeBee Forager

To see the actual log output on Windows, run the binary directly in a PowerShell window — see Troubleshooting: Windows Service.

Docker / Helm — stream logs:

docker logs nudgebee-forager --tail 50
# or
kubectl logs <forager-pod> --tail 50

On Linux and Docker/Helm you should see:

{"level":"INFO","msg":"starting forager"}
{"level":"INFO","msg":"connected to relay, greeting sent"}
{"level":"INFO","msg":"sent datasource inventory for auto-registration"}

Configured datasources will appear automatically in the NudgeBee UI under your account.