A professional-grade, self-hosted IP Address Management (IPAM) system. Track, ping, scan, and manage every device on your network β all from a single, beautiful dashboard.
Launch the app with
docker compose up -dand visithttp://localhost:80
Most network tools are either too complex (enterprise software costing thousands) or too simple (a spreadsheet). IP-Manager is the sweet spot β a powerful, self-hosted command center that any team can deploy in under 2 minutes using Docker.
Not a developer? No problem. Here's the whole system explained like Lego bricks.
Think of IP-Manager as a smart post office for your network. Here's how the pieces snap together:
[ YOU, in your Browser ]
β
βΌ
[ π¦ PROXY (The Traffic Guard) ] β Nginx: routes requests to the right place
β
βββββ /api/* βββββββββββββββΊ [ βοΈ BACKEND (The Postmaster) ]
β β
β βββ Reads/writes data βββΊ [ ποΈ DATABASE ]
β βββ Runs network scans βββΊ [ π NMAP Tool ]
β
βββββ /* βββββββββββββββββββΊ [ π¨ FRONTEND (The Display Board) ]
| Lego Brick | Real Name | What It Does |
|---|---|---|
| π¦ The Traffic Guard | Nginx Proxy | Sits at the front door. If you ask for a webpage, it sends you to the Display Board. If you ask for data, it sends you to the Postmaster. |
| π¨ The Display Board | React Frontend | Everything you SEE and CLICK. Runs in your web browser. |
| βοΈ The Postmaster | Node.js / Express Backend | The brain. Processes all requests, enforces security rules, talks to the database and Nmap. |
| ποΈ The Filing Cabinet | PostgreSQL Database | Permanent, safe storage for all your IP records, users, logs, and settings. |
| π The Scanner | Nmap | A built-in network detective. The backend uses it to automatically discover live devices on your network. |
- β Add, βοΈ edit, and ποΈ delete IP records with rich metadata (hostname, ports, notes, status)
- π Organize IPs into Tabs [Tab: A folder/category to group related IPs, like "Floor 1 Servers"]
- π Full-text search across all fields (IP, hostname, note, status, ports)
- π Sort by any column with smart, numerically-correct IP ordering
- π€ Export to Excel (
.xlsx) with one click
- Auto-Ping [Auto-Ping: The system automatically checks if each IP is online, on a schedule you set]
- Real-time UP / DOWN status badges for every device
- Manual single-IP ping with packet loss and latency (ms) results
- Runs Nmap [Nmap: A free tool that scans a range of IP addresses and finds which ones have active devices] to scan an entire subnet [Subnet: A block of IP addresses, e.g.,
192.168.1.0/24covers 254 addresses] - Live scan progress with animated radar
- One-click import of discovered devices into your database
- JWT Authentication [JWT: A digital key/pass that proves who you are, valid for 24 hours]
- Two user roles:
admin(full access) andreadonly(view only) - A secret Super Admin account that only it can manage other users
- Password hashing with bcrypt [bcrypt: An algorithm that scrambles passwords so they can't be read even if someone steals the database]
- Rate limiting [Rate Limiting: Blocks anyone trying thousands of login attempts per minute]
- Security headers via Helmet [Helmet: A Node.js package that adds protective HTTP headers to prevent common web attacks]
- Share read-only IP lists publicly via a unique, secure link (no login required)
- Per-tab sharing toggle β share only what you choose
- Full JSON database backup (includes all IPs, tabs, users, settings, logs)
- One-click restore from a backup file
- Excel import/import for bulk IP management
- Every action is recorded: logins, IP changes, user management, discoveries
- Searchable, filterable log viewer in the dashboard
git clone https://github.com/Git-Raheman/ip-manager.git
cd ip-managerdocker compose -f docker/docker-compose.yml up -dPrerequisites: You only need Docker Desktop installed. Nothing else.
git clone https://github.com/Git-Raheman/ip-manager.git
cd ip-managerdocker compose up -d --buildThis command builds and starts 4 containers simultaneously:
postgres,backend,frontend, andproxy. The--buildflag ensures images are freshly compiled. The-dflag runs everything in the background.
http://localhost:80
| Field | Value |
|---|---|
| Username | admin |
| Password | admin123 |
β οΈ Change the default password immediately after first login!
# Stop and remove containers (data is preserved in the database volume)
docker compose down
# Stop AND delete all data (full wipe β use with caution!)
docker compose down -vip-manager/
β
βββ π docker-compose.yml β Orchestrates all 4 services
β
βββ π backend/
β βββ π³ Dockerfile β Node.js + Nmap + iputils image
β βββ π’ server.js β All API routes (1700+ lines of power)
β βββ ποΈ init.sql β Database schema & seed data
β βββ π¦ package.json
β
βββ π frontend/
β βββ π³ Dockerfile β Multi-stage: esbuild β Nginx
β βββ π src/
β β βββ βοΈ App.jsx β Main React application (all UI)
β β βββ π§© DiscoveryModal.jsx β Network scan modal
β β βββ π¨ styles.css β Full custom CSS design system
β β βββ π index.html / index.jsx
β βββ π¦ package.json
β
βββ π proxy/
βββ π³ Dockerfile β Nginx reverse proxy image
βββ βοΈ nginx.conf β Traffic routing rules
All configuration is managed through environment variables in docker-compose.yml. No config files to hunt down.
| Variable | Service | Default | Description |
|---|---|---|---|
POSTGRES_USER |
postgres | user |
Database username |
POSTGRES_PASSWORD |
postgres | password |
Database password |
POSTGRES_DB |
postgres | ipmanager |
Database name |
DATABASE_URL |
backend | (auto-set) | Full connection string |
PORT |
backend | 3000 |
Internal API port |
JWT_SECRET |
backend | supersecretkeychangeinproduction |
Change this in production! |
β οΈ For production deployments, generate a strong JWT secret:node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
| Method | Endpoint | Access | Description |
|---|---|---|---|
POST |
/api/login |
Public | Authenticate and receive a JWT token |
GET |
/api/ips |
Auth | List all IPs (paginated, searchable) |
POST |
/api/ips |
Admin | Add a new IP record |
PUT |
/api/ips/:id |
Admin | Update an IP record |
DELETE |
/api/ips/:id |
Admin | Delete an IP record |
POST |
/api/ips/bulk |
Admin | Bulk import IPs |
POST |
/api/ips/bulk-delete |
Admin | Bulk delete IPs |
GET |
/api/ips/export-excel |
Auth | Export IPs as .xlsx file |
GET |
/api/tabs |
Auth | List all tabs |
POST |
/api/tabs |
Admin | Create a new tab |
DELETE |
/api/tabs/:id |
Admin | Delete a tab |
POST |
/api/ping |
Auth | Ping a single IP/hostname |
POST |
/api/discovery/start |
Admin | Start an Nmap network scan |
GET |
/api/discovery/status/:jobId |
Admin | Poll scan progress |
POST |
/api/discovery/stop/:jobId |
Admin | Stop an active scan |
GET |
/api/backup/export |
Admin | Download full JSON backup |
POST |
/api/backup/import |
Admin | Restore from JSON backup |
GET |
/api/logs |
Admin | View system audit logs |
GET |
/api/public/tab/:token |
None | View a public shared IP list |
| Role | Login | View IPs | Add/Edit/Delete | Manage Users | Backup/Restore |
|---|---|---|---|---|---|
superadmin (username: admin) |
β | β | β | β | β |
admin |
β | β | β | β | β |
readonly |
β | β | β | β | β |
Public (no login) |
β | Shared tabs only | β | β | β |
- π‘οΈ Helmet.js β Sets HTTP security headers (XSS protection, content-type enforcement, etc.)
- π bcrypt β Passwords stored as salted hashes. Never in plain text.
- π« JWT (24h expiry) β Stateless sessions. No cookies to steal.
- π¦ Rate Limiting β Max 5,000 requests per 15 minutes per IP
- π« Non-root containers β All Docker containers run as unprivileged users
- β SQL Injection Prevention β All database queries use parameterized statements
- π CORS β Cross-Origin Resource Sharing properly configured
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License β see the LICENSE file for details.
Built with β€οΈ for network engineers, IT admins, and anyone who loves clean data.
β If this tool helps you, star the repo! β







