How would you like to explore?
Choose your preferred way of managing Panelica. You can switch anytime from the sidebar.
panelica CLI binary. Automate with scripts.You can switch between modes at any time from the sidebar toggle.
Panelica Documentation
Complete reference for the Panelica server management platform. Learn how to manage users, domains, web servers, databases, email, security, and more.
User Management
Create users, assign roles, configure hosting plans and resource quotas
Domain Management
Add domains, configure DNS, SSL certificates, and web server settings
PHP Management
Switch PHP versions, install extensions, configure php.ini per domain
IP & Fail2ban
Firewall rules, IP blocking, brute-force protection, and Fail2ban jail management
Email System
Email accounts, forwarders, autoresponders, spam filters, and mailing lists
External API
HMAC-SHA256 authenticated REST API for automation and WHMCS integration
Backup & Recovery
Full and incremental backups with remote storage, scheduling, and migration tools
CLI Reference
Complete panelica command reference: domains, users, PHP, databases, SSL, and more
Panel Overview
Access, navigate, and understand the Panelica management interface.
Accessing the Panel
Panelica runs on HTTPS port 8443 by default. After installation, open your browser and navigate to:
https://your-server-ip:8443
The panel uses a self-signed SSL certificate initially. You can replace it with a valid certificate from Panel Settings → SSL. Login credentials are configured during the setup wizard.
nginx-panel) separate from customer websites. Panel access never interferes with hosted sites.
Dashboard
The Server Dashboard (Dashboard) provides a real-time overview of your entire server with live WebSocket updates.
Quick Stats Row — Four clickable cards at the top showing:
- Total Domains — Number of hosted domains. Click to go to Domains page, or use the quick Create Domain button.
- Active Databases — Number of MySQL databases. Click to go to Databases page.
- Email Accounts — Number of email accounts across all domains.
- Total Users — Number of panel users. Click to go to Users page, or use the quick Create User button.
System Resources — Three real-time gauges in the main content area:
- CPU Gauge — Analog gauge (0-100%) with current load average. Shows connection status indicator (green = live, red = disconnected).
- RAM Gauge — Analog gauge showing used/total GB. Toggleable history chart.
- Disk Usage — Multi-segment progress bar with separate system and
/homepartition usage, total/used/free breakdown, and top disk user.
Network Traffic Chart — Interactive ApexCharts area graph showing real-time RX (download) and TX (upload) traffic with:
- Time range selector: 1h, 6h, 24h
- Unit selector: Auto, Mbps, Gbps, KBps, MBps, GBps
- Live speed indicators for both RX and TX
Right Sidebar Widgets:
- System & Security Alerts — Shows active issues: high CPU (>80%), high memory (>85%), critical disk (>90%), high server load, and security advisor findings. Displays "All Systems Operational" when no issues.
- Quick Stats Card — Hostname, public IP (auto-detect), system uptime, CPU cores, total RAM, total disk, server time, load average (1/5/15 min).
- Top Processes — Live table showing top processes sorted by CPU or RAM. Configurable count (5/10/15/20/25). Each row shows process name, CPU%, memory%, and owner. Includes a Kill button with confirmation dialog.
Navigation Structure
The panel sidebar organizes features into logical groups:
| Section | Contents |
|---|---|
| Dashboard | Server overview, resource gauges, network chart, alerts, top processes |
| Domains | All Domains, Create Domain, DNS, SSL/TLS, Subdomains, Redirects, CloudFlare |
| Users | All Users, Create User, Page Permissions |
| Service Plans | All Plans, Create Plan |
| WP Toolkit | Sites, Install, Plugins, Themes, Updates, Security, Staging |
| Docker | Docker Manager (ROOT only) |
| Accounts, Forwarders, Autoresponders, Webmail, Mail Queue, Email Routing, Spam Filters, Mailing Lists, Settings | |
| Databases | MySQL Databases, Database Users, Remote MySQL |
| Files | File Manager, FTP Accounts, Disk Usage |
| Backup | Create, Restore, Schedules, Snapshots, Activity Log, Migration, Remote Storage |
| Remote Access | SSH Access, Web Terminal |
| Tools | Panel Settings, PHP Settings, Cron Jobs, Package Manager, Server Info, License |
| Security | Antivirus, Security Advisor, IP & Fail2ban, ModSecurity, AppArmor |
| Monitoring | Panelica Monitor, Resource Usage, Process Manager, Log Management, Bandwidth Usage |
| Developer | API Management, Webhooks |
Setup Wizard
The Setup Wizard runs automatically on first access and configures essential server settings in 5 steps.
Wizard Steps
Step 1: Welcome
Introduction screen. Click Begin Setup to start.
Step 2: Administrator Account
Set up the root administrator credentials:
- Email Address — Your admin email (e.g., [email protected])
- Password — Minimum 8 characters. Use the Generate button for a secure 16-character password with uppercase, lowercase, numbers, and symbols. A strength indicator shows Weak / Medium / Strong.
- Confirm Password — Must match the password above
Step 3: License Activation
Enter your license key in the format PNLC-XXXX-XXXX-XXXX. This step is optional — you can skip it and activate later from Tools → License.
Step 4: Panel Access Port
Configure the port for accessing the panel. Default is 8443. Must be between 1024 and 65535. If you don't want to change it, click Skip (Keep Current).
Step 5: Terms & Conditions
Read and accept the terms of service. You must scroll to the bottom of the terms text before the acceptance checkbox becomes active. Select your preferred language (20 languages available), then click Accept & Complete.
License Activation
How to activate, manage, and monitor your Panelica license.
Activating Your License
Your license key is available in the customer portal after purchase.
PNLC-XXXX-XXXX-XXXX$ panelica license activate PNLC-XXXX-XXXX-XXXX
License Status Page
The Tools → License page has several sections:
- License Status Card — Shows your plan name, current status badge (Active, Expired, Suspended, Grace Period, Invalid), license key (masked), and expiration date. Actions: Change Key, Sync Now, Deactivate.
- Sync Status Card — Shows the last sync time, connection status, failed attempt count, and any error messages. The panel syncs with the license server at a regular interval (default every 6 hours).
- Heartbeat Monitor — An interactive chart showing the history of license sync responses. Displays success rate (%), average response time (ms), and countdown to the next heartbeat. Green markers = success, red markers = failure.
- Features Section — Collapsible list of all enabled features grouped by category. Shows a badge with the total enabled feature count.
- Resource Limits — Collapsible grid showing plan limits (e.g., max domains, max users, max databases). Unlimited values show an infinity icon.
- Server Information — Displays the server hardware fingerprint and the central server URL.
Server Binding
The license is bound to your server's hardware fingerprint (CPU, disk, OS hash). If you move to a different server, you must deactivate the license on the old server first, then activate it on the new one.
Feature Enforcement
Your license plan determines what features are available:
- Resource limits — Maximum domains, users, databases, email accounts
- Feature access — SSH access, backup, Docker, WordPress staging, remote backup storage, AppArmor, monitoring, API access, etc.
- Sidebar visibility — Menu items for features not included in your plan display a lock icon and are inaccessible
Grace Mode
License Alerts
When a license issue is detected, a prominent red alert banner appears at the top of the license page with a description of the problem (Suspended, Expired, or Invalid) and quick action buttons to enter a new key or force a sync.
CLI Commands
$ panelica license status # Show current license status $ panelica license activate KEY # Activate a license $ panelica license deactivate # Release license from this server $ panelica license features # List available features
User Management
Create, manage, and organize user accounts with role-based access control.
Users List
Navigate to Users → All Users. The page shows four statistic cards at the top: Total Users, Active Users, Suspended Users, and Resellers.
Two display modes are available:
- Tree View (default) — Hierarchical view showing who created whom. ROOT → ADMINs → RESELLERs → USERs. Expand/collapse branches.
- Table View — Traditional sortable table with columns: Username, Full Name, Email, Role, Plan, Status, System Username, Created Date.
Use the search box to filter by username, full name, or email. Filter by role (ROOT, ADMIN, RESELLER, USER).
Creating a User
Navigate to Users → Create User. The form has two columns:
Account Information (left column):
| Field | Description | Required |
|---|---|---|
| Username | System username (lowercase, numbers, underscore only, max 32 chars). A character counter shows progress. This creates a Linux system user. | Yes |
| User's email address for notifications and login | Yes | |
| Password | Minimum 8 characters. Real-time strength meter shows Weak / Fair / Good / Strong with a color-coded progress bar. Requirements checklist (lowercase, uppercase, numbers, special chars) updates live. | Yes |
| Confirm Password | Must match the password above | Yes |
| Full Name | Display name in the panel | No |
User Settings:
| Field | Description | Required |
|---|---|---|
| Role | ADMIN, RESELLER, or USER. Available options depend on your own role and license features. RESELLERs can only create USERs. | Yes |
| IP Addresses | Multi-select of available server IPs. Shows interface name and status. | Yes |
Service Plan (right column):
Select a hosting plan from the dropdown. The default plan is marked. Once selected, a collapsible Features panel shows the plan's quota summary: max domains, disk quota (GB), bandwidth (GB), max databases, email accounts, subdomains, FTP accounts, cron jobs, and feature toggles (SSH access level, FTP, MySQL, cron, SSL, backup).
When you create a user, Panelica automatically:
/home/username/$ panelica users create --username=johndoe --email=[email protected] --password=SecurePass123 --role=user --plan=starter
Managing Users
Each user row in the list has action buttons:
- Login as User — Impersonate the user to see their panel view (ROOT/ADMIN only). Opens their dashboard in a new session.
- Edit — Opens the edit form to change username, email, role, plan, IP addresses
- Suspend / Unsuspend — Temporarily disable a user (sites stay on disk but become unreachable). Toggle button changes based on current status.
- Delete — Remove the user and all associated data (domains, databases, emails). Requires confirmation.
Bulk Operations
Select multiple users with checkboxes. A selection bar appears showing the count:
- Bulk Suspend — Suspend all selected users at once
- Bulk Unsuspend — Reactivate all selected users
- Bulk Delete — Delete all selected users (requires typing confirmation text)
- Delete All Users — ROOT only. Removes every user from the server (destructive, requires typed confirmation)
Roles & Permissions (RBAC)
Panelica uses a 4-level role hierarchy to control access to features and data.
Role Hierarchy
| Role | Level | Can Create | Description |
|---|---|---|---|
| ROOT | 0 (highest) | ADMIN, RESELLER, USER | Full system access. Server settings, service management, all users. One per server. |
| ADMIN | 1 | RESELLER, USER | Near-full access. Can manage most settings except ROOT-only features (key rotation, server config). |
| RESELLER | 2 | USER | Can create end-users within their own quota. Limited by their assigned plan. Ideal for hosting resellers. |
| USER | 3 (lowest) | — | End-user. Manages their own domains, databases, email, and files. Cannot create other users. |
Data Visibility Rules
- ROOT sees everything on the server including system logs
- ADMIN sees their own data + all users they created + system logs
- RESELLER sees their own data + USERs they created (no system logs)
- USER sees only their own data
Page Permissions
Navigate to Hosting Management → Users → Page Permissions. This is a 2-panel enterprise layout for managing page-level and feature-level RBAC.
Header Controls:
| Control | Description |
|---|---|
| Role Selector | Button group to switch between ADMIN, RESELLER, and USER. ROOT has full access and cannot be edited. |
| Search | Real-time search across page names, codes, and route paths |
| Reset Role | Reset permissions for the selected role to defaults (with confirmation) |
| Reset All | Reset all roles' permissions to defaults (with confirmation) |
Left Panel — Page Navigation Tree:
Pages are organized into 10 collapsible categories:
| Category | Icon | Examples |
|---|---|---|
| Dashboard | ri-dashboard-2-line | Dashboard |
| Domains | ri-global-line | Domain List, Create Domain, DNS, SSL, Subdomains, Redirects, CloudFlare |
| Users | ri-user-line | User List, Create User |
| Plans | ri-archive-line | Plan List, Create Plan |
| Databases | ri-database-2-line | MySQL, DB Users, Remote MySQL |
| Files | ri-folder-line | File Manager, FTP, Disk Usage |
| Backup | ri-save-line | Backup Manager, Snapshots, Schedules, Migration, Remote Storage |
| Tools | ri-tools-line | Panel Settings, PHP, Cron Jobs, Package Manager, Server Info |
| Security | ri-shield-keyhole-line | Antivirus, WAF, Firewall, AppArmor, Advisor |
| Monitoring | ri-line-chart-line | Panelica Monitor, Resource Usage, Processes, Logs, Bandwidth |
Each category header shows a status dot: green = all pages allowed, red = all denied, yellow = mixed. Click a category to expand and see individual pages.
Each page row shows: status dot (allowed/denied), page name, and feature count badge (if the page has sub-features).
Right Panel — Permission Details:
Select a page from the left panel to see its details. The header shows the page name, route path, and a three-way access control:
| State | Button | Meaning |
|---|---|---|
| Allow | Allow | Explicitly grant access to this page for the selected role |
| Deny | Deny | Explicitly deny access to this page for the selected role |
| Inherit | Default | Use the role's default permission (shown as a sub-badge) |
All changes auto-save immediately when you click a permission button — no save button needed.
Feature-Level Permissions
Below the page access control, the right panel shows granular feature permissions for the selected page. Features are grouped by category:
| Feature Group | Icon | Example Features |
|---|---|---|
| General | ri-settings-3-line | view, edit, delete, suspend, unsuspend |
| Web Server | ri-server-line | mode switch, nginx config, apache config, vhost edit |
| PHP Settings | ri-code-s-slash-line | version change, resource limits, FPM settings, INI editor |
| SSL | ri-lock-line | view status, HTTPS settings, Let's Encrypt, custom upload, renew |
| DNS | ri-earth-line | view, create, edit, delete records, import/export zones |
| Subdomains | ri-folder-3-line | view, create, edit, delete, suspend |
| ModSecurity | ri-shield-line | toggle, settings, rules, custom rules, IP blocking, headers |
| Cron Jobs | ri-time-line | view, create, edit, delete, execute, toggle, logs |
| Bulk Actions | ri-stack-line | bulk select, bulk execute, bulk enable/disable, bulk delete |
| Templates | ri-file-copy-line | view templates, use templates |
| Execution Logs | ri-file-list-3-line | view logs, filter logs |
Each feature has the same Allow / Deny / Inherit three-way toggle. Additional indicators:
- Danger — Dangerous operations (delete, bulk actions, root-level, system-level). Restricted to ROOT by default.
- Pro — Features that require a specific hosting plan to be available.
Feature Bulk Actions (per page):
- Allow All — Grant access to all features on the selected page
- Deny All — Deny access to all features on the selected page
- Reset to Defaults — Revert all features to their default permissions
Stats Footer: At the bottom, a summary bar shows: total pages, total features, implemented features, and the currently selected role.
The permission system covers 500+ granular features across all panel pages, giving ROOT administrators complete control over what each role can see and do.
Hosting Plans
Plans define resource limits, feature access, and quotas for users.
What is a Plan?
A hosting plan is a template that defines what resources and features a user gets. When you assign a plan to a user, all limits from that plan are enforced automatically via Cgroups v2, PHP-FPM pools, and the panel's quota system.
Creating a Plan
Navigate to Service Plans → Create Plan and configure:
| Category | Settings |
|---|---|
| Basic | Name, description, status (active/inactive), display order, default plan toggle |
| Resource Limits | Disk quota (MB), monthly bandwidth (MB), RAM limit, CPU limit (%), I/O read/write limits, max process count |
| Domains | Max domains, max subdomains |
| Max email accounts | |
| Databases | Max databases |
| FTP | Max FTP accounts, FTP access enabled/disabled |
| Cron | Max cron jobs, cron jobs enabled/disabled |
| PHP | PHP memory limit (MB), max execution time (seconds), max PHP-FPM children |
| SSH | SSH access enabled/disabled, access level: none / jailed (SFTP only) / full (SSH + SFTP) |
| Security | SSL enabled/disabled, ModSecurity WAF enabled/disabled |
| Backup | Backup enabled/disabled, max server snapshots, max snapshots per domain, max snapshot storage (GB) |
| Quota Mode | monitor (soft limit, warnings only) or strict (hard limit, operations blocked) |
0 or -1 for unlimited. For example, max_domains: 0 means unlimited domains.
Plan Templates
Panelica provides predefined plan templates to get started quickly:
| Template | Disk | Bandwidth | Domains | Emails | Databases |
|---|---|---|---|---|---|
| Basic | 10 GB | 100 GB | 1 | 5 | 2 |
| Professional | 50 GB | 500 GB | 5 | 50 | 10 |
| Business | 100 GB | 1000 GB | 10 | 100 | 20 |
| Enterprise | Unlimited | Unlimited | Unlimited | Unlimited | Unlimited |
Assigning Plans to Users
Plans are assigned during user creation from the Service Plan dropdown. The default plan is marked with a badge. To change a user's plan later, edit the user from Users → All Users → Edit and select a new plan. Resource limits (Cgroups, PHP-FPM pools) update immediately.
Quota Enforcement
Quotas are enforced at multiple levels:
- Cgroups v2 — CPU, RAM, I/O, and process limits at the kernel level
- PHP-FPM —
memory_limit,max_children,max_execution_timeper pool - Panel Logic — Domain/database/email count checks before creation
- Disk Quota — Filesystem quota (monitor or strict mode)
Domain Management
Add, configure, and manage domains on your server.
Domain List
Navigate to Hosting Management → Domains to see all domains on the server. The page title shows All Domains with the total count.
Table columns:
| Column | Description | Notes |
|---|---|---|
| # | Row number | — |
| Domain | Domain name with status indicator icon | Sortable (alphabetic) |
| Owner | Username badge of the domain owner | — |
| Plan | Hosting plan assigned to the user | — |
| PHP Version | Current PHP version (inline dropdown for quick change) | See Quick PHP Change |
| Web Server | Current mode: Nginx + Apache or Nginx Only | Inline dropdown for quick change |
| Disk Usage | Disk space used by this domain | Sortable (largest first) |
| Bandwidth | Monthly bandwidth consumption | Sortable (highest first) |
| Status | Status badge: active, suspended, quota_exceeded, pending | May also show a maintenance badge |
| Actions | Action buttons (see below) | — |
Controls:
- Search — Real-time search box that filters domains by name
- Show per page — Choose 10, 20, 30, 50, or 100 results per page (default: 30)
- Sort — Click column headers (Domain, Disk Usage, Bandwidth) to toggle sort direction
- Add Domain button — Opens the domain creation form
Action buttons per domain:
| Button | Icon | Action |
|---|---|---|
| Edit Settings | Opens the domain edit page with all settings | |
| Visit Site | Opens https://domain in a new tab | |
| Preview | Opens a server-IP-based preview URL (useful before DNS propagation) | |
| PHPinfo | Opens https://domain/phpinfo.php in a new tab | |
| Suspend | Suspends the domain (sites become unavailable) | |
| Unsuspend | Reactivates a suspended domain | |
| Delete | Permanently removes the domain and all its data |
Quick PHP & Web Server Change
You can change a domain's PHP version or web server mode directly from the domain list without opening the edit page:
The same inline dropdown is available for the Web Server column, letting you switch between Nginx + Apache (reverse proxy) and Nginx Only modes instantly.
Bulk Operations (ROOT Only)
ROOT users see a checkbox column on the left side of the table. Select multiple domains using the checkboxes (or the "select all" checkbox in the header), then use the red action bar that appears at the top:
- Delete Selected — Permanently removes all selected domains
- Clear Selection — Deselects all domains
Creating a Domain
Navigate to Hosting Management → Domains → Add Domain and configure:
| Option | Description | Default |
|---|---|---|
| Domain Name | The domain to host (e.g., example.com) | — |
| Owner | Assign to a user account (ROOT/ADMIN can select any user) | Current user |
| Web Server Mode | Nginx + Apache (reverse proxy) or Nginx Only | Nginx + Apache |
| PHP Version | 8.1, 8.2, 8.3, or 8.4 | 8.3 |
| Document Root | Web root relative to domain folder | public_html |
| SSL | Auto (Let's Encrypt), custom certificate, or none | Auto |
| ModSecurity | Enable/disable WAF for this domain | Enabled |
What happens when you create a domain:
/home/username/example.com/public_html/# CLI equivalent $ panelica domains create --domain=example.com --user=johndoe --php=8.3 --ssl=auto
Directory Structure
# Domain directory layout /home/username/example.com/ ├── public_html/ # Document root (web accessible) ├── logs/ # Access and error logs ├── tmp/ # PHP temp directory ├── .system/ # System configs (vhost, PHP pool, etc.) │ └── conf/ │ ├── nginx.conf │ ├── apache.conf │ └── php-fpm.conf └── backup/ # Domain backups
Edit Domain (7 Tabs)
Click on any domain row or the Edit Settings () button to open the domain edit page. The edit page has 7 tabs:
| Tab | Icon | Description |
|---|---|---|
| General | Domain info, maintenance mode, cron jobs, quick actions | |
| Web Server | Nginx/Apache mode, custom configs, vhost editors | |
| PHP Settings | PHP version, resource limits, FPM pool, php.ini editor | |
| SSL | Certificate status, HTTPS settings, Let's Encrypt, custom cert | |
| DNS | DNS zone records (A, AAAA, CNAME, MX, TXT, NS) | |
| Subdomains | Subdomain list, create, redirect | |
| Security | ModSecurity WAF, rule sets, IP blocking, headers (Apache mode only) |
General Tab
Domain Information:
| Field | Description |
|---|---|
| IP Address | Assign a server IP to the domain (dropdown selector) |
| Document Root | Web root path (must be within user home directory) |
Maintenance Mode: Toggle maintenance mode on/off. When enabled, visitors see a maintenance page. Status shown as Maintenance or Live.
Domain Cron Jobs: View, create, edit, and delete cron jobs associated with this domain. Shows plan-based limits. Each job displays command, schedule, and execution logs.
Quick Actions:
- Visit Site — Open the domain in a new browser tab
- Clear Cache — Clear Nginx/Apache cache for this domain
- Restart Services — Restart PHP-FPM and web server for this domain
- Suspend Domain — Temporarily disable the domain
- Delete Domain — Permanently remove with confirmation modal
Web Server Tab
Web Server Mode: Switch between two modes:
| Mode | Description |
|---|---|
| Nginx Only | Faster performance, serves all content directly via Nginx |
| Nginx + Apache | Nginx as reverse proxy, Apache as backend. Required for ModSecurity WAF and .htaccess support |
Nginx Custom Configuration: Add custom Nginx directives (e.g., rewrite rules, proxy settings) via a code editor. Saved as nginx_custom.conf.
Apache Custom Configuration: Add custom Apache directives (only visible in Nginx + Apache mode). Saved as apache_custom.conf.
Vhost Editors (ROOT only): View and edit the raw Nginx vhost and Apache vhost configuration files directly. Changes take effect after save.
PHP Settings Tab
PHP Version Selector: Choose from available PHP versions (e.g., 8.1, 8.2, 8.3, 8.4). The PHP-FPM pool is recreated automatically. A View phpinfo.php button opens the PHP info page.
Resource Limits:
| Setting | Description |
|---|---|
| Max Execution Time | Maximum script execution time in seconds |
| Memory Limit | Maximum memory per PHP process (MB/GB) |
| Upload Max Size | Maximum upload file size (MB/GB) |
| Post Max Size | Maximum POST data size (MB/GB) |
PHP-FPM Pool Settings:
| Setting | Description |
|---|---|
| Pool Name | Pool identifier (read-only) |
| Min Spare Servers | Minimum idle worker processes |
| Max Spare Servers | Maximum idle worker processes |
| Max Children | Maximum concurrent PHP processes |
| Request Terminate Timeout | Timeout in seconds to kill a slow request |
PHP.ini Editor: Add custom PHP directives in key-value format. Directives are applied to this domain's PHP-FPM pool only.
SSL Tab
Certificate Status: Shows current certificate information — issuer (Let's Encrypt / Custom / Self-Signed), issued date, expiry date, days remaining, subject, and SANs (Subject Alternative Names).
HTTPS Settings:
| Setting | Description |
|---|---|
| Force HTTPS | Redirect all HTTP requests to HTTPS |
| HSTS Enabled | Enable HTTP Strict Transport Security header |
| HSTS Max Age | HSTS cache duration in seconds |
| Auto Renew | Automatically renew certificate before expiry |
Let's Encrypt: Renew or Reissue the certificate with one click. Shows expiry countdown.
Custom Certificate Upload: Upload your own certificate, private key, and CA bundle files.
DNS Tab
Manage DNS zone records for this domain. Records table columns:
| Column | Description |
|---|---|
| Type | A AAAA CNAME MX TXT NS |
| Name | Record name (@ for root domain) |
| Content | Record value (IP address, hostname, text) |
| TTL | Time to live in seconds (default: 3600) |
| Priority | Priority value (MX records only) |
| Status | Active / Disabled |
| Actions | Edit, Delete |
Click Add Record to create a new DNS record. Select the record type, enter the name, content, TTL, and priority (for MX).
Subdomains Tab
Manage subdomains within the edit domain page. Each subdomain shows: full name, document root, status, and creation date.
Create Subdomain: Enter the subdomain name (prefix), optionally specify a document root or redirect URL. The full path is calculated automatically (e.g., /home/user/example.com/subdomain/).
Actions: Edit (redirect URL), Visit (open in browser), Suspend/Activate, Delete.
Security Tab (Apache Mode Only)
ModSecurity WAF: Enable or disable the Web Application Firewall for this domain. When enabled:
| Setting | Description |
|---|---|
| Mode | DetectionOnly (log only) or On (active protection — blocks attacks) |
| Paranoia Level | Level 1 (low) to Level 4 (high) — higher levels catch more but may cause false positives |
| Inbound Threshold | Anomaly score threshold for incoming requests (1-100) |
| Outbound Threshold | Anomaly score threshold for outgoing responses (1-100) |
| Audit Log | Enable domain-specific audit logging |
Rule Sets: Toggle individual security rule sets on/off:
- OWASP Core Rule Set (CRS) — 150 rules, core web attack protection
- SQL Injection Protection — 42 rules
- XSS Protection — 38 rules
- WordPress Security Rules — 28 rules
- File Upload Restrictions — 15 rules
- Directory Traversal Protection — 12 rules
Custom Rules: Add custom ModSecurity rules in the code editor (expert users only). Syntax errors can break web access.
IP Access Control: Block specific IP addresses from accessing this domain. Add IPs one by one; each blocked IP appears as a badge with a remove button.
HTTP Security Headers:
| Header | Value | Description |
|---|---|---|
| X-Frame-Options | DENY / SAMEORIGIN | Prevents clickjacking attacks |
| X-Content-Type-Options | nosniff | Prevents MIME type sniffing |
| X-XSS-Protection | 1; mode=block | Browser XSS filter |
| HSTS | Toggle | HTTP Strict Transport Security |
Subdomains
Create and manage subdomains under your existing domains.
Page Layout
Navigate to Hosting Management → Subdomains. The page uses a two-panel layout:
- Left panel (25%) — Domain list with search. Click a domain to select it. A badge shows the subdomain count for each domain.
- Right panel (75%) — Subdomain management area for the selected domain.
Use the search box at the top of the left panel to filter domains by name. The domain count is shown below the search box. A refresh button in the panel header reloads the domain list.
Subdomain Table
After selecting a domain, the right panel displays a table with the following columns:
| Column | Description |
|---|---|
| Subdomain | Full subdomain name (e.g., blog.example.com) with the short name below |
| PHP Version | PHP version badge (e.g., PHP 8.3) |
| SSL | Green badge with provider name if enabled; grey badge if disabled |
| Document Root | Filesystem path in monospace (truncated if longer than 30 characters) |
| Status | active or suspended |
| Actions | Visit (opens subdomain in new tab), Copy Name (copies to clipboard), Delete |
A summary footer shows the total number of subdomains, active count, and SSL-enabled count.
Creating a Subdomain
Click the Create button in the right panel toolbar. A modal dialog opens with the following fields:
| Field | Type | Description |
|---|---|---|
| Subdomain Name * | Text | Enter the subdomain prefix (e.g., blog). The parent domain is shown as a suffix: .example.com |
| Document Root | Text | Optional custom path. The full path preview updates automatically: /home/user/example.com/subdomains/blog/... |
| Redirect URL | Text | Optional — if set, the subdomain redirects to this URL instead of serving files |
$ panelica subdomains create --domain=example.com --subdomain=blog
Document root: /home/username/example.com/subdomains/blog/public_html/
DNS Management (BIND)
Manage DNS zones and records with the integrated BIND DNS server.
Page Layout
Navigate to Hosting Management → DNS. The page uses a two-panel layout:
- Left panel (25%) — Searchable domain list. Click a domain to load its DNS zone.
- Right panel (75%) — DNS record table with search, inline editing, and an Add Record drawer.
The zone header shows the zone name and provides Validate and Reload action buttons.
Automatic Zone Creation
When you create a domain, Panelica automatically creates a BIND DNS zone with:
- SOA Record — Start of Authority with auto-incrementing serial number
- NS Records — Points to your configured nameservers (ns1/ns2)
- A Record — Points to the server IP
- MX Record — Mail exchange (if email is enabled)
Record Table
The record table displays all DNS records for the selected domain with these columns:
| Column | Description | Editable |
|---|---|---|
| Name | Record hostname. @ shows a "root" badge. | Yes (inline) |
| Type | Color-coded badge: A, AAAA, CNAME, MX, TXT, NS, SRV, CAA | No |
| Value | Record content in monospace (truncated to 50 chars). Click the copy icon to copy the full value. | Yes (inline) |
| TTL | Time to live in seconds | Yes (inline) |
| Priority | Priority number for MX and SRV records; dash for other types | Yes (MX/SRV only) |
| Status | active or disabled | No |
| Actions | Edit (switches row to inline edit mode) and Delete | — |
A search bar above the table filters records by name, type, or value in real-time.
Adding a Record
Click the Add Record button to open a slide-in form from the right side. Fill in the fields:
| Field | Type | Description |
|---|---|---|
| Record Type * | Select | Choose from A, AAAA, CNAME, MX, TXT, NS, SRV, CAA. A description of the selected type appears below. |
| Name * | Text | Hostname (e.g., @ for root, www, mail) |
| Value * | Text / Textarea | Record content. Placeholder changes based on type (e.g., 192.168.1.1 for A records, v=spf1 ... for TXT). TXT records use a multi-line textarea. |
| TTL | Number | Time to live in seconds (60–86400) |
| Priority * | Number | Only for MX and SRV records (0–65535) |
| Weight | Number | Only for SRV records (0–65535) |
| Port | Number | Only for SRV records (1–65535) |
$ panelica dns list --domain=example.com $ panelica dns add --domain=example.com --type=A --name=@ --value=1.2.3.4 --ttl=3600 $ panelica dns delete --domain=example.com --id=5
Quick Templates
Below the Add Record form, Panelica provides quick templates that pre-fill common configurations:
| Template | Pre-fills |
|---|---|
| Root A Record | Type: A, Name: @, TTL: 3600 |
| WWW A Record | Type: A, Name: www, TTL: 3600 |
| Mail Server (MX) | Type: MX, Name: @, Value: mail., Priority: 10, TTL: 3600 |
Click a template button to auto-fill the form, then adjust the value field and submit.
Zone files are stored at /opt/panelica/var/dns/zones/. Changes take effect immediately after BIND reload.
SSL Certificates
Automated SSL via Let's Encrypt or custom certificate uploads.
Page Layout
Navigate to Hosting Management → SSL Certificates. The page uses a two-panel layout:
- Left panel (25%) — Searchable domain list. Each domain shows an SSL status indicator (green badge with provider name if enabled, grey if disabled).
- Right panel (75%) — SSL certificate details, HTTPS settings, and upload/renew actions for the selected domain.
Certificate Status
After selecting a domain, the right panel shows the certificate status card with:
- Certificate validity — Valid/Invalid indicator
- Issuer — Certificate authority name (e.g., Let's Encrypt, Self-Signed)
- Expiry date — When the certificate expires
- Days until expiry — Color-coded countdown (green = safe, yellow = expiring soon, red = expired)
- SAN list — Subject Alternative Names covered by the certificate
- Provider — Let's Encrypt, Self-Signed, or Custom
Let's Encrypt (Auto SSL)
When SSL is set to "Auto" during domain creation, Panelica automatically requests a Let's Encrypt certificate. You can also issue or renew manually:
For domains with an existing Let's Encrypt certificate, the panel shows a status section with two action buttons:
- Renew Certificate — Renews the current certificate before it expires
- Reissue Certificate — Requests a fresh certificate (useful if domain names changed)
$ panelica ssl issue --domain=example.com $ panelica ssl renew --domain=example.com $ panelica ssl status --domain=example.com
Custom Certificate Upload
To upload your own certificate, use the upload form in the right panel:
| Field | Accepted Formats | Required |
|---|---|---|
| Certificate File | .crt, .pem, .cer | Yes |
| Private Key File | .key, .pem | Yes |
| CA Bundle File | .crt, .pem | No (recommended) |
Click Upload to install the certificate. Panelica validates the certificate and key match before applying.
To upload your own certificate, provide the certificate, private key, and optionally the CA bundle file.
HTTPS Settings
Below the certificate details, configure HTTPS behavior with these toggles:
| Setting | Description | Default |
|---|---|---|
| SSL Enabled | Enable or disable SSL for this domain | On |
| Force HTTPS | 301 redirect from HTTP to HTTPS at the Nginx level (zero PHP overhead) | Off |
| HSTS Enabled | HTTP Strict Transport Security — tells browsers to always use HTTPS | Off |
| HSTS Max Age | Duration in seconds browsers should remember the HSTS policy | 31536000 (1 year) |
| Auto Renew | Automatically renew Let's Encrypt certificates before they expire | On |
URL Redirects
Create and manage URL redirects per domain with support for multiple redirect types and match patterns.
Page Layout
Navigate to Hosting Management → Redirects. The page uses a two-panel layout:
- Left panel (25%) — Searchable domain list. Each domain shows a badge with the total and active redirect counts.
- Right panel (75%) — Redirect table and management for the selected domain.
Redirect Table
After selecting a domain, the right panel shows all configured redirects in a table:
| Column | Description |
|---|---|
| Source Path | The URL path that triggers the redirect. Description text (if any) appears below in smaller text. |
| Destination URL | The target URL in monospace (truncated if long) |
| Type | HTTP status code badge: 301 (permanent), 302 (temporary), 307 (temp, preserve method), 308 (perm, preserve method) |
| Match | Pattern matching mode: exact, wildcard, regex |
| Status | active or disabled |
| Actions | Toggle enable/disable, Edit, Delete |
Creating a Redirect
Click the Add Redirect button to open a modal dialog with these fields:
| Field | Type | Description |
|---|---|---|
| Source Path * | Text | The URL path to redirect from (e.g., /old-page) |
| Destination URL * | URL | The full URL to redirect to (e.g., https://example.com/new-page) |
| Redirect Type * | Select | 301 (Permanent), 302 (Temporary), 307 (Temporary, preserve method), 308 (Permanent, preserve method) |
| Match Type * | Select | Exact, Wildcard, or Regex |
| Description | Textarea | Optional note about the redirect purpose |
| Enable Immediately | Checkbox | Whether to activate the redirect right away (checked by default) |
The same modal is used for editing existing redirects — click the Edit button in the Actions column to modify a redirect.
$ panelica redirects create --domain=example.com --source=/old-page --target=https://example.com/new-page --type=301 $ panelica redirects list --domain=example.com $ panelica redirects delete --domain=example.com --id=5
Redirect Types
| Code | Type | Use Case |
|---|---|---|
301 | Permanent Redirect | Page permanently moved. Search engines transfer SEO value to the new URL. |
302 | Temporary Redirect (Found) | Page temporarily moved. Search engines keep indexing the original URL. |
307 | Temporary Redirect | Same as 302 but preserves the HTTP method (POST stays POST). |
308 | Permanent Redirect | Same as 301 but preserves the HTTP method. |
Match Types
| Match | Description | Example |
|---|---|---|
| Exact | Matches the exact path only | /about matches only /about |
| Wildcard | Matches paths with wildcard patterns | /blog/* matches /blog/post-1, /blog/post-2, etc. |
| Regex | Regular expression pattern matching | ^/product/(\d+)$ matches /product/123 |
PHP Management
Multiple PHP versions, per-domain configuration, and PHP-FPM pool management.
PHP Settings Overview
Navigate to Tools → PHP Settings. The page shows four statistics cards at the top:
| Card | Description |
|---|---|
| Total Versions | Number of installed PHP versions |
| Active Versions | Number of PHP versions currently running |
| Total Domains | Total domains across all PHP versions |
| Default Version | The server-wide default PHP version |
Below the cards, a control bar lets you change the default PHP version from a dropdown and access the Bulk Change button. The main content area has three tabs: PHP Versions, Extensions, and Configuration.
PHP Versions Tab
Panelica supports multiple PHP versions running simultaneously:
| Version | Status | Path |
|---|---|---|
| PHP 8.1 | Supported | /opt/panelica/services/php/8.1/ |
| PHP 8.2 | Supported | /opt/panelica/services/php/8.2/ |
| PHP 8.3 | Default | /opt/panelica/services/php/8.3/ |
| PHP 8.4 | Supported | /opt/panelica/services/php/8.4/ |
The PHP Versions tab shows a table for each installed version with these columns:
| Column | Description |
|---|---|
| Version | PHP version number with the default version marked with a badge |
| Status | Running or Stopped |
| Sites Using | Clickable link showing the domain count — opens a modal listing all domains on this version |
| Domain Distribution | Progress bar showing the percentage of domains using this version |
| Memory Limit | Current memory_limit setting |
| Max Exec Time | Current max_execution_time setting |
| Actions | PHPInfo, Edit Config, Manage Extensions, Reload FPM, Restart FPM |
Action buttons per version:
- PHPInfo — Opens
/tools/phpinfo/{version}/in a new tab showing full PHP configuration - Edit Configuration — Opens a modal with Form Editor and Text Editor modes to modify
php.inisettings - Manage Extensions — Switches to the Extensions tab with this version pre-selected
- Reload FPM — Gracefully reloads the PHP-FPM service (no downtime)
- Restart FPM — Full restart of the PHP-FPM service
Extensions Tab
Select a PHP version from the dropdown to view and manage its extensions. The extensions table shows:
| Column | Description |
|---|---|
| Extension Name | Extension name in monospace (e.g., redis, imagick) |
| Status | Green badge (enabled) or grey badge (disabled) |
| File Size | Extension file size in KB |
| Action | Toggle button to enable or disable the extension |
To install a new extension not in the list, click the Install Extension button. This opens a terminal interface where you can install extensions via PECL.
$ panelica php extensions --version=8.3 $ panelica php install-extension --version=8.3 --extension=redis
Configuration Tab
Select a PHP version to view and edit its server-wide php.ini configuration. The page shows 4 key settings at a glance (memory_limit, max_execution_time, upload_max_filesize, post_max_size) and the total settings count with last-modified date.
Click Edit Configuration to open the config editor modal with two modes:
- Form Editor — Each modifiable setting is shown as a labeled input field with its current value and category badge
- Text Editor — Full text editor with monospace font for advanced editing. Non-modifiable settings are ignored.
Bulk PHP Version Change
Click the Bulk Change button in the control bar to migrate multiple domains between PHP versions at once:
$ panelica php switch --domain=example.com --version=8.4
PHP-FPM Pool Architecture
Each domain gets its own isolated PHP-FPM pool:
# Per-user PHP-FPM structure /opt/panelica/etc/php-fpm-users/{username}/ ├── php-fpm.conf # Main config └── pool.d/ ├── {username}_{domain1}.conf # Pool for domain1 └── {username}_{domain2}.conf # Pool for domain2 # Each pool runs as the system user # Socket: /opt/panelica/var/run/php-{version}-{username}_{domain}.sock
Pool settings from the hosting plan: pm = ondemand, max 10 children, 10s idle timeout, 500 max requests per child.
Disabled Functions
For security, certain PHP functions are disabled by default in each PHP-FPM pool:
# Default disabled functions (per-domain pool)
exec, passthru, shell_exec, system, proc_open, popen,
curl_exec, curl_multi_exec, parse_ini_file, show_source
ROOT/ADMIN can enable specific functions per domain from Domains → [domain] → PHP → Disabled Functions.
Database Management
Create and manage MySQL databases with web-based tools and phpMyAdmin integration.
MySQL Overview
Navigate to Databases → MySQL Databases. The page displays four statistics cards at the top:
| Card | Description |
|---|---|
| Total Databases | Number of MySQL databases on the server |
| Total Tables | Combined table count across all databases |
| Connections | Active connections / Maximum connections |
| Total Size | Combined disk usage of all databases |
Below the cards, a phpMyAdmin button opens the web-based database management tool with single sign-on (SSO). The MySQL server status and uptime are also displayed.
Database Table
The main table lists all MySQL databases with these columns:
| Column | Description |
|---|---|
| Database Name | Name with charset/collation badge below |
| Domain | Associated domain badge, or "System" for internal databases |
| User | Database owner username in monospace |
| Size | Database size (e.g., 256.50 MB) |
| Tables | Number of tables |
| Status | active, maintenance, or error |
| Connections | Active/Max connections with a progress bar |
| Actions | Action buttons (see below) |
Controls: A domain filter dropdown (All Domains, System Only, or specific domains), a search box, and the Create New MySQL Database button.
Action buttons per database:
- Connection Info — Opens a wizard showing connection strings for WordPress, Laravel, Django, Node.js, and PHP PDO with copy/download options
- Backup — Creates and downloads a database backup (
.sqldump) - Optimize — Optimizes all tables in the database (reclaims unused space)
- Repair — Repairs corrupted tables in the database
- phpMyAdmin — Opens phpMyAdmin in a new tab with SSO for this database
- Delete — Permanently deletes the database (destructive confirmation required)
Creating a MySQL Database
Click Create New MySQL Database to open the creation modal:
| Field | Type | Description |
|---|---|---|
| Domain * | Select | The domain this database belongs to. Database name prefix auto-updates based on selection. |
| Database Name * | Text | Created as {domain_prefix}_{name} |
| Database User * | Text | Username for accessing this database |
| Password * | Password | Password for the database user |
Charset is automatically set to utf8mb4_unicode_ci.
$ panelica db create --name=myapp --user=johndoe $ panelica db create-user --database=johndoe_myapp --dbuser=johndoe_admin --password=SecurePass
Connection String Wizard
Click the Connection Info button on any database to open the connection wizard. It generates ready-to-use configuration code for 5 frameworks:
- WordPress —
wp-config.phpdatabase constants - Laravel —
.envfile database variables - Django —
settings.pyDATABASES dictionary - Node.js — mysql2 connection configuration
- PHP PDO — PDO connection code
Each code block includes Copy to Clipboard and Download File buttons.
Server Information
A side panel on the right shows MySQL server details: version, type, platform, uptime, socket path, port, max connections, active connections, data directory, default charset, and total database/table counts.
Database Users
Manage MySQL database users, privileges, and access control independently from databases.
Users Overview
Navigate to Databases → Database Users. Four statistics cards are shown at the top:
| Card | Description |
|---|---|
| Total Users | Number of MySQL users |
| Active Users | Users with active status |
| Total Privileges | Sum of all granted privileges across users |
| Total Databases | Number of databases available for assignment |
Users Table
The main table displays all MySQL users with a search box and user/database count badges:
| Column | Description |
|---|---|
| User | MySQL username |
| Host | Connection host pattern in monospace (e.g., localhost, %) |
| Databases | Number of databases assigned to this user (badge) |
| Privileges | Total privilege count (badge) |
| Status | Active or Disabled |
| Created | Creation date |
| Actions | Manage Privileges, Change Password, Toggle Status, Delete |
Creating a Database User
Click Create MySQL User to open the creation modal:
| Field | Type | Description |
|---|---|---|
| Username * | Text | MySQL username (e.g., myapp_user) |
| Host * | Select | localhost, Any Host (%), or custom subnet (e.g., 192.168.1.%) |
| Password * | Password | Must meet minimum strength requirements |
| Confirm Password * | Password | Must match the password field |
| Databases * | Multi-select | Hold Ctrl/Cmd to select multiple databases |
| Max Connections | Number | Maximum connections for this user (0 = unlimited) |
$ panelica db create-user --dbuser=johndoe_admin --password=SecurePass123 $ panelica db list-users $ panelica db delete-user --dbuser=johndoe_admin
Managing Privileges
Click the Manage Privileges button to open the privilege editor. Four quick-apply templates are available:
| Template | Privileges Granted |
|---|---|
| Read Only | SELECT |
| Read/Write | SELECT, INSERT, UPDATE, DELETE |
| Full (no admin) | All data + structure privileges, no admin |
| All Privileges | Every available privilege |
Individual privileges are organized in three categories:
- Data — SELECT, INSERT, UPDATE, DELETE
- Structure — CREATE, ALTER, DROP, INDEX, CREATE TEMPORARY TABLES, LOCK TABLES
- Administration — EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER
Changing Passwords
Click the Change Password button next to a user. The modal provides an Auto-generate Strong Password button that creates a 16-character password with special characters. A password strength indicator (Weak/Medium/Strong) with a color-coded progress bar helps you assess password quality.
Remote MySQL
Allow external applications and servers to connect to your MySQL databases remotely.
Remote Access Overview
Navigate to Databases → Remote MySQL. Four statistics cards are shown at the top:
| Card | Description |
|---|---|
| Total Hosts | Number of remote access entries |
| Active Hosts | Hosts currently allowed to connect |
| Disabled Hosts | Hosts with disabled status |
| Recent (7 days) | Hosts added in the last 7 days |
Remote Hosts Table
The main table lists all configured remote access hosts:
| Column | Description |
|---|---|
| Host/IP Address | IP address or hostname pattern in monospace |
| Description | User-provided description of the host |
| Added | Date the host was added |
| Status | active or disabled |
| Actions | Toggle (enable/disable), Edit, Delete |
Adding a Remote Host
Click Add Host to open the creation modal:
| Field | Type | Description |
|---|---|---|
| Host/IP Address * | Text | IP address, hostname, or wildcard pattern |
| Description | Text | Optional description of what this host is for |
Wildcard examples:
192.168.1.100— Specific IP address192.168.1.%— All IPs in a subnet%.example.com— All subdomains of a hostname%— Any host (not recommended for security)
$ panelica db remote-add --ip=203.0.113.10 --database=johndoe_myapp $ panelica db remote-list $ panelica db remote-remove --ip=203.0.113.10
GRANT statement are configured automatically. Only add trusted hosts and avoid using % (any IP) in production.
Connection Details
Use the following settings to connect from your remote application:
# Remote MySQL connection Host: your-server-ip Port: 3306 Database: username_dbname User: username_dbuser Password: your-password
Email System
Postfix + Dovecot powered email with full authentication, spam filtering, and queue management.
Email Accounts
Navigate to Mail → Email Accounts to manage email addresses on your domains.
Creating an email account:
Click Create Account to open the creation modal with the following fields:
| Field | Type | Description |
|---|---|---|
| Username * | Text | The local part of the email address (e.g., info) |
| Display | Full email address preview (username@domain) | |
| Domain * | Select | The domain for this email account |
| Password * | Password | Account password |
| Quota | Number (GB) | Maximum mailbox storage size |
| IMAP Enabled | Toggle | Allow IMAP access (email sync across devices) |
| POP3 Enabled | Toggle | Allow POP3 access (email download) |
| SMTP Enabled | Toggle | Allow sending emails via SMTP |
| Spam Filter | Toggle | Enable spam filtering for this account |
| Virus Check | Toggle | Enable antivirus scanning for incoming mail |
| Autoresponder | Toggle | Enable automatic reply |
$ panelica email create --account=[email protected] --password=SecurePass --quota=1024
Mail client configuration: Click the Configuration button on any account to view IMAP/POP3/SMTP server settings, ports, and encryption details for setting up email clients (Outlook, Thunderbird, etc.).
Email Forwarders
Navigate to Mail → Email Forwarders to route emails from one address to multiple destinations.
Click Create Forwarder to open the creation modal:
| Field | Type | Description |
|---|---|---|
| Domain * | Select | Select the domain for the source email |
| Source Email * | Text | The email address that will be forwarded |
| Destination Emails * | Multiple text fields | One or more destination addresses. Use the add/remove buttons to manage multiple destinations. |
| Keep Copy | Checkbox | Keep a copy of forwarded messages in the original mailbox |
| Enabled | Toggle | Whether the forwarder is active |
$ panelica email forwarder create --source=[email protected] --dest=[email protected] --keep-copy $ panelica email forwarder list $ panelica email forwarder delete --id=5
Autoresponders
Navigate to Mail → Autoresponders to set up automatic out-of-office or vacation replies.
Click Create Autoresponder to configure:
| Field | Type | Description |
|---|---|---|
| Email Account * | Select | The email account to add the autoresponder to |
| Subject * | Text | Subject line of the automatic reply |
| Message * | Textarea | Body of the automatic reply |
| Message Type | Radio | Plain Text or HTML |
| Start Date | Date | Optional — when to start sending auto-replies |
| End Date | Date | Optional — when to stop (vacation mode) |
| Respond Once Per Sender | Checkbox | Only reply once to each unique sender (default: on) |
| Response Frequency | Number (hours) | Minimum hours between replies to the same sender (default: 24) |
| Respond to Spam | Checkbox | Whether to reply to messages flagged as spam (default: off) |
| Respond to Mailing Lists | Checkbox | Whether to reply to mailing list messages (default: off) |
$ panelica email autoresponder create --account=[email protected] --subject="Out of Office" --message="I am currently away." $ panelica email autoresponder list
Spam Filters
Configure spam protection at Mail → Spam Filters:
- Account Settings — Enable/disable spam filtering per account with adjustable threshold (1-10 score)
- Blacklist — Block specific emails, domains, or wildcard patterns (e.g.,
*@spam-domain.com) - Whitelist — Always allow emails from trusted senders/domains
Threshold guide: 1-3 = Aggressive, 4-5 = Balanced (recommended), 6-8 = Lenient, 9+ = Very lenient.
$ panelica email spam blacklist-add --pattern=*@spam-domain.com $ panelica email spam whitelist-add --pattern=[email protected] $ panelica email spam set-threshold --account=[email protected] --score=5
Mailing Lists
Create distribution lists at Mail → Mailing Lists:
$ panelica email mailing-list create --name=team --domain=example.com $ panelica email mailing-list add-member --list=[email protected] --email=[email protected] $ panelica email mailing-list list
Email Routing & MX Records
View and verify email routing configuration at Mail → Email Routing:
- MX Records tab — Shows all MX records across domains with priority and host. Use the Verify button to check DNS propagation via Google DNS.
- Forwarders tab — Quick overview of all active email forwarders
Mail Queue
View and manage queued messages from Mail → Mail Queue. Actions: flush (force delivery), hold, release, requeue, delete. Useful for troubleshooting delivery issues.
Email Authentication (DKIM/SPF/DMARC)
Panelica automatically configures email authentication when a domain is created:
- SPF — TXT record added to DNS zone:
v=spf1 a mx ip4:SERVER_IP ~all - DKIM — Domain key generated and published as a DNS TXT record
- DMARC — Policy record for email validation
Manage from Mail → Authentication.
Webmail
Access webmail directly from the panel sidebar. The link opens in a new tab with automatic authentication.
Firewall & Fail2ban
Network security with UFW/iptables firewall rules, IP blocking, Fail2ban jail management, and SSH authentication logging.
Firewall Rules Overview
Navigate to Security → Firewall Rules. Panelica uses UFW with iptables fallback. Four statistics cards at the top:
| Card | Description |
|---|---|
| Total Rules | Total firewall rules with active count badge |
| Firewall Status | Firewall type (UFW/iptables) and current status |
| Direction Split | Inbound vs. Outbound rule counts |
| Active Status | Active vs. Inactive rules with a progress bar |
Firewall Rules Table
The main table shows all firewall rules (all columns sortable):
| Column | Description |
|---|---|
| Description | Rule description with creator username |
| Direction | Inbound or Outbound |
| Protocol | TCP, UDP, ICMP, or ANY |
| Source IP | Source address or CIDR (e.g., 0.0.0.0/0) |
| Destination IP | Destination address or CIDR |
| Port | Port number or * for all ports |
| Action | Allow, Deny, or Reject |
| Status | Active or Inactive |
| Actions | Enable/Disable toggle, Delete |
Adding a Rule
Click Add New Rule to open the creation modal:
| Field | Type | Options | Default |
|---|---|---|---|
| Direction | Select | Inbound, Outbound | Inbound |
| Protocol | Select | TCP, UDP, ICMP, Any | TCP |
| Action | Select | Allow, Deny, Reject | Allow |
| Port | Number | 1–65535 (empty = all) | — |
| Source IP/CIDR | Text | IP or CIDR notation | — |
| Destination IP/CIDR | Text | IP or CIDR notation | — |
| Description | Textarea | Free text | — |
Quick Actions
One-click buttons to quickly create common firewall rules:
- Block All Incoming Traffic — Blocks all inbound traffic (requires confirmation)
- Allow SSH (22) — Opens SSH port
- Allow HTTP/HTTPS (80/443) — Opens web server ports
- Allow MySQL (3306) — Opens MySQL port
- Allow FTP (21) — Opens FTP port
IP Blocking Page
Navigate to Security → IP Blocking. Summary cards at the top show: Total Blocked IPs (permanent count badge), Whitelist Count, Temporary/Auto Blocks, and Today’s Activity. Quick action buttons: Block IP, Add to Whitelist, Bulk Import, Export List, and Refresh. The page has 6 tabs.
1. Blocked IPs Tab
All manually and automatically blocked IP addresses. Search field filters by IP or reason. Pagination at 10 items per page.
| Column | Description |
|---|---|
| IP Address | Single IP or CIDR notation (e.g., 192.168.1.0/24) |
| Reason | Block reason (spam, bruteforce, malicious, ddos, suspicious, policy, manual) |
| Block Type | Automatic or Manual |
| Blocked Date | Localized timestamp |
| Expires At | Date if temporary, Permanent badge if permanent |
| Location | Country flag + location name |
| Actions | Unblock button |
Block IP Modal:
| Field | Type | Description |
|---|---|---|
| IP Address * | Text | IPv4 address or CIDR to block (inline validation) |
| Block Reason * | Select | 7 options: spam, bruteforce, malicious, ddos, suspicious, policy, manual |
| Block Type * | Select | Permanent or Temporary |
| Duration Hours | Number | Duration for temporary blocks (min 1, disabled if permanent) |
| Notes | Textarea | Optional additional information |
Preset Block Rules (collapsible section with 8 one-click presets):
| Preset | Duration | Description |
|---|---|---|
| SSH Brute Force | 24 hours | SSH brute force attacks |
| FTP Attack | 12 hours | FTP service attacks |
| Panel Attack | 1 hour | Panel login attacks |
| SMTP Spam | Permanent | Mail server spam |
| DDoS Attack | Permanent | DDoS attacks |
| SQL Injection | Permanent | SQL injection attempts |
| XSS Attack | 24 hours | XSS attacks |
| Port Scanning | 12 hours | Port scanning activity |
Click a preset, enter the IP address in the prefilled modal, and confirm to block.
Bulk Import: Open the Import modal, paste IP addresses (one per line), the system shows a “Total IPs detected” counter, then click Import to block all.
2. Whitelist Tab
Trusted IPs that can never be blocked. Essential to prevent locking yourself out. Supports CIDR notation.
| Column | Description |
|---|---|
| IP Address | IP or CIDR, highlighted in green |
| Description | User-provided description |
| Added Date | Localized timestamp |
| Added By | Username who added the entry |
| Actions | Delete button |
Add Whitelist Modal: IP Address (text, required, IPv4/CIDR validation) and Description (text, required). Use cases: office IPs, your own IP, trusted API services, monitoring services.
3. Temporary Bans Tab
Time-limited blocks with automatic expiration countdown.
| Column | Description |
|---|---|
| IP Address | Blocked IP |
| Remaining Time | Human-readable countdown badge (e.g., “2h 30m”) |
| Reason | Block reason text |
| Actions | Remove (early release) button |
Temporary blocks are automatically removed when the countdown expires. Click Remove to unblock early.
4. Failed Login Attempts Tab
Failed SSH and panel login attempts with quick block/whitelist actions.
| Column | Description |
|---|---|
| IP Address | Bold/semibold text |
| Username | Attempted login username |
| Last Attempt | Localized timestamp |
| Total Attempts | Color-coded badge: 1–4, 5–9, 10+ |
| Country | Flag icon + country name |
| User Agent | Browser/client info (truncated) |
| Actions | Block (danger) and Whitelist (success) buttons |
Rows with 5+ attempts are highlighted with a red background. Click Block to immediately add the IP to the blocked list, or Whitelist to mark it as trusted.
5. Fail2ban Jails Tab
Summary cards at the top: Active Jails, Total Banned, Current Failed, and All Time Banned. Action buttons: Sync fail2ban to database and Refresh.
Each jail is shown as an expandable card with the jail name, status badge (Enabled / Disabled), and quick stats (currently banned, currently failed, total banned). Click to expand and see 3 sub-tabs:
Sub-tab: Banned IPs — Shows all currently banned IPs as tag badges. Click the × on a badge to unban a specific IP.
Sub-tab: Config
| Setting | Type | Description |
|---|---|---|
| Ban Time | Number (seconds) | How long an IP stays banned. Shows human-readable format (e.g., “1d 2h”). Min: 60s. |
| Find Time | Number (seconds) | Window for counting failed attempts. Min: 60s. |
| Max Retry | Number | Failed attempts before banning. Min: 1. |
| Log Path | Read-only | Monitored log file path (code snippet) |
Click Save Config to apply or Reload Jail to restart the jail.
Sub-tab: Filter Regex
- Fail Regex — Patterns that match failed attempts. Dynamic list — add or remove regex entries. Each entry is a monospace text input.
- Ignore Regex — Patterns to exclude from fail regex. Same dynamic management.
Click Save & Reload to apply regex changes immediately.
6. SSH Auth Logs Tab
Real-time SSH authentication logs. Filter by type: All, Failed only, or Accepted only. Scrollable table (max 600px height, sticky header).
| Column | Description |
|---|---|
| Timestamp | Formatted date/time |
| Type | Accepted, Failed / Invalid, or Other |
| Username | Bold font SSH username |
| IP Address | Code snippet format |
| Port | Port number |
| Service | Service name (typically “ssh”) |
| Actions | Block button for failed/invalid entries (prefills Block IP modal with IP and reason) |
Failed/invalid rows are highlighted red, accepted rows are highlighted green. Click Block on any failed entry to immediately open the Block IP modal with the IP and reason pre-filled.
$ panelica firewall list $ panelica firewall add --direction=in --protocol=tcp --port=443 --action=allow $ panelica firewall delete --id=5 $ panelica ipblock list $ panelica ipblock add --ip=1.2.3.4 --reason="bruteforce" --type=permanent $ panelica ipblock whitelist --ip=10.0.0.1 $ panelica fail2ban status $ panelica fail2ban unban --jail=sshd --ip=1.2.3.4
ModSecurity WAF
Web Application Firewall with OWASP Core Rule Set for SQL injection, XSS, and other attack prevention.
ModSecurity runs as an Apache module with OWASP CRS. It uses anomaly scoring: each matching rule increases a score, and the request is blocked when the score exceeds the threshold.
Navigate to Security → ModSecurity. 4 dashboard cards: Total Blocked Attacks, Logged Events, False Positives, WAF Status ("Per Domain"). The page has 5 tabs:
Tab 1: CRS Rules
OWASP Core Rule Set management. Header shows CRS version and status badge.
Configuration Cards (2 columns):
| Setting | Type | Description |
|---|---|---|
| Paranoia Level | Slider (1–4) | Minimum / Normal / High / Maximum sensitivity. Per-domain configuration. |
| Inbound Threshold | Slider (1–10) | Block requests when anomaly score exceeds this value |
| Outbound Threshold | Slider (1–10) | Block responses when anomaly score exceeds this value |
CRS Rulesets Table:
| Column | Description |
|---|---|
| Ruleset | Name and ID |
| Description | What the ruleset protects against |
| Version | Version badge |
| Rule Count | Number of rules in set |
| Status | Toggle on/off switch |
| Actions | View Details, Configure, Export Rules |
Tab 2: Custom Rules
Create and manage custom ModSecurity rules. Add New Rule, Export Rules, Import Rules buttons at top.
| Column | Description |
|---|---|
| Rule ID | Unique ID with category badge |
| Description | What the rule does |
| Pattern | Regex pattern (truncated) |
| Action | Block / Log / Allow / Deny badge |
| Severity | Critical / Error / Warning / Notice (color-coded) |
| Status | Toggle on/off |
| Last Triggered | Timestamp or "Never" |
| Trigger Count | How many times fired |
| Actions | Edit, Delete |
Rule Creation Modal: Rule ID, Description, Type (SecRule/SecAction/SecDefaultAction), Pattern (regex), Action (block/log/allow/deny), Severity, and Category (custom/owasp/system).
Tab 3: Whitelist
Exclude trusted sources from WAF inspection. 4 whitelist types:
- IP — Whitelist specific IP addresses (supports bulk import)
- URL — Whitelist URL paths (useful for admin pages or API endpoints)
- User-Agent — Whitelist specific user agents (e.g., monitoring bots)
- Parameter — Whitelist form parameters to reduce false positives
Each entry includes: Type badge, Value, Description, Status toggle, Rule Exclusions count (skip specific rules for this entry), and Edit/Delete actions.
Tab 4: Logs
Filters: Search by request URI/IP/user-agent, Action dropdown (All/Blocked/Logged/Passed), Severity dropdown (All/Critical/Error/Warning/Notice), Date range picker.
| Column | Description |
|---|---|
| Timestamp | Sortable date/time |
| Request URI | URL path (clickable for details) |
| Attack Type | Badge: SQLi, XSS, RFI, LFI, RCE, etc. |
| Source IP | Country flag + IP address |
| User Agent | Browser/client info (truncated) |
| Action | Blocked / Logged / Passed |
| Rule ID | ModSecurity rule link |
| Severity | Color-coded: Critical / Error / Warning / Notice |
| Country | Flag emoji |
| Anomaly Score | Numeric score |
Expandable row details show: full request details, response info, triggered rule details, and matched attack signatures. Paginated at 50 items per page.
Attack Statistics Charts: Pie chart (attack type distribution), Time series (blocked vs logged trends), Bar chart (top attacking IPs with countries), and Geographic distribution map.
Tab 5: Configuration
| Setting | Type | Default |
|---|---|---|
| Engine Status | On/Off toggle | On |
| Request Body Access | Toggle | On |
| Response Body Access | Toggle | Off |
| Debug Log Level | Dropdown (0–9) | 3 |
| Audit Log Enabled | Toggle | On |
| Audit Log Level | Off / On / RelevantOnly / Full | RelevantOnly |
| Request Body Limit | Number (bytes) | 13 MB |
| Response Body Limit | Number (bytes) | 512 KB |
| Anomaly Scoring | Toggle | On |
| Rate Limit Enabled | Toggle | Off |
| Rate Limit Requests | Number per window | 100 |
| Rate Limit Window | Seconds | 60 |
Actions: Save Configuration, Reload Config (with warning), Reset to Defaults.
Protected Against
- SQL Injection (SQLi)
- Cross-Site Scripting (XSS)
- Local/Remote File Inclusion (LFI/RFI)
- Remote Code Execution (RCE)
- PHP-specific attacks
- Session Fixation
- Scanner/Bot detection
- Protocol violations
ClamAV Antivirus
On-demand and real-time malware scanning with automatic quarantine, signature management, and configurable settings.
Navigate to Security → Antivirus. The right sidebar shows status cards: Daemon Status (live indicator), Service Status, Last Scan time/type, Threats Found, and Boot Status. The page has 5 tabs:
Tab 1: Dashboard
Scan Options (3 interactive cards):
- Quick Scan — Scans critical system areas
- Full Scan — Deep scan of all user directories
- Custom Scan — Specify a custom path. Quick-select buttons for
/home,/tmp,/var/www,/opt
Real-Time Protection Toggle: Enable/disable real-time file monitoring with status display showing monitored file count and last blocked threat.
Live Scan Progress (while scanning):
| Metric | Description |
|---|---|
| Files Scanned | Numeric counter |
| Directories Scanned | Numeric counter |
| Data Scanned | In MB |
| Threats Found | Counter (danger badge) |
| Errors | Error count |
| Worker Threads | Active threads |
| Scan Type & Path | Current scan info |
| Started At | Timestamp |
Click Cancel to abort the scan at any time.
Tab 2: Scan History
| Column | Description |
|---|---|
| Type | Quick / Full / Custom scan type |
| Started | Date and time |
| Duration | In minutes/seconds |
| Files | Total files scanned |
| Threats | Count of threats found |
| Status | Running / Completed / Failed |
| Actions | View Details (complete scan report with file breakdown) |
Paginated at 10 items per page.
Tab 3: Quarantine
Filter by status: All / Active / Deleted / Restored.
| Column | Description |
|---|---|
| File Name | Full file path |
| Threat | Detected malware/threat name |
| Severity | Critical / High / Medium / Low |
| Status | Quarantined / Restored / Deleted |
| Size | File size |
| Date | Quarantine date |
| Actions | View Content (first 500 bytes), Restore, Delete permanently |
Bulk action: Dismiss All Threats. Quarantined files are stored at /opt/panelica/var/quarantine/.
Tab 4: Definitions
Virus signature database information displayed in 4 cards: Total Signatures, Main Version, Daily Version, and Bytecode Version. Shows database size progress bar, last update timestamp, and update status.
Update Frequency: Select from Real-time / Hourly / Daily / Weekly. Click Update Now to manually trigger a definitions update.
Tab 5: Settings
Scan Settings:
| Setting | Type | Options |
|---|---|---|
| Scan Sensitivity | Dropdown | Low / Medium / High / Maximum |
| Action on Threat | Dropdown | Quarantine / Delete / Ignore / Report Only |
| Max Threads | Number (1–16) | Parallel scan workers |
| Max File Size | Number (MB, 1–1000) | Skip files larger than this |
| Scan Archives | Toggle | Scan ZIP, RAR files |
| Heuristic Analysis | Toggle | Detect unknown threats via behavior |
| Deep Scan | Toggle | Deeper analysis (slower) |
Exclusions:
- File Type Exclusions — Exclude file extensions (e.g.,
.log). Add/remove badges. - Directory Exclusions — Exclude directories (e.g.,
/opt). Add/remove badges.
Buttons: Save Settings (green) and Reset to Defaults (secondary).
Security Advisor
Automated security audit with scoring, category-based checks, one-click auto-fix with preflight safety verification, and rollback support.
Security Score Dashboard
Navigate to Security → Security Advisor. Four summary cards at the top:
| Card | Value | Color Logic |
|---|---|---|
| Security Score | 0–100 numeric score with status label | Good (≥80), Fair (≥60), Poor (<60) |
| Passed Checks | Count of passed checks | Green |
| Warning Checks | Count of warning checks | Yellow |
| Failed Checks | Count of failed checks | Red |
If critical issues are found, a red alert banner appears: “X critical issues found, urgent action required.”
AppArmor Status Card (shown if AppArmor is active) displays: Protection Active (enforced profiles), Learning Mode (complain profiles), Last 24h Blocks (denied events), and Pending Suggestions with a link to manage AppArmor.
Action buttons: Refresh Checks (re-run all security checks) and View Fix History (toggle fix history section with rollback count badge).
Check Categories
Security checks are grouped into 8 expandable/collapsible categories. Each category header shows the category icon, title, total check count, and a badge row with failed/warning/unknown/passed counts.
| Category | Icon | Checks Include |
|---|---|---|
| SSH | ri-terminal-box-line | SSH port, root login, password auth, empty passwords |
| Panel | ri-dashboard-3-line | Admin port, admin account security, panel settings |
| Firewall | ri-shield-line | UFW/iptables enabled, basic rules configured |
| Services | ri-server-line | Service hardening, unnecessary services disabled |
| Authentication | ri-lock-password-line | Password policies, 2FA, root account security |
| Database | ri-database-2-line | External access, root account, backup status |
| PSE (PHP Settings) | ri-shield-keyhole-line | PHP security settings, disabled functions, open_basedir |
| AppArmor | ri-shield-check-line | Profile enforcement, system coverage (link to AppArmor page) |
Check Details
Each security check within a category shows:
- Status icon — Passed, Warning, Failed, or Unknown
- Severity badge — Critical / High / Medium / Low
- Current Value — Shown in red code snippet (for warning/failed checks)
- Recommended Value — Shown in green code snippet
- Recommendation — Explanation and reasoning text
Action buttons per check (right-aligned):
- Configure — Blue button that navigates to the relevant settings page (e.g., SSH config, Profile settings, Panel settings). Available for checks like:
ssh_port→ SSH Configuration,root_2fa→ Profile Security,panel_port→ Panel Settings. - Auto Fix — Green button for checks that can be automatically resolved
- Manual — Gray badge if the check requires manual intervention and has no navigation link
Auto-Fix Flow
Checks marked with Auto Fix follow a safety-verified process:
Fix History & Rollback
Click View Fix History to expand the history section. Header shows “Total fixes: X | Rollback available: Y”.
| Column | Description |
|---|---|
| Check | Check name (bold) with check_id below |
| Type | Category badge (ssh, firewall, panel, etc.) with color |
| Changes | From value (red) → To value (green) in code format |
| Applied | Timestamp + applied_by username |
| Status | Applied, Rolled Back, or Failed |
| Action | Rollback button (if applied and rollback is available) |
Rollback Process: The confirmation dialog shows the check name, applied date, current value (will revert from), and original value (will revert to). Enter a rollback reason and confirm. After rollback, the status changes to “Rolled Back” and security checks refresh automatically.
Common Security Checks
| Check | Category | Severity | Auto-Fix | Navigate |
|---|---|---|---|---|
| SSH on default port 22 | SSH | Medium | No | SSH Config |
| Root login enabled | SSH | High | Yes | SSH Config |
| Password authentication enabled | SSH | Medium | Yes | SSH Config |
| Empty passwords allowed | SSH | Critical | Yes | SSH Config |
| Panel on default port | Panel | Medium | No | Panel Settings |
| Firewall (UFW) inactive | Firewall | High | No | — |
| Fail2ban not running | Firewall | High | No | — |
| ModSecurity disabled | Services | Medium | No | — |
| Root user lacks 2FA | Auth | High | No | Profile Security |
| Weak password policy | Auth | Medium | No | Panel Settings |
| External database access | Database | High | No | — |
| Cgroups v2 not enabled | PSE | Medium | No | — |
| AppArmor profiles not enforcing | AppArmor | Medium | No | AppArmor |
AppArmor Profiles
Mandatory Access Control with AppArmor profiles for additional process-level security. PRO+
What is AppArmor?
AppArmor is a Linux kernel security module that restricts what applications can access (files, network, capabilities). Panelica manages AppArmor profiles per service for defense-in-depth security.
Dashboard Cards
Navigate to Security → AppArmor. Four summary cards at the top:
| Card | Icon | Description | Color |
|---|---|---|---|
| Protection Active | ri-shield-check-fill | Count of enforced profiles | Green |
| Learning Mode | ri-shield-flash-line | Count of complain profiles | Yellow |
| Pending Suggestions | ri-error-warning-line | Suggestion count awaiting review | Red/Gray |
| Security Score | ri-bar-chart-box-line | Score out of 100 | Green (≥70), Yellow (≥40), Red (<40) |
The page has 3 tabs: Profiles, Events, Suggestions.
1. Profiles Tab
Filter controls: Search (by name, display name, or target path), Type Filter (All, php-fpm, ssh, system), Mode Filter (All, enforce, complain, disabled), and a New Profile button.
| Column | Description |
|---|---|
| Profile | Mode icon (colored circle: green=enforce, yellow=complain, gray=disabled) + profile name (bold) + display name + target path (muted, truncated) |
| Type | Badge: PHP-FPM, SSH, System, or Custom |
| Mode | Dropdown selector to switch between Enforce, Complain, and Disabled. Shows loading spinner during mode change. |
| Status | System (built-in, locked icon) or User (custom) |
| Actions | Reload (reload profile from kernel) and Delete (only for non-system profiles, requires destructive confirmation) |
$ panelica apparmor list $ panelica apparmor status --profile=usr.sbin.nginx $ panelica apparmor enforce --profile=usr.sbin.nginx $ panelica apparmor complain --profile=usr.sbin.nginx
Creating a Profile
Click New Profile to open a 4-step wizard:
Profile Modes
| Mode | Behavior | Use Case |
|---|---|---|
| Enforce | Blocks and logs policy violations | Production servers |
| Complain | Logs but does not block violations | Testing and tuning profiles |
| Disabled | Profile is not active | Troubleshooting |
2. Events Tab
AppArmor violation events recorded in the last 24 hours. Paginated with page controls.
| Column | Description |
|---|---|
| Result | DENIED (with shield icon) or LOGGED (with eye icon) |
| User | System username (bold, with user icon) or “–” if none |
| What Happened | Human-readable explanation: “{profile} tried to {action} {path}”. Actions: exec, read, write, open, create. If a dangerous resource was DENIED, a green Security Protection badge is shown. Below the explanation: {profile_name} → {operation} → {resource_path} |
| Time | Formatted timestamp |
| Actions | For DENIED events: Allow button (opens handling dialog). For LOGGED events: Acknowledge button (removes from list). |
Event Handling Dialog: Shows the blocked operation details (profile, operation, resource path). Two options: Switch to Complain Mode (puts the profile in learning mode) or Acknowledge (mark as seen and remove). After switching to Complain mode, a success dialog confirms the change.
3. Suggestions Tab
Auto-generated profile rule suggestions based on learning mode violations. Warning info box explains that suggestions are from AppArmor learning mode and should be reviewed carefully.
| Column | Description |
|---|---|
| Risk | Badge with icon: Critical, High, Medium, Low |
| Profile | Profile name in code snippet |
| Operation | Badge: exec, read, write, open, mknod |
| Resource/Description | Resource path (code, truncated, tooltip for full path) + human-readable explanation |
| Count | Badge showing frequency (e.g., “5x”) |
| Actions | Approve (green, adds rule to profile), Reject (red, dismisses permanently), Ignore (gray, hides temporarily) |
Paginated with page controls. When all suggestions are processed, an empty state with a green checkmark shows “No pending suggestions — All suggestions have been processed.”
File Manager
Web-based file management with code editor, archive support, drag-and-drop, and permission control.
Navigate to Files → File Manager. The page has a three-panel layout:
- Left Panel — Expandable/collapsible folder tree. Click arrows or folder names to expand. Current path highlighted in blue.
- Top Bar — Breadcrumb navigation (clickable path segments), view mode toggle, search box, filter dropdown, and action buttons.
- Main Area — File listing in Grid or List view with a storage usage bar at the top showing quota percentage.
Storage Usage Bar
The top of the page shows a progress bar indicating your disk usage against the plan quota. Colors change automatically:
| Usage | Color | Meaning |
|---|---|---|
| 0 – 70% | Green | Normal usage |
| 70 – 90% | Orange | Approaching limit |
| 90%+ | Red | Critical — free up space soon |
View Modes & Filtering
Toggle between Grid View (icon-based) and List View (table with columns) using the buttons in the top bar.
List View columns:
| Column | Description |
|---|---|
| Checkbox | Multi-select for bulk operations |
| Icon + Filename | Color-coded icons by file type (yellow=folder, blue=archive, green=image, red=video, purple=code) |
| Modified Date | Last modification timestamp |
| File Size | Human-readable size |
| Owner | File owner username (visible based on role) |
| Actions | Dropdown menu with file operations |
Filter by type: Use the filter dropdown to show only specific file types — All Files, Folders Only, Documents (txt, md, pdf, doc), Images (png, jpg, gif, svg, webp), Videos (mp4, avi, mov, mkv), Archives (zip, tar, gz, rar, 7z), or Code files (php, js, ts, html, css, json, py, go). Toggle Show Hidden Files to reveal dotfiles.
Search: Real-time search box filters files by name as you type (case-insensitive). Search history is preserved in your browser (last 10 searches).
File Operations
Toolbar buttons:
- Create Folder — Opens a modal for folder name and permissions (default 755)
- Upload Files — Opens file picker or use drag-and-drop zone. Supports multiple files with a progress bar. Total size validated against quota.
- Refresh — Reloads current directory listing
- Back / Forward / Up — Browser-like navigation history (up to 50 paths preserved)
Right-click context menu on a file/folder:
| Action | Description |
|---|---|
| Open / Edit | Open file in code editor (text files) or preview (images) |
| Download | Download the file to your computer |
| Copy / Cut | Place in clipboard for pasting elsewhere |
| Copy Path | Copy the full file path to clipboard |
| Rename | Opens rename dialog with current name pre-filled |
| Permissions | Opens chmod dialog with Owner/Group/Other checkboxes (Read/Write/Execute) and octal notation |
| Compress | Create ZIP or TAR.GZ archive. Configure archive name, include subfolders, and exclude patterns. |
| Extract | Extract archive contents (ZIP, TAR, TAR.GZ supported). Option to extract in-place or to a new folder. |
| Delete | Move to trash (soft delete). Large items show a size warning. |
| Properties | View file details (size, type, permissions, modification date) |
Right-click on empty area: Create Folder, Paste, Refresh, Select All, Invert Selection.
Built-in Code Editor
Double-click any text file to open it in the built-in code editor. Features include syntax highlighting (auto-detected by file extension), line numbers, dark/light mode support, and a file size indicator. Click Save to write changes or Cancel to discard.
Selection & Bulk Operations
Select multiple files for bulk operations:
- Single Click — Select one item
- Ctrl+Click — Toggle item in selection (add/remove)
- Shift+Click — Range select from last clicked item to current
- Lasso Select — Click and drag on empty area to draw a selection rectangle
- Header Checkbox — Select all visible items
Once multiple items are selected, you can Bulk Copy, Bulk Move, Bulk Delete, or Bulk Rename (supports find/replace patterns and regex).
Trash / Recycle Bin
Deleted files go to the Trash instead of being permanently removed. Access the Trash modal to see:
| Column | Description |
|---|---|
| Item Name | Original file or folder name |
| Type | File or Folder |
| Original Path | Where the file was before deletion |
| Deleted Date | When it was deleted |
| Size | File size |
Actions: Restore (recover to original location), Permanently Delete, or Empty Trash (remove all items).
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Ctrl+A | Select All |
Ctrl+C | Copy |
Ctrl+X | Cut |
Ctrl+V | Paste |
Del | Move to trash |
Shift+Del | Permanent delete |
F2 | Rename selected item |
F5 | Refresh |
Ctrl+F | Search / Filter |
Backspace | Go to parent directory |
Alt+Up | Parent directory |
Role-Based Access
The file manager enforces strict directory isolation based on your role:
| Role | Initial Path | Can Access |
|---|---|---|
| ROOT | / | Full filesystem (except /opt/panelica) |
| ADMIN | /home | /home and all subdirectories |
| RESELLER | /home | Own users' directories only |
| USER | /home/username | Own home directory only |
File operations are available via CLI as well. The File Manager panel provides a visual interface for the same operations.
FTP Accounts
ProFTPD-based secure file transfer with per-account directory restrictions, sessions, and transfer logs.
Navigate to Files → FTP Accounts. The page shows 4 summary cards at the top:
| Card | Shows |
|---|---|
| Total Accounts | Total FTP account count + number of active accounts |
| Active Sessions | Currently connected FTP sessions |
| Total Quota | Total quota allocated across all FTP accounts with usage percentage |
| SSL/TLS | Number of SSL-enabled secure connections |
FTP Accounts Tab
The main tab lists all FTP accounts in a table:
| Column | Description |
|---|---|
| Username | FTP username with a type badge: Main Sub Special |
| System User | Associated system user ID |
| Domain | Linked domain name or "N/A" |
| Directory | Home directory path (monospace) |
| Quota Usage | Progress bar showing X MB / Y MB with percentage |
| Status | Active / Suspended / Locked |
| SSL/TLS | Checkmark or cross icon indicating secure connection support |
| Last Login | Last login date/time or "Never" |
| Actions | Edit, Change Password, Suspend/Unsuspend, Delete, View Logs, Export |
Creating an FTP Account
Click Create FTP Account button (top right) to open the dedicated creation page.
- User Home - Full Access —
/home/username(default) - Domain Root Folder —
/home/username/domain.com(requires domain selection) - Domain Public HTML —
/home/username/domain.com/public_html(requires domain selection) - Custom Path — Enter an absolute path manually (must be under user home, validated by backend)
Account Actions
From the Actions dropdown on each FTP account row:
- Edit — Modify directory, quota, and SSL settings
- Change Password — Opens a prompt for a new password (minimum 8 characters)
- Suspend / Unsuspend — Toggle account access (suspended accounts cannot connect)
- Delete — Permanently remove the FTP account with confirmation dialog
- View Logs — Jump to the Transfer Logs tab filtered for this account
Active Sessions Tab
Shows all currently connected FTP sessions in real-time:
| Column | Description |
|---|---|
| Username | Connected FTP user |
| IP Address | Client IP address |
| Connected At | Connection start time |
| Duration | How long the session has been active |
| Status | Active or Idle |
| Current Path | Directory the user is currently browsing |
| Bytes Transferred | Upload/download amount |
| Last Action | Most recent operation (upload, download, list, etc.) |
Actions: Disconnect or Force Disconnect to terminate a session. Enable Auto-refresh for live updates.
Configuration Tab
Server-wide FTP configuration settings:
| Setting | Default | Description |
|---|---|---|
| FTP Server Port | 21 | Main FTP listening port (1-65535) |
| SFTP Port | 22 | SFTP listening port |
| Enable SFTP | On | Allow SFTP connections |
| Enable TLS/SSL | On | Require or allow encrypted connections |
| SSL Certificate | Auto-select | Choose from available SSL certificates |
| Max Connections Per User | 10 | Concurrent connection limit per account |
| Timeout (minutes) | 10 | Idle session timeout |
| Enable Logging | On | Record FTP transfer activity |
| Log Level | Info | Debug / Info / Warning / Error |
| Allow Anonymous | Off | Allow anonymous FTP access |
| Passive Mode | On | Enable passive mode for NAT traversal |
| Passive Port Range | 30000-40000 | Port range for passive connections |
Buttons: Save Configuration, Reset to Defaults, Test Connection.
Transfer Logs Tab
Searchable, filterable log of all FTP transfer activity:
| Column | Description |
|---|---|
| Date/Time | When the action occurred |
| Username | FTP user that performed the action |
| IP Address | Client IP |
| Action | Upload / Download / Delete / Rename / etc. |
| File Path | Full path of the affected file |
| Size | File size (if applicable) |
| Status | Success or Failed |
| Duration | How long the transfer took |
Filters: Search by username/IP/path, filter by date range, and filter by log level. Use Export button to download logs as CSV.
$ panelica ftp create --user=ftpuser --password=SecurePass --directory=/home/johndoe/example.com
Disk Usage
Monitor and analyze disk space usage with charts, user hierarchy, and largest file detection.
Navigate to Files → Disk Usage. The page displays 4 summary cards at the top:
| Card | Shows |
|---|---|
| Total Space | Total disk capacity in GB |
| Used Space | Currently used disk space in GB |
| Available Space | Free space remaining in GB |
| Usage Percentage | Percentage bar with color gradient (green → orange → red) |
Role-Based Visibility
An info banner at the top shows your access level and what data you can see:
| Role | Can See |
|---|---|
| ROOT / ADMIN | All users' disk usage across the entire server |
| RESELLER | Disk usage for your own sub-users only |
| USER | Your own disk usage only (user hierarchy section hidden) |
User Disk Usage
Visible to ROOT/ADMIN/RESELLER only. This section shows per-user disk consumption in two ways:
Bar Chart (Top 10 Users): A horizontal bar chart showing the 10 largest disk consumers. Bars are color-coded — green for normal usage, red for users over quota. Hover for exact usage and quota values.
User Cards (Grid): A grid of cards (top 20 users) showing:
- User avatar with role-colored icon (ROOT=red, ADMIN=blue, RESELLER=cyan, USER=green)
- Username and role badge
- Over Quota badge if applicable
- Usage info: "X.XX GB used / Y.XX GB quota (Z%)"
- Color-coded progress bar (success/warning/danger)
- Domain count badge (e.g., "5 domains")
Cards with border highlighting indicate over-quota users.
Directory Usage
Toggle between Chart View and Table View using the buttons at the top right:
Chart View (default): A dual-axis bar chart showing the top 10 directories with size in GB (blue bars) on the left axis and file count (green bars) on the right axis. Hover for tooltips with exact values.
Table View:
| Column | Description |
|---|---|
| Path | Full directory path with folder icon (monospace) |
| Owner | Username with colored badge |
| Type | Badge: user / system / application |
| Size | Directory size in GB (sorted largest first) |
| File Count | Number of files (formatted with commas) |
| Usage % | Percentage of total disk with progress bar |
Table supports sortable columns, hover highlights, and pagination (up to 20 rows per page).
Largest Files
The Top 20 Largest Files table helps identify files consuming the most space:
| Column | Description |
|---|---|
| File Name | Full file path with icon (monospace) |
| Size | File size in GB (sorted largest first) |
| Type | File extension / category badge |
| Owner | File owner username |
| Modified Date | Last modification date |
Useful for identifying old log files, backups, or large media that can be cleaned up to free space.
Quota Management
Disk quotas are controlled by the user's hosting plan. When a user exceeds their quota, new file uploads and database writes are blocked until space is freed. Reseller quotas can further restrict allocations for sub-users.
$ panelica disk-usage $ panelica disk-usage --domain=example.com $ panelica disk-usage --user=johndoe --format=json
Backup & Recovery
Full and incremental backups with cloud storage, scheduling, encryption, and one-click restore.
Navigate to Backup → Backup Manager. The page header has two action buttons: Create Backup (primary) and Restore (warning). Below are 4 summary cards:
| Card | Shows |
|---|---|
| Total Backups | Total number of backups |
| Total Size | Combined size of all backups in GB |
| Completed | Number of successfully completed backups |
| Failed | Number of failed backups |
Backups Tab
The main tab lists all existing backups:
| Column | Description |
|---|---|
| Name | Backup name with badges: Encrypted Compressed |
| Type | Full or Incremental |
| Size | Backup size in GB |
| Source | What was backed up (e.g., "/var/www", "MySQL Databases") |
| Destination | Storage target (e.g., "Local Storage", "AWS S3") |
| Created | Creation date/time + retention period in days |
| Status | Completed / In Progress (with spinner) / Failed / Scheduled |
| Actions | Restore, Download, View Details, Clone, Verify Integrity, Delete |
Creating a Backup
Click the Create Backup button to open the creation modal:
- All Databases
- All Websites
- System Configuration
- User Home Directories
*.log, *.tmp, node_modules/)Restoring a Backup
Click the Restore button (or select Restore from a backup's actions dropdown) to open the restore modal:
Restore Location:
- Original Location — Restore files to their original paths
- Custom Location — Specify a different directory to restore into
Restore Options:
- Preserve existing permissions
- Restore to staging environment
- Create backup of current data before restoring
Schedules Tab
Configure automated backup schedules. Click Create Schedule to add a new one.
| Column | Description |
|---|---|
| Name | Schedule name |
| Type | Full or Incremental |
| Frequency | Human-readable schedule (e.g., "Daily at 2:00 AM", "Weekly on Sunday") |
| Next Run | Scheduled date/time for next execution |
| Last Run | Previous execution date/time |
| Destinations | Multiple badges (e.g., Local S3) |
| Status | Active / Paused / Disabled |
| Actions | Play/Pause toggle, Edit, Delete |
The schedule creation modal includes fields for name, frequency, backup type, destination, retention period, and options for encryption, compression, and email notifications.
Destinations Tab
Configure where backups are stored. Three destination cards are displayed in a responsive 3-column grid:
| Destination | Description | Usage Display |
|---|---|---|
| Local Storage | Default on-server storage (hard drive icon) | Usage bar (e.g., "150 GB / 500 GB") |
| AWS S3 | Cloud backup via Amazon S3 (cloud icon) | Usage bar (e.g., "75 GB / Unlimited") |
| Google Drive | Cloud backup via Google Drive (drive icon) | Usage bar (e.g., "10 GB / 15 GB") |
Each card shows a connection status badge (Connected or Not Connected) and a Configure button to set up credentials and connection settings.
Settings Tab
Global backup settings:
| Setting | Default | Description |
|---|---|---|
| Default Retention Period | 30 days | How long to keep backups before auto-cleanup |
| Maximum Backup Size | 50 GB | Maximum size for a single backup |
| Auto Cleanup | On | Automatically delete expired backups |
| Verify Integrity | On | Verify backup integrity after completion |
| Email Notifications | On | Send email on backup completion or failure |
| Encrypt All Backups | Off | Enable encryption by default for all new backups |
| Use Compression | On | Compress backups to reduce storage |
| Encryption Method | AES-256 | Choose encryption algorithm: AES-256, AES-128, or Blowfish |
Backup Actions
From the Actions dropdown on each backup row:
- Restore — Restore backup to original or custom location
- Download — Download backup archive to your computer
- View Details — See full backup metadata (source, size, duration, errors)
- Clone — Create a copy of the backup with a new name
- Verify Integrity — Check backup file integrity
- Delete — Permanently remove the backup with confirmation
$ panelica backup create --name="Daily Backup" --type=full --dest=local $ panelica backup restore --id=5 --location=original $ panelica backup destination add --type=s3 --bucket=my-backups --region=us-east-1 $ panelica backup destination test --id=3
Snapshots
Instant filesystem snapshots with Btrfs support, pinning, auto-retention, and one-click restore. Domain-level and server-level snapshots.
Navigate to Backup → Snapshots. The page shows a status banner indicating the snapshot mode:
| Mode | Badge | Description |
|---|---|---|
| Instant Mode | Instant | Btrfs filesystem detected — snapshots are instant and copy-on-write |
| Standard Mode | Active | Rsync-based snapshots — takes longer but works on any filesystem |
Summary Cards
| Card | Description |
|---|---|
| Total Snapshots | Total count with domain/server breakdown |
| Storage Used | Total size with compression savings percentage |
| Pinned Snapshots | Count of snapshots protected from auto-deletion |
| Free Space | Available space on the storage path |
Snapshot Tabs
Filter snapshots by type using 3 tabs:
- All — All snapshots with count badge
- Domain — Domain-level snapshots only. Filter by domain using the dropdown.
- Server — Full server snapshots (ROOT/ADMIN only)
Snapshot List
| Column | Description |
|---|---|
| Pin | Pinned or Auto-created indicator |
| Type | Server / Domain |
| Target | Domain name or "Full Server" + Btrfs/Rsync and +DB indicators |
| Description | User-provided description |
| Size | Snapshot size with compression ratio % |
| Status | Completed / Creating / Failed / Restoring |
| Created | Creation date and time |
| Duration | Time taken to create the snapshot |
| Actions | Restore, Pin/Unpin, Download, Delete |
Creating a Snapshot
Click Domain Snapshot or Server Snapshot (ROOT/ADMIN only) to open the creation modal:
Snapshot Settings
ROOT users can configure snapshot behavior via the Settings button:
| Setting | Description |
|---|---|
| Btrfs Enabled | Use Btrfs copy-on-write snapshots when available |
| Auto Snapshot Before Changes | Automatically create a snapshot before major operations |
| Auto Retention Days | Days to keep auto-created snapshots |
| Max Snapshots Per Domain | Maximum snapshot count per domain |
| Max Server Snapshots | Maximum server-level snapshot count |
| Compression Enabled | Compress snapshot data |
| Compression Algorithm | Algorithm selection for compression |
| Max Storage (GB) | Maximum disk space for all snapshots |
Cleanup Expired: ROOT users can manually trigger cleanup of expired snapshots using the Cleanup Expired button in the action bar.
$ panelica snapshot create --type=domain --domain=example.com $ panelica snapshot create --type=server $ panelica snapshot list $ panelica snapshot restore --id=12 $ panelica snapshot delete --id=12
Backup Activity Log
Complete history of all backup operations with filtering, export, and detail views.
Navigate to Backup → Activity Log. The page shows 6 summary cards at the top:
| Card | Color | Description |
|---|---|---|
| Total Operations | Primary | All-time operation count |
| Successful | Green | Successfully completed operations |
| Failed | Red | Failed operation count |
| Today | Info | Operations performed today |
| This Week | Warning | Operations this week |
| Backups Created | Secondary | Total backup creation count |
Filters
| Filter | Options |
|---|---|
| Operation Type | All, backup_create, backup_restore, backup_delete, backup_upload, backup_download |
| Status | All, success, failed, partial, in_progress |
| Username | Search by username |
| Start Date | Date picker |
| End Date | Date picker |
Action buttons: Clear Filters, Refresh, Export (ROOT/ADMIN, downloads CSV), Keep Last 300 (ROOT/ADMIN, deletes older entries), Delete All (ROOT only).
Activity Table
| Column | Description |
|---|---|
| Operation | Icon + label: Create (), Restore (), Delete (), Upload (), Download () |
| Info | Schedule name (if scheduled) or "Manual Backup" + username + domain count |
| Backup File | Filename of the backup |
| Storage | Local / AWS / GCS / SFTP |
| Size | Transferred data size |
| Duration | Operation duration (e.g., "2m 15s") |
| Date/Time | Full timestamp |
| Status | Success / Failed / Partial / In Progress |
| Actions | View Details (opens modal with full metadata, errors, warnings) |
Universal Migrator
Migrate websites, databases, and email accounts from external servers with a guided 5-step wizard. Supports cPanel, Plesk, DirectAdmin, CyberPanel, and raw SSH servers. Requires the migration license feature.
Navigate to Backup → Migration. The migrator supports three source types: Web Panels (cPanel, Plesk, etc.), SSH/SFTP, and Raw Server.
Step 1: Connect
Enter the source server credentials to establish an SSH connection:
| Field | Description |
|---|---|
| Host | Source server IP address or hostname |
| Port | SSH port (default: 22) |
| Username | SSH username (typically root) |
| Password | SSH password or use key authentication |
Once connected, the header shows: Connected to: server-ip
Step 2: Discover
The system automatically scans the source server and discovers:
| Card | Description |
|---|---|
| Sites Found | Number of websites/domains detected |
| Databases | Number of MySQL/PostgreSQL databases found |
| Email Accounts | Number of email accounts detected |
| Total Size | Estimated total data size (e.g., "308.3 MB") |
A Discovery Log panel (dark terminal-style) shows real-time scan progress. The detected panel type and version (if any) are displayed automatically.
Step 3: Configure
Review discovered items and configure migration options:
- Select Items — Choose which sites, databases, and email accounts to migrate
- User Assignment — Map source server users to Panelica users or create new ones
- Domain Configuration — Verify domain settings, PHP version, and document root
- Database Mapping — Review database names, users, and credentials
- Email Settings — Configure email account migration options
Step 4: Migrate
Click Start Migration to begin the transfer. A real-time progress panel shows:
- Overall progress bar with percentage
- Per-item status (pending, transferring, completed, failed)
- Transfer speed and estimated time remaining
- Live migration log with detailed output
Step 5: Complete
Migration results summary showing:
- Total items migrated vs. failed
- Per-item results with success/failure details
- Post-migration actions: verify sites, update DNS, test email
- Option to retry failed items
SSH Session
If the SSH session expires during discovery or migration, an alert appears with a Reconnect button to re-establish the connection. Use Cancel Migration in the header to abort the process at any time.
$ panelica migrate connect --host=199.192.25.141 --user=root $ panelica migrate discover $ panelica migrate start --all $ panelica migrate status
Remote Storage
Configure cloud and remote backup destinations with AWS S3, Google Cloud Storage, Google Drive, and SFTP. Requires the backup_remote license feature.
Navigate to Backup → Remote Storage. The page has 3 tabs.
Destinations Tab
View and manage remote storage destinations:
| Column | Description |
|---|---|
| Name | Destination display name |
| Provider | S3 / GCS / Drive / SFTP |
| Default | Checkmark if set as default destination |
| Last Sync | Last synchronization timestamp or "Never" |
| Status | Connected / Error |
| Actions | View, Edit, Test Connection, Delete |
Adding a Destination
Click Add Destination to open the wizard-style form:
AWS S3 Configuration:
| Field | Description |
|---|---|
| Region | AWS region (16+ options, e.g., us-east-1, eu-west-1) |
| Bucket | S3 bucket name |
| Endpoint | Custom endpoint for S3-compatible storage (optional) |
| Path Style | Enable for S3-compatible storage (e.g., MinIO) |
| Storage Class | STANDARD, STANDARD_IA, INTELLIGENT_TIERING, ONEZONE_IA, GLACIER_IR, GLACIER, DEEP_ARCHIVE |
| SSE Mode | Server-side encryption mode (optional) |
| Access Key ID | AWS access key |
| Secret Access Key | AWS secret key (password field) |
Google Cloud Storage (GCS) Configuration:
| Field | Description |
|---|---|
| Project ID | Google Cloud project identifier |
| Bucket | GCS bucket name |
| Location | 30+ locations (multi-region, dual-region, single-region) |
| Storage Class | STANDARD, NEARLINE, COLDLINE, ARCHIVE |
Google Drive Configuration: Folder ID, folder path, and prefix. Requires OAuth credentials.
SFTP Configuration:
| Field | Description |
|---|---|
| Host | SFTP server address |
| Port | SFTP port (default: 22) |
| Username | SFTP username |
| Remote Path | Directory path on remote server (default: /) |
| Auth Method | Password or Private Key |
| Password / Key | Authentication credential (conditional) |
Sync Jobs Tab
View recent synchronization activity:
| Column | Description |
|---|---|
| Start Time | Sync start timestamp |
| Destination | Provider name |
| Status | Success / Failed / In Progress |
| Size Transferred | Total data transferred |
| Duration | Operation duration |
| Backups Count | Number of backup files synced |
| Actions | View Logs |
Remote Backups Tab
Browse and manage backup files stored on remote destinations:
| Column | Description |
|---|---|
| Filename | Backup file name |
| Destination | Provider name |
| Size | File size |
| Last Modified | Modification date |
| Exists Locally | Yes / No |
| Actions | Download (if not local), Delete |
$ panelica remote-storage list $ panelica remote-storage add --type=s3 --bucket=my-backups --region=eu-west-1 $ panelica remote-storage test --id=1 $ panelica remote-storage sync --id=1
WP Toolkit
WordPress management toolkit with 8 sub-pages: Installations, Install Wizard, Plugins, Themes, Updates, Security, Backup, and Staging.
Navigate to 3rd Party Applications → WP Toolkit. This feature requires the wordpress_toolkit license feature.
Installations Page
Two-column layout: Left panel shows site list with quick stats (Active/Frozen/Issues counts), Right panel shows selected site details.
Site Details Panel:
- Overview Cards (4) — WP Version, PHP Version, Security Status (Frozen/Unlocked), Installation Date
- Site Info — Site Title, Site URL (clickable), Admin User, Database, Install Path, Owner
Quick Actions (6 buttons):
| Action | Description |
|---|---|
| WP Admin | One-click auto-login to WordPress dashboard (disabled if not active) |
| Visit Site | Open live site in new tab |
| Fix Permissions | Repair WordPress file/directory permissions |
| Freeze / Unfreeze | Toggle file immutability protection (prevents all file changes) |
| Change Password | Modal: new password (min 8 chars), confirm, generate strong password button |
| Uninstall | Destructive action with confirmation dialog |
Manage Cards (4): Plugins, Themes, Security, Staging — each links to the respective sub-page.
Status types: Active Installing Maintenance Broken Updating Suspended
Install Wizard (5-Step)
- Domain — Install on existing domain (select from dropdown)
- New Domain — Create a new domain + install. Optional: auto-create user (generates username, email, password from domain)
- Subdomain — Select parent domain, then pick existing or create new subdomain
Common fields: Install Subpath (optional), Use HTTPS toggle, SSL Provider (Let's Encrypt / Self-Signed), Force Reinstall checkbox (with backup option).
wp_), Auto-Update Core togglePlugins Page
Two-column layout with multi-site selection on the left (checkboxes for batch operations). Right panel has 2 tabs:
Tab 1: Installed Plugins
- Stats Cards (4) — Total plugins, Active plugins, Needs Update, Must-Use plugins
- Search & Filter — Search by name, Status filter (All/Active/Inactive/Needs Update)
- Bulk Actions — Select All checkbox, then: Activate Selected, Deactivate Selected, Update Selected, Delete Selected
- Columns — Checkbox, Icon, Name, Status badge, Current Version, New Version (if update available), Actions (Activate/Deactivate, Update, Delete)
- Batch — "Update All Plugins on Selected Sites" button applies to all checked sites
Tab 2: Plugin Store
- Search — WordPress.org plugin search (debounced, min 2 chars)
- Popular Categories (8) — Security, SEO, Performance/Cache, Backup, Forms/Contact, E-Commerce, Analytics, Email/SMTP
- Results — Plugin cards with icon, name, rating (stars), download count, description, Install button (with auto-activate option)
- Multi-site Install — When multiple sites selected, batch install with success count
Themes Page
Same two-column layout as Plugins. 2 tabs:
Tab 1: Installed Themes — Stats (Total, Active, Needs Update, Parent themes), search/filter, bulk actions (Update/Delete Selected), theme grid. Only one theme can be active per site.
Tab 2: Theme Store — 8 categories (Starter, Blog, Business, Portfolio, E-Commerce, Magazine, Multipurpose, Minimal). Search and install themes from WordPress.org.
Updates Page
Unified updates dashboard for all WordPress components. Multi-site selection on the left.
- Stats Cards (5) — Total updates, WordPress Core count, Plugins count, Themes count, Translation updates count
- Search & Filter — Search by name/slug, Type filter (All/Core/Plugins/Themes/Translations)
- Table Columns — Type badge (Core/Plugin/Theme/Translation with icon), Name, Current Version, New Version, Site, Actions (Update Now — disabled if frozen)
- Batch — Select multiple updates, click "Update All on Selected Sites"
Security Page (5 Tabs)
Comprehensive WordPress security management. Multi-site selection on the left.
Tab 1: Overview — Security Score (0–100, color-coded circle: green 80+, orange 50–79, red <50). Key metrics: last scan, next scheduled, threats detected, integrity issues. Security alerts list with action buttons.
Tab 2: Scanner — Two scan types:
- Quick Scan — Core integrity, plugin integrity, suspicious files, PHP in uploads
- Full Scan — All quick checks + ClamAV malware scan
Real-time progress shows each step with status (pending/running/done/error), elapsed time, and result. Results display: core integrity status, modified files list, suspicious files with delete buttons, malware findings, and PHP files found in uploads directory.
Tab 3: Hardening — Security score bar (0–100) with checklist items:
| Check | Description |
|---|---|
| User Enumeration Protection | Prevent user enumeration via REST API |
| Security Headers | Add HTTP security headers |
| File Editor Disable | Disable theme/plugin editor in WP dashboard |
| Hide WordPress Version | Remove WP version from headers |
| Directory Listing | Disable directory browsing |
Each item shows status (SECURE/INSECURE/WARNING) and a toggle to enable/disable. Security Agent installation button if not yet installed.
Tab 4: Activity — Login attempt monitoring. Filter by days (7/14/30) and search by IP/username. Stats cards: Total Attempts, Failed, Successful, Blocked. Table columns: IP Address (with country), Time, Username, Event (login_failed/login_success/login_blocked/ip_blocked), Method (wp-login/xmlrpc), User Agent, Reason.
Tab 5: Users — WordPress users table: User ID, Username, Email, Role(s) (Admin/Editor/Author/Contributor/Subscriber), Registered date, Display Name. Highlights suspicious users (multiple admins, recent suspicious registrations).
Security Agent Configuration Modal:
- Login Protection — Enable toggle, Max Attempts (default: 5), Block Duration (default: 3600s), Rate Window (default: 600s)
- Rate Limiting — Enable toggle, Requests Per Minute (default: 120), Ban Duration (default: 300s)
- XML-RPC Protection — Disable XML-RPC toggle
- IP Blacklist / Whitelist — Add/remove IP addresses (supports CIDR notation)
- Country Block — Block by 2-letter country code
- Bot Whitelist (5 categories) — Search Engines (Google, Bing, 17 bots), Social Media (Facebook, Twitter, 10 bots), Uptime Monitoring (Pingdom, 9 bots), SEO & Analytics (Ahrefs, 6 bots), AI & Research (GPTBot, ClaudeBot, 8 bots). RDNS verification toggle for each category.
Backup Page (4 Tabs)
Tab 1: Backup History — Filter by site. Table: Name, Site, Type (Full/Database/Files badge), Size, Created, Duration, Status (Completed/Failed/In Progress), Contents icons, Location (Local/Cloud), Encryption (Yes/No), Actions (Download, Restore, Clone, Delete). Click for detailed modal showing WP version, PHP version, plugin/theme counts, upload folder size.
Tab 2: Create Backup — Select site, choose type (Full/Database Only/Files Only with size estimates), set options: Backup Name, Include Uploads, Compression (None/Gzip/Bzip2), Encryption, Location (Local/S3/Backblaze/Dropbox/FTP). Advanced: Exclude Patterns, Retention Days, Pre/Post Scripts. Real-time progress with estimated time.
Tab 3: Scheduled Backups — Table: Name, Site, Type, Frequency (Daily/Weekly/Monthly/Hourly badge), Time, Retention, Location, Encryption, Status toggle, Next Run, Last Run, Last Status, Actions (Edit/Delete/Run Now). Create schedule: site, frequency, time picker, timezone, type, location, retention, encryption, email notification.
Tab 4: Settings — Max Local Storage (GB), Default Retention Days, Default Compression, Auto-cleanup. Email notifications. Cloud storage integrations: AWS S3 (Access Key, Secret, Bucket, Region), Backblaze (Account ID, Key, Bucket), Dropbox (Token, Path). Each with Test Connection button.
Restore Backup Modal: Options to restore Files and/or Database, create pre-restore backup, downtime warning. Clone Site Modal: Select destination, clone name, database prefix.
Staging Page
Select a site from the left panel to manage its staging environment.
Status types: Creating... Active Syncing... Promoting... Error Deleted
When staging exists, info cards show: Staging URL, Storage Path, Database Name, Created Date, Last Synced, Last Promoted.
Actions:
- Sync Staging — Pull latest changes from live (select: Files, Database, or both)
- Visit Staging — Open staging site in new tab
- Promote to Live — Push staging to production. Requires typing "PROMOTE" to confirm. Options: Push Files/Database, Auto-backup production.
- Delete Staging — Remove staging environment (destructive confirmation)
Creating Staging: Click "Create Staging" — enter optional notes, choose Clone Files and/or Clone Database, then create. Real-time progress with status messages.
$ panelica wordpress install --domain=example.com $ panelica wordpress list $ panelica wordpress plugins list --site=example.com $ panelica wordpress scan --site=example.com --type=full
Docker Manager
Full Docker lifecycle management with 8 main tabs, plus Docker Compose, Swarm orchestration, Registry management, real-time statistics, and container logging.
Navigate to 3rd Party Applications → Docker. Summary cards: Total Containers, Running Containers, Total Images, Total Volumes, Total Networks.
Tab 1: Overview
Docker installation status and system information:
- System Info — Docker version, API version, Compose version, OS/Architecture, Kernel version, Storage driver, Root directory
- Capabilities — Memory limit support, Swap limit support
- Container Stats — Running/Paused/Stopped breakdown
- Disk Usage — Breakdown by Containers, Images, Volumes, Build Cache (in GB) + Reclaimable Space
If Docker is not installed, an Install Docker button appears with streaming installation logs. Uninstall provides granular control: remove containers (on), images (on), volumes (off), networks (on), purge data (off).
Tab 2: App Templates
One-click deployment of 50+ pre-configured applications. Search across names/descriptions, filter by category.
Categories: AI, Chat, Automation, DevTools, CMS, Web, Blog, Database, Cache, and more. Each template card shows: Logo, Name, Image tag, Description, Category badges, Memory requirements, Port count, Deploy count (popularity), and "Popular" indicator.
Deploy Modal: Container name (auto-filled), Image tag override, Port mapping customization, Environment variable overrides, Memory limit, Auto-start toggle. On success: shows Container ID, Access URL, Exposed ports, Credentials (if any).
Tab 3: Containers
Search by name/status (All/Running/Stopped/Paused).
| Column | Description |
|---|---|
| Name | Container name + truncated ID |
| Image | Image name:tag |
| Status | running / stopped / paused / restarting / created |
| Ports | Port mappings (host:container) |
| Resources | CPU % and Memory usage (MB) with progress bars |
| Created | Timestamp |
| Actions | Start, Stop, Pause, Restart, Logs, Terminal, Inspect, Clone, Link Domain, Delete |
Create Container Modal:
| Field | Type | Description |
|---|---|---|
| Container Name | Text (required) | Unique container name |
| Image | Text (required) | Image name with autocomplete |
| Port Mapping | Text | host:container format (comma-separated) |
| Network | Select | bridge / host / none / custom |
| Environment | Textarea | VAR=value format |
| Volume Mounts | Text | host:container (bind/named) |
| Restart Policy | Select | no / on-failure / always / unless-stopped |
| Memory Limit | Number (MB) | Maximum memory |
| CPU Limit | Number (%) | Maximum CPU |
| Command | Text | Override entrypoint |
| Working Dir | Text | Container working directory |
| Hostname | Text | Container hostname |
| SHM Size | Number | Shared memory size |
| Capabilities | Text | Linux capabilities |
| DNS Servers | Text | Custom DNS |
| Extra Hosts | Text | Additional host entries |
Container Terminal: Full WebSocket-based terminal (xterm.js) with dark theme, TTY support, auto-reconnect, and responsive sizing.
Domain Linking: Associate containers with domains. Auto-detects exposed ports and creates reverse proxy configuration.
Clone Container: Duplicate a container with a new name and optional auto-start.
Tab 4: Images
Stats: Total Images, In Use, Total Size (GB), Dangling images count.
| Column | Description |
|---|---|
| Repository | Image repository name |
| Tag | Image tag badge |
| Image ID | SHA256 hash (truncated) |
| Size | Image size (MB/GB) |
| Created | Creation timestamp |
| Status | In Use / Unused badge |
| Actions | Run container, Delete, Inspect, Tag, Push |
Pull Image Modal: Enter image name:tag, streaming progress shows layer-by-layer download status.
Tab 5: Docker Hub
Search Docker Hub for images. Results show: Name, Description, Stars, Official badge, Automated badge. One-click pull from search results with streaming progress.
Tab 6: Volumes
Stats: Total Volumes, Total Size, Used Space (%), Orphaned count.
| Column | Description |
|---|---|
| Name | Volume name + creation date |
| Driver | Driver badge (local, etc.) |
| Mount Point | Filesystem path |
| Size / Used | With usage progress bar (green <50%, yellow <75%, red >75%) |
| Containers | In-use / Orphaned badge + count |
| Actions | Inspect, Browse, Backup, Delete (orphaned only) |
Browse Modal: File explorer with breadcrumb navigation, parent directory navigation. Shows: file name, type (file/directory), size, modification time, permissions. Donut chart shows volume usage distribution.
Create Volume: Name (required), Driver (local/other), Optional bind path.
Tab 7: Networks
Stats: Total Networks, Bridge count, Connected Containers total.
| Column | Description |
|---|---|
| Name | Network name |
| Driver | bridge / host / overlay / macvlan / none badge |
| Scope | local / swarm / global badge |
| Subnet/Gateway | IPAM configuration |
| Containers | Connected container count |
| Properties | Internal / Attachable flags |
| Actions | Inspect (view connected containers with IPs and MACs), Delete |
Create Network: Name, Driver, Subnet (CIDR), Gateway, Internal toggle, Attachable toggle, Labels.
Docker Compose
Navigate to Docker → Compose for stack management. Stats: Total Stacks, Running, Total Services, Combined Memory.
Stacks Tab:
| Column | Description |
|---|---|
| Name | Stack name |
| Status | running / stopped / partial / error |
| Services | Running / Desired count |
| Created / Updated | Timestamps |
| Version | Compose file version |
| Actions | View Services, Edit Compose File, Start/Stop Stack, Restart, Delete |
Services Tab: Service name, Image, Status, Replicas (running/desired), Ports, Networks, Volumes, Resources, Actions (Scale, Restart, Logs, Inspect).
Compose Editor: Raw YAML editor with syntax highlighting and validation. Supports Compose version 3.7+. Deploy/Update buttons.
Registry Management
Stats: Connected Registries, Total Repositories.
Registries Tab: Table of configured registries with: Name, URL, Type (Docker Hub/Private/GCR/ECR/ACR), Authentication status, Repository count, Last sync, Status (connected / disconnected / error). Actions: Authenticate, Sync, Delete, Edit.
Repositories Tab: Name, Registry, Tags, Stars, Pulls, Size, Last Push, Visibility (public/private). Actions: Pull specific tag, Push, Delete, View Details.
Add Registry Modal: Registry type selection, URL, credentials (username/password/token), Test Connection button.
Container Logs
Real-time log viewer with controls:
- Container Filter — All Containers or specific container
- Log Level Filter — All / Error / Warning / Info / Debug
- Line Count — 50 / 100 / 200 / 500 / 1000 lines
- Search — Full-text search (regex capable)
- Auto-scroll — Toggle automatic scroll to latest
- Timestamps — Show/hide timestamp column
- Clear / Export — Clear logs or download as file
Columns: Timestamp (optional), Container (badge), Level (ERROR WARN INFO DEBUG), Message (monospace), Source (stdout/stderr).
Performance Statistics
System overview: Total CPU %, Total Memory Used/Limit, Network RX/TX (MB/s).
Charts (4 metric tabs): CPU (time-series area chart), Memory (donut by container), Network (bar chart RX/TX per container), Disk I/O (area chart read/write trends).
Per-Container Stats Table: Name, Status, CPU %, Memory (used/limit/%), Network (RX/TX MB/s), Disk (Read/Write MB/s), Process count. Real-time updates with filter for running containers only.
Docker Swarm
Orchestration management. If not initialized, shows Initialize Swarm button with worker/manager token display. Stats: Total Nodes, Managers, Workers, Running Services.
Nodes Tab:
| Column | Description |
|---|---|
| Hostname | Node hostname |
| Role | Manager / Worker |
| Status | Ready / Down / Drain |
| Availability | Active / Pause / Drain |
| IP / CPU / Memory | Node resources |
| Containers | Running container count |
| Actions | Promote/Demote, Drain/Activate/Pause, Inspect, Remove |
Services Tab: Name, Image, Mode (Replicated/Global badge), Replicas (running/desired, color: green=all, yellow=partial, red=failed), Status, Ports, Networks. Actions: Scale, Update Image, Restart, Logs, Delete.
Tasks Tab: Individual container instances: Task ID, Service, Node, Status (running/failed/shutdown/accepted/preparing/starting/removing), Desired State, Ports, Updated time. Actions: View Logs, Inspect, Force Update.
Join Modal: Worker join token (copyable), Manager join token, Join command: docker swarm join --token TOKEN MANAGER_IP:2377
Create Service Modal: Service name, Image, Mode (replicated/global), Replicas, Port mappings, Environment variables, Volume mounts, Restart policy, Update config (parallelism, delay), Placement constraints, Labels.
$ panelica docker create --image=nginx:latest --name=my-nginx --port=8080:80 $ panelica docker list $ panelica docker stop --name=my-nginx $ panelica docker compose up --file=docker-compose.yml $ panelica docker swarm init
Server Monitoring
Real-time metrics, service management, Panelica monitoring dashboard, and server metrics with auto-refresh.
Panelica Monitor Dashboard
Navigate to Monitoring → Panelica Monitor for a comprehensive real-time monitoring dashboard with theme-aware widgets:
CPU Section:
- CPU Usage % gauge (0-100, color thresholds: green <50%, yellow <80%, red ≥80%)
- Load Average card (1min, 5min, 15min)
- Context Switches counter and CPU Cores display
Memory Section:
- Memory Usage % gauge with used/total GB
- Swap Usage % gauge
- Available Memory display
- Memory History line chart (last 1 hour)
Disk Section:
| Column | Description |
|---|---|
| Device | Disk device name (e.g., /dev/sda1) |
| Mount | Mountpoint path |
| Total | Total capacity in GB |
| Used | Used space in GB |
| Available | Free space in GB |
| Usage % | Percentage gauge |
Plus Disk I/O metrics: Read/Write Latency (ms), IOPS.
Network Section: In/Out throughput gauges (bytes/sec), error counter, TCP retransmits, and historical charts.
System: Running/Blocked/Total processes count, Forks per second, TCP connections, Sockets allocated/in use, UDP stats, Conntrack usage.
Panelica Services Status:
| Column | Description |
|---|---|
| Service | Name with auto-detected icon (nginx, php, postgres, mysql, redis, etc.) |
| Status | running / stopped / starting |
| PID | Process ID |
| Uptime | Human-readable uptime (e.g., "1d 5h") |
| CPU % | CPU usage percentage |
| Memory | Memory usage in MB |
| Ports | Listening ports |
Server Metrics
Navigate to Monitoring → Resource Usage for real-time server metrics with auto-refresh every 5 seconds.
The page shows 4 circular gauge cards at the top:
- CPU — Usage percentage with color gradient (green <50%, yellow 50-75%, orange 75-90%, red >90%) and core count
- Memory — Usage percentage with used/total GB display
- Disk — Usage percentage with used/total GB display
- Load Average — Three values (1m, 5m, 15m) color-coded relative to CPU core count
Network Traffic: Download (green) and Upload (blue) sections with bandwidth in bytes/sec and Mbps, each with a progress bar.
Service Status: Cards for each service with auto-detected icons (panelica_monitor, panelica_backend, nginx, mysql, postgresql, redis, apache) showing UP or DOWN status.
Quick Stats: Uptime, CPU Cores, Total Memory (with available), Total Disk (with available).
Toggle Auto-refresh on/off. Manual refresh button available. Last update timestamp displayed.
Service Monitor
Navigate to Monitoring → Service Monitor for managing all server services:
| Column | Description |
|---|---|
| Service | Service name with auto-detected icon |
| Status | running / stopped / error / starting |
| PID | Process ID or N/A |
| Uptime | Duration or "-" if stopped |
| CPU % | CPU usage |
| Memory | Memory usage in MB |
| Ports | Listening ports |
| Boot | Enable/disable at boot toggle (with disable reason) |
| Actions | Start, Stop, Restart buttons |
Disable Service: When disabling boot auto-start, a modal asks for the disable reason. The reason and timestamp are stored and displayed in the Boot column.
Bulk Actions: Start All and Restart All buttons (with confirmation modal). Auto-refresh updates status every 10 seconds.
$ panelica service status --all $ panelica service restart --name=nginx $ panelica service enable --name=redis
Bandwidth Usage
Monthly bandwidth monitoring per user and per domain with charts, tables, and distribution analysis.
Navigate to Monitoring → Bandwidth. The page shows 4 summary cards at the top:
| Card | Shows |
|---|---|
| Total Bandwidth | Total GB used for the selected month |
| Active Users | Number of users with bandwidth usage |
| Active Domains | Number of domains with traffic |
| Average per Domain | Calculated average MB per domain |
Period Selector
A dropdown at the top lets you select from the last 12 months (format: "Month Year"). All charts and tables update when you change the period.
Charts
- Top Users by Bandwidth (left) — Horizontal bar chart showing top 10 users with MB/GB data labels (blue)
- Top Domains by Bandwidth (right) — Horizontal bar chart showing top 10 domains with MB/GB data labels (cyan)
- Domain Distribution — Pie chart showing top 5 domains with color-coded slices and legend
Users Details Table
| Column | Description |
|---|---|
| User | Avatar + username + domain count |
| Role | Badge: ROOT / ADMIN / RESELLER / USER |
| Used | Bandwidth used in MB |
| Limit | "Unlimited" badge or formatted limit value |
| Usage | Color-coded progress bar + percentage (green <80%, orange 80-90%, red >90%) |
| Status | exceeded / critical / warning / unlimited / normal |
Domains Details Table
| Column | Description |
|---|---|
| Domain | Globe icon + domain name |
| Owner | Username of domain owner |
| Bandwidth Used | Formatted MB value |
| Share | Percentage badge showing share of total bandwidth |
| Distribution | Colored progress bar showing usage distribution |
$ panelica bandwidth summary $ panelica bandwidth --user=johndoe --period=month $ panelica bandwidth --domain=example.com
Bandwidth Enforcement
Monthly bandwidth limits are defined in the hosting plan (monthly_bandwidth_mb). When a user exceeds their limit, their domains are rate-limited (not suspended). Automatic notifications are sent at 80%, 90%, and 100% thresholds.
Statistics & Resource Usage
Comprehensive statistics dashboard with web traffic, system resources, database, email, security, and FTP metrics.
Navigate to Monitoring → Statistics for a multi-tab statistics overview.
Date Range Selector
Select the time period at the top: 24 Hours, 7 Days (default), 30 Days, or 90 Days. All charts and values update accordingly.
Summary Cards
4 animated summary cards with percentage change badges:
| Card | Shows | Change Indicator |
|---|---|---|
| Total Requests | HTTP request count with animated counter | Green up arrow or red down arrow |
| Bandwidth Used | Total bandwidth in GB | Percentage change badge |
| Unique Visitors | Unique visitor count | Percentage change badge |
| Avg Response Time | Average response time in seconds | Percentage change badge |
Statistics Tabs
Web Traffic Tab: Area chart showing Request & Bandwidth Trend over time, Top Pages table (top 5), and Error Distribution pie chart (404, 500, 403, 502, 503 breakdown).
System Resources Tab: Line chart showing CPU %, Memory %, and Swap % over time. Plus 4 average stat cards: Average CPU, Average Memory, Average Load, and Uptime.
Database Tab: Bar chart showing Query Statistics per database engine (MySQL, PostgreSQL, MongoDB, Redis) with queries and connections. Database Sizes shown as progress bars with total allocation info.
Email Tab: 4 stat cards (Emails Sent, Delivery Rate, Open Rate, Click Rate) plus a Spam Report alert showing flagged emails.
Security Tab: 3 cards — Security Threats (Blocked IPs, Failed Logins, Brute Force counts), Malware Scanner (scanned files + threats), Firewall Status (blocked connections).
FTP Tab: Upload/Download statistics with transfer counts and total data, Connection Info card (total connections, active now, total data, average speed).
Export Options
Export statistics in multiple formats using the button group at the bottom:
- Export as PDF
- Export as Excel
- Export as CSV
- Email Report — Send report via email
- Schedule Reports — Set up recurring report delivery
$ panelica quota status $ panelica quota status --user=johndoe $ panelica resources list-users --sort=cpu
Cgroups v2 Enforcement
Resource limits are enforced at the kernel level using Cgroups v2. Each user runs inside their own cgroup with hard limits for CPU, RAM, and I/O. Exceeding limits results in throttling (CPU) or OOM killing (RAM), not suspension.
Process Manager
Monitor and manage running processes with real-time CPU/memory charts, tree view, and auto-refresh.
Navigate to Tools & Settings → Process Manager. The page shows 4 summary cards at the top:
| Card | Shows |
|---|---|
| CPU Usage | Total CPU percentage with color-coded progress bar (>80% red, >60% orange, else blue) |
| Memory Usage | Total memory percentage with color-coded progress bar |
| Total Processes | Total process count + number currently running |
| Uptime | System uptime with load average values |
Processes Tab
Filters: Search by process name/command/user/PID, filter by User dropdown, filter by Status (running, sleeping, zombie, stopped). Status summary badges show counts: Running Sleeping Zombie.
View Modes: Toggle between Flat List and Tree View (hierarchical with expand/collapse, indented levels). In tree view, Hide Kernel Threads and Expand All / Collapse All buttons appear.
| Column | Description |
|---|---|
| PID | Process ID (sortable) |
| Name | Process name + command subtitle (monospace, truncated) |
| User | Username running the process |
| Status | Color-coded badge (success/info/warning/danger) |
| CPU | Progress bar + percentage (color-coded by usage) |
| Memory | Progress bar + MB value (color-coded by usage) |
| Priority | Nice value badge (color-coded) |
| Runtime | Process runtime duration |
| Actions | 3 buttons: Terminate, Force Kill, Change Priority |
Default sort: CPU descending. Click any sortable column header to change.
Process Actions
- Terminate (SIGTERM) — Gracefully terminate a process. Confirmation dialog shows PID, name, and user.
- Force Kill (SIGKILL) — Forcefully kill a process immediately. Confirmation dialog with warning.
- Kill All User Processes — When a user filter is active, a "Kill All" button appears. Shows count and preview of first 5 processes before confirming.
- Change Priority (Renice) — Dialog shows current priority and accepts a new value (-20 to 19). Validated before submission.
Monitoring Tab
Real-time charts and top process lists:
- CPU Usage Chart (left) — Area chart showing CPU % over time (blue)
- Memory Usage Chart (left) — Area chart showing Memory % over time (green)
- Top 5 by CPU (right) — Table with Name, CPU%, User columns
- Top 5 by Memory (right) — Table with Name, Memory MB, User columns
Auto-Refresh
Toggle auto-refresh with configurable intervals: 1s, 2s, 5s, 10s, 30s. Manual refresh button always available.
$ panelica processes list $ panelica processes list --user=johndoe $ panelica processes kill --pid=12345
Log Management
Centralized log hub with 6 tabs: Overview, Access Logs, Error Logs, System Logs, Logrotate, and Settings.
Navigate to Monitoring → Log Management. The page has 6 tabs accessible via URL hash (#overview, #access, #errors, #system, #logrotate, #settings).
Overview Tab
Dashboard view with 4 summary cards and auto-refresh controls (Off, 30s, 60s, 5m):
| Card | Shows | Details |
|---|---|---|
| Total Log Entries | Total count | Error count (red) and warning count (yellow) below |
| Error Rate | Percentage | Color-coded progress bar (red >100 errors, orange >10, green otherwise) |
| HTTP Requests | Total request count | 2xx OK (green), 4xx (yellow), 5xx (red) breakdown |
| Log Disk Usage | Total log size | Category count + critical badge if oversized logs exist |
Below the cards: Errors by Source (top 12 with progress bars), HTTP Overview (methods, status codes, bandwidth, top IPs), Logrotate Status (config counts, critical alerts), Last Error (most recent error entry), and Storage by Category table (category, size, file count, rotation status, usage %).
Access Logs Tab
HTTP request logs with real-time auto-refresh (Off, 5s, 10s, 30s).
Filters: Search by URL/IP, filter by Method (GET, POST, PUT, DELETE, PATCH, HEAD), filter by Status (2xx, 3xx, 4xx, 5xx), filter by Source (service).
| Column | Description |
|---|---|
| Time | Timestamp in locale format |
| IP | Client IP address (monospace) |
| Method | Badge: GET POST PUT DELETE |
| Status | Badge: 2xx 3xx 4xx 5xx |
| URL | Request URL (truncated with ellipsis) |
| Size | Response size in KB/MB |
| View | Click to open detail modal |
The table uses monospace font at 12px with a sticky header. Click any row to open a Request Detail modal showing: time, method, status, IP (with country), size, full URL, referer, response time, source file, user-agent, and raw log line.
Error Logs Tab
Error and warning log entries with real-time auto-refresh.
Filters: Search text, filter by Level (Critical, Error, Warning, Info, Debug, Notice), filter by Source.
| Column | Description |
|---|---|
| Time | Timestamp in locale format |
| Level | Color-coded badge: Critical/Error (red), Warning (yellow), Info (blue), Notice (purple), Debug (gray) |
| Source | Service/source name |
| Message | Error message (truncated) |
| View | Click to open detail modal |
Each row has a colored left border matching the severity level. Click to open a Log Entry Detail modal showing full message, details, file path with line number, and raw log.
System Logs Tab (Audit)
Panel audit log tracking all system events with auto-refresh.
Filters: Search by IP/user, filter by Event Type (26 event types including login, logout, user/domain/database/ftp/dns/email/plan/ssl/settings operations), filter by Severity (Info, Warning, Critical).
| Column | Description |
|---|---|
| Time | Relative time ("Just now", "5m ago", "2h ago") or full date |
| Event | Color-coded icon + formatted event name (e.g., "Api User Create") |
| Severity | Info / Warning / Critical |
| User | Username or "-" |
| IP | Client IP (monospace) |
| Details | Truncated detail text |
| View | Click to open detail modal |
Click any row to open a detail modal with full event information including JSON-formatted details (indented, scrollable).
Logrotate Tab
Manage log rotation configurations to prevent logs from consuming excessive disk space. Shows active configs, rotation schedules, and critical alerts for oversized logs (>500MB).
Settings Tab
Configure log retention, rotation frequency, compression, and notification settings for log management.
Auto-Refresh
All log tabs support auto-refresh with configurable intervals. A live countdown badge shows the next refresh time. The refresh happens silently in the background (no loading spinner if data already exists).
Log files can also be accessed directly from the command line. The panel interface provides search, filtering, and visual formatting.
API Management
REST API with HMAC-SHA256 authentication, scope-based permissions, rate limiting tiers, usage analytics, and mobile device pairing.
Navigate to Developer → API Management. This feature requires the api_access license feature. The page has 6 tabs and 4 summary cards at the top:
| Card | Description |
|---|---|
| Total API Keys | Count of all keys with active key count |
| Total Requests (24h) | Request count in the last 24 hours |
| Success Rate | Percentage with progress bar |
| Avg Response Time | Milliseconds with Good/Slow badge |
Tab 1: API Endpoints
Browse all External API endpoints organized by category in an accordion layout. Each category header shows the endpoint count.
| Column | Description |
|---|---|
| Method | GET POST PUT PATCH DELETE |
| Endpoint | API path (e.g., /v1/accounts) |
| Description | What the endpoint does |
| Auth | HMAC-SHA256 badge |
| Rate Limit | Rate limit info per tier |
| Actions | Test button to open the API tester modal |
Use the search box and category dropdown to filter. The Test Modal lets you build a request: select method, enter path, add query parameters, set headers, write request body (JSON), then click Execute to see the response with status code, response time, and formatted JSON body.
Tab 2: API Keys
Manage your API keys. The tab badge shows active key count.
| Column | Description |
|---|---|
| Name | Key name + tier badge (Frontend/External) |
| API Key | Clickable code block (click to copy) |
| Status | Active / Inactive / Revoked |
| Permissions | First 2 scopes as badges + "+X more" tooltip |
| Usage | Request count + "Last: X ago" |
| Created | Creation date |
| Expires | Expiration date or "Never" |
| Actions | Copy, Edit, Regenerate Secret, Revoke, Delete |
Creating an API Key:
accounts:read, accounts:write, domains:read, domains:write, plans:read, *:* (Full Access), etc.Tab 3: SSH Commands
Command-line interface documentation for the External API via SSH. Shows a table of available commands with: command name (code formatted), description, category badge, and usage example. A connection example card displays the SSH connection command:
$ ssh user@server -p 2222 # Authenticate, then run commands: > list accounts > create domain example.com > exit
Tab 4: Analytics
Usage statistics and monitoring:
- API Usage by Tier — Area chart showing External vs Panel API request trends over time
- Request Distribution — External API / Panel API / Success / Error request counts with progress bars
- Response Times — Average, P95, and P99 latency per API type (in ms)
- API Request Logs — Real-time audit trail table with: Endpoint, Method badge, Status code, User, IP, Date, Response Time (green = fast, yellow = slow). Click any entry to view full request/response details in a modal.
Tab 5: Quick Start Guide
Ready-to-use code examples in 6 languages: cURL, PHP, Python, Node.js, Go, and CLI. Each tab includes a copy button and covers: list accounts, create account, list domains, create domain, get/update web server config, and get server status.
Tab 6: Mobile Pairing
Connect your mobile device (iOS/Android) to manage the server remotely. This tab is available to ROOT users only and is also accessible via the QR code button in the header navbar.
Pairing Process:
Security Features:
- HMAC-SHA256 authentication per device
- Per-device API keys with unique
mpk_prefix - AES-256 encrypted communication
- Scope-based access control — 11 categories (Domains, Server, Monitoring, Backups, Databases, Email, FTP, DNS, SSL, Actions, Files)
- Time-limited pairing codes with countdown timer and auto-expiry
Paired Devices Management:
| Info | Description |
|---|---|
| Device Name | User-defined name (e.g., "My iPhone") |
| Platform | iOS (black icon) or Android (green icon) |
| Model | Device model (e.g., iPhone 15 Pro, SM-G991B) |
| Key Prefix | API key prefix for identification |
| Status | Active or Revoked |
| Request Count | Total API requests made |
| Last Used | Last activity timestamp and IP |
| Actions | Edit Permissions, Revoke (with reason), Delete |
App Downloads: Apple App Store and Google Play Store links are displayed in the pairing section.
Authentication
All API requests must include three headers:
| Header | Description |
|---|---|
X-API-Key | Your API key |
X-Timestamp | Current Unix timestamp |
X-Signature | HMAC-SHA256 signature |
Signature calculation:
# stringToSign = METHOD + ENDPOINT_PATH + TIMESTAMP + REQUEST_BODY # signature = HMAC-SHA256(stringToSign, API_SECRET) # PHP example: $message = "GET" . "/v1/accounts" . $timestamp . ""; $signature = hash_hmac('sha256', $message, $API_SECRET); # Node.js example: const signature = CryptoJS.HmacSHA256(message, apiSecret).toString();
API Endpoints
| Resource | Endpoints |
|---|---|
| Accounts | GET/POST/PUT/DELETE /v1/accounts, suspend, unsuspend, change-password |
| Domains | GET/POST/PUT/DELETE /v1/domains, suspend, unsuspend, webserver config |
| Databases | GET/POST/DELETE /v1/databases |
| FTP | GET/POST/PUT/DELETE /v1/ftp-accounts |
GET/POST/PUT/DELETE /v1/email-accounts | |
| DNS | GET/POST /v1/dns/zones/:id/records, PUT/DELETE /v1/dns/records/:id |
| SSL | GET /v1/ssl/domains/:id, issue, renew, upload |
| Backups | GET/POST /v1/backups, restore |
| Server | GET /v1/server/metrics, /v1/server/status |
| Plans | GET /v1/plans |
| License | GET /v1/license/status, features, plan, quotas |
| API Keys | GET/POST/DELETE /v1/api-keys, regenerate |
CloudFlare Integration
Multi-account CloudFlare management with zone control, DNS records, cache purge, and security settings.
Navigate to Domains → CloudFlare. This feature requires the cloudflare license feature.
Connecting Your Account
Zones Tab
| Column | Description |
|---|---|
| Zone Name | Domain name managed by CloudFlare |
| Nameservers | Assigned CloudFlare nameservers |
| Plan Type | CloudFlare plan (Free, Pro, Business, Enterprise) |
| Status | Active or Pending |
| Account Email | Associated CloudFlare account |
| Actions | Manage, Sync, Disconnect |
DNS Tab
Manage CloudFlare DNS records for the selected zone:
| Column | Description |
|---|---|
| Record Name | DNS record name |
| Type | A, AAAA, CNAME, MX, TXT, SRV, etc. |
| Content/Target | Record value (IP, hostname, etc.) |
| TTL | Time-to-live (or Automatic) |
| Proxied | Toggle: CloudFlare proxy (orange cloud) or DNS Only |
| Actions | Edit, Delete |
Create/edit records via modal: Record Type, Name, Content, TTL, Proxied toggle, and Priority (for MX/SRV).
Quick Actions Tab
- Purge All Cache — Clear entire CloudFlare cache
- Purge Cache by URL — Clear cache for specific URLs
- Development Mode — Bypass cache for 3 hours during development
- HTTPS Redirect — Enable/disable Always Use HTTPS
- Security Level — Set CloudFlare security level
- DDoS Protection — Toggle Under Attack Mode
- IP Whitelist — Manage whitelisted IPs
Settings Tab
Connection: Account Email, API Key (masked), verified status, Test/Reconnect/Disconnect buttons.
Zone Settings: SSL/TLS Mode, Minimum TLS Version, HSTS, Always Use HTTPS, Auto HTTPS Rewrites.
Performance: Minify (JS/CSS/HTML), Brotli Compression, Image Optimization, HTTP/2 and HTTP/3 toggles.
Webhooks
Multi-destination webhook system supporting HTTP, Telegram, Slack, Discord, and Email with delivery logging and retry logic.
Navigate to Developer → Webhooks. This feature requires the api_access license feature. 4 summary cards at the top show: Total Webhooks (active count), Deliveries (24h) (failed count), Success Rate (%), and Avg Response time (ms).
The page has 4 tabs:
Tab 1: Webhooks List
| Column | Description |
|---|---|
| Webhook | Name + description |
| Destination | Type badge with icon: Telegram Slack Discord HTTP Email |
| Events | Count of subscribed events |
| Status | Active / Inactive / Failed |
| Statistics | Delivery stats and success rate percentage |
| Actions | Edit, Test, View Logs, Regenerate Secret, Delete |
Creating a Webhook
- Telegram — Bot Token (from @BotFather), Chat ID (negative for groups), Parse Mode (HTML/Markdown/MarkdownV2)
- Slack — Webhook URL, Channel (#notifications), Username (default: Panelica)
- Discord — Webhook URL, Username (default: Panelica)
- HTTP — URL, Method (POST/PUT/PATCH), Custom Headers (JSON), Timeout (default: 30s)
- Email — To Addresses, CC Addresses, Subject Template
- User — user.created, user.updated, user.deleted, user.suspended, user.unsuspended, user.login, user.login_failed
- Domain — domain.created, domain.updated, domain.deleted, domain.suspended, domain.unsuspended
- SSL — ssl.issued, ssl.renewed, ssl.expired, ssl.expiring_soon
- Security — security.ip_blocked, security.ip_unblocked, security.brute_force_detected, security.modsec_triggered
- Backup — backup.created, backup.failed, backup.restored
- Database — database.created, database.deleted
- FTP — ftp.created, ftp.deleted
- Email — email.created, email.deleted
- System — system.service_started, system.service_stopped, system.backend_started, system.disk_warning, system.cpu_warning
Tab 2: Available Events
Browse all 9 event categories with their available events. Each event shows: Event ID (code formatted), Description, Category badge, and a Payload Example (JSON preview).
Tab 3: Examples
Code examples in multiple languages showing how to: validate webhook signatures, parse webhook payloads, and handle retries.
Tab 4: Recent Calls
Delivery history with charts: Delivery Status Distribution (donut: Success/Failed/Pending) and Average Response Time (fastest/slowest/total). Below the charts:
| Column | Description |
|---|---|
| Webhook | Name + destination type icon |
| Event | Event type (code formatted) |
| Status | Success / Failed / Pending / Retrying |
| Response | HTTP status code badge |
| Time | Response time in ms (green = fast, yellow = slow) |
| Date | Timestamp |
| Actions | Retry (failed only), View Details |
The detail modal shows: full request payload (JSON), response body, status code, response time, retry count, and error message if failed.
All webhook payloads (HTTP type) are signed with HMAC-SHA256. Verify with header X-Panelica-Signature:
$expected = hash_hmac('sha256', $payload, $secret); if ($expected === $receivedSignature) { // valid }
Cron Jobs
Schedule recurring tasks with domain-level and system-level cron jobs, templates, execution logging, and email notifications.
Navigate to Tools & Settings → Cron Jobs. This feature requires the cron_jobs license feature.
Statistics Cards
Seven cards at the top of the page:
| Card | Description |
|---|---|
| Domain Jobs | Total domain cron jobs with active/disabled badge counts |
| System Jobs | Total system cron jobs with active/disabled badge counts |
| Running Jobs | Jobs currently executing |
| Success Rate | Percentage of successful executions |
| Executions (24h) | Total executions in the last 24 hours |
The page has 4 tabs: Domain Cron Jobs, System Cron Jobs, Templates, and Logs.
1. Domain Cron Jobs Tab
Cron jobs associated with specific domains. Status filter buttons: All, Enabled (green), Disabled (gray).
| Column | Description |
|---|---|
| Task Name | Cron job name |
| Domain | Associated domain (clickable link) |
| Command | Full command to execute (code format) |
| Schedule | Human-readable schedule (e.g., “Every hour”) |
| Next Run | Countdown timer (HH:MM:SS) to next execution |
| Last Run | Formatted date/time of last execution |
| Status | Enabled or Disabled |
| Success Rate | Successes / total runs percentage |
| Actions | View Logs, Execute Now, Edit, Toggle, Delete |
Bulk Actions: Select multiple jobs with checkboxes, then: Execute Multiple, Enable All, Disable All, Delete All, or Clear All Logs. Each bulk action requires feature permission.
2. System Cron Jobs Tab
Server-wide cron jobs (ROOT only). Same table structure as domain cron jobs, plus additional fields:
- Run as User — Dropdown to select the system user that will execute the command
- Priority — 1–10 priority level
- Lock — Lock icon for system-protected jobs that cannot be modified
Expanded execution statistics per job: total runs, success count, failure count, average duration (ms), and last exit code.
Creating a Cron Job
Click Add Cron Job to open the creation modal:
php /home/user/example.com/artisan schedule:run)Job Actions
- Execute Now — Run the job immediately (shows running status)
- Edit — Modify schedule, command, and settings
- Enable / Disable — Toggle job execution
- View Logs — Opens expandable accordion with execution history per log entry: started at, duration (ms), exit code, status (success/failed), stdout (code block), stderr (code block), error message, triggered by
- Clear Logs — Remove execution log entries
- Delete — Remove the cron job
3. Templates Tab
Pre-built templates displayed as a card gallery, organized by 11 categories:
| Category | Icon | Example Templates |
|---|---|---|
| Backup | ri-hard-drive-2-line | Database backup, file backup |
| Cleanup | ri-delete-bin-line | Log cleanup, temp file cleanup |
| Monitoring | ri-pulse-line | Health check, uptime monitor |
| Security | ri-shield-check-line | Malware scan, SSL renewal check |
| CMS | ri-wordpress-fill | WordPress cron (wp-cron.php) |
| Framework | ri-code-box-fill | Laravel scheduler (artisan schedule:run) |
| Cache | ri-refresh-line | Cache clear, OPcache reset |
| SEO | ri-earth-line | Sitemap generation |
| Database | ri-database-2-line | MySQL optimize, backup rotation |
| Service | ri-server-line | Service restart, queue worker |
| Custom | ri-tools-line | Custom shell script |
Each template card shows icon, name, description, and category badge. Click Use Template to create a new cron job pre-filled with the template’s schedule, command, and timeout. Templates support placeholders: {DOMAIN}, {DOMAIN_PATH}, {PUBLIC_HTML}, {PHP_VERSION}, {USERNAME}.
4. Execution Logs Tab
Paginated history of all cron executions (50 per page). Status filter: All, Success (green), Error (red).
| Column | Description |
|---|---|
| Job Name | Cron job name |
| Domain/Type | Domain name or “System” |
| Command | Executed command (code format) |
| Started | Start timestamp |
| Duration | Human-readable duration (ms/s/m) |
| Status | Success or Error |
| Exit Code | Process exit code |
| Triggered By | Username who triggered (manual) or “Schedule” |
| Actions | View details (expand), Delete |
Click a row to expand and see full stdout/stderr output, error messages, and execution metadata.
Cron Expression Reference
| Field | Allowed Values | Example |
|---|---|---|
| Minute | 0-59 | */5 = every 5 minutes |
| Hour | 0-23 | 2 = 2:00 AM |
| Day of Month | 1-31 | 1 = first day |
| Month | 1-12 | */3 = quarterly |
| Day of Week | 0-7 (0,7=Sun) | 1-5 = weekdays |
$ panelica cron list $ panelica cron create --schedule="*/5 * * * *" --command="php /home/user/site/artisan schedule:run" $ panelica cron delete --id=3 $ panelica cron enable --id=3
SSH & Terminal
SSH key management with multiple key types, active session monitoring, web-based multi-tab terminal, and SSH configuration.
SSH Keys Tab
Navigate to Access → SSH Access. This feature requires the ssh_access license feature.
| Column | Description |
|---|---|
| Key Name | Descriptive name for the key |
| Type | RSA, ED25519, ECDSA, or DSA |
| Fingerprint | SHA256 hash for identification |
| User/Owner | Associated system user |
| Created | When the key was added |
| Last Used | Last authentication timestamp |
| Status | Active / Inactive / Revoked |
| Actions | Edit, Delete, Revoke, Copy, Download |
Adding a Key: Click Add Key to paste an existing public key, or Generate to create a new key pair (private key is downloaded once). Select key type, assign to a user, and set permissions.
Active Sessions Tab
View currently connected SSH sessions in real-time:
| Column | Description |
|---|---|
| Username | Connected user |
| Client IP | Client IP address |
| Terminal | Terminal type |
| Login Time | Connection start time |
| Duration | Session duration |
| Status | Connected / Disconnected |
| Actions | Terminate, View Logs |
Bulk: Terminate Selected Sessions, Logout All Users.
SSH Configuration Tab
Server-wide SSH daemon settings:
| Setting | Options | Description |
|---|---|---|
| PermitRootLogin | yes / no / without-password | Allow root SSH login |
| PasswordAuthentication | Toggle | Allow password-based login |
| PubkeyAuthentication | Toggle | Allow SSH key login |
| SSH Port | Number | SSH listening port |
| MaxAuthTries | Number | Maximum authentication attempts |
| X11Forwarding | Toggle | Allow X11 display forwarding |
| AllowTcpForwarding | Toggle | Allow TCP port forwarding |
| UseDNS | Toggle | DNS lookup for connecting clients |
Configuration backups are created automatically. You can Restore from a previous backup or Download the current config.
Web Terminal
Navigate to Access → Web Terminal for a full browser-based terminal powered by xterm.js:
- Multi-tab sessions — Open multiple terminal tabs simultaneously
- Local Terminal — Direct PTY connection to the server
- SSH Connections — Save and connect to remote servers via SSH
- Dark theme with Neovim-like color scheme and monospace fonts (Monaco, Fira Code, JetBrains Mono)
- Auto-reconnect on connection loss
- Responsive sizing — Terminal resizes with browser window
Saved SSH Connections: Create and manage SSH connection profiles with name, host, port, username, and authentication type (password or private key). Test, edit, or delete saved connections.
$ panelica ssh keys list $ panelica ssh keys add --key="ssh-ed25519 AAAA... user@host" $ panelica ssh keys generate --type=ed25519
Connection Details
# SSH connection ssh username@server-ip -p 22 # Using SSH key ssh -i ~/.ssh/id_ed25519 username@server-ip
SSH access is controlled by the user's hosting plan (ssh_access feature). Users connect to their chroot jail environment and can only see their own files and processes.
Panel Settings
Global server and panel configuration with 12 category tabs. Available to ROOT users only.
Navigate to Tools & Settings → Panel Settings. The settings dashboard shows 12 category cards. Click any card to open that settings tab.
Settings Categories
| Category | Icon | Description |
|---|---|---|
| General | ri-settings-3-line | Admin email, hostname, timezone, maintenance mode, session configuration |
| Branding | ri-brush-line | White-label customization (requires white_label feature) |
| Security | ri-shield-check-line | 2FA enforcement, password policies, audit logging, session binding |
| Rate Limit | ri-speed-line | Login, user creation, and API rate limiting per plan |
| Performance | ri-bar-chart-line | Disk usage and bandwidth cache settings |
| Resource Isolation | ri-cpu-line | Cgroups v2 resource isolation configuration |
| Monitoring | ri-bar-chart-grouped-line | Monitoring and alerting configuration |
| IP Addresses | ri-global-line | Server IP management, NAT mapping |
| Services | ri-server-line | Web, mail, database, DNS, FTP, security services |
| Backup | ri-folder-shield-line | Backup retention, encryption, and rate limiting |
| Notifications | ri-notification-3-line | Email, in-panel, and webhook notification channels |
| Languages | ri-translate-2 | Multi-language support (20+ languages) |
General Settings
Basic server and session configuration:
| Setting | Type | Description |
|---|---|---|
| Admin Email | Text | Primary administrator email address |
| Server Hostname | Text | Server hostname for identification |
| Panel Timezone | Text | Server timezone setting |
| Maintenance Mode | Toggle | Enable/disable maintenance mode |
Session Configuration:
| Setting | Type | Description |
|---|---|---|
| Session Duration | Number | Session lifetime in minutes |
| Access Token Duration | Number | API access token expiry |
| Refresh Token Duration | Number | API refresh token expiry |
| Remember Me Duration | Number | "Remember me" cookie lifetime |
| Max Sessions Per User | Number | Concurrent session limit |
| Session Inactivity Timeout | Number | Idle timeout before logout |
| Auto Refresh Enabled | Toggle | Automatically refresh tokens before expiry |
| Refresh Before Expiry | Number | Seconds before expiry to trigger refresh |
Security Settings
Two-Factor Authentication:
- Enforce 2FA for ROOT — Require TOTP for root users
- Enforce 2FA for Reseller — Require TOTP for reseller users
Password Policy:
| Setting | Description |
|---|---|
| Minimum Length | Minimum password character count |
| Require Uppercase | At least one uppercase letter |
| Require Numbers | At least one digit |
| Require Special Characters | At least one special character |
Session Security:
- Session IP Binding — Lock session to originating IP address
- Concurrent Login Prevention — Prevent simultaneous logins from different locations
Audit Logging:
| Setting | Description |
|---|---|
| Audit Enabled | Enable/disable audit logging system |
| Retention Days | How many days to keep audit logs |
| Log User Actions | Track user operations |
| Log Admin Actions | Track administrator operations |
| Log Failed Operations | Record failed action attempts |
Reserved Usernames: Enable and maintain a list of usernames that cannot be registered (e.g., admin, root, system).
User Deletion Policy: Configure whether user deletion is immediate or has a grace period (configurable days) before permanent removal.
Rate Limiting
Login Rate Limiting:
| Setting | Description |
|---|---|
| Rate Limit Enabled | Enable/disable login rate limiting |
| Max Login Attempts | Maximum failed attempts before lockout |
| Login Lockout Duration | Lockout time in minutes |
| Rate Limit Window | Time window for counting attempts |
User Creation Rate Limiting: Prevent mass account creation by limiting the number of users that can be created per hour, with configurable lockout duration.
API Rate Limiting (Per Plan): Set per-minute, per-hour, and burst limits individually for each plan tier (Starter, Professional, Business, Enterprise).
Performance Settings
| Setting | Type | Description |
|---|---|---|
| Disk Usage Cache Enabled | Toggle | Cache disk usage calculations |
| Disk Usage Cache TTL | Number | Cache lifetime in seconds |
| Bandwidth Cache Enabled | Toggle | Cache bandwidth statistics |
| Bandwidth Cache TTL | Number | Cache lifetime in seconds |
Resource Isolation
Cgroups v2 resource isolation configuration (requires resource_isolation_controls license feature):
| Setting | Type | Description |
|---|---|---|
| Resource Isolation Enabled | Toggle | Enable/disable Cgroups v2 resource isolation globally |
Monitoring Settings
Configure monitoring and alerting thresholds from the Monitoring tab:
- Real-time monitoring — Enable/disable real-time resource monitoring
- Alert thresholds — CPU, RAM, disk, and bandwidth warning levels
- Monitoring interval — Data collection frequency
- Retention period — How long to keep historical monitoring data
Services Management
Manage all server services from the Services tab. Each service shows a status indicator (Running / Stopped / Error) with restart controls:
- Web Servers — Nginx, Apache configuration and restart controls
- Mail Services — Postfix, Dovecot, SpamAssassin settings
- Database — MySQL, PostgreSQL global settings
- DNS — BIND named server configuration
- FTP — ProFTPD server settings
- Security — Fail2ban, ClamAV, ModSecurity global config
Each service row has: Enable/Disable toggle, Restart button, Reload button, and Configure link to service-specific settings.
Backup Settings
General Settings:
| Setting | Type | Description |
|---|---|---|
| Retention Days | Number (1-365) | How long to keep backups (default: 10) |
| Storage Path | Read-only | /opt/panelica/var/backups/server/ |
Security:
| Setting | Type | Description |
|---|---|---|
| Encryption Enabled | Toggle | Encrypt backup files |
| Delete Confirmation Required | Toggle | Require extra confirmation for backup deletion |
Rate Limiting:
| Setting | Type | Description |
|---|---|---|
| Create Rate Limit | Toggle + Number | Maximum backups created per hour (default: 5) |
| Restore Rate Limit | Toggle + Number | Maximum restores per hour (default: 5) |
| Restore Concurrent Limit | Number | Maximum simultaneous restore operations (default: 2) |
| Verify Checksum on Restore | Toggle | Verify backup integrity before restoring |
| Require Password for Restore | Toggle | Require password confirmation for restore operations |
Defaults:
| Setting | Type | Options |
|---|---|---|
| Default Backup Type | Select | Full or Incremental |
| Compression Level | Select | 1 (Fast), 6 (Balanced), 9 (Maximum) |
Branding & White Label
Customize the panel appearance from the Branding tab (requires white_label license feature):
| Setting | Type | Description |
|---|---|---|
| Panel Name | Text | Custom panel name displayed in header |
| Company Name | Text | Company name for branding |
| Logo (Light Mode) | File upload | Drag-and-drop logo for light theme. Preview + delete. |
| Logo (Dark Mode) | File upload | Separate logo for dark theme |
| Favicon | File upload | Browser tab icon |
| Primary Color | Color picker | Hex color input for primary accent color |
| Logo Height | Number | Logo display height in pixels |
| Footer Text | Text | Custom footer text |
| Hide Panelica Branding | Toggle | Remove Panelica branding from the panel |
After saving, click Reset to Defaults to revert all branding to Panelica defaults. Changes auto-regenerate branding files.
IP Address Management
Manage server IP addresses from the IP Addresses tab:
- Add IP — Register shared or dedicated IP addresses
- Assign IPs — Assign IPs to specific users or domains
- NAT Mapping — Configure internal/external IP mapping for cloud environments (AWS, GCP, etc.)
- Whitelist/Blacklist — IP-based access control lists
- Network Interface — View and manage network interface bindings
Notification Settings
Configure system notification channels from the Notifications tab:
- Email Notifications — Enable/disable email delivery, configure SMTP templates
- In-Panel Notifications — Real-time in-panel notification bell
- Webhook Notifications — Send alerts to external URLs (Slack, Telegram, etc.)
Configure triggers for: disk full, service down, security alerts, user actions, backup completion, SSL expiry, and more. Each event type can be independently enabled/disabled per channel.
Multi-Language
Panelica supports 20+ languages including English, Turkish, German, French, Spanish, Portuguese, Russian, Chinese, Japanese, Korean, Arabic, and more.
- Default Language — Select the server-wide default language
- Available Languages — Enable/disable languages users can select
- Translation Key Editor — Edit individual translation strings
- Translation Scanner — Scan for missing translation keys
- Language Pack Management — Import/export language packs
$ panelica settings list $ panelica settings set --key="admin_email" --value="[email protected]" $ panelica settings get --key="maintenance_mode"
System Updates
Manage service versions, apply updates, view changelogs, and rollback across all server components.
Navigate to Support → System Updates. The page displays 4 summary cards at the top:
| Card | Description |
|---|---|
| Total Services | Number of tracked services/packages |
| Up to Date | Services running the latest version Green |
| Updates Available | Services with newer versions available Yellow |
| Categories | Number of service categories |
Available Updates
When updates are available, they appear in a table with the following columns:
| Column | Description |
|---|---|
| Package | Display name and package identifier |
| Current Version | Currently installed version |
| Latest Version | Newest available version |
| Channel | Stable / Beta / Dev |
| Size | Download size of the update |
| Security | Security update indicator with severity level (if applicable) |
| Actions | Update button to apply the update |
Toolbar buttons: Check Again (refresh available updates), Expand All / Collapse All (manage category sections), Refresh (refresh service versions).
Installed Services
All installed services are grouped into collapsible category accordions. Each category shows a badge with the service count and whether updates are available.
| Category | Examples |
|---|---|
| Web | Nginx, Apache, Caddy |
| Database | MySQL, MariaDB, PostgreSQL, Redis |
| Runtime | PHP versions, Node.js, Python |
| Postfix, Dovecot, SpamAssassin | |
| FTP | ProFTPD, vsftpd |
| DNS | BIND, PowerDNS |
| Security | Fail2ban, ClamAV, ModSecurity |
| Monitoring | Panelica Monitor |
| WebApps | phpMyAdmin, Roundcube |
| Panel | Panelica Panel, License Agent |
Each service within a category shows: service name, current version, status badge (Up to Date or Update Available), and action buttons (Update, Rollback).
Update Process
$ panelica update check $ panelica update install $ panelica update rollback $ panelica update channel --set=stable
Release Channels
| Channel | Stability | Description |
|---|---|---|
| Stable | Production-ready | Thoroughly tested releases. Recommended for production servers. |
| Beta | Near-stable | Upcoming features with minor issues possible. Good for staging. |
| Alpha | Development | Latest features, may have bugs. For testing environments only. |
Rollback
Panelica uses a WAL-based update system with automatic rollback support. If an update fails or causes issues, revert to the previous version.
Click the Rollback button next to a service. A confirmation modal warns that the service will be restored from the latest backup and restarted. Health checks run after every update; if they fail, the system rolls back automatically.
Changelog
View the complete version history at Support → Changelog. Each release entry shows a timeline with version number, release date, release type (major/minor/patch), and a summary. Changes are color-coded by type:
| Type | Color | Description |
|---|---|---|
| New | Green | New features and capabilities |
| Improved | Blue | Enhancements to existing features |
| Fixed | Yellow | Bug fixes |
| Breaking | Red | Changes that may require action |
| Security | Red | Security patches |
| Deprecated | Gray | Features scheduled for removal |
Package Manager
Search, install, upgrade, and uninstall system packages from the panel. This feature requires the package_manager license feature. Available to ROOT users only.
Navigate to Tools & Settings → Package Manager. The page has 3 tabs and a category sidebar.
Package Categories
The left sidebar filters packages by category:
| Category | Icon | Examples |
|---|---|---|
| All Packages | ri-apps-line | All available packages |
| Media & Graphics | ri-film-line | ffmpeg, ffmpegthumbnailer, imagemagick |
| Development | ri-code-s-slash-line | nodejs, python3-pip, git |
| Web Servers | ri-server-line | nginx, apache2, caddy |
| Databases | ri-database-2-line | mysql, mariadb, redis |
| Network Tools | ri-global-line | curl, wget, nmap |
| System Tools | ri-settings-3-line | htop, tmux, screen |
| Security | ri-shield-check-line | fail2ban, clamav, ufw |
| Utilities | ri-tools-line | unzip, zip, tar |
Search Tab
Search for packages by name or description. Results appear as you type (with debounce). A Popular Packages section shows 12 commonly used packages for quick installation:
- ffmpeg — Media transcoding and processing
- imagemagick — Image manipulation toolkit
- nodejs — JavaScript runtime
- python3-pip — Python package manager
- git — Version control system
- htop — Interactive process viewer
- curl / wget — URL transfer tools
- unzip / zip — Archive utilities
- screen — Terminal multiplexer
Each result shows the package name, description, installation status badge, and an Install button. Results are paginated (20 per page).
Installed Tab
View all currently installed packages (badge in tab header shows total count). Search field with debounced filtering.
| Column | Description |
|---|---|
| Package Name | Package name |
| Version | Current installed version (code format) |
| Size | Package size on disk |
| Dependencies | Number of package dependencies |
| Actions | Remove and Info buttons |
Paginated at 50 items per page.
Upgradable Tab
Packages with available upgrades. Risk filter buttons at the top with count badges:
- Critical — Security-critical upgrades (red)
- High — High-priority upgrades (orange)
- Medium — Standard upgrades (blue)
- Low — Minor version bumps (green)
When a risk filter is selected, the apt upgrade command for those packages is shown with a Copy button and a Terminal link button for direct execution.
| Column | Description |
|---|---|
| Package | Package name |
| Current Version | Currently installed version (code format) |
| New Version | Available upgrade version (code format) |
| Risk Level | Color-coded badge |
| Actions | Upgrade and View Details buttons |
Installation Progress
During install, upgrade, or uninstall operations, a progress modal shows: operation description, progress percentage, progress bar, and status indicator (In Progress / Completed / Failed).
$ panelica packages search --name="ffmpeg" $ panelica packages install --name="ffmpeg" $ panelica packages uninstall --name="ffmpeg" $ panelica packages upgradable $ panelica packages upgrade --name="curl"
Server Info
Comprehensive hardware and software information about the server across 5 tabs: System, CPU, Memory, Storage, and Network.
Navigate to Tools & Settings → Server Info. The page shows 4 overview cards at the top:
| Card | Description |
|---|---|
| System | OS name and architecture |
| CPU | Core count and thread count |
| Memory | Usage percentage with progress bar |
| Uptime | Days, hours, and minutes since last reboot |
System Tab
| Field | Description |
|---|---|
| Hostname | Server hostname |
| Operating System | OS version and codename |
| Kernel | Linux kernel version |
| Architecture | CPU architecture (x86_64, aarch64, etc.) |
| Timezone | Server timezone |
| Uptime | System uptime |
| Load Average | 1, 5, and 15 minute load averages (color-coded badges) |
| Virtualization | KVM, VMware, Xen, LXC, Docker, or Bare Metal |
| System Vendor | Hardware manufacturer |
| System Product | Server model/product name |
| BIOS Version | Firmware version |
A side panel shows server status (Online / Offline) and running time.
CPU Tab
CPU Information:
| Field | Description |
|---|---|
| Model | CPU model name |
| Cores | Physical core count |
| Threads | Total thread count (including hyper-threading) |
| Sockets | Number of CPU sockets |
| Current Frequency | Current clock speed in MHz |
| Max Frequency | Maximum turbo clock speed in MHz |
| Temperature | CPU temperature with color badge: Normal / Warm / Hot |
Cache Information: L1 Data, L1 Instruction, L2, and L3 cache sizes.
Memory Tab
Memory (RAM):
| Field | Description |
|---|---|
| Total | Total RAM in GB |
| Used | Used RAM in GB |
| Free | Free RAM in GB |
| Available | Available RAM in GB (free + reclaimable) |
| Cached | Cached memory in GB |
| Buffers | Buffer memory in GB |
| Usage % | Usage percentage with color-coded progress bar |
Swap: Total, Used, and Free swap space in GB.
A donut chart shows memory distribution: Used, Cached, Buffers, and Free.
Storage Tab
| Column | Description |
|---|---|
| Device | Disk name and model |
| Mount Point | Filesystem mount point (e.g., /, /home) |
| Type | SSD / HDD |
| Size | Total capacity in GB |
| Used | Used space in GB |
| Available | Available space in GB |
| Usage % | Progress bar with color coding (green < 70%, orange < 90%, red ≥ 90%) |
A donut chart provides a visual overview of storage usage per mount point.
Network Tab
| Column | Description |
|---|---|
| Interface | Network interface name (e.g., eth0, ens18) |
| Status | Up / Down |
| IP Address | IPv4 address (and IPv6 if available) |
| MAC Address | Hardware MAC address |
| RX Bytes | Total received data (formatted) |
| TX Bytes | Total transmitted data (formatted) |
| Speed | Interface speed (e.g., 1000 Mbps) |
$ panelica info system $ panelica info cpu $ panelica info memory $ panelica info disk $ panelica info network
CLI Reference
Complete command-line reference for the panelica binary at /opt/panelica/bin/panelica.
Domain Commands
$ panelica domains list $ panelica domains create --domain=example.com --user=johndoe --php=8.3 $ panelica domains delete --domain=example.com $ panelica domains suspend --domain=example.com $ panelica subdomains create --domain=example.com --subdomain=blog
User Commands
$ panelica users list $ panelica users create --username=johndoe --email=[email protected] --role=user --plan=starter $ panelica users delete --username=johndoe $ panelica users suspend --username=johndoe $ panelica users change-password --username=johndoe
PHP Commands
$ panelica php versions $ panelica php switch --domain=example.com --version=8.4 $ panelica php extensions --version=8.3 $ panelica php install-extension --version=8.3 --extension=redis
Database Commands
$ panelica db list $ panelica db create --name=mydb --user=johndoe $ panelica db delete --name=johndoe_mydb
Email Commands
$ panelica email list --domain=example.com $ panelica email create --account=[email protected] --password=SecurePass $ panelica email delete --account=[email protected]
SSL Commands
$ panelica ssl issue --domain=example.com $ panelica ssl renew --domain=example.com $ panelica ssl status --domain=example.com
Backup Commands
$ panelica backup create --type=full $ panelica backup create --domain=example.com $ panelica backup list $ panelica backup restore --file=backup_20260213.tar.gz
Service Commands
$ panelica services list $ panelica services restart --name=nginx $ panelica services stop --name=apache $ panelica services start --name=apache
Security Commands
$ panelica security scan # Run security advisor $ panelica security firewall-status $ panelica security block-ip --ip=1.2.3.4 --reason="Malicious" --duration=24h
License Commands
$ panelica license status $ panelica license activate PNLC-XXXX-XXXX-XXXX-XXXX $ panelica license deactivate $ panelica license features