Add comprehensive Plesk control panel support
Core Infrastructure Added: - lib/plesk-helpers.sh: 30+ Plesk-specific helper functions - Domain discovery (list, docroot, logdir, access/error logs) - User/subscription management - Database discovery - PHP version detection (/opt/plesk/php/) - PHP-FPM pool discovery - Configuration file locations - Mail functions - Service management - Version detection with log structure handling - lib/domain-discovery.sh: Unified control panel abstraction - Consistent API across cPanel, Plesk, InterWorx, standalone - list_all_domains() - works on any panel - get_domain_docroot() - panel-agnostic document root - get_domain_logdir() - panel-agnostic log discovery - get_domain_access_log() - access log paths - get_domain_error_log() - error log paths - get_all_log_files() - all logs across all domains - get_domain_owner() - domain owner/user - list_all_users() - user enumeration - get_domain_fpm_socket() - PHP-FPM pool sockets - get_domain_databases() - database discovery - domain_exists() - existence checks Documentation: - PLESK_REFERENCE.md: Complete Plesk architecture reference - Directory structure mapping - Log file locations (current & future versions) - PHP-FPM pool locations - Configuration file paths - Plesk CLI command reference - Key differences from cPanel - Subdomain handling differences - PLESK_SUPPORT_SUMMARY.md: Implementation summary - All functions documented - Usage examples - Migration guide for existing modules - Version compatibility notes - Testing checklist System Detection Enhanced: - lib/system-detect.sh: - Improved Plesk detection with version-aware log paths - Auto-sources plesk-helpers.sh when Plesk detected - Added /opt/plesk/php/ scanning for PHP versions - Sets SYS_USER_HOME_BASE=/var/www/vhosts for Plesk Email Menu Added: - launcher.sh: New Email Troubleshooting menu category - 9 email diagnostic/maintenance tools (placeholders) - Deliverability test, queue inspector, SMTP test - SPF/DKIM/DMARC check, blacklist check - Mail log analyzer, queue flush - Mailbox cleanup, size reports Plesk Architecture Support: - /var/www/vhosts/ base directory structure - system/DOMAIN/logs/ for Plesk <18.0.50 - DOMAIN/logs/ for Plesk 18.0.50+ - Automatic version detection - Subdomain separate directory handling - /opt/plesk/php/X.Y/ PHP version detection - /var/www/vhosts/system/DOMAIN/php-fpm.sock pools - /var/www/vhosts/system/DOMAIN/conf/ configs Fallback Mechanisms: - All functions work with or without Plesk CLI - Directory scanning fallbacks - MySQL direct query fallbacks - Path inference from standard locations Status: Core infrastructure complete, ready for module integration Next: Test on actual Plesk server, update existing modules Ref: system_map.tsv analysis from Plesk production system
This commit is contained in:
@@ -0,0 +1,322 @@
|
||||
# Plesk Support Implementation Summary
|
||||
|
||||
## Overview
|
||||
|
||||
Comprehensive Plesk control panel support has been added to the Server Toolkit. The toolkit now fully supports cPanel, Plesk, InterWorx, and standalone server configurations.
|
||||
|
||||
## Files Added
|
||||
|
||||
### 1. `/root/server-toolkit/PLESK_REFERENCE.md`
|
||||
Complete Plesk paths and structure reference documentation including:
|
||||
- Directory structure mapping
|
||||
- Log file locations (both current and future versions)
|
||||
- PHP-FPM pool locations
|
||||
- Configuration file paths
|
||||
- CLI command reference
|
||||
- Key differences from cPanel
|
||||
|
||||
### 2. `/root/server-toolkit/lib/plesk-helpers.sh`
|
||||
Plesk-specific helper functions library with 30+ functions:
|
||||
|
||||
**Domain Discovery:**
|
||||
- `plesk_list_domains()` - List all domains
|
||||
- `plesk_get_docroot()` - Get document root
|
||||
- `plesk_get_logdir()` - Get log directory (version-aware)
|
||||
- `plesk_get_all_logdirs()` - Get all domain log directories
|
||||
- `plesk_get_access_log()` - Get access log path
|
||||
- `plesk_get_error_log()` - Get error log path
|
||||
- `plesk_domain_exists()` - Check if domain exists
|
||||
|
||||
**User/Subscription Management:**
|
||||
- `plesk_list_subscriptions()` - List all subscriptions
|
||||
- `plesk_get_owner()` - Get domain owner
|
||||
|
||||
**Database Discovery:**
|
||||
- `plesk_list_databases()` - List all databases
|
||||
- `plesk_list_domain_databases()` - List databases for domain
|
||||
|
||||
**PHP Detection:**
|
||||
- `plesk_list_php_handlers()` - List available PHP handlers
|
||||
- `plesk_get_domain_php()` - Get PHP version for domain
|
||||
- `plesk_detect_php_versions()` - Detect all Plesk PHP versions
|
||||
|
||||
**PHP-FPM Pools:**
|
||||
- `plesk_list_fpm_sockets()` - List all FPM sockets
|
||||
- `plesk_get_fpm_socket()` - Get FPM socket for domain
|
||||
|
||||
**Configuration Files:**
|
||||
- `plesk_get_confdir()` - Get config directory
|
||||
- `plesk_get_httpd_conf()` - Get Apache config
|
||||
- `plesk_get_nginx_conf()` - Get Nginx config
|
||||
- `plesk_get_php_ini()` - Get PHP config
|
||||
|
||||
**Mail Functions:**
|
||||
- `plesk_get_mailbox_dir()` - Get mailbox directory
|
||||
- `plesk_list_mailboxes()` - List mailboxes for domain
|
||||
|
||||
**Service Management:**
|
||||
- `plesk_restart_apache()` - Restart Apache
|
||||
- `plesk_restart_nginx()` - Restart Nginx
|
||||
- `plesk_restart_phpfpm()` - Restart PHP-FPM
|
||||
|
||||
**Utilities:**
|
||||
- `plesk_get_version()` - Get Plesk version
|
||||
- `plesk_is_new_log_structure()` - Check if Plesk 18.0.50+
|
||||
- `plesk_list_domains_with_docroots()` - Get domains with docroots as TSV
|
||||
|
||||
### 3. `/root/server-toolkit/lib/domain-discovery.sh`
|
||||
Unified control panel abstraction layer providing consistent interface across all panels:
|
||||
|
||||
**Universal Functions (Work on All Panels):**
|
||||
- `list_all_domains()` - List all domains
|
||||
- `get_domain_docroot()` - Get document root
|
||||
- `get_domain_logdir()` - Get log directory
|
||||
- `get_domain_access_log()` - Get access log path
|
||||
- `get_domain_error_log()` - Get error log path
|
||||
- `get_all_log_files()` - Get all log files
|
||||
- `get_domain_owner()` - Get domain owner
|
||||
- `list_all_users()` - List all users
|
||||
- `get_domain_fpm_socket()` - Get PHP-FPM socket
|
||||
- `get_all_fpm_sockets()` - Get all FPM sockets
|
||||
- `get_domain_databases()` - Get domain databases
|
||||
- `domain_exists()` - Check if domain exists
|
||||
- `list_domains_with_docroots()` - Get domains with docroots
|
||||
|
||||
**How It Works:**
|
||||
- Each function detects `$SYS_CONTROL_PANEL` and calls appropriate panel-specific code
|
||||
- Provides consistent API regardless of control panel
|
||||
- Includes fallback methods when panel CLI unavailable
|
||||
|
||||
## Files Modified
|
||||
|
||||
### 1. `/root/server-toolkit/lib/system-detect.sh`
|
||||
|
||||
**Plesk Detection Enhancement (lines 56-77):**
|
||||
```bash
|
||||
# Plesk
|
||||
if [ -f "/usr/local/psa/version" ]; then
|
||||
SYS_CONTROL_PANEL="plesk"
|
||||
SYS_CONTROL_PANEL_VERSION=$(cat /usr/local/psa/version | head -1)
|
||||
|
||||
# Plesk uses /var/www/vhosts as base
|
||||
SYS_USER_HOME_BASE="/var/www/vhosts"
|
||||
|
||||
# Log directory depends on Plesk version
|
||||
# Plesk 18.0.50+ uses /var/www/vhosts/DOMAIN/logs
|
||||
# Plesk <18.0.50 uses /var/www/vhosts/system/DOMAIN/logs
|
||||
# Set marker path - tools will use plesk_get_logdir() for actual path
|
||||
SYS_LOG_DIR="/var/www/vhosts/system"
|
||||
|
||||
# Source Plesk helpers for advanced functionality
|
||||
if [ -f "$LIB_DIR/plesk-helpers.sh" ]; then
|
||||
source "$LIB_DIR/plesk-helpers.sh"
|
||||
fi
|
||||
|
||||
print_success "Detected Plesk v${SYS_CONTROL_PANEL_VERSION}"
|
||||
return 0
|
||||
fi
|
||||
```
|
||||
|
||||
**PHP Detection Enhancement (lines 253-261):**
|
||||
```bash
|
||||
# Check Plesk PHP versions (/opt/plesk/php/)
|
||||
if [ "$SYS_CONTROL_PANEL" = "plesk" ]; then
|
||||
for php_path in /opt/plesk/php/*/bin/php; do
|
||||
if [ -x "$php_path" ]; then
|
||||
local full_version=$($php_path -v 2>/dev/null | grep -oP '^PHP \K[\d.]+' | head -1)
|
||||
[ -n "$full_version" ] && SYS_PHP_VERSIONS+=("$full_version")
|
||||
fi
|
||||
done
|
||||
fi
|
||||
```
|
||||
|
||||
## Key Plesk Architecture Differences
|
||||
|
||||
### 1. Directory Structure
|
||||
- **cPanel:** `/home/USER/public_html/`
|
||||
- **Plesk:** `/var/www/vhosts/DOMAIN/httpdocs/`
|
||||
|
||||
### 2. Log Files
|
||||
- **cPanel:** `/var/log/apache2/domlogs/DOMAIN`
|
||||
- **Plesk (current):** `/var/www/vhosts/system/DOMAIN/logs/`
|
||||
- **Plesk (18.0.50+):** `/var/www/vhosts/DOMAIN/logs/`
|
||||
|
||||
### 3. Subdomain Handling
|
||||
- **cPanel:** Subdomains under main domain: `/home/USER/public_html/subdomain/`
|
||||
- **Plesk:** Separate directories: `/var/www/vhosts/sub.domain.com/httpdocs/`
|
||||
|
||||
### 4. PHP Versions
|
||||
- **cPanel:** `/opt/cpanel/ea-phpXX/root/usr/bin/php`
|
||||
- **Plesk:** `/opt/plesk/php/X.Y/bin/php`
|
||||
|
||||
### 5. PHP-FPM Pools
|
||||
- **cPanel:** `/opt/cpanel/ea-phpXX/root/usr/var/run/*.sock`
|
||||
- **Plesk:** `/var/www/vhosts/system/DOMAIN/php-fpm.sock`
|
||||
|
||||
### 6. Configuration Files
|
||||
- **cPanel:** `/var/cpanel/userdata/USER/DOMAIN`
|
||||
- **Plesk:** `/var/www/vhosts/system/DOMAIN/conf/`
|
||||
|
||||
## Version Compatibility
|
||||
|
||||
### Plesk Obsidian 17.x
|
||||
- Logs in `/var/www/vhosts/system/DOMAIN/logs/`
|
||||
- Fully supported
|
||||
|
||||
### Plesk Obsidian 18.0.0 - 18.0.49
|
||||
- Logs in `/var/www/vhosts/system/DOMAIN/logs/`
|
||||
- Fully supported
|
||||
|
||||
### Plesk Obsidian 18.0.50+
|
||||
- Logs moved to `/var/www/vhosts/DOMAIN/logs/`
|
||||
- Auto-detected via `plesk_is_new_log_structure()`
|
||||
- Functions check both locations
|
||||
|
||||
## Usage Examples
|
||||
|
||||
### Using Plesk-Specific Functions
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
source /root/server-toolkit/lib/system-detect.sh
|
||||
source /root/server-toolkit/lib/plesk-helpers.sh
|
||||
|
||||
# List all domains
|
||||
for domain in $(plesk_list_domains); do
|
||||
echo "Domain: $domain"
|
||||
|
||||
# Get paths
|
||||
docroot=$(plesk_get_docroot "$domain")
|
||||
logdir=$(plesk_get_logdir "$domain")
|
||||
|
||||
echo " Document root: $docroot"
|
||||
echo " Log directory: $logdir"
|
||||
done
|
||||
```
|
||||
|
||||
### Using Unified Discovery Functions
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
source /root/server-toolkit/lib/system-detect.sh
|
||||
source /root/server-toolkit/lib/domain-discovery.sh
|
||||
|
||||
# Works on ANY control panel (cPanel, Plesk, InterWorx, or standalone)
|
||||
for domain in $(list_all_domains); do
|
||||
echo "Domain: $domain"
|
||||
|
||||
docroot=$(get_domain_docroot "$domain")
|
||||
access_log=$(get_domain_access_log "$domain")
|
||||
owner=$(get_domain_owner "$domain")
|
||||
|
||||
echo " Owner: $owner"
|
||||
echo " Document root: $docroot"
|
||||
echo " Access log: $access_log"
|
||||
done
|
||||
```
|
||||
|
||||
## Migration Guide for Existing Modules
|
||||
|
||||
### OLD: cPanel-Specific Code
|
||||
```bash
|
||||
# Only works on cPanel
|
||||
for domain in $(awk -F': ' '{print $1}' /etc/userdomains); do
|
||||
user=$(grep "^${domain}:" /etc/userdomains | awk -F': ' '{print $2}')
|
||||
docroot="/home/$user/public_html"
|
||||
# ...
|
||||
done
|
||||
```
|
||||
|
||||
### NEW: Panel-Agnostic Code
|
||||
```bash
|
||||
# Works on all panels
|
||||
source "$LIB_DIR/domain-discovery.sh"
|
||||
|
||||
for domain in $(list_all_domains); do
|
||||
owner=$(get_domain_owner "$domain")
|
||||
docroot=$(get_domain_docroot "$domain")
|
||||
# ...
|
||||
done
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Test on Plesk System
|
||||
```bash
|
||||
# Run test script
|
||||
bash /root/test-plesk-discovery.sh
|
||||
```
|
||||
|
||||
### Verify Detection
|
||||
```bash
|
||||
source /root/server-toolkit/lib/system-detect.sh
|
||||
|
||||
echo "Control Panel: $SYS_CONTROL_PANEL"
|
||||
echo "Version: $SYS_CONTROL_PANEL_VERSION"
|
||||
echo "User Home Base: $SYS_USER_HOME_BASE"
|
||||
echo "Log Directory: $SYS_LOG_DIR"
|
||||
echo "PHP Versions: ${SYS_PHP_VERSIONS[*]}"
|
||||
```
|
||||
|
||||
## Fallback Mechanisms
|
||||
|
||||
All Plesk functions include fallback methods when Plesk CLI is unavailable:
|
||||
|
||||
1. **Domain Discovery:**
|
||||
- Primary: `plesk bin domain --list`
|
||||
- Fallback: Directory scan of `/var/www/vhosts/`
|
||||
|
||||
2. **Document Roots:**
|
||||
- Primary: `plesk bin domain --info DOMAIN`
|
||||
- Fallback: Standard path `/var/www/vhosts/DOMAIN/httpdocs`
|
||||
|
||||
3. **PHP Versions:**
|
||||
- Primary: `plesk bin php_handler --list`
|
||||
- Fallback: Scan `/opt/plesk/php/*/bin/php`
|
||||
|
||||
4. **Databases:**
|
||||
- Primary: `plesk bin database --list`
|
||||
- Fallback: Direct MySQL query with naming conventions
|
||||
|
||||
## Future Module Updates
|
||||
|
||||
The following modules should be updated to use the unified discovery functions:
|
||||
|
||||
1. ✅ **lib/system-detect.sh** - Updated
|
||||
2. ⏳ **modules/security/live-attack-monitor.sh** - Needs update
|
||||
3. ⏳ **modules/security/bot-analyzer.sh** - Needs update
|
||||
4. ⏳ **modules/security/malware-scanner.sh** - Needs update
|
||||
5. ⏳ **modules/website/** - Needs update for log discovery
|
||||
6. ⏳ **modules/performance/php-optimizer.sh** - Needs update for PHP-FPM
|
||||
7. ⏳ **lib/mysql-analyzer.sh** - Needs update for database discovery
|
||||
8. ⏳ **lib/user-manager.sh** - Needs update for user enumeration
|
||||
|
||||
## Status
|
||||
|
||||
✅ **Core Infrastructure Complete:**
|
||||
- Plesk detection and path mapping
|
||||
- 30+ Plesk helper functions
|
||||
- Unified discovery abstraction layer
|
||||
- Comprehensive documentation
|
||||
- Version compatibility handling
|
||||
- Fallback mechanisms
|
||||
|
||||
⏳ **Next Steps:**
|
||||
1. Test on actual Plesk server
|
||||
2. Update existing modules to use unified discovery
|
||||
3. Add Plesk-specific features where beneficial
|
||||
|
||||
## Testing Checklist
|
||||
|
||||
When testing on Plesk server:
|
||||
- [ ] Domain enumeration returns all domains
|
||||
- [ ] Document roots are correctly identified
|
||||
- [ ] Log files are found (both access and error)
|
||||
- [ ] PHP versions are detected from /opt/plesk/php/
|
||||
- [ ] PHP-FPM sockets are located
|
||||
- [ ] Configuration files are found
|
||||
- [ ] Owner/user mapping works
|
||||
- [ ] Database discovery functions
|
||||
- [ ] Version detection is accurate
|
||||
- [ ] Log structure detection (old vs new) works
|
||||
- [ ] All modules can find domains and logs
|
||||
Reference in New Issue
Block a user