ComusThumbz Dokumentation
Admin-Anmeldung

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.

Configuration Required:
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

Component Minimum Recommended Notes
PHP 8.0 8.3+ Required for modern features
MySQL/MariaDB 5.7 / 10.3 8.0 / 11.4 Performance improvements
Memory 256MB 512MB+ For video processing
Disk Space 500MB 10GB+ Depends on content volume
CPU 1 Core 4+ Cores Video processing benefits from more cores

PHP Requirements

PHP Version

Warning:
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:

Extension Purpose Check Command Critical
PDO Database connections (preferred) php -m \ grep pdo Yes
pdomysql MySQL/MariaDB via PDO php -m \ grep pdomysql Yes
mysqli Legacy database support php -m \ grep mysqli Yes
GD Image processing, thumbnails php -m \ grep gd Yes
cURL API calls, external requests php -m \ grep curl Yes
mbstring Multibyte string handling php -m \ grep mbstring Yes
json JSON encoding/decoding php -m \ grep json Yes
session Session management php -m \ grep session Yes
fileinfo MIME type detection php -m \ grep fileinfo Yes
openssl Secure random generation, HTTPS php -m \ grep openssl Yes

These extensions enable additional features:

Extension Purpose Features Affected
ImageMagick (imagick) Advanced image processing Higher quality thumbnails, more formats
zip Archive handling Backup/export features
exif Image metadata extraction Auto-rotation, metadata display
intl Internationalization Better date/number formatting
redis Redis caching Performance optimization
apcu User cache Performance optimization

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

Error:
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

Function Required For Impact If Disabled
exec() FFmpeg/FFprobe execution, video processing Video processing will not work
shellexec() Command-line tools, ImageMagick Image processing degraded
passthru() Video processing output Streaming conversion fails
procopen() Background processes, cron jobs Async processing fails
escapeshellarg() Secure command building Security vulnerability if missing
escapeshellcmd() Secure command execution Security vulnerability if missing
popen() Pipe-based process execution Some features unavailable
fileputcontents() Configuration saving Cannot save settings
filegetcontents() File reading, remote URLs Content import fails
mkdir() Folder creation Installation fails
chmod() Permission management Upload directories fail
rename() File operations File uploads fail
unlink() File deletion Cannot delete content

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

Warning:
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

  1. Log in to HestiaCP admin panel
  2. Go to Server > Configure > PHP (select your PHP version)
  3. Find disablefunctions directive
  4. Remove required functions from the list
  5. Click Save
  6. 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

  1. Find disablefunctions and remove required functions
  2. Save changes

php.ini Configuration

Required Settings

Setting Minimum Recommended Description
memorylimit 256M 512M For large file processing
maxexecutiontime 300 600 For video processing (seconds)
uploadmaxfilesize 100M 500M Maximum file upload size
postmaxsize 100M 500M Must be >= uploadmaxfilesize
maxinputvars 3000 10000 For large forms
maxfileuploads 20 50 For bulk uploads
Setting Value Purpose
errorreporting EALL Full error reporting (disable display in production)
displayerrors Off Security (production)
logerrors On Error logging
errorlog /path/to/ct/logs/php-error.log Centralized logging
session.gcmaxlifetime 86400 24-hour sessions
session.cookiesecure On HTTPS only cookies
session.cookiehttponly On XSS protection
session.cookiesamesite Lax CSRF protection
date.timezone America/NewYork Your timezone

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)

Error:
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.
Component Minimum Version Check Command
FFmpeg 4.0 ffmpeg -version
FFprobe 4.0 ffprobe -version

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):

  1. Download from https://ffmpeg.org/download.html
  2. Extract to C:\ffmpeg
  3. Add C:\ffmpeg\bin to system PATH
  4. 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 provides higher-quality image processing than GD.

Component Minimum Version Check Command
ImageMagick 7.0 convert -version

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

Database Minimum Version Recommended
MySQL 5.7 8.0+
MariaDB 10.3 11.4+

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

Setting Value Purpose
charactersetserver utf8mb4 Full Unicode support
collationserver utf8mb4unicodeci Proper sorting
innodbbufferpoolsize 1GB+ Performance (production)
maxallowedpacket 64M Large imports

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:

Module Purpose Check
modrewrite URL rewriting for REST API apachectl -M \ grep rewrite
modheaders Security headers apachectl -M \ grep headers
modexpires Cache control apachectl -M \ grep expires
moddeflate Compression apachectl -M \ grep deflate
modssl HTTPS support apachectl -M \ grep ssl


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:

Folder Permission Purpose
ct/dat/ 755 Configuration files
ct/logs/ 775 Application logs
ct/uploads/ 775 User uploads (parent)
ct/uploads/videos/ 775 Video files
ct/uploads/videos/original/ 775 Original uploaded videos
ct/uploads/temp/ 777 Temporary processing
ct/cache/ 775 Application cache
ct/admin/backups/ 755 Database backups

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
Warning:
Security Warning: Never use 777 permissions on production servers except for temporary folders. This is a major security risk.

Cron Job Requirements

Error:
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:

Task Interval Purpose
Video processing Every run HLS generation, thumbnails, CDN upload
FTP video import Every run Process admin FTP uploads
Cam performer import Every 15 min Update live performer data
Creator earnings aggregation Every 5 min Calculate creator earnings
Creator media processing Every run Process creator post media
Sitemap generation Daily Update XML sitemaps
Cache cleanup Hourly Clear expired cache
Analytics aggregation Hourly Compile statistics

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:

  1. Log in to cPanel
  2. Go to Advanced > Cron Jobs
  3. Set timing to (every minute)
  4. Command: php /home/username/publichtml/ct/admin/cron/sitecron.php

Plesk:

  1. Log in to Plesk
  2. Go to Scheduled Tasks (Cron Jobs)
  3. Add new task with the cron command

HestiaCP:

  1. Log in via SSH as your user
  2. Run crontab -e
  3. 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

Warning:
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

Provider Method Notes
Let's Encrypt Certbot Free, auto-renewal
Cloudflare Proxy Free with CDN
cPanel AutoSSL Built-in Free on cPanel hosts

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

Component Size Notes
ComusThumbz Installation 200MB Core files
Database (empty) 50MB Schema only
Temporary processing 2GB+ During video processing

Production Estimates

Content Volume Estimated Space Notes
Small (1,000 videos) 50GB With CDN offload
Medium (10,000 videos) 500GB With CDN offload
Large (100,000+ videos) CDN Required Local storage insufficient
Tip: Use CDN storage (BunnyCDN, Wasabi, Backblaze B2) for video files. Local storage should only hold temporary/processing files.

Network Requirements

Outbound Connections Required

Destination Port Purpose
comusthumbz.com 443 License verification
Payment gateways 443 Payment processing
Cam site APIs 443 Live performer data
CDN providers 443 File uploads
Email servers 25/587 Transactional email

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

Error:
Symptoms: Videos upload but never process. Status stays "pending" forever.

Causes:

Cron job not runningFFmpeg not installed or not foundexec() function disabled
  1. Incorrect $ffmpegpath in config

Solutions:

  1. Verify cron: tail -f /path/to/ct/logs/cron/sitecron.log
  2. Test FFmpeg: ffmpeg -version
  3. Check functions: See "Required PHP Functions" above
  4. Verify config paths: Check ct/dat/config.inc.php

"Permission Denied" Errors

Error:
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

Error:
Symptoms: "Error: Could not fetch settings from tblSettings"

Causes:

  1. Wrong credentials in config.inc.php
  2. MySQL service not running
  3. User lacks privileges

Solutions:

  1. Verify credentials in ct/dat/config.inc.php
  2. Check MySQL: sudo systemctl status mysql
  3. Grant privileges: See "Database Requirements" above

Changelog

Date Version Changes
2026-01-02 1.0.0 Initial requirements document