Dashboard
Server overview & real-time metrics
CPU Usage
0%
Load:
RAM
0
Disk
0%
Uptime
Network ↓ ↑
CPU & RAM (last ~2.5 min)
Network I/O
🔒
🛡️
⚠️
Multiple webservers running simultaneously
are all active. This causes port 80/443 conflicts and unpredictable routing.
Stop all but one via Services or App Store.
Services
No services detected
Quick Actions
Websites
Manage Nginx virtual hosts
WP Toolkit
WordPress management — installations detected
⚠ wp-cli not installed
🔍
🔷
Scanning for WordPress installations…
🔷
No WordPress installations found
Install WordPress or place an existing site in your webroot and click Scan
Node.js Projects
Deploy and manage Node.js apps with PM2 or systemd — proxy via nginx, Apache, OLS or Caddy
💚
No Node.js projects yet
Deploy your first Node.js or PM2 project
ℹ App Store integration:
Node.js installed from App Store works directly in Node.js Projects — no extra steps needed.
Use the version manager below only if you need multiple Node.js versions side-by-side via nvm.
Installed Versions
Loading...
No versions installed via nvm
Active
System
Install New Version
✓ Installed
Processes
Total CPU
Total Memory
Add Node.js Project
Directory where package.json is located
The JS file to start (e.g. app.js, server.js, index.js)
Port the app listens on — used for webserver reverse proxy
instances > 1 enables cluster mode
PM2 auto-restarts if exceeded
Restart automatically on crash
Reverse proxy config will be created automatically for your active webserver
• PM2 Project: Startup File is the JS file PM2 runs (usually app.js or server.js)
• Cluster: instances > 1 enables load balancing across CPU cores
• Memory Limit: PM2 auto-restarts when exceeded
• Cluster: instances > 1 enables load balancing across CPU cores
• Memory Limit: PM2 auto-restarts when exceeded
• Default Project: Runs as a systemd service — lightweight, no PM2 needed
• Run Command: Select from package.json scripts or enter a custom command
• Run Command: Select from package.json scripts or enter a custom command
Go Projects
Deploy compiled Go binaries with systemd + webserver reverse proxy
🔵
No Go projects yet
Go Project only supports compiled binary files — not source code.
Compile your Go app → upload the binary → click Add Project
GOPROXY Configuration
Go module proxy — affects download speed and availability of packages
Installed Go Versions
Loading...
No Go versions installed via SDK manager
Active
Install Go Version
Downloaded from dl.google.com — supports amd64 and arm64
Loading...
✓ Active
Installed
Add Go Project
ℹ Go Project only supports compiled binary files. Compile your Go app first, then select the binary here.
Full path to the compiled Go binary. File permissions will be fixed automatically.
Leave blank to use executable path directly
Edit Project —
Databases
⚠ No database engine is installed or running. Install MySQL, MariaDB, PostgreSQL or MongoDB from the App Store.
File Manager
/
App Store
Install and manage server software
Services
Manage system services
Firewall
UFW rules management
Terminal
Live shell — connected via WebSocket PTY
Backups
Create and restore server backups
Local Backups
Cloud Storage
📦 Full Backup
Backs up all websites, nginx/caddy configs, and the backups folder itself in one archive.
💾 Website Backup
🗄 Database Backup
☁ Cloud Storage Provider
Credentials are stored locally on your server, never transmitted elsewhere except to your chosen provider.
Mail Server
Postfix + Dovecot management
Postfix:
Dovecot:
Mailboxes
DKIM / SPF
Queue
Forwarding
Logs
Mail Domains
DKIM / SPF Records
No DKIM key generated yet for this domain.
Add this as a TXT record on your domain's root (@), including your server's mail-sending IP.
Mail Queue
Mail Forwarding Rules
Select a domain to manage forwarding rules
| From Address | Forwards To | Actions |
|---|---|---|
No forwarding rules for
Mail Logs
FTP / SFTP
Pure-FTPd account management
📂
Pure-FTPd Not Installed
Cron Jobs
Schedule automated server tasks
Total
Active
Disabled
Failed
Monitoring
Real-time server performance
CPU Usage
RAM
Disk
Uptime
Log Viewer
Real-time server and application logs
Bandwidth
Network traffic monitoring
Interface
↓ Download
↑ Upload
Total
Daily Usage
| Date | ↓ RX | ↑ TX | Total |
|---|---|---|---|
Per-Domain Traffic
| Domain | Requests | Data |
|---|---|---|
No access log data
Security
Server hardening & intrusion prevention
Security Score
SSH
Fail2ban
ModSecurity
Caddy WAF
Load Balancer
Ports
⚠ Step 1 — Create a sudo user first
✓ Users exist
Before disabling root login, create a regular user with sudo access. Otherwise you'll be permanently locked out.
Existing sudo users:
Username
Password (min 8 chars)
SSH Public Key (optional — paste contents of id_rsa.pub / id_ed25519.pub)
🔑 SSH Key Status
No SSH public key found in
/root/.ssh/authorized_keys.
Add your public key before disabling password authentication, or you'll be locked out.
SSH public key detected. It is safe to disable password authentication.
Paste your public key to add it now
⚙ SSH Hardening
Disable Root Login
Prevents direct SSH login as root. Users must login as a regular user and use sudo.
⚠ Create a sudo user first (Step 1 above)
Disable Password Authentication
Only allow SSH key-based login. Eliminates brute-force attacks completely.
⚠ Add your SSH key first — disabling without a key will lock you out permanently
Enable Public Key Authentication
Allow SSH login using key pairs (recommended, keep enabled).
Max Auth Tries
Max failed attempts before connection is dropped (default: 6, recommended: 3)
SSH Port
Currently active:
● Non-default port
● Default port (risk)
⚠ Firewall rule will be updated automatically. Save from a terminal session to avoid lockout.
⚠ Warning: Keep an active terminal/console session open while saving SSH changes. If you get locked out, use your VPS provider's console/VNC to fix it.
Fail2ban not running — install via Modules
Fail2ban is running — no jails configured yet
Add Website or Server Protection jails from App Store → Fail2ban → Settings
Banned:
🔥 ModSecurity WAF
● Blocking
◑ Detection Only
○ Disabled
Not Installed
ModSecurity WAF is not installed. Install it from the App Store — supports Nginx or Apache, on all distros (Debian, Ubuntu, AlmaLinux, Rocky, Fedora, RHEL, CentOS, Oracle, CloudLinux).
Engine Mode
Blocking mode: requests matching WAF rules are blocked with HTTP 403.
Detection mode: threats are logged but not blocked. Use for testing before going live.
WAF is disabled globally. No rules are evaluated.
OWASP CRS Paranoia Level
(1=default, 4=strictest)
Level 1: Basic protection, very low false positives. Recommended for production.
Level 2: Stricter rules for better protection. Some false positives possible.
Level 3: Aggressive. Test thoroughly before enabling on production.
Level 4: Maximum protection. High false positive risk — advanced users only.
CRS Status
No CRS rules loaded — the ruleset download likely failed during install (network hiccup or GitHub rate limit). The engine itself still works.
Version
Active rules
Per-site WAF override
Disable ModSecurity for specific sites (e.g. admin panels, API servers) without affecting the global setting.
No sites found. Add sites on the Websites page.
WAF Off
Custom Rules
Write custom
SecRule directives here. These are saved to and validated with before applying.
Audit Log
No audit log yet
No triggered rules yet — or audit log is empty.
| Time | IP | Method | URI | Rule ID | Severity | Message |
|---|---|---|---|---|---|---|
🛡️ Caddy WAF
● Installed
Not Installed
Caddy WAF (fabriziosalmi/caddy-waf) is not installed. Install it from the App Store — Caddy only, requires rebuilding Caddy with the module compiled in.
HTTP
TCP / Stream
Active Health Checks
⚖ HTTP Load Balancer
Your backend application must already set this cookie — nginx uses its value to consistently route the same client to the same backend.
⚠ nginx's stream module isn't installed. Required for TCP load balancing.
🔌 TCP / Stream Load Balancer
Load-balances raw TCP connections — for non-HTTP services like databases, game servers, custom protocols, or MQTT brokers. Works at the connection level, not the request level.
💓 Active Health Checks
Periodically probes each backend in your HTTP Load Balancer. A backend that fails enough consecutive checks is automatically removed from rotation — and restored once it recovers. Open-source nginx has no built-in active health checking, so this runs as its own lightweight background service.
Enable health checking
Backend Status
Recent Activity
Open Ports
WAF Analytics
ModSecurity + OWASP CRS attack visibility — free, no upsell
ModSecurity isn't installed yet
Blocked Requests
Top Attack Type
Unique Attacker IPs
Attack Categories
Blocked Requests Over Time
Attack Categories
No attacks blocked in this period
Top Attacker IPs
No attacks blocked in this period
Top Targeted URLs
No attacks blocked in this period
| Time | IP | Domain | URL | Type |
|---|---|---|---|---|
No matching entries
These rules apply server-wide, not per-site — matches every domain on this server. Per-site scoping isn't built yet. Whitelisted IPs skip ModSecurity/CRS entirely for that request (faster, not just "not blocked"). Changes are validated against
nginx -t before going live — a bad entry is rejected and nothing on the server changes.IP Whitelist
One IP or CIDR per line — e.g.
1.2.3.4 or 10.0.0.0/24IP Blacklist
One IP or CIDR per line — blocked with 403 at every site
User-Agent Blacklist
One regex pattern per line, matched against the User-Agent header
URL Blacklist
One regex pattern per line, matched against the request URI
Docker
Container management with Docker Hardened & Official images
Checking Docker status...
🐋
Docker Not Installed
Install Docker CE via the Modules page to enable container management and one-click application deployment.
⚠️
Docker Daemon Not Running
Run:
systemctl start docker
Docker
Running
containers · images
🐳 Image Catalog
📦 Containers ()
🖼 Local Images ()
💾 Volumes
🔒
Docker Hardened Images (DHI) Zero-CVE
Images marked 🔒 Hardened are built with zero-known CVEs, signed provenance and full SBOM — production-grade security.
No containers. Deploy from the Catalog tab.
No images pulled yet. Deploy from the Catalog.
Volumes ()
No volumes
Networks ()
No networks
Caddy Web Server
Automatic HTTPS · HTTP/3 · Zero-config TLS via Let's Encrypt
🟩
Caddy Not Installed
Caddy is a modern web server with automatic HTTPS — it provisions and renews Let's Encrypt certificates automatically with zero configuration.
✓ Auto HTTPS (Let's Encrypt)
✓ HTTP/3 support
✓ Built-in reverse proxy
✓ PHP-FPM support
✓ No certbot needed
Caddy
🔒
Auto HTTPS
Let's Encrypt + ZeroSSL
⚡
HTTP/3 Ready
QUIC protocol support
🔀
Reverse Proxy
With load balancing
🐘
PHP-FPM
FastCGI built-in
Caddy Logs
CDN Manager
Connect and manage your Content Delivery Network
⚡ Active
⚡
CDN Manager — VortexPanel Hot Module
Connect any CDN provider in seconds. Full API integration for Cloudflare and BunnyCDN — purge cache, manage DNS, toggle settings, view analytics. Nginx cache-header optimization for all other providers.
✓ Connected
⚡ Active
Free plan available
Paid service
✓ Full API Integration — Cache purge, settings management, analytics, DNS management all available.
ℹ Nginx Header Optimization — VortexPanel configures your Nginx server with optimal cache headers for this CDN provider, maximizing cache hit rates.
Total Requests
Bandwidth
Cached Requests
Threats Blocked
🔧 Zone Settings
🗑 Cache Purge
Purge cached files from Cloudflare edge servers. Leave URL empty to purge everything.
⚠ Purge Everything clears all cached content — use sparingly on high-traffic sites.
🌐 DNS Records
Click Load to fetch DNS records
🔶 Proxied
Bandwidth Used
Requests Served
Cache Hit Rate
Pull Requests
🗑 Purge Cache
🔗 Connection Test
✓ CDN detected:
⚙ Apply Nginx Cache Headers
VortexPanel will add optimized
Cache-Control headers to your Nginx config for , maximizing CDN cache hit rate.
✓ Headers applied to Nginx and reloaded
Settings
Panel configuration & security
🛡️
Security Updates
Applying — this can take a few minutes
🌐
Network & Access
Panel port and domain settings
Panel name
Panel port
Currently: — suggested: 8888–65535
⚠ Panel will restart and firewall rule updated automatically
Panel domain
Leave blank to use IP address
⚠ After setting, panel accessible only via this domain
Default site folder
New websites created in this directory
🔒
Panel SSL
HTTPS for the panel interface
SSL Certificate
✓ Active
Inactive
Access the panel at:
:
⚠ Enabling HTTPS keeps your custom port — it never switches to the well-known port 443, so the panel stays hidden from generic port scans.
Validity
Domain (leave blank to use server IP)
Let's Encrypt briefly needs port 80 open for domain validation — this is unrelated to your panel's custom port and closes automatically.
⚠ Reconnect your browser to:
🛡
Authentication & Security
Panel login and access control
Google Authenticator (2FA)
Requires verification code on login
Panel password
Argon2id hashed (OWASP recommended)
Authorized IP
Login Audit Log
Last 200 login attempts
Session timeout
Auto-logout after inactivity
hours
🔍
PHP Webshell Scanner
Detect malicious PHP files in site directories
Critical
High
Medium
Files
✓ No threats detected in PHP files
⚙
Panel Settings
General panel behaviour
Auto update panel
Check for VortexPanel updates automatically
Timezone
Server time
Hostname
System packages
Update all installed OS packages
💻
System Information
Server details
✦
AI Assistant
OpenAI-compatible API connection