Requirments
System Requirements
Document Version: 1.0.0
Last Updated: 2026-01-02
Applies To: ComusThumbz v1.11.14+
Overview
This document outlines all system requirements for running ComusThumbz successfully. Meeting these requirements ensures optimal performance, security, and full feature availability.
Before installing or upgrading ComusThumbz, verify your server meets ALL requirements listed in this document. The installer will check most of these automatically, but manual verification is recommended for production deployments.
Quick Compatibility Check
Minimum vs Recommended
PHP Requirements
PHP Version
Minimum Required: PHP 8.0
Recommended: PHP 8.3 or higher
PHP 7.x is NOT supported. Many features use PHP 8.0+ syntax including named arguments, nullsafe operators, and match expressions.
Required PHP Extensions
The following extensions MUST be installed and enabled:
Recommended PHP Extensions
These extensions enable additional features:
Enabling Missing Extensions
Ubuntu/Debian:
# Install common extensions
sudo apt-get install php8.3-gd php8.3-curl php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip php8.3-imagick
Restart PHP-FPM
sudo systemctl restart php8.3-fpm
CentOS/RHEL:
# Install common extensions
sudo yum install php-gd php-curl php-mbstring php-mysql php-xml php-zip php-pecl-imagick
Restart PHP-FPM
sudo systemctl restart php-fpm
cPanel/WHM:
Navigate to WHM > Software > EasyApache 4 > Customize > PHP Extensions
Required PHP Functions
CRITICAL: These functions must NOT be in
disablefunctions in php.ini. Many hosting providers disable these by default for security. You MUST enable them for ComusThumbz to function properly.Core Functions
Checking Disabled Functions
<?php
// Check which functions are disabled
$disabled = explode(',', iniget('disablefunctions'));
$required = ['exec', 'shellexec', 'passthru', 'procopen', 'popen'];
echo "Disabled functions check:\n";
foreach ($required as $func) {
$status = inarray($func, $disabled) ? '❌ DISABLED' : '✅ OK';
echo "$func: $status\n";
}
?>
Enabling Functions
Modifying
disablefunctions requires server-level access. Contact your hosting provider if you don't have root access.
Method 1: Edit php.ini directly
# Find your php.ini
php --ini
Edit the file
sudo nano /etc/php/8.3/fpm/php.ini
Find this line:
disablefunctions = exec,passthru,shellexec,system,procopen,popen...
Remove the functions you need (exec, shellexec, passthru, procopen, popen)
Restart PHP-FPM
sudo systemctl restart php8.3-fpm
Method 2: HestiaCP
- Log in to HestiaCP admin panel
- Go to Server > Configure > PHP (select your PHP version)
- Find
disablefunctionsdirective - Remove required functions from the list
- Click Save
- Restart PHP-FPM:
systemctl restart php8.3-fpm
Method 3: cPanel/WHM
Log in to WHMGo to MultiPHP INI EditorSelect your domain or use Editor Mode
- Find
disablefunctionsand remove required functions - Save changes
php.ini Configuration
Required Settings
Additional Recommended Settings
Example php.ini Settings
; ComusThumbz Recommended Settings
memorylimit = 512M
maxexecutiontime = 600
uploadmaxfilesize = 500M
postmaxsize = 500M
maxinputvars = 10000
maxfileuploads = 50
; Security
displayerrors = Off
logerrors = On
errorlog = /path/to/ct/logs/php-error.log
; Session Security
session.cookiesecure = On
session.cookiehttponly = On
session.cookiesamesite = Lax
session.gcmaxlifetime = 86400
; Timezone
date.timezone = America/NewYork
External Tools
FFmpeg (Required)
FFmpeg is REQUIRED for video processing. Without FFmpeg, video uploads will remain in "pending" status forever and no thumbnails, previews, or HLS segments will be generated.
Installing FFmpeg:
Ubuntu/Debian:
sudo apt update
sudo apt install ffmpeg
Verify installation
ffmpeg -version
ffprobe -version
CentOS/RHEL:
# Enable EPEL and RPM Fusion repositories
sudo yum install epel-release
sudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm
Install FFmpeg
sudo yum install ffmpeg ffmpeg-devel
Verify
ffmpeg -version
Windows (Development):
- Download from https://ffmpeg.org/download.html
- Extract to
C:\ffmpeg - Add
C:\ffmpeg\binto system PATH - Verify:
ffmpeg -version
Configuring FFmpeg Path:
In ct/dat/config.inc.php:
$ffmpegpath = '/usr/bin/ffmpeg'; // Linux default
$ffprobepath = '/usr/bin/ffprobe'; // Linux default
ImageMagick (Recommended)
ImageMagick provides higher-quality image processing than GD.
Installing ImageMagick:
Ubuntu/Debian:
sudo apt install imagemagick php-imagick
sudo systemctl restart php8.3-fpm
CentOS/RHEL:
sudo yum install ImageMagick ImageMagick-devel php-pecl-imagick
sudo systemctl restart php-fpm
Configuring ImageMagick Path:
In Admin Panel > Settings > Settings Control Center:
- Set ImageMagick to "ImageMagick On"
- Set ImageMagick Path to
/usr/bin/(include trailing slash)
Database Requirements
MySQL / MariaDB
Required Privileges
The database user needs these privileges:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, DROP, INDEX,
REFERENCES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE,
EVENT, TRIGGER
ON yourdatabase. TO 'youruser'@'localhost';
Database Settings
Checking Database Version
SELECT VERSION();
-- Should return: 8.0.x or 10.x.x (MariaDB)
SHOW VARIABLES LIKE 'charactersetserver';
-- Should return: utf8mb4
Web Server Requirements
Apache
Minimum Version: 2.4+
Required Modules:
Enabling Modules:
sudo a2enmod rewrite headers expires deflate ssl
sudo systemctl restart apache2
Required .htaccess Support:
Ensure AllowOverride All is set for your document root:
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
Nginx
Minimum Version: 1.18+
Example Nginx Configuration:
server {
listen 80;
servername yourdomain.com;
root /var/www/yourdomain.com;
index index.php;
# REST API rewrite
location /ct/api/v1 {
tryfiles $uri $uri/ /ct/api/v1/index.php?$querystring;
}
# PHP processing
location ~ \.php$ {
fastcgipass unix:/run/php/php8.3-fpm.sock;
fastcgiparam SCRIPTFILENAME $documentroot$fastcgiscriptname;
include fastcgiparams;
}
# Security - deny access to sensitive files
location ~ /ct/dat/ {
deny all;
}
location ~ /ct/logs/ {
deny all;
}
# Media files
location ~ \.(jpg|jpeg|png|gif|webp|mp4|webm|m3u8|ts)$ {
expires 30d;
addheader Cache-Control "public, immutable";
}
}
Folder Permissions
Critical Folders
These folders MUST be writable by the web server:
Setting Permissions (Linux)
# Navigate to your installation
cd /var/www/yourdomain.com
Set ownership (replace www-data with your web server user)
sudo chown -R www-data:www-data ct/
Set directory permissions
find ct/ -type d -exec chmod 755 {} \;
Set file permissions
find ct/ -type f -exec chmod 644 {} \;
Make upload/log directories writable
chmod -R 775 ct/logs ct/uploads ct/cache
chmod 777 ct/uploads/temp ct/uploads/temp/useruploads
Protect config file (readable by PHP, not world-writable)
chmod 644 ct/dat/config.inc.php
HestiaCP Permissions
For HestiaCP, the web server user is typically your domain user:
# Replace 'username' with your HestiaCP username
chown -R username:username /home/username/web/yourdomain.com/publichtml/ct/
chmod -R 755 /home/username/web/yourdomain.com/publichtml/ct/
chmod -R 775 /home/username/web/yourdomain.com/publichtml/ct/logs
chmod -R 775 /home/username/web/yourdomain.com/publichtml/ct/uploads
Security Warning: Never use 777 permissions on production servers except for temporary folders. This is a major security risk.
Cron Job Requirements
CRITICAL: The main cron job MUST be running for video processing, scheduled tasks, and many other features to work. Without it, uploaded videos will remain in "pending" status forever.
Required Cron Job
Only ONE cron job is required - the main site cron that handles all scheduled tasks:
# Main site cron - runs every minute
php /path/to/ct/admin/cron/sitecron.php >> /path/to/ct/logs/cron/sitecron.log 2>&1
What the Site Cron Handles
The sitecron.php orchestrates all scheduled tasks including:
Setting Up Cron
Linux (crontab):
# Edit crontab
crontab -e
Add the main cron job
php /var/www/yourdomain.com/ct/admin/cron/sitecron.php >> /var/www/yourdomain.com/ct/logs/cron/sitecron.log 2>&1
cPanel:
- Log in to cPanel
- Go to Advanced > Cron Jobs
- Set timing to
(every minute) - Command:
php /home/username/publichtml/ct/admin/cron/sitecron.php
Plesk:
- Log in to Plesk
- Go to Scheduled Tasks (Cron Jobs)
- Add new task with the cron command
HestiaCP:
- Log in via SSH as your user
- Run
crontab -e - Add the cron line
Verifying Cron is Running
# Check cron log
tail -f /path/to/ct/logs/cron/sitecron.log
Check for pending videos (should decrease over time if cron works)
mysql -u user -p database -e "SELECT COUNT() FROM tblVideos WHERE status='pending';"
HTTPS / SSL Requirements
HTTPS is strongly recommended for production sites and REQUIRED for:
- Payment processing
- Secure cookies
- SEO (Google ranking factor)
- Browser features (geolocation, camera access)
Free SSL Options
Let's Encrypt Installation
# Install Certbot
sudo apt install certbot python3-certbot-apache
Get certificate
sudo certbot --apache -d yourdomain.com -d www.yourdomain.com
Auto-renewal is configured automatically
Disk Space Requirements
Minimum Requirements
Production Estimates
Network Requirements
Outbound Connections Required
Firewall Configuration
If you have a firewall, ensure these are allowed:
# Allow outbound HTTPS
sudo ufw allow out 443/tcp
Allow outbound HTTP (some APIs)
sudo ufw allow out 80/tcp
Allow outbound SMTP
sudo ufw allow out 587/tcp
Requirements Verification Script
Use this script to verify your server meets all requirements:
<?php
/*
ComusThumbz Requirements Check
- Save as checkrequirements.php and run via browser or CLI
/
echo "<h2>ComusThumbz Requirements Check</h2>\n";
echo "<pre>\n";
// PHP Version
$phpOk = versioncompare(PHPVERSION, '8.0.0', '>=');
echo "PHP Version: " . PHPVERSION . " " . ($phpOk ? '✅' : '❌ Requires 8.0+') . "\n";
// Required Extensions
$extensions = ['pdo', 'pdomysql', 'mysqli', 'gd', 'curl', 'mbstring', 'json', 'session', 'fileinfo', 'openssl'];
echo "\nRequired Extensions:\n";
foreach ($extensions as $ext) {
$loaded = extensionloaded($ext);
echo " $ext: " . ($loaded ? '✅ OK' : '❌ MISSING') . "\n";
}
// Recommended Extensions
$recommended = ['imagick', 'zip', 'exif', 'intl'];
echo "\nRecommended Extensions:\n";
foreach ($recommended as $ext) {
$loaded = extensionloaded($ext);
echo " $ext: " . ($loaded ? '✅ OK' : '⚠️ Not installed') . "\n";
}
// Disabled Functions
$disabled = explode(',', iniget('disablefunctions'));
$requiredfuncs = ['exec', 'shellexec', 'passthru', 'procopen', 'popen'];
echo "\nRequired Functions:\n";
foreach ($requiredfuncs as $func) {
$available = !inarray(trim($func), arraymap('trim', $disabled)) && functionexists($func);
echo " $func(): " . ($available ? '✅ OK' : '❌ DISABLED') . "\n";
}
// php.ini Settings
$settings = [
'memorylimit' => ['min' => '256M', 'rec' => '512M'],
'maxexecutiontime' => ['min' => 300, 'rec' => 600],
'uploadmaxfilesize' => ['min' => '100M', 'rec' => '500M'],
'postmaxsize' => ['min' => '100M', 'rec' => '500M'],
];
echo "\nPHP Settings:\n";
foreach ($settings as $key => $values) {
$current = iniget($key);
echo " $key: $current";
if (isnumeric($values['min'])) {
echo " (min: {$values['min']}, rec: {$values['rec']})";
} else {
$currentBytes = returnbytes($current);
$minBytes = returnbytes($values['min']);
echo $currentBytes >= $minBytes ? ' ✅' : ' ❌';
}
echo "\n";
}
// External Tools
echo "\nExternal Tools:\n";
$ffmpeg = shellexec('which ffmpeg 2>/dev/null') ?: shellexec('where ffmpeg 2>NUL');
echo " FFmpeg: " . ($ffmpeg ? '✅ ' . trim($ffmpeg) : '❌ NOT FOUND') . "\n";
$ffprobe = shellexec('which ffprobe 2>/dev/null') ?: shellexec('where ffprobe 2>NUL');
echo " FFprobe: " . ($ffprobe ? '✅ ' . trim($ffprobe) : '❌ NOT FOUND') . "\n";
$convert = shellexec('which convert 2>/dev/null') ?: shellexec('where convert 2>NUL');
echo " ImageMagick: " . ($convert ? '✅ ' . trim($convert) : '⚠️ Not found (optional)') . "\n";
echo "</pre>\n";
function returnbytes($val) {
$val = trim($val);
$last = strtolower($val[strlen($val)-1]);
$val = (int)$val;
switch($last) {
case 'g': $val = 1024;
case 'm': $val = 1024;
case 'k': $val *= 1024;
}
return $val;
}
?>
Troubleshooting Requirements Issues
Videos Stuck in "Pending" Status
Symptoms: Videos upload but never process. Status stays "pending" forever.
Causes:
Cron job not runningFFmpeg not installed or not foundexec() function disabled
- Incorrect
$ffmpegpathin config
Solutions:
- Verify cron:
tail -f /path/to/ct/logs/cron/sitecron.log - Test FFmpeg:
ffmpeg -version - Check functions: See "Required PHP Functions" above
- Verify config paths: Check
ct/dat/config.inc.php
"Permission Denied" Errors
Symptoms: Cannot upload files, cannot save settings, blank pages.
Solution:
# Fix ownership
sudo chown -R www-data:www-data /path/to/ct/
Fix permissions
chmod -R 755 /path/to/ct/
chmod -R 775 /path/to/ct/logs /path/to/ct/uploads
Database Connection Failed
Symptoms: "Error: Could not fetch settings from tblSettings"
Causes:
- Wrong credentials in config.inc.php
- MySQL service not running
- User lacks privileges
Solutions:
- Verify credentials in
ct/dat/config.inc.php - Check MySQL:
sudo systemctl status mysql - Grant privileges: See "Database Requirements" above
Changelog