Full bilingual documentation for XC_VM has been added with Docsify SPA and the outdated database migration has been replaced. ## Docsify - docs/index.html — SPA entry point: en-us/ru-ru routing, search, syntax highlighting (bash, PHP, SQL, nginx, JSON) ## EN Documentation - docs/en/info/faq.md — FAQ (12 questions: streams, access, database, SSL, updates, permissions) - docs/en/info/migration_guide.md — migration guide from other systems - docs/en/info/update.md — step-by-step update via the web panel - docs/en/info/watch_folder.md — Watch Folder: workflow, PTN/guessit parsers, configuration - docs/en/updates_checklist.md — release preparation checklist ## RU Documentation (fully localized) - docs/ru/README.md — Main Page - docs/ru/_sidebar.md — Sidebar Navigation - docs/ru/administration/ssl-generation.md — Self-Signed SSL Generation - docs/ru/administration/update-system.md — Update Mechanism (PHP → Python → Post-Update) - docs/ru/api/playlist.md — Playlist API with Error Codes - docs/ru/api/system_api.md — System API (13 endpoints) - docs/ru/api/xtreamcodes_api.md — XtreamCodes API (Authorization, Live, VOD, TV Series, EPG) - docs/ru/builds/build_binaries.md — nginx build, nginx_rtmp, PHP-FPM, network - docs/ru/builds/build_ffmpeg.md — Building FFmpeg 8.0 with NVENC/CUDA - docs/ru/builds/build_system.md — MAIN vs. LB build system - docs/ru/development/cli-tools.md — CLI: 26 commands, 25 crons, 8 daemons, database migrations - docs/ru/info/faq.md — FAQ (12 questions) - docs/ru/info/migration_guide.md — Migration guide - docs/ru/info/update.md — Updating via the control panel - docs/ru/info/watch_folder.md — Watch Folder - docs/ru/updates_checklist.md — Release checklist ## Migrations - Removed: 001_drop_watch_folders_plex_token.sql (Deprecated) - Added: 001_update_crontab_filenames.sql — removes the .php suffix from filenames in the crontab table (switches to console.php commands)
8.3 KiB
❓ FAQ — Frequently Asked Questions
Here you’ll find answers to the most common questions and issues when working with XC_VM.
⚙️ Stream Issues
❌ My stream doesn’t start on MAIN or LB
🔍 Diagnostics
Connect to your server console and run the following command:
sudo -u xc_vm /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php monitor 291
🧩 Where
291is your stream ID (replace it with your own).
📄 What the command does
The monitor command tries to start the stream manually and displays an error if it fails.
⚠️ Possible causes
1️⃣ Missing system libraries
If the output contains an error like:
error while loading shared libraries: libxyz.so.1: cannot open shared object file
Install the missing library with:
sudo apt install <library_name>
After installation, rerun the test.
💬 Let me know if a library needs to be added to the installation script.
2️⃣ Error not related to libraries
If the error is of another type — send its output so I can help diagnose it.
🧾 Summary
- Run the diagnostic command.
- Check for any errors.
- Install missing libraries if necessary.
- Report any other errors for further analysis.
❌ Streaming fails with "IP_MISMATCH" or "TOKEN_EXPIRED"
These are security features, not bugs:
- TOKEN_EXPIRED — session token has a time limit. The user needs to re-authenticate.
- IP_MISMATCH — the user's IP changed mid-stream (often detected as credential sharing).
Relevant settings:
restrict_same_ip— how strict IP matching isdisallow_2nd_ip_con— block simultaneous connections from different IPs
If this causes issues for legitimate users (e.g., mobile networks frequently rotating IPs), adjust the restriction level in admin panel settings.
🔐 Login & Access Issues
❌ I'm locked out — IP keeps getting blocked
XC_VM's brute-force guard blocks IPs after too many failed login attempts. This is controlled by:
bruteforce_mac_attempts— attempts per MAC per time windowbruteforce_username_attempts— attempts per username per time windowflood_limit— total requests per window
To unblock yourself:
- From admin panel: Tools → IP Management → remove from blocked list.
- From CLI:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php tools flush— flushes all blocked IPs. - If completely locked out: Use
console.php tools rescueto create a rescue access code (see CLI Tools).
❌ Forgot admin password / can't log in at all
Create a new rescue admin user via CLI:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php tools user
This outputs a random username and password with full admin privileges. Log in, change the password, and delete the rescue user when done.
If the admin panel URL itself is unknown, create a rescue access code:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php tools rescue
🗄 Database & Configuration
❌ "Couldn't connect to database" on startup
The most common issue. Causes:
- Wrong credentials in
config.ini— checkhost,port,db_user,db_pass,db_name - MySQL/MariaDB not running —
sudo systemctl status mariadb - Network unreachable — DB server on another host and port is firewalled
- User lacks privileges — re-grant with
console.php tools mysql
Fix: Edit /home/xc_vm/config/config.ini, then run:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php status
❌ Database migration fails during update
Migration .sql files from migrations/ run automatically during updates. If one fails:
- The migration is recorded with
[WARN]status — it won't retry automatically. - Common causes: syntax error, table already exists, foreign key conflict, missing ALTER privilege.
Debug:
- Check which migration failed in the console output.
- Open the file in
migrations/and inspect the SQL. - Fix the issue manually in MySQL, then the next update will continue from where it stopped.
See Database Migrations for details.
🌐 SSL & Nginx
❌ SSL certificate generation fails
console.php certbot can fail with different error codes:
| Error | Cause | Fix |
|---|---|---|
| Error 3 | Domain is a bare IP address | Certbot requires a domain name, not an IP |
| Error 4 | Dry run failed — port 80/443 in use | Stop conflicting service: sudo lsof -i :80 |
| Error 0 | Files not found after generation | Check /home/xc_vm/bin/certbot/logs/xc_vm.log |
| Error 2 | Unexpected certbot error | Check logs, ensure DNS resolves to your server |
Also: Remove stale lock files if certbot was interrupted:
sudo rm -f /home/xc_vm/bin/certbot/*/.certbot.lock
❌ Nginx won't reload — port conflicts
XC_VM runs two nginx instances:
- nginx (
bin/nginx/) — HTTP(S) traffic - nginx_rtmp (
bin/nginx_rtmp/) — RTMP streaming
Each can fail if its port is already in use.
Diagnose:
sudo netstat -tlnp | grep -E ':80|:443|:1935'
Fix: Change the broadcast port in admin panel settings, then regenerate configs:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php tools ports
🔄 Updates & Service
❌ Update download fails or checksum mismatch
The update system downloads from GitHub releases. If it fails:
- Network/firewall blocks access to GitHub
- Partial download — connection dropped mid-way
- MD5 mismatch — corrupted file (update is safely aborted)
Updates are never applied if the checksum doesn't match. Re-run the update after fixing network issues:
sudo -u xc_vm /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php update update
❌ Service stops unexpectedly or won't stop cleanly
The service command uses escalating kill signals. If processes hang:
# Check for stuck processes
ps -u xc_vm
# Force kill if necessary
sudo killall -9 -u xc_vm
# Restart cleanly
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php service start
Common causes: PHP transaction deadlock, infinite loop in stream processing, or network socket timeout waiting for a response.
🛠 Permissions & System
❌ Permission denied errors keep reappearing
Run the status command — it automatically repairs all known permission issues:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php status
What it fixes:
- PHP-FPM socket permissions (
bin/php/sockets/*) - Content directory ownership (
content/streams/) - Config file ownership (
config/) - Executable bit on
daemons.sh - Network interface permissions (
/sys/class/net)
If permissions break after every restart, check that the xc_vm system user exists and owns /home/xc_vm.
❌ Load Balancer shows as offline / can't sync with MAIN
LB servers poll MAIN via HTTP and process signals. When sync fails:
- Network: LB can't reach MAIN's HTTP port — check firewall rules
- Database: LB can't connect to MAIN's MySQL — re-grant privileges:
sudo /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php tools mysql - Timeout: If
last_check_agoexceeds 180 seconds, server is marked offline
Debug: Run on MAIN to check connectivity:
sudo -u xc_vm /home/xc_vm/bin/php/bin/php /home/xc_vm/console.php watchdog
📘 This page is updated over time. If you discover a new common issue — please suggest it in Issues.