A Modern Looking Glass Panel for Multi-Line Monitoring
Recently, we needed to perform four-line monitoring tests for a client. After searching extensively online, we discovered that most existing Looking Glass panels were outdated PHP-based solutions—either with limited functionality, obsolete UI, or long-abandoned projects. None could meet our needs.
So, we decided to build our own.
Together with a few friends, we developed NetMirror, a brand-new Looking Glass project aimed at providing a more modern, user-friendly solution for data centers, oneman operations, and networking enthusiasts.
Special thanks to wikihost-opensource and Hybula for the inspiration and architecture ideas their projects provided.
🚀 What is NetMirror?
NetMirror is a feature-rich, visually appealing, and modern Looking Glass server-side panel designed for displaying and testing multi-region network nodes. It supports essential networking tools such as ping, traceroute, mtr, speedtest, and more. All nodes are displayed in a unified interface to help users evaluate latency, stability, and performance across different routes.
🔗 Live Demo
GitHub Repo: https://github.com/catcat-blog/NetMirror (Feel free to star 🌟)
Live Demo: https://lg.catcat.cloud/
🧩 Features
Modern UI: Built with Vue 3 and TailwindCSS for a responsive, clean design.
Built-in Tools: Integrated with Ping, iPerf3, Speedtest, BGP information, and more.
Live Traffic Monitoring: See real-time network interface usage.
Interactive Shell: Simulated terminal for basic diagnostics.
Easy Deployment: One-command Docker-based deployment.
Customizable: Configure server info and features via environment variables.
Multi-Node Support: Supports master/slave node grouping for geographic flexibility.
Security First: Only the panel and necessary endpoints are exposed. Nodes communicate securely via gRPC.
UI Preview
📦 Deployment (Docker)
Clone the Repository
git clone https://github.com/Yuri-NagaSaki/NetMirror.git cd NetMirror
创建环境文件
复制环境文件示例以创建您自己的配置。
cp .env.example .env
If .env.example does not exist, simply create a .env file and refer to the documentation or table of variables.
Customize Config (Optional)
Edit .env to set your server region, public IP, and other configurations.
Here’s a sample docker-compose.yml snippet:
services:
als:
image: soyorins/netmirror:latest
container_name: looking-glass-e
restart: always
network_mode: host
user: root
env_file:
- .env
volumes:
- ./data:/data
- ./.air.toml:/app/.air.toml
healthcheck:
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:${HTTP_PORT:-80}/"]
interval: 30s
timeout: 10s
retries: 3
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
docker compose up -d
Once running, access your instance at:
http://:3000
(default port can be modified using the HTTP_PORT environment variable)
Comments
Under traffic monitor, past tense of send should be sent, not "sended".
Otherwise it looks really good.
Stuck in Connecting...
Establishing connection to the server
Looks good. Congrats
is it have backend ??
PrenHost | 🚀 BDIX NVMe Hosting – Only $4/year | 5GB RAM - 2vCPU VPS Only $3 / Month
Lightning-Fast | 99.9% Uptime | 24/7 Support
Your modern looking "Glass Panel" is reminding me of Windows Vista... and NO ONE wants to remember Windows Vista!
Never make the same mistake twice. There are so many new ones to make.
It’s OK if you disagree with me. I can’t force you to be right.
I want to remember Windows Vista
NO ONE, except for @imok, wants to remember Windows Vista!
Never make the same mistake twice. There are so many new ones to make.
It’s OK if you disagree with me. I can’t force you to be right.
Better than remembering ME!!!
Free Hosting at YetiNode | MicroNode| Cryptid Security | URL Shortener | LaunchVPS | ExtraVM | Host-C | In the Node, or Out of the Loop?
I love ME.
I bet you do my man I bet you do
Free Hosting at YetiNode | MicroNode| Cryptid Security | URL Shortener | LaunchVPS | ExtraVM | Host-C | In the Node, or Out of the Loop?
Not sure what somik is about... it looks decent to me.
It´s only working on the IP instead the URL in the demo.