Skip to content

Commit 46d9f0e

Browse files
v3.1.0: WP Toolkit, firewalld, perf improvements + community files
1 parent b917711 commit 46d9f0e

5 files changed

Lines changed: 413 additions & 51 deletions

File tree

CODE_OF_CONDUCT.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Code of Conduct
2+
3+
## Our pledge
4+
5+
VortexPanel is an open project. We're committed to keeping it a welcoming environment for contributors of all backgrounds and experience levels.
6+
7+
## Expected behavior
8+
9+
- Be respectful and constructive in issues, PRs, and discussions
10+
- Help others learn — remember everyone was a beginner once
11+
- Focus on the code and ideas, not the person
12+
- Accept feedback graciously; give it kindly
13+
14+
## Unacceptable behavior
15+
16+
- Harassment, personal attacks, or discriminatory language
17+
- Spam or self-promotion unrelated to the project
18+
- Deliberately breaking others' work
19+
20+
## Enforcement
21+
22+
Violations can be reported by opening a private issue or emailing the maintainer. Accounts that repeatedly violate this policy will be blocked from the repository.
23+
24+
---
25+
26+
This is a simplified Code of Conduct. We chose brevity over boilerplate — treat people well and build cool things.

CONTRIBUTING.md

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# Contributing to VortexPanel
2+
3+
First off, thanks for taking the time to contribute! 🎉
4+
5+
VortexPanel is built with Python/Flask backend and Alpine.js frontend. It's designed to be approachable — no Node.js build step, no complex toolchain. If you can run `python3 app.py`, you're ready to contribute.
6+
7+
---
8+
9+
## How to contribute
10+
11+
### Reporting a bug
12+
- Check [existing issues](https://github.com/BrowserlessAPI/VortexPanel/issues) first
13+
- Use the **Bug Report** issue template
14+
- Include: OS and version, what you did, what happened, what you expected, any error messages from `/var/log/vortexpanel/error.log`
15+
16+
### Requesting a feature
17+
- Use the **Feature Request** issue template
18+
- Describe the use case, not just the implementation
19+
- Check the [roadmap in the README](README.md#-roadmap) — if it's already listed, +1 the existing issue instead of opening a new one
20+
21+
### Submitting a pull request
22+
1. Fork the repo and create a branch: `git checkout -b feature/your-feature-name`
23+
2. Make your changes (see Code Style below)
24+
3. Test on a real or virtual Linux system — the panel must start with `python3 app.py`
25+
4. Open a PR against `main` — describe what you changed and why
26+
5. Reference any related issues with `Closes #123`
27+
28+
---
29+
30+
## Development setup
31+
32+
```bash
33+
git clone https://github.com/BrowserlessAPI/VortexPanel.git
34+
cd VortexPanel
35+
pip install -r requirements.txt
36+
python3 app.py
37+
```
38+
39+
Panel runs at `http://127.0.0.1:8888`. Admin password is printed on first run and saved to `admin_password.txt`.
40+
41+
---
42+
43+
## Code style
44+
45+
### Backend (Python)
46+
- Python 3.8+ compatible
47+
- Follow existing patterns in `panel/routes/` — each feature is a Flask Blueprint
48+
- Shell commands via the existing `sh(cmd)` helper (returns stdout string) or `sh3(cmd)` (returns `stdout, stderr, returncode`)
49+
- Every route must check `if not req(): return jsonify({'ok':False}), 401` first
50+
- Multi-distro support via `get_os()` from `os_utils.py` — never hardcode `apt-get`; use `pkg_install()` instead
51+
- Use `panel_cache.set(key, value, ttl)` for expensive read-only endpoints
52+
53+
### Frontend (Alpine.js + HTML)
54+
- No npm, no build step — plain HTML/JS/CSS only
55+
- New pages go in `web/templates/index.html` as `<div x-show="page==='yourpage'" x-data="yourPage()">`
56+
- New Alpine components go in `web/static/js/app.js`
57+
- Every page component's `init()` must include: `document.addEventListener('vortex-logged-in', () => { this.init(); });`
58+
- Use existing CSS variables from `web/static/css/theme.css` — no hardcoded colors
59+
- Use `.modal-overlay` class for modals/drawers (not inline `position:fixed` — causes stacking context issues)
60+
- Avoid `x-show` with `overflow:hidden` parents — use `.modal-overlay` class which is defined at root level
61+
62+
### Adding a new module
63+
1. Create `panel/routes/your_module.py` with a Blueprint
64+
2. Import and register it in `app.py`
65+
3. Add a nav item in `web/static/js/app.js` in the `navItems` array
66+
4. Add the page HTML in `web/templates/index.html`
67+
5. Add an `async init()` with the `vortex-logged-in` listener
68+
69+
---
70+
71+
## Areas where help is most welcome
72+
73+
- 🧪 **Testing** on RHEL-family distros (AlmaLinux, Rocky, Fedora, Oracle, CentOS Stream, CloudLinux) — firewalld path specifically
74+
- 🌍 **Translations** — panel strings are in the HTML templates
75+
- 📖 **Documentation** — setup guides, module how-tos, video walkthroughs
76+
- 🐛 **Bug fixes** — especially on multi-distro edge cases
77+
78+
---
79+
80+
## Code of Conduct
81+
82+
Be respectful. See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).

README.md

Lines changed: 133 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,93 +1,175 @@
11
<div align="center">
2-
<img src="https://img.shields.io/badge/VortexPanel-v3.0-6c7fff?style=for-the-badge&logo=lightning&logoColor=white" alt="VortexPanel">
3-
<img src="https://img.shields.io/badge/Python-3.8+-3776ab?style=for-the-badge&logo=python&logoColor=white">
4-
<img src="https://img.shields.io/badge/Flask-3.x-000000?style=for-the-badge&logo=flask">
5-
<img src="https://img.shields.io/badge/Alpine.js-3.14-8bc0d0?style=for-the-badge">
6-
<img src="https://img.shields.io/badge/License-MIT-green?style=for-the-badge">
7-
8-
<h1>⚡ VortexPanel</h1>
9-
<p><strong>Open-source server management panel built for developers.</strong><br>
10-
A modern alternative to aaPanel / HestiaCP — built with Python/Flask + Alpine.js.</p>
2+
3+
<img src="https://img.shields.io/badge/VortexPanel-v3.1-6c7fff?style=for-the-badge&logo=lightning&logoColor=white" alt="VortexPanel v3.1">
4+
<img src="https://img.shields.io/badge/Python-3.8+-3776ab?style=for-the-badge&logo=python&logoColor=white">
5+
<img src="https://img.shields.io/badge/Flask-3.x-000000?style=for-the-badge&logo=flask">
6+
<img src="https://img.shields.io/badge/Alpine.js-3.14-8bc0d0?style=for-the-badge">
7+
<img src="https://img.shields.io/badge/License-MIT-22c55e?style=for-the-badge">
8+
<img src="https://img.shields.io/github/stars/BrowserlessAPI/VortexPanel?style=for-the-badge&color=f59e0b">
9+
<img src="https://img.shields.io/github/last-commit/BrowserlessAPI/VortexPanel?style=for-the-badge&color=6c7fff">
10+
11+
<br><br>
12+
13+
<h1>⚡ VortexPanel</h1>
14+
15+
<p><strong>Free, open-source server control panel.</strong><br>
16+
Everything aaPanel locks behind a paid Pro tier — WAF, Fail2Ban, Load Balancer, WP Toolkit — built in and free.<br>
17+
Built with Python/Flask + Alpine.js. No Node.js build step. No bloat. 2-minute install.</p>
18+
19+
<a href="#-quick-install"><img src="https://img.shields.io/badge/Quick_Install-1_command-6c7fff?style=for-the-badge" /></a>
20+
<a href="https://github.com/BrowserlessAPI/VortexPanel/releases"><img src="https://img.shields.io/badge/Releases-Changelog-22c55e?style=for-the-badge" /></a>
21+
<a href="https://github.com/BrowserlessAPI/VortexPanel/issues"><img src="https://img.shields.io/badge/Issues-Report_a_bug-ef4444?style=for-the-badge" /></a>
22+
1123
</div>
1224

1325
---
1426

27+
## 🆚 Why VortexPanel over aaPanel / HestiaCP / cPanel?
28+
29+
| Feature | cPanel | aaPanel Free | aaPanel Pro | HestiaCP | **VortexPanel** |
30+
|---|---|---|---|---|---|
31+
| **Price** | $30–$65/mo | Free | Paid add-on | Free | **Free (MIT)** |
32+
| **ModSecurity WAF** | Paid ext. || ✅ paid | Manual | **✅ Built-in** |
33+
| **Fail2Ban** | Paid ext. || ✅ paid || **✅ Built-in** |
34+
| **Load Balancer** ||| ✅ paid || **✅ Built-in** |
35+
| **WP Toolkit** ||||| **✅ Built-in** |
36+
| **Firewall (UFW + firewalld)** || UFW only | UFW only | UFW only | **✅ Both** |
37+
| **Cloud Backup (S3)** | Paid || ✅ paid | Manual | **✅ Built-in** |
38+
| **Docker UI** ||||| **✅ Built-in** |
39+
| **RHEL/AlmaLinux/Rocky** || Partial | Partial || **✅ 9 distros** |
40+
| **Web Terminal** ||||| **✅ Built-in** |
41+
| **Open source** || Partial ||| **✅ MIT** |
42+
43+
---
44+
1545
## ✨ Features
1646

17-
| Category | Features |
18-
|---|---|
19-
| **Web Servers** | Nginx, Apache2, OpenLiteSpeed, Caddy — install, configure, SSL |
20-
| **PHP** | Multi-version (7.4 → 8.4), extensions, php.ini editor, FPM control |
21-
| **Databases** | MySQL, MariaDB, PostgreSQL, MongoDB — create DBs, users, backup |
22-
| **File Manager** | Full-featured: editor, chmod, compress/extract, search, drag-upload |
23-
| **Docker** | Container management, 40+ pre-configured images catalog |
24-
| **CDN** | Cloudflare, BunnyCDN, Akamai, CloudFront, KeyCDN — full API |
25-
| **Security** | Firewall (UFW), Fail2ban, ModSecurity WAF, SSH hardening |
26-
| **Cron Jobs** | Visual scheduler, run-now, logs, 10 task types |
27-
| **Monitoring** | Real-time CPU/RAM/Disk, process list, bandwidth tracking |
28-
| **Backups** | Website + database backups, restore, upload |
29-
| **DNS** | BIND9 zone management, DDNS |
30-
| **Mail** | Postfix + Dovecot, domains, accounts |
31-
| **AI Assistant** | Built-in NeonCodex AI for server help (requires API key) |
47+
### 🌐 Website Management
48+
- **Nginx, Apache2, OpenLiteSpeed, Caddy** — install and manage from the same panel
49+
- **One-click SSL** via Let's Encrypt — auto-detects Cloudflare DNS-01 vs HTTP-01
50+
- Reverse proxy, custom directives, PHP version per site, Composer integration
51+
- One-click WordPress/Laravel/Symfony deploy
52+
53+
### 🔷 WP Toolkit *(new in v3.1)*
54+
- **Full WordPress install** — downloads WP, creates DB, writes wp-config.php, creates vhost, configures SSL — all in one click
55+
- **PHP 7.4–8.5**, **Nginx / Apache / OpenLiteSpeed / Caddy**, **MariaDB / MySQL**
56+
- Plugin & theme management, one-click admin login, bulk updates
57+
- **Security scanner** — 9 checks with one-click auto-fix buttons
58+
- **Staging clone** — full site clone with DB, push/pull between staging and live
59+
- Backup/restore, maintenance mode, system cron, debug mode toggle
60+
- Powered by wp-cli (auto-installed if missing)
61+
62+
### 🔒 Security *(free — no "Pro" tier)*
63+
- **Firewall** — UFW (Debian/Ubuntu) **and** firewalld (Fedora/RHEL/AlmaLinux/Rocky/Oracle/CentOS/CloudLinux) from the same UI
64+
- **Fail2ban** — intrusion prevention, brute-force protection
65+
- **ModSecurity WAF** — Nginx web application firewall, one-click install + toggle
66+
- **Security Score** — at-a-glance audit with actionable fix buttons
67+
- SSH hardening, login-attempt monitoring, open port scanner
68+
69+
### 🗄 Databases
70+
- MySQL, MariaDB, PostgreSQL, MongoDB — multi-engine
71+
- phpMyAdmin integration (auto-configured on its own port, separate PHP version)
72+
73+
### 📦 App Store
74+
- 25+ one-click installs: Nginx, Apache, OpenLiteSpeed, Caddy, PHP (multi-version), MySQL, MariaDB, PostgreSQL, MongoDB, Redis, Docker, Node.js, Python, Composer, Fail2ban, ClamAV, ModSecurity, Roundcube, Supervisor, Pure-FTPd, BIND9 DNS, and more
75+
- Automatic conflict detection, RHEL-family package manager support
76+
77+
### ⚡ Performance
78+
- Dashboard stats from `/proc` (not `top -bn1`) — **10× faster** response
79+
- Response caching for expensive endpoints
80+
- **Gzip compression**`app.js` 150KB → ~40KB, `index.html` 350KB → ~70KB
81+
82+
### 🔧 Everything else
83+
- **Docker** — container management, 45+ pre-configured image catalog
84+
- **DNS** — BIND9 zone management + Cloudflare DDNS (no ddclient)
85+
- **Mail** — Postfix + Dovecot, domains, accounts, Roundcube webmail
86+
- **CDN** — Cloudflare, BunnyCDN, Akamai, CloudFront, KeyCDN
87+
- **Monitoring** — real-time CPU/RAM/Disk/Network, process list, bandwidth
88+
- **File Manager** — code editor, chmod, AES-encrypted zip support, ClamAV scan
89+
- **Web Terminal** — full PTY shell in browser over WebSocket
90+
- **Backups** — website + database, restore, S3-compatible cloud backup
91+
- **Cron Jobs** — visual scheduler, 10 task types, run-now, logs
92+
- **AI Assistant** — configurable OpenAI-compatible API (NeonCodex, OpenAI, etc.)
3293

3394
---
3495

3596
## 🚀 Quick Install
3697

3798
```bash
38-
# One-line install (Ubuntu, Debian, Fedora, AlmaLinux, Rocky, RHEL, Oracle Linux, CentOS)
39-
wget -O install.sh https://raw.githubusercontent.com/BrowserlessAPI/Vortexpanel/main/install.sh && bash install.sh
99+
wget -O install.sh https://raw.githubusercontent.com/BrowserlessAPI/VortexPanel/main/install.sh && bash install.sh
40100
```
41101

42-
Access the panel at: `http://YOUR-SERVER-IP:8888`
102+
Access the panel at: **`http://YOUR-SERVER-IP:8888`**
43103

44-
The installer auto-detects your OS and package manager (`apt` or `dnf`), and on
45-
RHEL 8-family systems (AlmaLinux 8 / Rocky 8, where the default Python is 3.6)
46-
it automatically installs and uses Python 3.11 for the panel's virtual environment.
104+
The installer auto-detects your OS and package manager. On RHEL 8-family systems (AlmaLinux 8 / Rocky 8, where default Python is 3.6) it automatically installs Python 3.11.
47105

48106
---
49107

50-
## 📋 Requirements
108+
## 📋 Supported Operating Systems
51109

52-
- **OS**: Ubuntu 20.04 / 22.04 / 24.04, Debian 11 / 12, Fedora 38+, AlmaLinux 8 / 9 / 10, Rocky Linux 8 / 9 / 10, RHEL 8 / 9 / 10, Oracle Linux 8 / 9, CentOS Stream, CloudLinux 8 / 9 / 10
53-
- **RAM**: 512 MB minimum (1 GB recommended)
54-
- **Disk**: 2 GB free
55-
- **Python**: 3.8+ (the installer handles this automatically on older RHEL 8-family systems)
110+
| Distro | Versions |
111+
|---|---|
112+
| **Ubuntu** | 20.04, 22.04, 24.04 |
113+
| **Debian** | 11, 12 |
114+
| **AlmaLinux** | 8, 9, 10 |
115+
| **Rocky Linux** | 8, 9, 10 |
116+
| **RHEL** | 8, 9, 10 |
117+
| **Oracle Linux** | 8, 9 |
118+
| **CentOS Stream** | 8, 9 |
119+
| **CloudLinux** | 8, 9, 10 |
120+
| **Fedora** | 38+ |
121+
122+
**Minimum requirements:** 512 MB RAM (1 GB recommended) · 2 GB free disk
56123

57124
---
58125

59-
## 🔧 Manual Setup
126+
## 🛠 Tech Stack
60127

61-
```bash
62-
git clone https://github.com/BrowserlessAPI/Vortexpanel.git
63-
cd Vortexpanel
64-
pip install -r requirements.txt
65-
python3 app.py
66-
```
128+
| Layer | Technology |
129+
|---|---|
130+
| **Backend** | Python 3.8+ · Flask 3.x · Gunicorn (4 workers × 4 threads) |
131+
| **Frontend** | Alpine.js 3.14 · Vanilla CSS (no build step, no npm) |
132+
| **Auth** | Session-based · SHA-256 hashed passwords |
133+
| **Panel config** | JSON files (no external database required) |
134+
| **Service** | systemd · auto-start on boot |
67135

68136
---
69137

70-
## 🛠 Stack
138+
## 🤝 Contributing
139+
140+
Contributions are welcome — bug reports, feature requests, and pull requests all help.
71141

72-
- **Backend**: Python 3 + Flask
73-
- **Frontend**: Alpine.js 3.14 + Vanilla CSS (no framework)
74-
- **Database**: File-based config (no external DB required for panel itself)
75-
- **Auth**: Session-based with SHA-256 hashed passwords
142+
**Before you start:**
143+
1. Check [open issues](https://github.com/BrowserlessAPI/VortexPanel/issues) to avoid duplicates
144+
2. For new features, open an issue to discuss before coding
145+
3. Read [CONTRIBUTING.md](CONTRIBUTING.md) for code style and PR process
146+
147+
```bash
148+
git clone https://github.com/BrowserlessAPI/VortexPanel.git
149+
cd VortexPanel
150+
pip install -r requirements.txt
151+
python3 app.py # runs on :8888
152+
```
76153

77154
---
78155

79-
## 🤝 Contributing
156+
## 🗺 Roadmap
80157

81-
Pull requests welcome! Please open an issue first to discuss changes.
158+
- [ ] Per-site website analytics (traffic, top URIs, status codes, bot detection)
159+
- [ ] Alerting — CPU/RAM/SSL-expiry push to Telegram/Discord/email/webhook
160+
- [ ] Disk usage analyzer (visual tree, delete from panel)
161+
- [ ] Multi-user / RBAC
162+
- [ ] PHP webshell scanner (pattern-based, integrates with File Manager)
163+
- [ ] LB node health monitoring + TCP/stream load balancing
82164

83165
---
84166

85167
## 📄 License
86168

87-
MIT License — free to use, modify, and distribute.
169+
MIT License — free to use, modify, and distribute, including commercially.
88170

89171
---
90172

91173
<div align="center">
92-
Made with ⚡ by <a href="https://github.com/BrowserlessAPI">BrowserlessAPI</a>
174+
Made with ⚡ by <a href="https://github.com/BrowserlessAPI">BrowserlessAPI</a> · <a href="https://github.com/BrowserlessAPI/VortexPanel/releases">Releases</a> · <a href="https://github.com/BrowserlessAPI/VortexPanel/issues">Issues</a> · <a href="CONTRIBUTING.md">Contributing</a>
93175
</div>

0 commit comments

Comments
 (0)