ComusThumbz 문서
관리자 로그인

ComusThumbz 문제 해결


제품정보

이 가이드는 전체 ComusThumbz CMS에 대한 문제 해결 정보를 통합하여 백엔드 관리자 패널을 덮습니다 (ct/admin/) 그리고 frontend 공개 페이지 (프로젝트 루트). 증상, 원인, 해결책으로 범주에 의해 구성 됩니다.

팁: 특정 문제로 다이빙하기 전에, 가장 일반적인 문제를 식별하기 위해 아래의 빠른 진단 검사 목록을 통해 실행.


빠른 진단 checklist

문제 발생시 이러한 검사를 통해 실행:

  1. PHP 오류 로그 - 체크인 ct/logs/ 그리고 최근 오류에 대한 서버의 PHP 오류 로그
  2. Cron 작업 - Cron 작업이 실행됩니다 (대부분 "data not updating"문제)
  3. 파일 권한 - 웹 서버는 읽기/쓰기 접근을 해야 합니다. uploads/· ct/logs/· ct/dat/
  4. Database 연결 - 시험 https://yourdomain.com/tools/simpletest.php?key=comus2025
  5. API 건강 - 시험 https://yourdomain.com/ct/api/v1/features
  6. 특징 toggles - Disabled 기능은 "페이지를 표시하지 않는 가장 일반적인 원인입니다"
  7. 브라우저 콘솔 - JavaScript 오류 확인 (F12 -> 콘솔)
  8. 네트워크 탭 - 실패한 API 요청에 대한 확인 (F12 -> Network)

서버 및 PHP 오류

빈 페이지 / 500 내부 서버 오류

오류:
증상: 페이지는 완전 빈을 표시하거나 HTTP를 반환 500 가시 오류가 없습니다.

일반적인 원인:

  1. declare(stricttypes=1) 관련 기사 - FIRST 라인이 있어야 합니다. . 어떤 whitespace, BOM 특성, 또는 그것의 앞에 부호는 뚱뚱한 과실을 일으키는 원인이 됩니다.
  1. PHP 구문 오류 - 오류 로그 확인:
tail -50 /var/log/php/error.log
  1. Missing은 파일 포함 - 아 requireonce 존재하지 않는 파일:
grep -r "requireonce" ct/admin/yourpage.php
  1. 표시 오류 비활성화 - 디버깅을 위해 Temporarily:
iniset('displayerrors', 1);
   errorreporting(EALL);

해결책: PHP 오류 로그를 먼저 확인하십시오. 자주 묻는 질문 displayerrors 실제 오류를 볼 때 일시적으로.

AdminLanguage 싱글턴 오류

오류:
증상: Fatal error: Cannot instantiate AdminLanguage 또는 admin 페이지에 유사한 500 오류.

원인: 사용 방법 new AdminLanguage() 싱글톤 패턴 대신.

수정 :

// WRONG

$lang = new AdminLanguage();


// CORRECT
$lang = AdminLanguage::getInstance();

기억 한계 배출하는

오류:
증상: Fatal error: Allowed memory size of X bytes exhausted

일반적인 방아쇠:

  • 큰 비디오 파일 업로드
  • 대형 이미지 갤러리
  • 400K+ 캠 출연자 기록에 대량 작업

해결책: PHP 메모리 제한을 증가:

; php.ini

memorylimit = 512M        ; Minimum recommended

uploadmaxfilesize = 2G    ; For video uploads

postmaxsize = 2G          ; Must be >= uploadmaxfilesize

또는 per-script:

iniset('memorylimit', '512M');

최대 실행 시간 초과

오류:
증상: Fatal error: Maximum execution time of 30 seconds exceeded

일반적인 방아쇠:

  • 비디오 처리 cron 작업
  • 큰 데이터베이스 쿼리
  • 외부 API 호출 타이밍 아웃

해결책:

; php.ini

maxexecutiontime = 300    ; 5 minutes for web requests

cron 작업을 위해, 무제한 설정:

settimelimit(0);

파일 권한 오류

오류:
증상: Permission denied 파일을 작성하거나 감독을 만들 때 오류.

필수 권한:

관련 기사제출제품정보
uploads/775명사용자 업로드, avatars, 콘텐츠
uploads/videos/original/775명원시 비디오 uploads
uploads/ftpuploads/775명FTP 대량 업로드 입구
ct/logs/775명회사연혁
ct/dat/775명구성 파일
assets/images/755명Static 이미지
수정 :
chown -R www-data:www-data uploads/ ct/logs/ ct/dat/
chmod -R 775 uploads/ ct/logs/ ct/dat/

Database 문제

Database 연결 실패

오류:
증상: 페이지는로드 실패, API는 500 오류를 반환, "연결 거부" 로그.

진단:

  1. 빠른 데이터베이스 도구로 테스트 :

https://yourdomain.com/tools/simpletest.php?key=comus2025

  1. 자격 증명 ct/dat/config.inc.php::
$dbhost = 'localhost';
   $dbuser = 'admincomus';
   $dbpasswd = 'yourpassword';
   $db = 'admincomus';
  1. MySQL을 실행합니다.
systemctl status mysql

해결책: MySQL 서비스를 실행하고 자격 증명은 데이터베이스 구성과 일치합니다.

테이블 잠금 및 블록 쿼리

오류:
증상: API 호출 timeout 하지만 직접 데이터베이스 쿼리는 빠른. 30-60 초 동안 걸린다.

진단:

  1. MySQL 상태 도구를 실행:
https://yourdomain.com/tools/mysqlstatus.php?key=comus2025

  1. 차단 쿼리에 대한 확인:
SHOW FULL PROCESSLIST;
30 초보다 더 긴 쿼리를 찾습니다.
  1. InnoDB 잠금 분석을위한 데이터베이스 잠금 검사기 :
https://yourdomain.com/tools/dblockinspector.php?key=comus2025

해결책:

  1. 차단을 해제:

KILL ;

  1. 또는 디버그 도구를 통해:
https://yourdomain.com/tools/mysqlstatus.php?key=comus2025&kill=PROCESSID

일반적인 culprit: 더 보기 apicron.php marksiteperformersoffline() 한 번에 모든 공연을 업데이트하는 기능. 이 배치 된 업데이트로 고정되었습니다 (10ms 일시 정지).

느린 쿼리

오류:
증상: 특정한 페이지는 천천히, 특히 캠 performers 또는 영상 명부를 적재합니다.

진단:

-- Check table locks

SHOW OPEN TABLES WHERE Inuse > 0;


-- Analyze 테이블 성능
ANALYZE 테이블 tblCamsPerformers;
ANALYZE 테이블 tblVideos;


-- Check index usage
SHOW INDEX FROM tblCamsPerformers;
SHOW INDEX FROM tblVideos;

해결책:

  1. Verify 인덱스는 자주 정해진 열에 존재합니다.
  2. 제품 정보 EXPLAIN 잘못된 인덱스를 식별하는 느린 쿼리
  3. APCu 캐시가 작동되는 경우 확인하기 (php -m | grep apcu·
  4. 캠 performers에 대 한, 사용 ?fast=1 COUNT 쿼리 건너뛰기

SQL 디버깅 명령

구성 필수:
수동 데이타베이스 디버깅을 위한 빠른 참고:

-- Show all running queries
SHOW FULL PROCESSLIST;

-- 특정 쿼리를 죽이기
킬 123;


-- 30 초 이상 모든 수면 연결 죽이기
SELECT CONCAT('KILL', id, ';')
자주 묻는 질문스키마
WHERE Command='Sleep' 과 시간 > 30;


-- 테이블 자물쇠를 검사하십시오
SHOW 오픈 테이블 WHERE
사용 > 0;


-- Check InnoDB status for deadlocks
SHOW ENGINE INNODB STATUS;


영상 처리

동영상 Stuck 에 'pending'

오류:
증상: 동영상 업로드하지만 결코 처리. 상태는 'pending'이 무한하게 남아 있습니다.

이것은 가장 일반적인 비디오 문제입니다. 이 주문 확인:

  1. Cron 작업이 실행되지 않음 - 비디오 프로세서는 일정에 실행:
# Must be in crontab
  • php /path/to/ct/admin/cron/ftp에비디오다운로드

   /5     php /path/to/ct/admin/cron/videoprocessor.php
  1. 잘못된 파일path 형식의 데이터베이스 - 가장 일반적인 데이터 버그 :
-- Check filepath format
   SELECT videoid, filepath, status FROM tblVideos WHERE status='pending';

파일 경로 MUST: uploads/videos/original/{filename}

이름 * 파일명과 이름 * 기타 제품 ct/ 연락처

  1. incorrect 파일 경로 수정:
-- Fix paths that are just filenames
   UPDATE tblVideos
   SET filepath = CONCAT('uploads/videos/original/', filepath)
   WHERE filepath NOT LIKE 'uploads/%'
     AND filepath NOT LIKE '%/%'
     AND status = 'pending';
  1. 명확한 붙어 있던 가공 큐:
DELETE FROM tblVideoProcessingJobs
   WHERE videoid IN (SELECT videoid FROM tblVideos WHERE status = 'pending');
  1. 파일이 디스크에 존재합니다.
ls -la /path/to/ct/uploads/videos/original/

FFmpeg / FFprobe 찾을 수 없습니다

오류:
증상: 비디오 처리는 "FFmpeg not found"또는 "FFprobe not found"로 실패합니다.

진단:

which ffmpeg

which ffprobe

ffmpeg -version

해결책:

  1. FFmpeg 설치:

sudo apt install ffmpeg    # Debian/Ubuntu

  1. config match 실제 위치의 경로 확인:
// ct/dat/config.inc.php
   $ffmpegpath = '/usr/bin/ffmpeg';
   $ffprobepath = '/usr/bin/ffprobe';
  1. PHP는 포탄 명령을 실행할 수 있습니다:
// Check if exec() is disabled
   vardump(functionexists('exec'));

비디오 처리 오류

오류:
증상: 동영상 처리 시도 후 'error' 상태 변경.

진단:

  1. 처리 로그 확인:

tail -100 ct/logs/videoprocessor/.log

  1. 비디오 녹화 확인:
SELECT videoid, filepath, status, errormessage
   FROM tblVideos WHERE status = 'error'
   ORDER BY videoid DESC LIMIT 10;

일반적인 원인:

  • Corrupted 소스 파일
  • 지원되는 codec
  • 충분한 디스크 공간
  • FFmpeg 버전 너무 오래 (need 4.0+)

해결책: 손상된 원인을 수정한 다음 재처리에 대한 비디오를 재설정:

UPDATE tblVideos SET status = 'pending', errormessage = NULL

WHERE videoid = ;

HLS 스트리밍 작동하지 않음

오류:
증상: 비디오 플레이어는 오류 또는 MP4로 돌아갑니다. 사이트맵 .m3u8 파일이 로딩되지 않습니다.

진단:

  1. HLS 파일이 생성된 경우 확인:

SELECT videoid, hlspath FROM tblVideoFiles WHERE videoid = ;

  1. 마스터 재생 목록을 확인:
curl -I https://cdn.example.com/videos/{shard}/{id}/hls/master.m3u8
  1. Check MIME type configuration. Your web server must serve .m3u8 as application/vnd.apple.mpegurl:
# Apache .htaccess
   AddType application/vnd.apple.mpegurl .m3u8
   AddType video/MP2T .ts

Solution: Verify HLS files exist on CDN, MIME types are correct, and securemedia.php token is valid.

 

Thumbnails Not Generating

 

Error:
Symptom: Videos process but have no poster image, preview, or timeline thumbnails.

 

Diagnosis:

SELECT videoid, posterpath, previewpath

FROM tblVideoFiles WHERE videoid = <ID>;

 

Common causes:

  • ImageMagick not installed (convert command needed for contact sheets)
  • FFmpeg failed during thumbnail extraction
  • CDN upload for thumbnails failed (check storage server logs)

 

Solution:

# Verify ImageMagick

which convert

convert --version

 


Reprocess thumbnails only


php ct/admin/cron/videoprocessor.php --video-id=<ID> --thumbnails-only

CDN Upload Failures

 

Error:
Symptom: Video processes locally but files don't appear on CDN storage server.

 

Diagnosis:

  1. Check storage server configuration:

SELECT  FROM tblStorageServers WHERE enabled = 1;

   SELECT  FROM tblStorageServerGroups;

 

  1. Check file location records:
SELECT  FROM tblStorageFileLocations WHERE videoid = <ID>;
  1. Verify CDN credentials and connectivity from the admin panel.

File sharding formula: floor(videoid / 1000) 1000
Example: Video ID 4321 goes to shard 4000:

https://cdn.example.com/videos/4000/4321/webmp4/web.mp4

 

Solution: Check CDN credentials, test connectivity, verify storage server group assignment.

 

Distributed Conversion Server Issues

 

Error:
Symptom: Videos not being assigned to remote conversion servers, or remote processing fails.

 

Diagnosis:

  1. Check server status:

SELECT serverid, title, statusid, currentjobs, maxconcurrentjobs,

          lastheartbeat, loadaverage

   FROM tblConversionServers WHERE statusid = 1;

 

  1. Check conversion logs:
SELECT  FROM tblConversionServerLogs
   WHERE loglevel IN ('WARNING', 'ERROR')
   ORDER BY createdat DESC LIMIT 20;
  1. Verify settings:
SELECT  FROM tblSettings WHERE settinggroup = 'videoprocessing';

Solution:

  • Ensure conversionuseremoteservers is set to 1
  • Verify remote server SSH/FTP connectivity
  • Check that FFmpeg is installed on remote servers
  • Verify conversionfallbacktolocal is 1 for automatic fallback

 


API Issues

API Authentication Failures

 

Error:
Symptom: API returns 401 Unauthorized or "Invalid token" errors.

 

Common causes:

  1. Wrong user ID column - tblCMSUsers uses id, NOT userid:
-- CORRECT
   SELECT id, username, accountstatus FROM tblCMSUsers WHERE id = 123;

-- WRONG (column doesn't exist)
SELECT userid FROM tblCMSUsers;

 

  1. Wrong status column - tblCMSUsers uses accountstatus, NOT status:
-- CORRECT
   WHERE accountstatus = 'active'

-- WRONG
WHERE status = 'active'

 

  1. JWT token expired - Tokens have an expiration time. Re-authenticate:
POST /ct/api/v1/auth/login
  1. JWT secret mismatch - Verify in config:
$jwtsecret = md5($domain . $licensekey);

API Calls Failing from JavaScript

 

Error:
Symptom: Frontend pages can't load data. Browser console shows fetch errors.

 

Diagnosis:

  1. Check ApiClient base URL:

// Browser console

   const api = new ApiClient();

   console.log(api.baseUrl);

 

  1. Check Network tab (F12) for the failing request - note the URL, status code, and response body.
  1. Verify the endpoint exists in the router:
  • File: ct/api/v1/index.php
  • 90+ endpoints defined
  1. Check JWT token:
console.log(localStorage.getItem('authtoken'));

Solution: Verify base URL detection, check endpoint exists in router, verify authentication token if endpoint requires auth.

 

API Returns Empty Data

 

Error:
Symptom: API returns {"success": true, "data": []} with no content.

 

Diagnosis:

  1. Check if data exists in the database:

SELECT COUNT() FROM tblVideos WHERE status = 'active';

   SELECT COUNT() FROM tblCamsPerformers WHERE status = 1 AND enabled = 1;

 

  1. Check feature toggles - some API endpoints return empty when features are disabled.
  1. Check query parameters - pagination offset may be beyond available data.

Solution: Verify data exists in the database and feature toggles are enabled.

 

CORS Errors

 

Error:
Symptom: Browser console shows Access-Control-Allow-Origin errors.

 

Cause: API and frontend on different domains or ports.

Solution: Ensure the API sets proper CORS headers:

header('Access-Control-Allow-Origin: https://yourdomain.com');

header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');

header('Access-Control-Allow-Headers: Content-Type, Authorization');

 

Or in .htaccess:

Header set Access-Control-Allow-Origin "https://yourdomain.com"

 


Frontend Issues

Features Not Showing / All Disabled

 

Error:
Symptom: Pages redirect with "feature disabled" message, or navigation items are missing.

 

Diagnosis:

  1. Test the features API endpoint:

curl https://yourdomain.com/ct/api/v1/features

 

  1. Check feature cache - APCu may have stale data:
// Clear APCu cache
   apcuclearcache();
  1. Check featurehelper.php - all features default to enabled if not found in database.
  1. Verify feature settings in admin panel: Admin Panel -> Feature Toggles

Solution: Clear APCu cache, verify feature settings in admin panel, check that the API is reachable.

 

Translations Not Loading

 

Error:
Symptom: Translation keys displayed instead of text (e.g., videos.title instead of "Videos").

 

Diagnosis:

  1. Verify lang/en.json exists and is valid JSON:
php -r "jsondecode(filegetcontents('lang/en.json')); echo jsonlasterrormsg();"

 

  1. Check file permissions (must be readable by web server).
  1. Verify the translation key exists in the JSON:
# Search for a specific key
   grep -o '"videos"' lang/en.json
  1. Check for typos in nested keys - videos.sortby.videoid requires all parent keys to exist.

Solution: Validate JSON syntax, check file permissions, verify key path exists in the translation file.

 

CSS Styles Not Applying

 

Error:
Symptom: Page looks unstyled or broken layout.

 

Rules:

  1. Only use assets/css/style.css - no external CSS frameworks (Bootstrap, Tailwind, etc.)
  2. Check for specificity conflicts with Style Manager overrides (Phase 12)
  3. Verify the stylesheet is loaded in includes/header.php
  4. Check browser cache - append ?v=timestamp to stylesheet URL

 

Solution:

// Force cache bust

<link rel="stylesheet" href="assets/css/style.css?v=<?= time() ?>">

 

Dark Mode Not Working

 

Error:
Symptom: Dark mode toggle doesn't change the page appearance.

 

Diagnosis:

  1. Check featuredarkmode is enabled in feature toggles
  2. Verify localStorage is available:

console.log(localStorage.getItem('comusdarkmode'));

  1. Confirm body.dark-mode CSS rules exist in assets/css/style.css
  2. Check that both body and html elements get the class:

document.body.classList.contains('dark-mode');

   document.documentElement.classList.contains('dark-mode');

 

Solution: Enable the feature toggle, clear localStorage, verify CSS dark mode rules exist.

 

Video Player Not Loading

 

Error:
Symptom: Video player area is blank, shows error, or spinner never completes.

 

Diagnosis:

Check browser Network tab for /ct/api/v1/videos/{id} requestVerify video data is returned with valid URLsCheck access control - user may lack permission (free/premium/VIP)For HLS: verify HLS.js is loaded and browser supports it
  1. Check securemedia.php token generation:

GET /securemedia.php?token=...&type=video&id=...

 

Solution: Check API response, verify access control, ensure HLS.js or native HLS support is available, verify media token is valid.

 

Click Tracking Not Working

 

Error:
Symptom: External links not being tracked, or affiliate revenue is missing.

 

Critical rule: ALL external links MUST route through click.php. Direct links incur a 100% skim penalty.

Correct format:

// PHP

$url = sprintf('click.php?url=%s&type=video&id=%d',

    urlencode($externalurl), $videoid);

 


// JavaScript
const url = click.php?url=${encodeURIComponent(externalUrl)}&type=${type}&id=${id};

 

Diagnosis:

  1. Check that click.php exists at the project root
  2. Verify tblClickTracking is receiving records:

SELECT  FROM tblClickTracking ORDER BY clickid DESC LIMIT 10;

  1. Check tblContentClicks for aggregated counts

 

Solution: Audit all external links to ensure they use click.php. Use browser DevTools to verify link href attributes.

 

SEO Meta Tags Missing

 

Error:
Symptom: Social media shares show generic or missing preview data. Search engines don't index properly.

 

Cause: SEO data must be loaded BEFORE header.php is included.

Correct order:

// 1. Load config and API helper FIRST

requireonce DIR . '/ct/dat/config.inc.php';

requireonce DIR . '/includes/InternalApiHelper.php';

 


// 2. Fetch data for SEO
$api = InternalApiHelper::getInstance();
$videoData = $api->getVideoForSeo($videoId);


// 3. NOW include header (generates meta tags from loaded data)
requireonce DIR . '/includes/header.php';

 

Diagnosis:

View page source and check for <meta property="og:title"> tagsUse Facebook/Twitter debugger tools to validate Open Graph tags
  • Check ct/dat/seosettings.json for template configuration

 

Solution: Ensure SEO data is loaded before header, verify SeoHelper.php and InternalApiHelper.php are working.

 


Cam Performers System

No Performers Appearing

 

Error:
Symptom: Cam performers page is empty, no performer cards shown.

 

Diagnosis (in order):

  1. Check cron jobs are running:

php ct/admin/cronupdatecams.php

  1. Verify API credentials in Admin -> Cam Settings
  2. Check tblCamsSites for enabled sites:

SELECT recordnum, name, enabled FROM tblCamsSites WHERE enabled = 1;

  1. Verify featurelivecams is enabled in feature toggles
  2. Check logs:

tail -50 ct/logs/cron-update.log

  1. Test the internal API directly:
GET /ct/api/v1/cams/online?perpage=1&fast=1

 

Solution: Enable cron jobs, verify API credentials, enable the feature toggle.

 

All Performers Showing Offline

 

Error:
Symptom: Performers exist but all show as offline.

 

Diagnosis:

  1. Run the cron update manually:

php ct/admin/cronupdatecams.php

  1. Check if external API is responding:

curl --location 'https://performersext-api.pcvdaa.com/performers-ext/?token=<TOKEN>&gender=f&live=true&size=1&page=1' \

   --header 'x-api-key: <APIKEY>' \

   --header 'User-Agent: ComusThumbz/1.0'

  1. Verify API token hasn't expired
  2. Check database for online performers:
SELECT COUNT() FROM tblCamsPerformers WHERE status = 1;

 

Solution: Run cron manually, verify external API credentials are valid.

 

External API 403 Forbidden

 

Error:
Symptom: External CrakRevenue API returns {"message": "Forbidden"} or HTML error page.

 

Causes:

  1. Missing or invalid x-api-key header
  2. Missing User-Agent header (returns HTML error page)
  3. API key revoked by CrakRevenue

 

Diagnosis:

-- Check stored API credentials

SELECT recordnum, name, apiData, parameters FROM tblCamsSites WHERE enabled = 1;

 

Solution: Verify x-api-key (stored in tblCamsSites.apiData) and ensure requests include a User-Agent header. Contact CrakRevenue if key was revoked.

 

External API 401 Unauthorized

 

Error:
Symptom: External API returns {"message": "Unauthorized: brands not allowed"} or similar.

 

Causes:

  1. Invalid or missing token parameter
  2. Requesting brands not authorized for your token
  3. Token is domain-bound and being used from wrong domain

 

Diagnosis:

-- Check token values

SELECT recordnum, name, parameters, brand FROM tblCamsSites WHERE enabled = 1;

 

Solution: Verify token (stored in tblCamsSites.parameters), ensure you only request authorized brands, verify token is for your domain.

 

Slow Cam Performers Page

 

Error:
Symptom: Cam performers page takes 5+ seconds to load.

 

Diagnosis:

  1. Use the debug panel: add ?debug=1 to the URL to see timing breakdown
  2. Use the full debug tool:
https://yourdomain.com/tools/camperformersdebug.php?key=comus2025

 

Optimization checklist:

  1. Enable fast mode - ensure frontend uses ?fast=1 parameter
  2. Check APCu is installed and enabled:

php -m | grep apcu

  1. Verify stats cache cron is running:

/2     php /path/to/ct/admin/cron/updatecamperformerstats.php

  1. Reduce perpage to 24 or less
  2. Check for blocking database queries (see Table Locks)

 

Three-layer caching strategy:

  • Layer 1: APCu in-memory cache (30s TTL)
  • Layer 2: Database stats cache (tblCamsPerformersStatsCache)
  • Layer 3: Fast mode (skip COUNT queries entirely)

 

Solution: Enable all three caching layers and verify cron jobs are running.

 

Affiliate Revenue Missing

 

Error:
Symptom: Clicks on cam performers not tracking, affiliate commissions not appearing.

 

Cause: External performer links not routed through click.php.

Required format:

$clickurl = sprintf('click.php?url=%s&type=camperformer&id=%d',

    urlencode($performer['chatroomurl']), $performer['performerid']);

 

Also verify:

  • Affiliate ID is present in the roomUrl from the external API
  • tblClickTracking is recording cam performer clicks
  • Performer chatroomurl contains valid affiliate tracking parameters

 

Solution: Audit all performer links to ensure click.php routing. Verify affiliate ID in room URLs.

 


Live Streaming (LiveKit)

LiveKit Server Not Starting

 

Error:
Symptom: Docker container won't start or crashes immediately.

 

Diagnosis:

# Check container status

docker ps -a | grep livekit

 


Check logs


docker logs livekit

Verify Docker is running


systemctl status docker

Common causes:

  1. Port conflicts (7880, 7881, 40000-40100 already in use)
  2. Invalid livekit-config.yaml syntax
  3. Docker not installed or not running
  4. Insufficient permissions

 

Solution:

# Check port availability

ss -tlnp | grep 7880

 


Restart container


docker restart livekit

Or recreate


docker rm -f livekit
docker run -d --name livekit --network host \
  -v $(pwd)/livekit-config.yaml:/livekit.yaml:ro \
  livekit/livekit-server:latest --config /livekit.yaml

Stream Not Connecting

 

Error:
Symptom: Creator clicks "Start Streaming" but video never appears. Viewers see loading spinner.

 

Diagnosis:

  1. Check LiveKit config in ct/dat/config.inc.php:

define('LIVEKITHOST', 'wss://yourdomain.com/livekit/');

   define('LIVEKITAPIKEY', 'yourkey');

   define('LIVEKITAPISECRET', 'yoursecret');

 

  1. Verify WebSocket connection from browser:
  • Open browser console (F12)
  • Look for WebSocket connection errors
  • Check if wss:// URL is accessible
  1. Verify firewall rules:
sudo ufw status | grep -E "7880|7881|40000"

Required ports:

  • 7880 - WebSocket signaling
  • 7881 - TCP media
  • 40000-40100 - UDP media (WebRTC)

 

Solution: Verify LiveKit credentials match between config and server, check firewall ports, ensure SSL is configured for wss://.

 

High Latency / Buffering

 

Error:
Symptom: Live stream has noticeable delay (>2 seconds) or frequent buffering.

 

Causes:

  1. UDP ports blocked - WebRTC falls back to TCP (higher latency)
  2. Server overloaded
  3. Client bandwidth insufficient

 

Solution:

  1. Ensure UDP ports 40000-40100 are open
  2. Check server load:

top -bn1 | head -5
  1. Verify nodeip in livekit-config.yaml matches your public IP

 

Chat Not Working

 

Error:
Symptom: Chat messages not sending or not appearing for other viewers.

 

Diagnosis:

  1. Check tblLiveStreamChat for recent messages:
SELECT  FROM tblLiveStreamChat ORDER BY id DESC LIMIT 10;

  1. Verify WebSocket connection in browser console
  2. Check that the stream ID is valid in tblLiveStreams

 

Solution: Verify stream exists, WebSocket is connected, and chat API endpoint is responding.

 


Creator Monetization

Tips Not Processing

 

Error:
Symptom: Tips sent but not appearing in creator's balance or transaction history.

 

Diagnosis:

-- Check recent token transactions

SELECT  FROM tblTokenTransactions ORDER BY createdat DESC LIMIT 10;

 


-- Check creator tips
SELECT
FROM tblCreatorTips ORDER BY created
at DESC LIMIT 10;


-- Check user token balance
SELECT id, username, tokenbalance FROM tblCMSUsers WHERE id = <USERID>;

 

Common causes:

  • Insufficient token balance
  • Creator profile not verified
  • API endpoint error (check response)

 

Solution: Verify sender has sufficient tokens, creator profile is active, and POST /tips/send returns success.

 

Earnings Not Aggregating

 

Error:
Symptom: Creator earnings dashboard shows $0 despite receiving tips/subscriptions.

 

Cause: Earnings aggregation cron job not running.

Required cron:

     php /path/to/ct/admin/cron/aggregatecreatorearnings.php

 

Diagnosis:

-- Check daily earnings records

SELECT  FROM tblCreatorEarningsDaily

WHERE creatorid = <ID>

ORDER BY earningdate DESC LIMIT 10;

 


-- Check if raw transactions exist
SELECT SUM(amount) as total
FROM tblTokenTransactions
WHERE recipientid = <ID> AND createdat >= CURDATE();

 

Solution: Ensure the aggregatecreatorearnings.php cron job is running every minute.

 

Creator Posts Not Displaying

 

Error:
Symptom: Creator wall is empty or posts aren't visible.

 

Diagnosis:

  1. Check featurecreatorposts is enabled
  2. Verify posts exist:

SELECT  FROM tblCreatorPosts WHERE creatorid = <ID> ORDER BY createdat DESC LIMIT 10;

  1. Check post visibility settings (public vs subscriber-only vs PPV)
  2. Verify media uploads if post contains images/video:
SELECT  FROM tblCreatorPostMedia WHERE postid = <POSTID>;

 

Solution: Enable the feature toggle, verify posts exist in the database, check access control for post visibility.

 

Subscription Issues

 

Error:
Symptom: Subscriptions not activating, or subscribers can't access content.

 

Diagnosis:

-- Check active subscriptions

SELECT  FROM tblCreatorSubscriptions

WHERE subscriberid = <USERID> AND status = 'active';

 


-- Check subscription packages
SELECT
FROM tblCreatorSubscriptionPackages WHERE creatorid = <CREATORID>;

 

Solution: Verify featuresubscriptions is enabled, check payment processing, verify subscription record status.

 


Authentication & Users

Login Fails

 

Error:
Symptom: Login form returns error or redirects back without logging in.

 

Diagnosis:

  1. Test the auth API directly:

POST /ct/api/v1/auth/login

   {"username": "test", "password": "test"}

 

  1. Check user account status:
SELECT id, username, accountstatus, emailverified
   FROM tblCMSUsers WHERE username = 'testuser';

Remember: column is accountstatus, NOT status.

  1. Check if account is locked, suspended, or unverified.

Solution: Verify account exists, is active (accountstatus = 'active'), and email is verified if required.

 

Session Issues

 

Error:
Symptom: User logged in via API but pages don't recognize session. Constant redirects to login.

 

Diagnosis:

  1. Check auth/setsession.php is being called after login
  2. Verify session cookie is being set:

document.cookie  // Check for PHP session cookie

  1. Check PHP session configuration:
vardump(sessionstatus());  // Should be PHPSESSIONACTIVE

   vardump($SESSION);         // Should contain user data

 

Solution: Ensure setsession.php is called after API login returns JWT token. Verify session cookie domain matches.

 

2FA Problems

 

Error:
Symptom: Two-factor authentication code rejected, or 2FA setup fails.

 

Diagnosis:

  1. Check feature2fa is enabled
  2. Verify server time is accurate (TOTP codes are time-based):

date

   timedatectl status

  1. Time drift of >30 seconds will cause code rejection.

 

Solution: Sync server time with NTP, verify 2FA secret is stored correctly.

 


Cron Jobs

Verifying Cron Jobs Are Running

 

Configuration Required:
Check if cron jobs are configured:

 

crontab -l

Check if they've run recently:

# Check video processor logs
ls -la ct/logs/videoprocessor/

Check last modification of log files


stat ct/logs/cron-update.log

Test a cron job manually:

php ct/admin/cron/videoprocessor.php

echo $?  # 0 = success

 

Required Cron Schedule

 

Configuration Required:
The following cron jobs must be running for full system operation:

 

# Video Processing (CRITICAL)
  • php /path/to/ct/admin/cron/ftpvideoprocessor.php

/5     php /path/to/ct/admin/cron/videoprocessor.php
/5     php /path/to/ct/admin/cron/conversionpoller.php

Cam Performers


/5     php /path/to/ct/admin/cronupdatecams.php
/2     php /path/to/ct/admin/cron/updatecamperformerstats.php
0 3      php /path/to/ct/admin/cron/maintenancecamperformers.php

Creator Monetization


  • php /path/to/ct/admin/cron/aggregatecreatorearnings.php

Site Maintenance


0 0      php /path/to/ct/admin/cron/generatesitemap.php
0 1      php /path/to/ct/admin/cron/sitecron.php

Impact of missing cron jobs:

Missing Cron Impact
videoprocessor.php Videos stuck at 'pending' forever
ftpvideoprocessor.php FTP uploads never processed
cronupdatecams.php Cam performer data goes stale
updatecamperformerstats.php Stats cache outdated, slow page loads
aggregatecreatorearnings.php Creator earnings show $0
generatesitemap.php Search engines can't discover new content

Debug Tools Reference

 

Note:
All debug tools require the security key parameter: ?key=comus2025

 

Tool URL Purpose
simpletest.php /tools/simpletest.php?key=comus2025 Quick database connectivity test
camperformersdebug.php /tools/camperformersdebug.php?key=comus2025 Full cam API chain test (MySQL, sites API, online API, direct DB)
mysqlstatus.php /tools/mysqlstatus.php?key=comus2025 MySQL status + kill blocking queries
dblockinspector.php /tools/dblockinspector.php?key=comus2025 InnoDB lock analysis, metadata locks, deadlocks
baredbtest.php /tools/baredbtest.php?key=comus2025 Ultra-minimal database connection test

Kill a blocking query via URL:

https://yourdomain.com/tools/mysqlstatus.php?key=comus2025&kill=PROCESSID

Cam performers debug panel:

https://yourdomain.com/camperformers.php?debug=1


Shows: API URL, TTFB, download time, JSON parse time, DOM render time.

 


Log File Locations

Log Location Contains
Video Processor ct/logs/videoprocessor/ FFmpeg output, processing status, errors
Cron Updates ct/logs/cron-update.log Cam performer sync logs
API Errors ct/logs/api/ REST API error responses
PHP Errors /var/log/php/error.log (server-specific) PHP fatal errors, warnings
Apache/Nginx /var/log/apache2/error.log or /var/log/nginx/error.log Web server errors
LiveKit docker logs livekit Streaming server logs

Common SQL Fixes

 

Configuration Required:
Frequently-used SQL commands for fixing common data issues:

 

-- Fix videos with incorrect filepath (just filename, missing path)
UPDATE tblVideos
SET filepath = CONCAT('uploads/videos/original/', filepath)
WHERE filepath NOT LIKE 'uploads/%'
  AND filepath NOT LIKE '%/%'
  AND status IN ('pending', 'error');

-- Reset errored videos for reprocessing
UPDATE tblVideos SET status = 'pending', errormessage = NULL
WHERE status = 'error' AND video
id IN (1, 2, 3);


-- Clear stuck processing jobs
DELETE FROM tblVideoProcessingJobs
WHERE videoid IN (SELECT videoid FROM tblVideos WHERE status = 'pending');


-- Check cam performer online counts by site
SELECT s.name, COUNT(p.performerid) as onlinecount
FROM tblCamsPerformers p
JOIN tblCamsSites s ON p.site = s.recordnum
WHERE p.status = 1 AND p.enabled = 1
GROUP BY s.name;


-- Check feature toggle status
SELECT setting
key, settingvalue
FROM tblSettings
WHERE setting
key LIKE 'feature%'
ORDER BY setting
key;


-- Check recent click tracking
SELECT type, COUNT() as clicks, MAX(createdat) as lastclick
FROM tblClickTracking
GROUP BY type ORDER BY clicks DESC;


-- Find users with authentication issues
SELECT id, username, accountstatus, emailverified, lastlogin
FROM tblCMSUsers
WHERE account
status != 'active'
ORDER BY id DESC LIMIT 20;


-- Check storage server health
SELECT serverid, servername, servertype, enabled,
last
check, lasterror
FROM tblStorageServers;


-- Verify creator earnings aggregation
SELECT creator
id, earningdate, totaltips, totalsubscriptions,
total
ppv, totalearnings
FROM tblCreatorEarningsDaily
ORDER BY earning
date DESC LIMIT 20;