A modern, web-based GUI for configuring and managing Ubuntu servers using VPS-Zero hardening scripts.
System Overview Dashboard : Real-time system status, CPU, memory, disk usage, and uptime
Server Hardening : One-click access to all 16 hardening modules
Docker Management : View and manage containers and images
Firewall Configuration : Add/view UFW firewall rules
SSH Settings : Configure SSH security parameters
Database Deployment : Quick-deploy PostgreSQL, MySQL, MongoDB, Redis
SSL Certificate Generation : Generate self-signed certificates
Security Tools : Run security scans and create encrypted backups
Log Viewer : View system logs from a single interface
Secure Authentication : Password-protected with session management
Ubuntu 24.04 LTS (or compatible version)
Node.js 18+ (automatically installed if missing)
Root/sudo access
VPS-Zero repository cloned
cd /path/to/VPS-Zero/dashboard
sudo ./install-dashboard.sh
# Start dashboard from the main script
sudo ./server-hardening.sh --gui
After installation, the vps-zero-dashboard command is available system-wide:
# Start dashboard service
sudo vps-zero-dashboard --start
sudo vps-zero-dashboard --yes # Alias for --start
# Stop dashboard
sudo vps-zero-dashboard --stop
# Restart dashboard
sudo vps-zero-dashboard --restart
# Show status
vps-zero-dashboard --status
# Start in foreground mode (for debugging)
sudo vps-zero-dashboard --foreground
# Install Node.js (if not present)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install dependencies
cd /path/to/VPS-Zero/dashboard
npm install --production
# Start the server
sudo node src/server.js
cd /path/to/VPS-Zero/dashboard
npm install
npm run dev
After installation, access the dashboard at:
http://YOUR_SERVER_IP:8080
Field
Value
Username
admin
Password
changeme
⚠️ Important : Change the default password immediately after first login!
Session-based authentication with secure cookies
Password hashing using bcrypt
Rate limiting to prevent brute-force attacks
Helmet.js for HTTP security headers
Runs on localhost by default (configure bind address as needed)
Use a reverse proxy (nginx) for HTTPS in production
Configure firewall to restrict dashboard access
Production Recommendations
Use HTTPS : Set up nginx as a reverse proxy with Let's Encrypt SSL
Restrict Access : Limit dashboard access to trusted IPs
Change Port : Use a non-standard port
VPN : Consider placing dashboard behind a VPN
Example nginx configuration:
server {
listen 443 ssl http2;
server_name dashboard.example.com;
ssl_certificate /etc/letsencrypt/live/dashboard.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dashboard.example.com/privkey.pem;
location / {
proxy_pass http ://127.0.0.1:8080 ;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade ;
proxy_set_header Connection 'upgrade' ;
proxy_set_header Host $host ;
proxy_set_header X-Real-IP $remote_addr ;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
proxy_set_header X-Forwarded-Proto $scheme ;
proxy_cache_bypass $http_upgrade ;
}
}
Variable
Default
Description
DASHBOARD_PORT
8080
Port to run dashboard on
DASHBOARD_HOST
0.0.0.0
Host to bind to
NODE_ENV
development
Set to production for secure cookies
The dashboard stores configuration in dashboard/config.json:
{
"username" : " admin" ,
"passwordHash" : " ..." ,
"sessionSecret" : " ..." ,
"firstRun" : false
}
dashboard/
├── package.json # Node.js dependencies
├── install-dashboard.sh # Installation script
├── README.md # This file
├── src/
│ └── server.js # Express server
├── views/
│ ├── login.html # Login page
│ └── dashboard.html # Main dashboard
└── public/
├── css/
│ └── dashboard.css
└── js/
└── dashboard.js
Method
Endpoint
Description
POST
/api/login
Login
POST
/api/logout
Logout
POST
/api/change-password
Change password
Method
Endpoint
Description
GET
/api/status
System status
GET
/api/services
Service status
GET
/api/validate
Validate configs
Method
Endpoint
Description
POST
/api/hardening/:module
Run hardening module
Available modules: updates, docker, firewall, ssh, fail2ban, kernel, auditd, autoupdates, swap, filesystem, logging, users, time, sectools, dockersec, full
Method
Endpoint
Description
GET
/api/docker/containers
List containers
GET
/api/docker/images
List images
Method
Endpoint
Description
GET
/api/firewall/rules
Get firewall rules
POST
/api/firewall/rule
Add firewall rule
Method
Endpoint
Description
GET
/api/ssh/config
Get SSH config
POST
/api/ssh/config
Update SSH config
Method
Endpoint
Description
POST
/api/ssl/generate
Generate certificates
Method
Endpoint
Description
POST
/api/security/scan
Run security scan
POST
/api/backup/create
Create backup
Method
Endpoint
Description
GET
/api/logs/:type
Get logs
Log types: hardening, docker, auth, ufw, syslog
# Check status
sudo systemctl status vps-zero-dashboard
# Restart
sudo systemctl restart vps-zero-dashboard
# Stop
sudo systemctl stop vps-zero-dashboard
# View logs
sudo journalctl -u vps-zero-dashboard -f
Check if port is in use: sudo lsof -i :8080
Check logs: sudo journalctl -u vps-zero-dashboard -n 50
Verify Node.js: node --version
Check permissions: files should be readable
Check firewall: sudo ufw status
Verify service is running: sudo systemctl status vps-zero-dashboard
Check if listening: sudo netstat -tlnp | grep 8080
Delete config.json to reset to defaults
Restart service: sudo systemctl restart vps-zero-dashboard
Use default credentials: admin / changeme
MIT License - See LICENSE for details.
Contributions welcome! Please submit issues and pull requests on GitHub.