<p align="center">
  <img src="public/images/jabali_logo.svg" alt="Jabali Panel" width="140">
</p>
<h1 align="center">Jabali Panel</h1>

A modern web hosting control panel for WordPress and general PHP hosting. Built with Laravel 12, Filament v5, Livewire 4, and Tailwind CSS v4.

Version: 0.9-rc35 (release candidate)

This is a release candidate. Expect rapid iteration and breaking changes until 1.0.

## Highlights

- Multi-tenant isolation with per-user Linux accounts and PHP-FPM pools
- Agent-driven automation for domains, SSL, mail, DNS, backups, and migrations
- cPanel and WHM migrations with detailed, step-by-step logs
- Built-in mail stack (Postfix, Dovecot, Rspamd) with webmail SSO
- DNS management with templates and optional DNSSEC
- Backups for users and servers with schedules, retention, and remote targets
- Security controls including firewall, Fail2ban, and ClamAV scanning

## Installation

Quick install:

```
curl -fsSL https://raw.githubusercontent.com/shukiv/jabali-panel/main/install.sh | sudo bash
```

Optional flags:

- `JABALI_MINIMAL=1` for core-only install
- `JABALI_FULL=1` to force all optional components

After install:

- Admin panel: `https://your-host/jabali-admin`
- User panel: `https://your-host/jabali-panel`
- Webmail: `https://your-host/webmail`

## Feature Map

### Admin Panel

- Server dashboard with stats, health, and recent activity
- User management with suspension and quota tracking
- Service manager for systemd services
- PHP version manager and PHP-FPM pool management
- DNS zones, templates, and DNSSEC management
- SSL issuance, renewal, and certificate inventory
- IP address management (default and per-domain assignments)
- Backups and restores (local + remote, schedules + retention)
- Migrations (cPanel restore and WHM downloads)
- Security center (firewall, Fail2ban, ClamAV, security scans)
- Audit logs and email notifications

### User Panel

- Domains and redirects with automatic Nginx config
- DNS records editor
- Mail domains, mailboxes, and forwarders
- Webmail SSO (Roundcube)
- WordPress manager (install, scan, updates, SSO)
- File manager plus SFTP/SSH key management
- Databases and user permissions
- PHP settings per account
- SSL certificates and renewals
- Cron jobs
- Backups and restore
- Logs and statistics
- Protected directories

### Platform

- Root-level agent for privileged operations
- Queue-backed jobs for long-running tasks
- Self-healing service monitor and alerts
- Redis ACL isolation for WordPress caching
- Multi-language UI

## Screenshots

Admin panel:

- Dashboard: ![Admin Dashboard](docs/screenshots/admin-dashboard.png)
- Server Status: ![Server Status](docs/screenshots/admin-server-status.png)
- Server Settings: ![Server Settings](docs/screenshots/admin-server-settings.png)
- Security Center: ![Security Center](docs/screenshots/admin-security.png)
- Users: ![User Management](docs/screenshots/admin-users.png)
- SSL Manager: ![SSL Manager](docs/screenshots/admin-ssl-manager.png)
- DNS Zones: ![DNS Zones](docs/screenshots/admin-dns-zones.png)
- Backups: ![Admin Backups](docs/screenshots/admin-backups.png)
- Services: ![Services](docs/screenshots/admin-services.png)

User panel and flows:

- User Dashboard: ![User Dashboard](docs/screenshots/user-dashboard.png)
- Domain Management: ![User Domains](docs/screenshots/user-domains.png)
- Backups: ![User Backups](docs/screenshots/user-backups.png)
- cPanel Migration: ![cPanel Migration](docs/screenshots/user-cpanel-migration.png)

## Architecture

- Control plane: Laravel app with Filament panels
- Data plane: root agent handling privileged operations
- Job queue: async tasks and migration steps
- Logging: agent and panel logs for troubleshooting

Service stack (single-node default):

- Nginx + PHP-FPM
- MariaDB (user databases)
- SQLite (panel metadata by default)
- Postfix, Dovecot, Rspamd
- BIND9 (DNS)
- Redis
- Fail2ban and ClamAV (optional)

## Requirements

- Fresh Debian 12 or 13 install (no pre-existing web or mail stack)
- A domain for panel and mail (with glue records if hosting DNS)
- PTR (reverse DNS) for mail hostname
- Open ports: 22, 80, 443, 25, 465, 587, 993, 995, 53

## Upgrades

```
cd /var/www/jabali
php artisan jabali:upgrade
```

Check for updates only:

```
php artisan jabali:upgrade --check
```

## CLI

```
jabali --help
jabali backup create <user>
jabali backup restore <path> --user=<user>
jabali cpanel analyze <file>
jabali cpanel restore <file> <user>
```

## Development

```
composer dev
php artisan test --compact
./vendor/bin/pint
```

## Initial Release

- 0.9-rc35: Server Status charts now read sysstat history; installer enables sysstat collection; legacy server_metrics storage removed.
- 0.9-rc34: User deletion summary steps; notification re-dispatch on repeated actions; ModSecurity packages added to installer.
- 0.9-rc33: Email Logs unified with Mail Queue; journald fallback; agent response reading hardened.
- 0.9-rc32: Server Updates list loads reliably; admin sidebar order aligned; apt update parsing expanded.
- 0.9-rc31: File manager navigation uses Livewire actions; parent row excluded from bulk select.
- 0.9-rc30: Avoid IncludeOptional in ModSecurity CRS includes.
- 0.9-rc29: Ensure ModSecurity unicode mapping is installed automatically.
- 0.9-rc28: ModSecurity unicode mapping setup fixes.
- 0.9-rc27: Installers now read VERSION when available.
- 0.9-rc26: Updated installer version banner.
- 0.9-rc25: Added Gitea installer script.
- 0.9-rc24: WAF installer improvements and ModSecurity setup fixes.
- 0.9-rc: initial release candidate with core hosting, mail, DNS, SSL, backups, and migrations.

## License

MIT
