Kubernetes Deployment (Helm) β
MeshMonitor ships a Helm chart for deploying to any Kubernetes 1.19+ cluster. The chart lives under helm/meshmonitor/ in the repository and is fully documented in the chart README β this page is the docs-site landing point for Kubernetes installs.
Prerequisites β
- Kubernetes 1.19+
- Helm 3.0+
- A Meshtastic node reachable from the cluster (WiFi/Ethernet, or a Serial/BLE bridge exposing TCP)
- Optional: an ingress controller (nginx, Traefik, etc.) and cert-manager if you want TLS
Quick Start β
Clone the repository to get the chart sources:
bashgit clone --recurse-submodules https://github.com/Yeraze/meshmonitor.git cd meshmonitorCreate
custom-values.yamlwith the required node settings:yamlenv: meshtasticNodeIp: "192.168.1.100" # REQUIRED β your Meshtastic node IP meshtasticUseTls: "false" # REQUIRED β "true" for HTTPS to the nodeInstall the chart:
bashhelm install meshmonitor ./helm/meshmonitor -f custom-values.yamlAccess the UI. The default install creates a
ClusterIPservice; port-forward to reach it locally:bashkubectl port-forward svc/meshmonitor 8080:80Open http://localhost:8080 and sign in with the default credentials (
admin/changeme). Change the password immediately.
Common Configurations β
Ingress with TLS β
env:
meshtasticNodeIp: "192.168.1.100"
meshtasticUseTls: "false"
ingress:
enabled: true
className: "nginx"
hosts:
- host: meshmonitor.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: meshmonitor-tls
hosts:
- meshmonitor.example.comSubfolder Deployment β
To serve MeshMonitor at https://example.com/meshmonitor/:
env:
meshtasticNodeIp: "192.168.1.100"
meshtasticUseTls: "false"
baseUrl: "/meshmonitor"
ingress:
enabled: true
className: "nginx"
hosts:
- host: example.com
paths:
- path: /meshmonitor
pathType: PrefixPersistence β
The chart provisions a PersistentVolumeClaim by default (1Gi). Resize or point at an existing PVC:
persistence:
enabled: true
size: "5Gi"
# storageClass: "fast-ssd"
# existingClaim: "my-existing-pvc"Resource Limits β
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256MiUpgrading β
git pull
helm upgrade meshmonitor ./helm/meshmonitor -f custom-values.yamlThe chart appVersion is bumped on every MeshMonitor release; pin a specific image tag via image.tag if you need a stable target.
Uninstalling β
helm uninstall meshmonitor
# PVC is preserved by default β delete it explicitly if desired:
kubectl delete pvc meshmonitorTroubleshooting β
Can't reach the Meshtastic node from the pod:
kubectl run -it --rm debug --image=busybox --restart=Never -- wget -O- http://YOUR_NODE_IP
kubectl logs -l app.kubernetes.io/name=meshmonitorDatabase/permission errors:
kubectl get pvc
kubectl exec -it deployment/meshmonitor -- ls -la /dataPod not starting:
kubectl describe pod -l app.kubernetes.io/name=meshmonitor
kubectl logs -l app.kubernetes.io/name=meshmonitorReference β
- Helm chart README β full values tree, architecture diagram, and every supported option (canonical source).
- Chart sources β templates and default
values.yaml. - Production Deployment Guide β production hardening notes that apply to the Helm install.
- Deployment Guide β other deployment methods (Docker, bare metal, Proxmox LXC).
GitOps β
The chart is GitOps-friendly: commit your custom-values.yaml to a config repo and let ArgoCD or Flux apply it. Pin image.tag to a specific release rather than latest so deployments are reproducible.