# atlas **Repository Path**: class125good/atlas ## Basic Information - **Project Name**: atlas - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-05 - **Last Updated**: 2026-05-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ๐ŸŒ Atlas - Network Infrastructure Visualizer (Go-powered) **Atlas** is a full-stack containerized tool to **scan**, **analyze**, and **visualize** network infrastructure dynamically. Built with Go, FastAPI, NGINX, and a custom React frontend, it provides automated scanning, storage, and rich dashboards for insight into your infrastructure. --- ## ๐ŸŒ Live Demo ๐Ÿ”— **URL:** https://atlasdemo.vnerd.nl/ ๐Ÿ‘ค **Username:** `admin` ๐Ÿ”‘ **Password:** `change-me` --- ## ๐Ÿš€ What It Does Atlas performs three key functions: 1. **Scans Docker Containers** running on the host to extract: - IP addresses **(supports multiple IPs per container)** - MAC addresses **(supports multiple MACs per container)** - Open ports - Network names - OS type (from image metadata) - **Each network interface is tracked separately** 2. **Scans Local & Neighboring Hosts** on the subnet to: - Detect reachable devices - Retrieve OS fingerprints, MACs, and open ports - Populate a full map of the infrastructure 3. **Visualizes Data in Real-Time**: - Serves an interactive HTML dashboard via Nginx - Hosts a FastAPI backend for data access and control - Uses a React frontend to render dynamic network graphs --- ## ๐Ÿ–ผ๏ธ Screenshots ### ๐Ÿ–ฅ๏ธ Desktop View
Dashboard - Collapsed Layout

Dashboard - Circular Layout

Dashboard - Horizontal Layout

Dashboard - Hierarchical Layout

Hosts Table View

Hosts Table View

Logs Panel

Logs Panel

### ๐Ÿ“ฑ Mobile View
Mobile Dashboard - Collapsed

Dashboard - Collapsed

Mobile Dashboard - Horizontal

Dashboard - Horizontal

Mobile Hosts Table

Hosts Table

Mobile Logs Panel

Logs Panel

> ๐Ÿ’ก **Tip:** Click on any screenshot to view the full-size image --- ## ๐Ÿš€ Deployment (Docker) Run Atlas with optional port configuration: ```bash docker run -d \ --name atlas \ --network=host \ --cap-add=NET_RAW \ --cap-add=NET_ADMIN \ -v /var/run/docker.sock:/var/run/docker.sock \ -e ATLAS_UI_PORT='8884' \ -e ATLAS_API_PORT='8885' \ -e ATLAS_ADMIN_USER='admin' \ -e ATLAS_ADMIN_PASSWORD='change-me' \ -e ATLAS_AUTH_TTL_SECONDS='86400' -e FASTSCAN_INTERVAL='3600' \ -e DOCKERSCAN_INTERVAL='3600' \ -e DEEPSCAN_INTERVAL='7200' \ -e SCAN_SUBNETS="192.168.1.0/24,10.0.0.0/24" \ keinstien/atlas:{tag} ``` **Environment Variables:** - `ATLAS_UI_PORT` โ€“ Sets the port for the Atlas UI (Nginx). Default: `8888`. - `ATLAS_API_PORT` โ€“ Sets the port for the FastAPI backend. Default: `8889`. - `ATLAS_ADMIN_USER` โ€“ Admin username for login (single user). Default: `admin`. - `ATLAS_ADMIN_PASSWORD` โ€“ Enables UI/API authentication when set (required password for login). Default: `disabled`. - `ATLAS_AUTH_TTL_SECONDS` โ€“ Session lifetime in seconds. Default: `86400` (24h). - `FASTSCAN_INTERVAL` โ€“ Interval in seconds between fast scans. Default: `3600` (1 hour). - `DOCKERSCAN_INTERVAL` โ€“ Interval in seconds between Docker scans. Default: `3600` (1 hour). - `DEEPSCAN_INTERVAL` โ€“ Interval in seconds between deep scans. Default: `7200` (2 hours). - `SCAN_SUBNETS` โ€“ Comma-separated list of subnets to scan (e.g., "192.168.1.0/24,10.0.0.0/24"). If not set, Atlas will auto-detect the local subnet. This allows scanning multiple networks including LAN and remote servers. If not set, defaults are used (UI: `8888`, API: `8889`, scan intervals as shown above). Example endpoints: - UI: `http://localhost:ATLAS_UI_PORT` - API (from exposed API port): `http://localhost:ATLAS_API_PORT/api/docs` - API (based on nginx conf): `http://localhost:ATLAS_UI_PORT/api/docs` ### ๐Ÿ” Authentication Atlas authentication is optional and disabled by default. - **Enable auth:** set `ATLAS_ADMIN_PASSWORD` (and optionally `ATLAS_ADMIN_USER`). - **UI behavior:** when auth is enabled, the UI shows a login gate before any data is rendered. - **API behavior:** when auth is enabled, core endpoints (hosts, external, scripts, logs, scheduler, containers) require a token. Relevant auth endpoints: - `GET /api/auth/enabled` โ€“ returns whether auth is enabled - `POST /api/auth/login` โ€“ returns a bearer token - `GET /api/auth/me` โ€“ validates current token - `POST /api/auth/logout` โ€“ invalidates the current token **Scan Scheduling:** Atlas automatically runs scans at the configured intervals. You can: - Set initial intervals via environment variables (see above) - Change intervals dynamically through the Scripts Panel in the UI - Manually trigger scans via the UI or API at any time The scheduler starts automatically when the container starts and runs scans in the background. --- ## โš™๏ธ How it Works ### ๐Ÿ”น Backend Architecture - **Go CLI (`atlas`)** - Built using Go 1.22 - Handles: - `initdb`: Creates SQLite DB with required schema - `fastscan`: Fast host scan using ARP/Nmap - `dockerscan`: Gathers Docker container info from `docker inspect` - `deepscan`: Enriches data with port scans, OS info, etc. - **FastAPI Backend** - Runs on `port 8889` - Serves: - `/api/hosts` โ€“ all discovered hosts (regular + Docker) - `/api/external` โ€“ external IP and metadata - **NGINX** - Serves frontend (React static build) on `port 8888` - Proxies API requests (`/api/`) to FastAPI (`localhost:8889`) --- ## ๐Ÿ“‚ Project Structure **Source Code (Host Filesystem)** ``` atlas/ โ”œโ”€โ”€ config/ โ”‚ โ”œโ”€โ”€ atlas_go/ # Go source code (main.go, scan, db) โ”‚ โ”œโ”€โ”€ bin/ # Compiled Go binary (atlas) โ”‚ โ”œโ”€โ”€ db/ # SQLite file created on runtime โ”‚ โ”œโ”€โ”€ logs/ # Uvicorn logs โ”‚ โ”œโ”€โ”€ nginx/ # default.conf for port 8888 โ”‚ โ””โ”€โ”€ scripts/ # startup shell scripts โ”œโ”€โ”€ data/ โ”‚ โ”œโ”€โ”€ html/ # Static files served by Nginx โ”‚ โ””โ”€โ”€ react-ui/ # Frontend source (React) โ”œโ”€โ”€ Dockerfile โ”œโ”€โ”€ LICENSE โ””โ”€โ”€ README.md ``` **Inside Container (/config)** ``` /config/ โ”œโ”€โ”€ bin/atlas # Go binary entrypoint โ”œโ”€โ”€ db/atlas.db # Persistent SQLite3 DB โ”œโ”€โ”€ logs/ # Logs for FastAPI โ”œโ”€โ”€ nginx/default.conf # Nginx config โ””โ”€โ”€ scripts/atlas_check.sh # Entrypoint shell script ``` --- ## ๐Ÿงช React Frontend (Dev Instructions) This is a new React-based UI. ### ๐Ÿ› ๏ธ Setup and Build ```bash cd /swarm/data/atlas/react-ui npm install npm run build ``` The built output will be in: ``` /swarm/data/atlas/react-ui/dist/ ``` For development CI/CD (for UI and backend and build a new docker version): ```bash /swarm/github-repos/atlas/deploy.sh ``` ## ๐Ÿš€ CI/CD: Build and Publish a New Atlas Docker Image To deploy a new version and upload it to Docker Hub, use the provided CI/CD script: 1. Build and publish a new image: ```bash /swarm/github-repos/atlas/deploy.sh ``` - The script will prompt you for a version tag (e.g. `v3.2`). - It will build the React frontend, copy to NGINX, build the Docker image, and push **both** `keinstien/atlas:$VERSION` and `keinstien/atlas:latest` to Docker Hub. 2. Why push both tags? - **Version tag:** Allows you to pin deployments to a specific release (e.g. `keinstien/atlas:v3.2`). - **Latest tag:** Users can always pull the most recent stable build via `docker pull keinstien/atlas:latest`. 3. The script will also redeploy the running container with the new version. **Example output:** ```shell ๐Ÿ”„ Tagging Docker image as latest ๐Ÿ“ค Pushing Docker image to Docker Hub... โœ… Deployment complete for version: v3.2 ``` > **Note:** Make sure you are logged in to Docker Hub (`docker login`) before running the script. --- ## ๐ŸŒ URLs - **Swagger API docs:** - `๐ŸŒ http://localhost:8888/api/docs` (Host Data API endpoint) - **Frontend UI:** - `๐Ÿ–ฅ๏ธ UI http://localhost:8888/` (main dashboard) - `๐Ÿ“Š http://localhost:8888/hosts.html` (Hosts Table) - `๐Ÿงช http://localhost:8888/visuals/vis.js_node_legends.html` (legacy test UI) > Default exposed port is: `8888` ### ๐Ÿ“ก Scheduler API Endpoints New scheduler management endpoints: - `GET /api/scheduler/intervals` - Get current scan intervals for all scan types - `PUT /api/scheduler/intervals/{scan_type}` - Update interval for a specific scan type (fastscan, dockerscan, or deepscan) - `GET /api/scheduler/status` - Get scheduler status and current intervals Example: ```bash # Get current intervals curl http://localhost:8888/api/scheduler/intervals # Update fastscan interval to 30 minutes (1800 seconds) curl -X PUT http://localhost:8888/api/scheduler/intervals/fastscan \ -H "Content-Type: application/json" \ -d '{"interval": 1800}' # Check scheduler status curl http://localhost:8888/api/scheduler/status ``` --- ## โœ… Features - [x] **Multi-interface scanning** - Automatically detects and scans all physical network interfaces on the host - [x] Fast network scans (ping/ARP) - [x] **Multiple subnet scanning** - Scan your LAN, remote servers, and multiple networks simultaneously via SCAN_SUBNETS environment variable - [x] Docker container inspection with **multi-network support** - [x] **Multiple IPs and MACs per container** - Containers on multiple networks show all interfaces - [x] **Interface-aware host tracking** - Same host on multiple interfaces appears separately with interface labels - [x] External IP discovery - [x] Deep port scans with OS enrichment - [x] React-based dynamic frontend - [x] NGINX + FastAPI routing - [x] SQLite persistence - [x] **Scheduled auto scans with configurable intervals** - Configure via environment variables or UI - [x] **Dynamic interval management** - Change scan intervals without restarting the container --- ## ๐Ÿ“Œ Dev Tips To edit Go logic: - Main binary: `internal/scan/` - Commands exposed via: `main.go` To edit API: - Python FastAPI app: `scripts/app.py` To edit UI: - Modify React app under `/react-ui` - Rebuild and copy static files to `/html` - _automated deplolyment and publish to dockerhub using the script deploy.sh_ --- ## โš™๏ธ Automation Notes - Atlas runs automatically on container start. - All Go scan tasks run sequentially: - `initdb โ†’ fastscan โ†’ deepscan โ†’ dockerscan` - Scheduled scans are run every 30 minutes via Go timers. - No cron dependency required inside the container. - Scans can also be manually triggered via the UI using API post request. --- ## ๐Ÿ‘จโ€๐Ÿ’ป Author **Karam Ajaj** Infrastructure & Automation Engineer [https://github.com/karam-ajaj](https://github.com/karam-ajaj) --- ## ๐Ÿ“ License MIT License โ€” free for personal or commercial use. --- ## ๐Ÿ“š Documentation - [Multi-Interface Support](MULTI_INTERFACE_SUPPORT.md) - Detailed guide on the multi-interface scanning feature - [Migration Guide](MIGRATION_GUIDE.md) - Guide for migrating from bash scripts to Go implementation ## ๐Ÿค Contributing Suggestions, bug reports, and pull requests are welcome! ## Star History [![Star History Chart](https://api.star-history.com/svg?repos=karam-ajaj/atlas&type=date&legend=top-left)](https://www.star-history.com/#karam-ajaj/atlas&type=date&legend=top-left)