Self-hosted Network Operations Center for hosting providers
Monitor servers, network devices, customer bandwidth, and security threats β all from a single pane of glass.
Features β’ Architecture β’ Quick Start β’ Documentation β’ Contributing β’ Code of Conduct
|
|
|
|
|
|
ββββββββββββββββββββββββββββ
β Traefik (HTTPS) β
β Reverse Proxy + TLS + LDAPβ
ββββββββββββ¬ββββββββββββββββ
β
βββββββββββββββββββββΌββββββββββββββββββββ
β β β
βββββββΌββββββ βββββββΌββββββ ββββββββΌββββββ
β Grafana β β LibreNMS β β ntopng β
β Dashboards β β Network β β Traffic β
β + Alerts β β Monitoringβ β Analysis β
βββββββ¬ββββββ βββββββ¬ββββββ ββββββββ¬ββββββ
β β β
βββββββΌββββββ βββββββΌββββββ ββββββββΌββββββ
β Prometheus β β MariaDB β β OpenSearchβ
β Metrics β β + Redis β β Security β
βββββββ¬ββββββ βββββββββββββ ββββββββ¬ββββββ
β β
βββββββΌββββββ ββββββββΌββββββ
β Loki β β Suricata β
β Logs β β (Optional)β
βββββββββββββ ββββββββββββββ
| Service | Role | Port |
|---|---|---|
| Traefik | Reverse proxy, TLS, rate limiting, LDAP auth | 80, 443 |
| Grafana | Metrics dashboards, alerting UI | 3000 |
| Prometheus | Metrics collection, alert evaluation | 9090 |
| Loki | Log aggregation | 3100 |
| Alertmanager | Alert routing, deduplication, notifications | 9093 |
| OpenSearch | Security events, flow history, log analytics | 9200 |
| LibreNMS | SNMP network discovery, syslog, billing | 80 |
| ntopng | NetFlow/sFlow/IPFIX, DDoS detection | 3000 |
| MariaDB | LibreNMS database | 3306 |
| Redis | Cache and queue | 6379 |
| Protocol | Port | Devices |
|---|---|---|
| NetFlow v5/v9 | 2055 UDP/TCP | Cisco, Juniper, MikroTik, Linux (softflowd) |
| IPFIX | 4739 UDP/TCP | Cisco, Arista, Fortinet |
| sFlow | 6343 UDP | Arista, Fortinet, OPNsense |
- Docker 24.0+ & Compose v2.20+
- Ubuntu 22.04+ / Debian 12+ / Rocky Linux 9+
- 4+ CPU cores, 16GB+ RAM, 200GB+ SSD
Pull the pre-built Docker image with all tools and configs included:
docker pull ghcr.io/samsesh/opennoc:latest
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
-v "$(pwd)/.env:/opennoc/.env" \
ghcr.io/samsesh/opennocTry OpenHostingNOC in 2 commands β uses nip.io to auto-resolve your IP, HTTP only:
git clone https://github.com/samsesh/OpenHostingNOC.git
cd OpenHostingNOC
sudo ./scripts/install.sh # Choose option 1 (Quick Setup)Access at http://<YOUR_IP>:3000 (Grafana) β default credentials: admin / admin.
git clone https://github.com/samsesh/OpenHostingNOC.git
cd OpenHostingNOC
sudo ./scripts/install.sh # Choose option 2 (Full Setup)Requires a domain with wildcard DNS pointing to your server IP.
- Generates
.envwith your choice of quick or full settings - Creates directory structure
- Pulls all Docker images
- Starts all 18+ services
- Waits for health checks
- Initializes LibreNMS
- Prints access URLs
./scripts/healthcheck.sh # Check everything is healthy
docker compose ps # View service status
docker compose logs -f # Follow live logsQuick setup (HTTP, no domain):
| Service | URL | Default Credentials |
|---|---|---|
| Grafana | http://<IP>:3000 |
admin / admin |
| Prometheus | http://<IP>:9090 |
admin / admin (via SSO) |
| LibreNMS | http://<IP>:8000 |
admin / admin (via LDAP) |
| ntopng | http://<IP>:3003 |
admin / admin (via SSO) |
| Alertmanager | http://<IP>:9093 |
via SSO |
| Loki | http://<IP>:3100 |
via SSO |
| OpenSearch Dashboards | http://<IP>:5601 |
admin / admin |
Full setup (HTTPS, your domain):
| Service | URL | Auth |
|---|---|---|
| Grafana | https://grafana.$DOMAIN |
LDAP |
| LibreNMS | https://librenms.$DOMAIN |
LDAP |
| ntopng | https://ntopng.$DOMAIN |
LDAP via SSO |
| Prometheus | https://prometheus.$DOMAIN |
LDAP via SSO |
| Alertmanager | https://alertmanager.$DOMAIN |
LDAP via SSO |
| OpenSearch Dashboards | https://dashboards.$DOMAIN |
admin + password |
- Monitor hundreds of servers and thousands of customer IPs
- Track per-customer bandwidth usage for billing (95th percentile)
- Detect and alert on DDoS attacks targeting your infrastructure
- SLA monitoring with ping/latency probes
- Monitor BGP sessions, OSPF neighbors, interface utilization
- Collect NetFlow from core routers for traffic analysis
- Config backup for all network devices via Oxidized
- Security event correlation from Suricata and ntopng
- Unified monitoring across Linux/Windows/VMware/Proxmox
- Centralized logging with Loki
- Container monitoring with cAdvisor
- RBAC via LDAP for team access control
Full documentation is in the docs/ directory and GitHub Wiki:
| Topic | Docs | Wiki |
|---|---|---|
| Installation Guide | docs/installation | Wiki |
| Configuration | docs/configuration | Wiki |
| NetFlow Examples | docs/configuration/netflow-examples.md | Wiki |
| Upgrade Guide | docs/upgrade | Wiki |
| Backup & Restore | docs/backup | Wiki |
| Troubleshooting | docs/troubleshooting | Wiki |
| High Availability | docs/ha | Wiki |
| Scaling | docs/scaling | Wiki |
| Security | docs/security | Wiki |
| Disaster Recovery | docs/disaster-recovery | Wiki |
| Script | Purpose |
|---|---|
scripts/install.sh |
Full installation of all services |
scripts/update.sh |
Update services with rollback support |
scripts/backup.sh |
Backup all configs, databases, volumes |
scripts/restore.sh |
Restore from any backup |
scripts/healthcheck.sh |
Comprehensive system health check |
scripts/cert-renew.sh |
Manual TLS certificate renewal trigger |
scripts/db-optimize.sh |
MariaDB/OpenSearch index optimization |
scripts/cleanup.sh |
Remove old data, logs, Docker artifacts |
scripts/logrotate.sh |
Log rotation for non-Docker services |
Emergency ββββ Telegram ββββ Discord (@everyone) ββββ Slack (@channel) ββββ Email ββββ Webhook
Critical βββββ Telegram ββββ Discord ββββ Slack ββββ Email ββββ Webhook
Warning ββββββ Telegram ββββ Email (digest)
Security βββββ Telegram ββββ Email (dedicated security channel)
Maintenance ββ Silenced via Alertmanager
- TLS 1.3 with strong ciphers, HSTS preload
- LDAP/AD authentication for all services
- Rate limiting (100 req/s per IP)
- Security headers (CSP, X-Frame-Options, etc.)
- Network segmentation β 6 isolated Docker networks
- Non-root containers with resource limits
- Fail2Ban for SSH brute force protection
- Suricata optional IDS/IPS with OpenSearch export
- Automated backups with S3 off-site sync
| Capacity | RAM | Storage | OpenSearch Nodes |
|---|---|---|---|
| 1 Gbps | 16 GB | 1 TB | 1 |
| 10 Gbps | 48 GB | 4 TB | 3 |
| 25 Gbps | 96 GB | 10 TB | 3 |
| 40 Gbps | 192 GB | 20 TB | 3+ |
| 100 Gbps | 384 GB+ | 40 TB+ | 5+ |
Traefik 3.7 β Reverse Proxy
Grafana 11 β Dashboards
Prometheus 3.13 β Metrics
Loki 3.8 β Logs
OpenSearch 2.19 β Search & Analytics
LibreNMS 26.6 β Network Monitoring
ntopng (latest) β Traffic Analysis
MariaDB 11 β SQL Database
Redis 7 β Cache
Alertmanager β Alert Routing
cAdvisor 0.60 β Container Metrics
Suricata 7 β IDS/IPS (optional)
Push to Localhost or main triggers all workflows automatically.
Please read CONTRIBUTING.md for details on our code of conduct, commit conventions, development workflow, and how to submit pull requests.
We welcome bug reports, feature requests, documentation improvements, and new integrations.
MIT License β see LICENSE for details.
If you find this project useful, consider supporting development:
- Donation Page: donate.samsesh.net