You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -54,6 +56,21 @@ Built with Python/Flask + Alpine.js. No Node.js build step. No bloat. 2-minute i
54
56
- Reverse proxy, custom directives, PHP version per site, Composer integration
55
57
- One-click WordPress/Laravel/Symfony deploy
56
58
- PHP webshell scanner integrated with the File Manager
59
+
-**Per-site disk usage** (lazy-loaded, won't slow down servers with many/large sites)
60
+
-**Global SSL expiry alerts** on the Dashboard, aggregated across every site
61
+
62
+
### 🔵 Go Projects & 💚 Node.js Projects
63
+
Deploy compiled Go binaries and Node.js apps with the same one-click simplicity as WordPress — a capability none of cPanel, Plesk, aaPanel, or HestiaCP offer out of the box:
64
+
-**Go**: binary-only deployment, Go SDK manager (multiple versions side by side), GOPROXY config, systemd auto-restart, resource limits (`MemoryMax`/`CPUQuota`), on-demand TCP health checks, binary version history with one-click rollback
65
+
-**Node.js**: PM2 or systemd per project, nvm-based version switching, current LTS reality (v24 Active, v22 Maintenance, v18/v20 correctly blocked as EOL)
66
+
- Both: reverse proxy on all 4 webservers with **WebSocket support**, Let's Encrypt SSL per domain, firewall integration, all 9 supported distros
67
+
68
+
### 📥 Website Import Wizard
69
+
Migrate a site off cPanel, aaPanel, or HestiaCP by uploading its backup archive — no SSH pull required:
70
+
-**Detect → confirm → import** flow — every auto-detected field (domain, PHP version, document root, database) is editable before anything executes
71
+
- Imported sites use the exact same code path as "New Website", so they're indistinguishable from natively-created ones
72
+
- Fresh random database password generated on import (originals are never in a backup dump)
73
+
- Files + database in this release; email/cron/SSL migration not yet included
57
74
58
75
### 🔷 WP Toolkit
59
76
Full WordPress lifecycle management — install, manage, secure, stage, back up — no separate plugin or paid add-on:
@@ -84,9 +101,9 @@ Full WordPress lifecycle management — install, manage, secure, stage, back up
84
101
- phpMyAdmin integration (auto-configured on its own port, separate PHP version)
-**27** one-click installs: Nginx, Apache, OpenLiteSpeed, Caddy, PHP (multi-version), MySQL, MariaDB, PostgreSQL, MongoDB, Redis, **Memcached**, **FFmpeg** (multi-version, side by side), Docker, Node.js, Python, Composer, Fail2ban, ClamAV, ModSecurity, Roundcube, Supervisor, Pure-FTPd, BIND9 DNS, and more
88
105
-**Live installation terminal** — every install, uninstall, and version switch streams real-time output line-by-line (like aaPanel's task terminal)
89
-
- Automatic conflict detection, RHEL-family package manager support
106
+
- Automatic conflict detection, RHEL-family package manager support — **all 5 previously-broken RHEL install paths (nginx, MySQL, Caddy, MongoDB, PostgreSQL) fixed**, tested on both x86_64 and arm64
90
107
-**Safe database version policy** — databases (MariaDB/MySQL/PostgreSQL/MongoDB) require uninstall-first to prevent data corruption; version switching kept for non-data modules
91
108
92
109
### ⚙ Settings — redesigned card-based control center
@@ -103,11 +120,11 @@ Full WordPress lifecycle management — install, manage, secure, stage, back up
103
120
-`app.js` 150KB → ~40KB, `index.html` 350KB → ~70KB over the wire
The biggest release since v3.2.0's security overhaul. Two entirely new deployment managers (Go and Node.js binary/app hosting — something none of cPanel, Plesk, aaPanel, or HestiaCP offer out of the box), a full Website Import wizard for migrating off other panels, two new App Store modules, and a broad reliability pass across all nine supported distros and both x86_64/arm64 architectures.
6
+
7
+
---
8
+
9
+
## 🚀 Go Projects & Node.js Projects — New Deployment Managers
10
+
11
+
VortexPanel can now host compiled Go binaries and Node.js applications directly, with the same one-click simplicity as a WordPress install.
12
+
13
+
### Go Projects
14
+
-**Binary-only deployment** — point at a compiled Go binary, VortexPanel handles the rest
15
+
-**Go SDK manager** — install/switch between multiple Go versions side by side, GOPROXY configuration (official/goproxy.io/goproxy.cn/direct)
16
+
-**systemd service** — auto-restart on crash, enable-on-boot, journal logging
17
+
-**Reverse proxy on all 4 webservers** — nginx, Apache, OpenLiteSpeed, and Caddy, auto-detected
18
+
-**WebSocket support** — proper `Upgrade`/`Connection` header handling on nginx and Apache (needed for `gorilla/websocket`, gRPC-Web, etc.) — the shared nginx `$connection_upgrade` map is written once and reused across every proxied project
19
+
-**Let's Encrypt SSL per domain** — nginx/Apache use certbot's native plugin, OpenLiteSpeed uses `certonly` + manual vhost wiring, Caddy is detected as already-automatic (no action needed)
20
+
-**Resource limits** — `MemoryMax` / `CPUQuota` in the systemd unit, so a runaway process gets capped instead of taking down the whole server
21
+
-**On-demand health checks** — real TCP connect to the app's port, catching the case `Restart=always` can't: a hung process still holding the port open
22
+
-**Binary version history + rollback** — every start/restart snapshots the binary (skipped if unchanged, via SHA-256 hash), keeps the last 5 versions, one-click revert
23
+
- Firewall integration (UFW + firewalld), all 9 supported distros
24
+
25
+
### Node.js Projects
26
+
-**PM2 + systemd** — choose either process manager per project
27
+
-**nvm-based version switching** — install and switch Node versions without affecting other projects
28
+
- Same reverse-proxy-on-all-4-webservers support as Go Projects
29
+
- Current LTS reality reflected: **v24 Active LTS** default, v22 Maintenance, v18/v20 correctly blocked as EOL
A new "Import Website" flow on the Websites page, upload-based (no SSH pull required):
36
+
37
+
1.**Upload** the backup archive exported from your old panel
38
+
2.**Detect** — VortexPanel extracts it and makes a best-effort guess at the domain, PHP version, document root, and database dump
39
+
3.**Confirm** — every detected field is editable before anything happens; nothing is auto-executed blind
40
+
4.**Import** — creates the site + nginx vhost (the exact same code path as "New Website", so imported sites are indistinguishable from natively-created ones), copies files, creates the database and imports the dump, generates a fresh random DB password (originals are never in a backup dump, so there's nothing to recover)
41
+
42
+
Supports **cPanel** (`cpmove`/full-backup format, `userdata` YAML domain detection), **aaPanel** (domain-folder detection + `.sql`/`.sql.gz` filename matching), and **HestiaCP** (`v-backup-user`'s nested `web.tar`/`mysql.tar` format). Files + database only in this release — email, cron, and SSL migration are not yet included.
43
+
44
+
---
45
+
46
+
## 📦 App Store — 2 New Modules
47
+
48
+
-**FFmpeg Manager** — install multiple FFmpeg versions side by side (7.1, 8.1, and nightly master), each with its own command alias (`ffmpeg7`, `ffmpeg8`). Sourced from BtbN/FFmpeg-Builds — the provider ffmpeg.org's own download page links to for Linux static builds — with full x86_64 and arm64 support
49
+
-**Memcached** — full management UI: Service (start/stop/restart/reload), Config File editor, Switch Version, Load Status (live stats via Memcached's own `stats` protocol), and Optimization (bind IP/port/cache size/max connections)
50
+
51
+
App Store module count: **27** (up from 25).
52
+
53
+
---
54
+
55
+
## 🖥 Dashboard & Monitoring
56
+
57
+
-**Realtime charts** — CPU/RAM history and Network I/O, client-side rolling window, no backend polling changes needed
58
+
-**Global SSL expiry banner** — aggregates certificate expiry across every site, warns at 14 days with severity-graded colour coding (yellow → orange → red-for-expired)
59
+
-**Settings → Audit Log viewer** — last 200 login attempts (time/status/IP/user/note) — the backend already existed, it just had no UI until now
60
+
-**Per-site disk usage** — lazy-loaded (only fires when you open a site's Directory tab, so it doesn't slow down the Websites list on servers with many/large sites)
61
+
62
+
---
63
+
64
+
## 🐳 Docker — Domain Assignment Without Traefik
65
+
66
+
Containers can now be assigned a domain + automatic SSL directly from the Docker page, reusing the exact same reverse-proxy code already built for Go/Node.js Projects. No new moving parts, no Traefik dependency — just point a domain at a container's exposed port.
67
+
68
+
---
69
+
70
+
## 🛠 Reliability — RHEL-Family & arm64 Fixes
71
+
72
+
A full audit turned up (and fixed) install-time failures that were silently breaking on real-world server configurations:
73
+
74
+
-**RHEL/CentOS/Fedora/AlmaLinux/Rocky** — **nginx, MySQL, Caddy, MongoDB, and PostgreSQL** were previously **completely uninstallable** on any RHEL-family distro. The install scripts only had a Debian-specific GPG-keyring + `sources.list` code path; on RHEL this produced garbage commands (`dpkg -i` on a distro with no `dpkg`, Debian package names fed to `dnf`, etc.). All 5 now have proper distro-aware install paths — MySQL uses RHEL's built-in AppStream module stream (no external repo needed at all), PostgreSQL correctly disables the conflicting built-in module before installing PGDG's versioned packages.
75
+
-**arm64** — MongoDB and PostgreSQL RHEL install paths had hardcoded `x86_64` in the repo URLs, silently breaking on ARM servers. MongoDB now uses `dnf`'s auto-resolving `$basearch`; PostgreSQL detects the real architecture via `uname -m`.
76
+
-**A pre-existing Caddy bug** (not new — this predates the audit) was piping a fetched GPG key into `rm -f` instead of `gpg --dearmor`, producing an empty/invalid keyring on **Debian too**, not just RHEL. Fixed.
77
+
- All module install/uninstall cycles audited for safety on repeat runs — GPG keys and repo files are now properly cleaned up on uninstall, preventing reinstall failures.
78
+
79
+
---
80
+
81
+
## 🎨 UI System — Modal & Layout Fixes
82
+
83
+
A cluster of related frontend bugs, all traced to the same root causes and fixed together:
84
+
85
+
-**Modal centering** — the underlying issue was `position:fixed` breaking when nested inside a scrolling ancestor (`overflow-y:auto` containers). All modals are now rendered as direct children of `<body>` via a shared global portal pattern, using explicit `width:100vw;height:100vh` so they're immune to any ancestor's overflow settings.
86
+
-**Horizontal scrollbar shifting the entire panel** — a classic flexbox `min-width:auto` trap: `.main-area` and `.page-content` were `flex:1` with no `min-width:0`, so a single unconstrained `<select>` dropdown with long option text (App Store version pickers) could force the *whole layout* wider instead of scrolling internally. Fixed at the source, plus a body-level safety net.
87
+
-**Cross-component scoping bugs** — several modals had their interactive functions defined inside the wrong Alpine.js component (a page's own scope instead of the global scope the portal actually renders in), causing buttons to silently do nothing. Standardized on the same pattern used by `toast()`/`get()`/`post()`: plain global functions, reachable from any component.
88
+
- Eight pages (`dashboard`, `docker`, `settings`, `files`, `mail`, `bandwidth`, `security`, `caddy`) had dead method calls in their tab-refresh event listeners from an earlier bulk edit — switching to those tabs was silently failing. All fixed.
89
+
90
+
---
91
+
92
+
## 🔩 Smaller Fixes
93
+
94
+
- Self-hosted SVG brand logos for all App Store modules — zero CDN dependency for icons
-`install.sh` now clones to a permanent `/root/Vortexpanel` instead of `/tmp` (which gets wiped on reboot, silently orphaning git tracking) — and auto-generates a correctly-pathed `deploy.sh` during install
100
+
101
+
---
102
+
103
+
## Upgrade Notes
104
+
105
+
No breaking changes. Existing sites, databases, and App Store installs are unaffected. Simply re-run `deploy.sh` or pull the latest and restart the `vortexpanel` service.
0 commit comments