Live
🖥
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
Quick Actions
DomainPathPHPSSLStatusActions
🔍
🔷
Scanning for WordPress installations…
🔷
No WordPress installations found
Install WordPress or place an existing site in your webroot and click Scan
💚
No Node.js projects yet
Deploy your first Node.js or PM2 project
Name Status PID CPU RAM Path Node Mode Domain Actions
ℹ 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
Install New Version
Processes
Total CPU
Total Memory
IDNameStatusPIDCPUMemoryRestartsPath
No PM2 processes running
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
Default Project: Runs as a systemd service — lightweight, no PM2 needed
Run Command: Select from package.json scripts or enter a custom command
Logs —

          
🔵
No Go projects yet
Go Project only supports compiled binary files — not source code.
Compile your Go app → upload the binary → click Add Project
NameStatusPID ExecutablePortDomainUserActions
GOPROXY Configuration
Go module proxy — affects download speed and availability of packages
Installed Go Versions
Loading...
No Go versions installed via SDK manager
Install Go Version
Downloaded from dl.google.com — supports amd64 and arm64
Loading...
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 —
Info
A runaway process will be capped rather than taking down the whole server. Leave blank for no limit.
Adding a domain creates a reverse proxy config via your active webserver. Active:
🔒 SSL Certificate
Assign a domain above first.
✓ Active
No certificate yet

                
Loading logs...
Health Check
Binary Version History
No snapshots yet — one is taken automatically each time you start/restart with a changed binary.
Loading...
Selected:
⚠ No database engine is installed or running. Install MySQL, MariaDB, PostgreSQL or MongoDB from the App Store.
Version:
Connections:
Total Size:
Database Username Size Tables Collections Charset Actions
Found results
Name Size Modified Perms Actions
📂 Open
✏️ Edit
📋 Copy
✂️ Cut
📌 Paste
🖊 Rename
🔐 Permissions
📦 Compress
🗜 ZIP (.zip)
📦 TAR.GZ (.tar.gz)
📂 Extract here
🔗 Copy Path
ℹ️ Properties
🦠 Scan for Viruses
🗑️ Delete
No results
Loading file tree...
Loading editor…
● Unsaved
Name Description Status / Version Actions
#Port / ToProtocolActionFrom
VortexPanel Terminal — bash
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
Backup Files
FileSizeDateActions
☁ Cloud Storage Provider
Credentials are stored locally on your server, never transmitted elsewhere except to your chosen provider.
Cloud Backups
FileSizeModifiedActions
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 AddressForwards ToActions
Mail Logs

        
UsernameHome DirectoryActions
Total
Active
Disabled
Failed
NameScheduleCommandLast RunStatusActions
CPU Usage
RAM
Disk
Uptime
Running Processes
PIDUserCommandCPU%Mem%Actions

        
Interface
↓ Download
↑ Upload
Total
Daily Usage
Date↓ RX↑ TXTotal
Per-Domain Traffic
DomainRequestsData
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.
🔥 ModSecurity WAF
● Blocking ◑ Detection Only ○ Disabled Not Installed
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.
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
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
🛡
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
TimeIPDomainURLType
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/24
IP 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
🔒 SSL auto-managed by Caddy
Edit the full Caddyfile block for this site. Caddy validates config before applying.
Caddyfile Quick Reference:
root * /path/to/webroot — set web root
php_fastcgi unix//run/php/php8.3-fpm.sock — PHP support
reverse_proxy localhost:3000 — proxy to backend
encode gzip zstd — enable compression
file_server — serve static files
tls email@example.com — custom email for SSL cert
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.
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
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

                
📖 Setup Guide for
1. Create a pull zone in your
2. Set your server IP as the origin server
3. Point your domain's CNAME to the CDN hostname
4. Apply Nginx cache headers above to maximize hit rates
5. Test connection to verify CDN is active
🛡️
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
/www/wwwroot
🔒
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
Two-Factor Authentication (2FA)
Add TOTP verification on every login (Google Authenticator, Authy, etc).
Scan QR code in your authenticator app:
Manual key:
● 2FA ActiveLogin requires verification code
⚠ Enter your password to confirm:
Change Panel Password
Hashed with Argon2id (OWASP #1 recommended). Min 8 characters.
IP Access Allowlist
One IP or prefix per line. 127.0.0.1 always allowed. Empty = allow all.
Login Audit Log
Last 200 login attempts — success, failure, IP, and 2FA events
📋
No audit entries yet
TimeStatusIPUserNote
Loading...
Selected:
>
Add Node.js Project
Directory where package.json is located
Logs —

  
>
Add Go Project
ℹ Go Project only supports compiled binary files. Compile your app first, then select the binary.
Full path to compiled binary. Permissions auto-fixed.
Logs —

  
Assign Domain —
ℹ Enter the host port you mapped when running this container — the left side of -p HOST:CONTAINER (e.g. 8080 in -p 8080:80). VortexPanel proxies your domain to it via .
Path
Full command
Command
Import Website
From cPanel, aaPanel, or HestiaCP — files + database only
No database dump detected — site files will still be imported.

      
NeonCodex AI
Context:
Enter to send · Shift+Enter new line · NeonCodex