NetAlertX — a network scanner and intrusion detector that alerts you when unknown devices join your network, with device history and presence tracking. Deployed as a single host-networked Nomad service.
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ★ 7.2k ⚑ Report an issue
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "netalertx"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The NetAlertX container image. Pin a tag in production.
image = "ghcr.io/netalertx/netalertx:latest"
# Host port for the NetAlertX web UI.
port = 20211
# Host port for the internal GraphQL API.
graphql_port = 20214
# Named volume for NetAlertX config and database (contains config/ and db/).
data_volume = "netalertx_data"
# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". Pin to the node whose LAN you want scanned.
constraints = []
# The task resources.
resources = {
cpu = 500
memory = 512
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "netalertx" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "ghcr.io/netalertx/netalertx:latest" | The NetAlertX container image. Pin a tag in production. |
| port | number | 20211 | Host port for the NetAlertX web UI. |
| graphql_port | number | 20214 | Host port for the internal GraphQL API. |
| data_volume | string | "netalertx_data" | Named volume for NetAlertX config and database (contains config/ and db/). |
| constraints | list | [] | Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". Pin to the node whose LAN you want scanned. |
| resources | object | {
cpu = 500
memory = 512
} | The task resources. |
No variables match.
This pack stores data in one Docker named volume:
netalertx_data
restic
# Run on the node hosting this pack. Point restic at your repo first: # export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>" # export RESTIC_PASSWORD="<repo-password>" # export AWS_ACCESS_KEY_ID=<key> AWS_SECRET_ACCESS_KEY=<secret> restic backup \ /var/lib/docker/volumes/netalertx_data/_data
rclone (sync to S3/R2)
rclone sync /var/lib/docker/volumes/netalertx_data/_data backup:<bucket>/netalertx_data
Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.
NetAlertX (formerly PiAlert) scans your local network and keeps a live inventory of every device that connects. It alerts you the moment an unknown device joins, tracks presence (who's home), records device history and sessions, and can notify via dozens of channels. A great companion to a home lab or any network you want to keep an eye on.
This pack runs NetAlertX as a single host-networked Nomad service with the raw-socket capabilities it needs to scan the LAN.
nomad-pack run netalertx --registry=nomploy
Open http://<node-ip>:20211. NetAlertX scans the network of the node it runs
on — pin it to the right node with constraints.
| Variable | Default | Description |
|---|---|---|
image |
ghcr.io/netalertx/netalertx:latest |
Container image (pin a tag in production). |
port |
20211 |
Host port for the web UI. |
graphql_port |
20214 |
Host port for the internal GraphQL API. |
data_volume |
netalertx_data |
Volume for config and database (/data). |
constraints |
none | Pin to the node whose LAN you want scanned. |
resources |
500 MHz / 512 MB | CPU and memory for the task. |
Config and the device database persist in data_volume under /data/config
and /data/db. A prestart init task creates those folders and fixes
permissions.