moving docs to a separate repository

This commit is contained in:
Divarion-D
2025-11-26 20:53:47 +03:00
parent 24ecada0f5
commit bc2e002a49
28 changed files with 59 additions and 4310 deletions
+59 -32
View File
@@ -14,18 +14,43 @@
<a href="https://github.com/Vateron-Media/XC_VM/issues"><img src="https://img.shields.io/github/issues/Vateron-Media/XC_VM" /></a>
</p>
---
# 📑 Table of Contents
<details open>
<summary><strong>📘 Contents</strong></summary>
* 🏁 [Overview](#-overview)
* ⚠️ [Status](#️-status)
* 📚 [Documentation](#-documentation)
* 🧱 [Technology Stack](#-technology-stack)
* 🧩 [Ubuntu Support](#-supported-ubuntu-versions)
* 📥 [Quick Install](#-quick-install)
* 🧰 [Service Management](#-service-management)
* 📂 [Project Structure](#-project-structure)
* 🧮 [Server Requirements & Sizing](#-server-requirements--sizing)
* ⭐ [Features](#-features)
* 🐞 [Known Limitations](#-known-limitations)
* 🤝 [Contributing](#-contributing)
* 📜 [License](#-license)
* ⚖️ [Legal Disclaimer](#-legal-disclaimer)
</details>
---
## 🚀 Overview
**XC_VM** is an open-source IPTV platform based on Xtream Codes.
**XC_VM** is an open-source IPTV platform based on Xtream Codes.
It enables:
- 📺 Live & VOD streaming
- 🔀 Load balancing
- 📊 Full user/reseller control
- 🎚️ Transcoding & EPG
- 🔐 Hardened security fixes
* 📺 Live & VOD streaming
* 🔀 Load balancing
* 📊 Full user/reseller control
* 🎚️ Transcoding & EPG
* 🔐 Hardened security fixes
> ✅ 100% free. No license checks. No server locks.
@@ -33,20 +58,30 @@ It enables:
## ⚠️ Status
> **BETA SOFTWARE** — actively developed
> **BETA SOFTWARE** — actively developed
---
## 📚 Documentation
* 🇬🇧 **English Guide**
[https://vateron-media.github.io/XC_VM_Docs/#/en-us/](https://vateron-media.github.io/XC_VM_Docs/#/en-us/)
* 🇷🇺 **Руководство на русском**
[https://vateron-media.github.io/XC_VM_Docs/#/ru-ru/](https://vateron-media.github.io/XC_VM_Docs/#/ru-ru/)
---
## 🧱 Technology Stack
| Component | Version | Description |
|------------|---------|---------------------------------|
| PHP | 8.2 | Backend runtime |
| Nginx | 1.24 | Web server & reverse proxy |
| FFmpeg | 8.0 | Media transcoding & processing |
| MariaDB | 10.6+ | SQL database engine |
| KeyDB | 6.3.4 | Cache & session storage (Redis) |
| yt-dlp | 2025.07.21 | Audio/Video downloader |
| Component | Version | Description |
| --------- | ---------- | ------------------------------- |
| PHP | 8.2 | Backend runtime |
| Nginx | 1.24 | Web server & reverse proxy |
| FFmpeg | 8.0 | Media transcoding & processing |
| MariaDB | 10.6+ | SQL database engine |
| KeyDB | 6.3.4 | Cache & session storage (Redis) |
| yt-dlp | 2025.07.21 | Audio/Video downloader |
---
@@ -83,7 +118,7 @@ wget "https://github.com/Vateron-Media/XC_VM/releases/download/${latest_version}
# 4. Unpack and install
unzip XC_VM.zip
sudo python3 install
````
```
---
@@ -100,21 +135,13 @@ journalctl -u xc_vm -f # Live logs
---
## 📚 Documentation
* 🇬🇧 [English Guide](docs/en/main-page.md)
* 🇷🇺 [Руководство на русском](docs/ru/main-page.md)
---
## 📂 Project Structure
```text.
├─ docs/ # 📚 Project documentation
├─ lb_configs/ # ⚙️ Configurations for building Load Balancer (LB)
└─ src/ # 💻 Main project code
````
```
---
@@ -155,18 +182,18 @@ HD bitrate = 4 Mbps
| Resource | Load per Stream |
| ---------------- | --------------- |
| RAM | 50–100 MB |
| CPU (transcoded) | \~1 core |
| CPU (transcoded) | ~1 core |
---
## ✅ Features
* ✅ **No server restrictions**
* ✅ **EPG importer**
* ✅ **VOD management**
* ✅ **User/reseller panel**
* ✅ **Security patches**
* ✅ **Clean UI**
* ✅ No server restrictions
* ✅ EPG importer
* ✅ VOD management
* ✅ User/reseller panel
* ✅ Security patches
* ✅ Clean UI
---
-126
View File
@@ -1,126 +0,0 @@
<h1 align="center">📺 Get Playlist</h1>
<p align="center">
This API provides authentication and playlist generation features for <b>XC_VM</b>.
Clients can authenticate using a username/password or token, after which a personalized playlist is generated.
</p>
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to main page</b></a>
</p>
---
## 📚 Navigation
* [📂 File Location](#file-location)
* [🔑 Authentication](#authentication)
* [🚀 Endpoints](#endpoints)
* [❌ Error Codes](#error-codes)
* [🧾 Notes](#notes)
---
## 📂 File Location
The main API file is located at:
```bash
/home/xc_vm/wwwdir/playlist.php
```
---
## 🔑 Authentication
The API requires authentication either via username and password or via token.
This ensures secure access to the content.
### Base URL
```http
http://<your-domain>:80/playlist
```
---
## 🚀 Endpoints
### 1. Authentication and Playlist Generation
**Method & Endpoint:**
```http
GET /
```
**Query Parameters:**
| Parameter | Type | Required | Description |
| --------- | ------- | -------- | ------------------------------------------------------------------------------------------------- |
| username | string | Yes* | Username for authentication (required if `token` is not used). |
| password | string | Yes* | Password for authentication (required if `token` is not used). |
| token | string | Yes* | Authentication token (required if username and password are not used). |
| type | string | No | Device type (default: `m3u_plus`). |
| key | string | No | Content type (`live` — live TV, `movies` — movies, `radio_streams` — radio, `series` — TV shows). |
| output | string | No | Output format (`hls` or `m3u`). |
| nocache | boolean | No | If true, disables caching. |
> 💡 *Yes* — one option is required: either username/password or token.
**Example Requests:**
```bash
curl -X GET "http://<your-domain>:80/playlist/username/password/type&output=hls&key=live"
```
```bash
curl -X GET "http://<your-domain>:80/playlist/token/type&output=hls&key=live"
```
**Response:**
* Playlist file in the requested format (M3U or HLS).
---
## ❌ Error Codes
If an error occurs, the API returns the corresponding error codes for easier troubleshooting.
| Error Code | Description |
| ------------------------ | ------------------------------------- |
| NO_CREDENTIALS | Missing authentication data. |
| INVALID_CREDENTIALS | Invalid username, password, or token. |
| BLOCKED_USER_AGENT | User agent is blocked. |
| EXPIRED | Account has expired. |
| DEVICE_NOT_ALLOWED | Device type is not allowed. |
| BANNED | User is banned. |
| DISABLED | Account is disabled. |
| EMPTY_USER_AGENT | User agent is required but missing. |
| NOT_IN_ALLOWED_IPS | IP address is not allowed. |
| NOT_IN_ALLOWED_COUNTRY | Country is not allowed. |
| NOT_IN_ALLOWED_UAS | User agent is not allowed. |
| ISP_BLOCKED | ISP is blocked. |
| ASN_BLOCKED | ASN restriction applied. |
| DOWNLOAD_LIMIT_REACHED | Too many requests. |
| GENERATE_PLAYLIST_FAILED | Failed to generate playlist. |
> ⚠️ **Tip:** Check server logs for more details if errors occur.
---
## 🧾 Notes
* **Query Parameters:** Make sure all parameters are provided correctly to avoid authentication errors.
* **Restrictions:** The API applies filters by user agent, IP address, and country to enhance security.
* **Rate Limiting:** Request limits are enforced to prevent server overload.
* **Recommendations:** Use tools like cURL or Postman for testing. In production, integrate this API into your application for automated playlist generation.
> 💬 If you have integration questions, open an issue in the [repository](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to main page</b></a>
</p>
-211
View File
@@ -1,211 +0,0 @@
<h1 align="center">📡 System API (Method Verification Required)</h1>
<p align="center">
This API provides various system functionalities, including log viewing, video-on-demand (VOD) and stream management, statistics retrieval, background command execution, and more.
</p>
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to main page</b></a>
</p>
---
## File Location
```
/home/xc_vm/wwwdir/api.php
```
## API Architecture Overview
**Base URI:** `http://<host>:25461/api.php`
**Authentication:** `password` parameter matching the `live_streaming_pass` configuration
**Example:**
`http://<host>:25461/api.php?&password=<live_streaming_pass>`
---
## Main API Endpoints
### 1. VOD Management
#### **GET** `/api.php?action=vod`
**Description:** Starts or stops Video-on-Demand (VOD) streams.
**Parameters:**
| Parameter | Type | Required | Description |
| ---------- | ----------------- | -------- | -------------------------------------- |
| stream_ids | array of integers | yes | List of stream IDs. |
| function | string | yes | Action to perform (`start` or `stop`). |
---
### 2. Live Stream Management
#### **GET** `/api.php?action=stream`
**Description:** Starts or stops live streams.
**Parameters:**
| Parameter | Type | Required | Description |
| ---------- | ----------------- | -------- | -------------------------------------- |
| stream_ids | array of integers | yes | List of stream IDs. |
| function | string | yes | Action to perform (`start` or `stop`). |
---
### 3. System Telemetry
#### **GET** `/api.php?action=stats`
**Description:** Retrieves system statistics.
**Response:**
```json
{
"cpu": 8.32,
"cpu_cores": 56,
"cpu_avg": 8.86,
"cpu_name": "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz",
...
}
```
---
### 4. Process Lifecycle Check
#### **GET** `/api.php?action=pidsAreRunning`
**Description:** Checks whether specified process IDs (PIDs) are currently running.
**Parameters:**
| Parameter | Type | Required | Description |
| --------- | ----------------- | -------- | ----------------------- |
| pids | array of integers | yes | List of PIDs to verify. |
| program | string | yes | Program name. |
---
### 5. Get File
#### **GET** `/api.php?action=getFile`
**Description:** Downloads the specified file.
**Parameters:**
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ----------------- |
| filename | string | yes | Path to the file. |
**Response:**
* File contents.
---
### 6. Directory Listing
#### **GET** `/api.php?action=viewDir`
**Description:** Retrieves a directory listing.
**Parameters:**
| Parameter | Type | Required | Description |
| --------- | ------ | -------- | ---------------------- |
| dir | string | yes | Path to the directory. |
**Response:**
```html
<ul class="jqueryFileTree" style="display: none;">
<li class="directory collapsed"><a href="#" rel="/path/to/directory/">directory_name</a></li>
<li class="file ext_txt"><a href="#" rel="/path/to/file.txt">file.txt</a></li>
</ul>
```
---
### 7. Connection Redirection
#### **GET** `/api.php?action=redirect_connection`
**Description:** Redirects a connection based on the activity ID and stream ID.
**Parameters:**
| Parameter | Type | Required | Description |
| ----------- | ------- | -------- | ------------ |
| activity_id | integer | yes | Activity ID. |
| stream_id | integer | yes | Stream ID. |
---
### 8. Send Signal
#### **GET** `/api.php?action=signal_send`
**Description:** Sends a signal message to trigger an action.
**Parameters:**
| Parameter | Type | Required | Description |
| ----------- | ------- | -------- | ------------------- |
| message | string | yes | Message or command. |
| activity_id | integer | yes | Activity ID. |
---
### 9. Clear Temporary Folder
#### **GET** `/api.php?action=free_temp`
**Description:** Deletes temporary files and executes a caching script.
---
### 10. Clear Streams Folder
#### **GET** `/api.php?action=free_streams`
**Description:** Clears the streams directory.
---
### 11. Get Free Disk Space
#### **GET** `/api.php?action=get_free_space`
**Description:** Returns information about available disk space.
---
### 12. Get Process PIDs
#### **GET** `/api.php?action=get_pids`
**Description:** Returns a list of running process IDs.
---
### 13. Kill Process by PID
#### **GET** `/api.php?action=kill_pid`
**Description:** Terminates a process by its PID.
---
## Error Codes
| Code | Description |
| -------------------- | --------------------------- |
| INVALID_API_PASSWORD | Invalid API password. |
| API_IP_NOT_ALLOWED | IP address not allowed. |
| INVALID_REQUEST | Invalid request parameters. |
---
## Notes
* All requests must be authenticated using the correct API password.
* Some actions may require additional permissions or may be restricted depending on the server configuration.
-456
View File
@@ -1,456 +0,0 @@
<h1 align="center">📡 XtreamCodes API</h1>
<p align="center">
The API provides access to IPTV streams (Live TV, Radio), VOD (Movies), Series, and EPG (TV guide) for applications compatible with XtreamCodes.
It is a core component for integration with <b>XC_VM</b>.
</p>
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [📂 File Location](#file-location)
* [📑 Overview](#overview)
* [🔑 Authorization](#authorization)
* [📺 Live TV (TV & Radio)](#live-tv-tv--radio)
* [🎬 VOD (Movies)](#vod-movies)
* [📽 Series](#series)
* [🎞 Media Access](#media-access)
* [🧾 Notes](#notes)
---
## 📂 File Location
The main API file is located at:
```
/home/xc_vm/wwwdir/player_api.php
```
---
## 📑 Overview
The API is divided into key sections for easier integration.
Each endpoint includes example requests and responses.
---
## 🔑 Authorization
Authorization is the first step to access content.
It validates user credentials and returns server information.
### Request
```http
GET /player_api?username={username}&password={password}
```
### Example Response
```json
{
"user_info": {
"username": "testxc",
"password": "testxc",
"message": "Welcome to XC_VM",
"auth": 1,
"status": "Active",
"exp_date": null,
"is_trial": 0,
"created_at": 1757353729,
"max_connections": 1,
"allowed_output_formats": [
"m3u8",
"ts",
"rtmp"
]
},
"server_info": {
"xui": true,
"version": "1.1.0",
"url": "176.124.192.118",
"port": "80",
"https_port": "443",
"server_protocol": "http",
"rtmp_port": "8880",
"timestamp_now": 1757442189,
"time_now": "2025-09-09 19:23:09",
"timezone": "Europe/London"
}
}
```
> 💡 **Tip:** Use the obtained data for subsequent requests to avoid repeated authentication.
---
## 📺 Live TV (TV & Radio)
Endpoints for working with live streams, including categories, streams, and EPG.
### Get All Live Categories
```http
GET /player_api?username={username}&password={password}&action=get_live_categories
```
**Example Response**
```json
[
{
"category_id": "1",
"category_name": "News",
"parent_id": 0
},
{
"category_id": "2",
"category_name": "Sports",
"parent_id": 0
}
]
```
### Get All Live Streams
```http
GET /player_api?username={username}&password={password}&action=get_live_streams
```
**Example Response**
```json
[
{
"num": 1,
"name": "BBC News",
"stream_type": "live",
"stream_id": 101,
"stream_icon": "http://176.124.192.118/images/bbc.png",
"epg_channel_id": "bbc.news.uk",
"added": "1660568200",
"category_id": "1",
"custom_sid": "",
"tv_archive": 0,
"direct_source": "",
"tv_archive_duration": 0
}
]
```
### Get Streams by Category
```http
GET /player_api?username={username}&password={password}&action=get_live_streams&category_id={id}
```
### Get Channel Short EPG
```http
GET /player_api?username={username}&password={password}&action=get_short_epg&stream_id={id}&limit={N}
```
**Example Response**
```json
{
"epg_listings": [
{
"id": 1,
"title": "Morning News",
"start": "2022-08-15 07:00:00",
"end": "2022-08-15 08:00:00",
"description": "Daily morning news update."
}
]
}
```
### Get Full Channel Schedule
```http
GET /player_api?username={username}&password={password}&action=get_simple_data_table&stream_id={id}
```
### Get EPG for All Channels (XMLTV)
```http
GET /xmltv.php?username={username}&password={password}
```
**Example Response (XMLTV)**
```xml
<tv>
<channel id="bbc.news.uk">
<display-name>BBC News</display-name>
</channel>
<programme start="20220815070000 +0000" stop="20220815080000 +0000" channel="bbc.news.uk">
<title>Morning News</title>
<desc>Daily morning news update.</desc>
</programme>
</tv>
```
---
## 🎬 VOD (Movies)
Endpoints for Video on Demand, including categories and movie details.
### Get Movie Categories
```http
GET /player_api?username={username}&password={password}&action=get_vod_categories
```
**Example Response**
```json
[
{
"category_id": "10",
"category_name": "Action",
"parent_id": 0
},
{
"category_id": "11",
"category_name": "Drama",
"parent_id": 0
}
]
```
> ⚠️ **Note:** The full list of categories may be large; only fragments are shown in examples.
### Get All VOD Streams
```http
GET /player_api?username={username}&password={password}&action=get_vod_streams
```
**Example Response**
```json
[
{
"num": 1,
"name": "The Dark Knight (2008)",
"title": "The Dark Knight",
"year": 2008,
"stream_type": "movie",
"stream_id": 1,
"stream_icon": "http://176.124.192.118:80/images/...jpg",
"rating": 8.5,
"rating_5based": 4.3,
"added": 1757343129,
"plot": "Batman raises the stakes in his war on crime. With the ...",
"cast": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine, Maggie Gyllenhaal",
"director": "Christopher Nolan, Christopher Nolan, Steve Gehrke",
"genre": "Drama, Action, Crime",
"release_date": "2008-07-16",
"youtube_trailer": "kmJLuwP3MbY",
"episode_run_time": "152",
"category_id": "1",
"category_ids": [1, 2],
"container_extension": "mp4",
"custom_sid": "",
"direct_source": ""
}
]
```
### Get Movies by Category
```http
GET /player_api?username={username}&password={password}&action=get_vod_streams&category_id={id}
```
### Get Movie Info
```http
GET /player_api?username={username}&password={password}&action=get_vod_info&vod_id={id}
```
---
## 📽 Series
Endpoints for managing TV shows, including categories, seasons, and episodes.
### Get Series Categories
```http
GET /player_api?username={username}&password={password}&action=get_series_categories
```
### Get All Series
```http
GET /player_api?username={username}&password={password}&action=get_series
```
**Example Response**
```json
[
{
"num": 1,
"name": "Braceface (2001)",
"title": "Braceface",
"year": 2001,
"stream_type": "series",
"series_id": 1,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljpT6mCZeHa4zLXMQZ2eaTpGZUSOucptPKyuP5tgpEZm0.jpg",
"plot": "The show, set in Elkford, British Columbia, is based around Sharon Spitz, who is a junior high school student with braces that get in her way of leading a normal teenage life. In the first season, she is enrolled at Mary Pickford Junior High.",
"cast": "Stacey DePass",
"director": "Charles E. Bastien",
"genre": "Drama, Animation, Comedy",
"release_date": "2001-06-02",
"releaseDate": "2001-06-02",
"last_modified": "1757348651",
"rating": "7",
"rating_5based": 3.5,
"backdrop_path": [
"http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeATBaSzxZEgi9EPIvh5kU_50ecbH2L-yDt1PIfqijKTIMg.jpg"
],
"youtube_trailer": null,
"episode_run_time": 25,
"category_id": "4",
"category_ids": [4]
}
]
```
---
### Series by Category
```http
GET /player_api?username={username}&password={password}&action=get_series&category_id={id}
```
### Get Series Info
```http
GET /player_api?username={username}&password={password}&action=get_series_info&series_id={id}
```
**Example Response**
```json
{
"seasons": [
{
"air_date": "2001-06-02",
"episode_count": 26,
"id": 4937,
"name": "Season 1",
"overview": "",
"season_number": 1,
"vote_average": 4.5,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljJBrZ7sNEJHE6hlqofFOJSRKiMRvSj08-T6iTQVWvj2I.jpg",
"cover_big": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljJBrZ7sNEJHE6hlqofFOJSRKiMRvSj08-T6iTQVWvj2I.jpg"
}
],
"info": {
"name": "Braceface (2001)",
"title": "Braceface",
"year": 2001,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljpT6mCZeHa4zLXMQZ2eaTpGZUSOucptPKyuP5tgpEZm0.jpg",
"plot": "The show, set in Elkford, British Columbia, is based around Sharon Spitz, who is a junior high school student with braces that get in her way of leading a normal teenage life. In the first season, she is enrolled at Mary Pickford Junior High.",
"cast": "Stacey DePass",
"director": "Charles E. Bastien",
"genre": "Drama, Animation, Comedy",
"release_date": "2001-06-02",
"releaseDate": "2001-06-02",
"last_modified": "1757348651",
"rating": "7",
"rating_5based": 3.5,
"backdrop_path": [
"http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeATBaSzxZEgi9EPIvh5kU_50ecbH2L-yDt1PIfqijKTIMg.jpg"
],
"youtube_trailer": null,
"episode_run_time": 25,
"category_id": "4",
"category_ids": [4]
},
"episodes": {
"1": [
{
"id": "2",
"episode_num": "1",
"title": "Braceface - S01E01 - Brace Yourself",
"container_extension": "mp4",
"info": {
"release_date": "2001-06-02",
"plot": "Sharon Spitz, a 13-year-old 8th grader gets braces the day before picture day. During the procedure, a thunderstorm causes a power outage, and something strange happens with Sharon's braces, making her do all sorts of weird things!",
"duration_secs": 649,
"duration": "00:10:49",
"movie_image": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeARCK8Ch0a6wlNxuIHhbJ3c1Dg_AqkwSsH-qdpnCvcMsiy6U85vvi1bs1xDOddBeOEQ.jpg",
"bitrate": 2791,
"rating": "5",
"season": "1",
"tmdb_id": "105800",
"cover_big": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeARCK8Ch0a6wlNxuIHhbJ3c1Dg_AqkwSsH-qdpnCvcMsiy6U85vvi1bs1xDOddBeOEQ.jpg"
},
"subtitles": [],
"custom_sid": "",
"added": 1757348651,
"season": 1,
"direct_source": ""
}
]
}
}
```
---
## 🎞 Media Access
After authorization, you can access direct links to media files.
* **Live TV (channel):**
```http
http://176.124.192.118/live/{username}/{password}/{stream_id}.ts
```
* **Movie (VOD):**
```http
http://176.124.192.118/movie/{username}/{password}/{vod_id}.mp4
```
* **Episode:**
```http
http://176.124.192.118/series/{username}/{password}/{episode_id}.mp4
```
> ⚠️ **Important:** On the first request, a redirect occurs to `/auth/...` for authentication before content is served.
---
## 🧾 Notes
* **Output Formats:** Supported formats — `m3u8`, `ts`, `rtmp`. Choose based on your device.
* **Security:** All requests require valid authorization; monitor logs for access errors.
* **Integration:** Use tools like Postman for testing.
Implement response caching in your application for better performance.
> 💬 If you have integration issues, please open an issue in the [repository](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
-321
View File
@@ -1,321 +0,0 @@
<h1 align="center">🧱 XC_VM — Building Binary Files</h1>
<p align="center">
This guide explains how to build binary files for XC_VM.
It is intended for developers and system administrators who want to customize the system.
</p>
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [🔧 Prerequisites](#prerequisites)
* [🌐 Building NGINX](#building-nginx)
* [📺 Building NGINX with RTMP](#building-nginx-with-rtmp)
* [🐘 Building PHP-FPM](#building-php-fpm)
* [📦 Installing PHP Extensions](#installing-php-extensions)
* [⚙️ Building the `network` Binary](#building-the-network-binary)
* [✅ Conclusion](#conclusion)
---
## 🔧 Prerequisites
> ⚠️ **Warning:** All steps should be performed **on the server** where `xc_vm` is installed.
### 1. Install Dependencies
Install the necessary packages for building. This ensures all required tools and libraries are available.
```bash
sudo apt-get install -y \
build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev \
libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev libxslt1-dev \
unzip wget curl git
```
---
## 🌐 Building NGINX
### 1. Download Source Files
#### OpenSSL
```bash
wget https://github.com/openssl/openssl/releases/download/openssl-3.5.1/openssl-3.5.1.tar.gz
tar -xzvf openssl-3.5.1.tar.gz
```
#### Zlib
```bash
wget https://zlib.net/zlib-1.3.1.tar.gz
tar -xzvf zlib-1.3.1.tar.gz
```
#### PCRE
```bash
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -xzvf pcre-8.45.tar.gz
```
#### FLV Module
```bash
wget https://github.com/winshining/nginx-http-flv-module/archive/refs/tags/v1.2.12.zip
unzip v1.2.12.zip
```
#### Nginx
```bash
wget https://nginx.org/download/nginx-1.28.0.tar.gz
tar -zxvf nginx-1.28.0.tar.gz
cd nginx-1.28.0
```
### 2. Configure Build
Configure a static build with required modules:
```bash
./configure \
--prefix=/home/xc_vm/bin/nginx \
--with-compat \
--with-http_auth_request_module \
--with-file-aio \
--with-threads \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-cc-opt='-static -static-libgcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \
--with-ld-opt='-static -Wl,-z,relro -Wl,-z,now -pie' \
--with-pcre=../pcre-8.45 \
--with-pcre-jit \
--with-zlib=../zlib-1.3.1 \
--with-openssl=../openssl-3.5.1 \
--with-openssl-opt=no-nextprotoneg
```
### 3. Build and Install
```bash
make
make install
```
---
## 📺 Building NGINX with RTMP
### 1. Download RTMP Module
```bash
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz
tar -xzvf v1.2.2.tar.gz
```
### 2. Configure Build
```bash
cd nginx-1.28.0
./configure \
--prefix=/home/xc_vm/bin/nginx_rtmp \
--add-module=../nginx-http-flv-module-1.2.12 \
--with-compat \
--with-http_auth_request_module \
--with-file-aio \
--with-threads \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-cc-opt='-static -static-libgcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \
--with-ld-opt='-static -Wl,-z,relro -Wl,-z,now -pie'
```
### 3. Build and Install
```bash
make
make install
```
### 4. Rename Executable
```bash
mv /home/xc_vm/bin/nginx_rtmp/sbin/nginx /home/xc_vm/bin/nginx_rtmp/sbin/nginx_rtmp
```
---
## 🐘 Building PHP-FPM
### 1. Install Dependencies
```bash
sudo apt-get install -y \
libcurl4-gnutls-dev libbz2-dev libzip-dev autoconf automake \
libtool m4 gcc make pkg-config libmaxminddb-dev libssh2-1-dev
```
### 2. Download PHP Source
```bash
wget -O php-8.1.33.tar.gz http://php.net/get/php-8.1.33.tar.gz/from/this/mirror
tar -xzvf php-8.1.33.tar.gz
cd php-8.1.33
```
### 3. Configure Build
```bash
./configure \
--prefix=/home/xc_vm/bin/php \
--with-fpm-user=xc_vm \
--with-fpm-group=xc_vm \
--enable-gd \
--with-jpeg \
--with-freetype \
--enable-static \
--disable-shared \
--enable-opcache \
--enable-fpm \
--without-sqlite3 \
--without-pdo-sqlite \
--enable-mysqlnd \
--with-mysqli \
--with-curl \
--disable-cgi \
--with-zlib \
--enable-sockets \
--with-openssl \
--enable-shmop \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-calendar \
--disable-rpath \
--enable-inline-optimization \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--with-libxml \
--with-pdo-mysql \
--disable-mbregex \
--with-pear
```
### 4. Build and Install
```bash
make
make install
```
---
## 📦 Installing PHP Extensions
Use the built-in `pecl` to install extensions:
```bash
/home/xc_vm/bin/php/bin/pecl install maxminddb
/home/xc_vm/bin/php/bin/pecl install ssh2
/home/xc_vm/bin/php/bin/pecl install igbinary
/home/xc_vm/bin/php/bin/pecl install redis
```
### Configuring Redis Extension
During PECL installation, you will be prompted:
```
enable igbinary serializer support? [no] : yes
enable lzf compression support? [no] :
enable zstd compression support? [no] :
enable msgpack serializer support? [no] :
enable lz4 compression? [no] :
use system liblz4? [yes] :
```
Recommended answers: `yes` for igbinary, others optional.
---
## ⚙️ Building the `network` Binary
### 1. Install `PyInstaller` (one-time)
```bash
pip install -U pyinstaller
```
### 2. Build Binary
```bash
cd /home/xc_vm/bin
pyinstaller --onefile network.py
```
The executable will be located in:
```bash
/home/xc_vm/bin/dist/network
```
### 3. Move Binary to Final Location
```bash
mv /home/xc_vm/bin/dist/network /home/xc_vm/bin/network
```
### 4. Clean Temporary Directories
```bash
rm -rf build dist network.spec __pycache__
```
---
## ✅ Conclusion
After completing all steps, you will have your own statically built binaries:
* `nginx`
* `nginx_rtmp`
* `php-fpm`
* `pecl` extensions
* `network` (Python script binary)
> 💡 **Tip:** If issues occur, check build logs or open an [issue](https://github.com/Vateron-Media/XC_VM/issues).
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
-320
View File
@@ -1,320 +0,0 @@
Вот английский перевод руководства по сборке FFmpeg для XC_VM:
---
<h1 align="center">🚀 XC_VM — FFmpeg Build Guide</h1>
<p align="center">
This guide explains how to build FFmpeg with NVIDIA hardware acceleration (NVENC/CUVID) and statically link libraries for full portability within the XC_VM project.
</p>
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [📋 Requirements](#requirements)
* [🔧 Configuration](#configuration)
* [🛠 Install Build Tools](#install-build-tools)
* [🎶 Compile and Include Codecs](#compile-and-include-codecs)
* [🖥 NVIDIA & CUDA Installation](#nvidia--cuda-installation)
* [🔨 FFmpeg Build](#ffmpeg-build)
* [📦 Installation](#installation)
* [✅ Verification](#verification)
* [🧾 Notes](#notes)
* [🔄 Version Compatibility](#version-compatibility)
---
## 📋 Requirements
* **Ubuntu 22.04 or newer** — recommended OS for a stable build.
* NVIDIA GPU with **NVENC support** (optional but recommended for hardware acceleration).
* ~15 GB of free disk space for sources and temporary files.
* Stable internet connection to download dependencies.
> 💡 **Tip:** Ensure your system is updated before starting to avoid package conflicts.
---
## 🔧 Configuration
Set environment variables to customize the build, allowing easy adjustments to versions and paths:
```bash
# FFmpeg version to build
export FFMPEG_VERSION="8.0"
# Installation directory
export INSTALL_DIR="/home/xc_vm/bin/ffmpeg_bin"
# Build directory
export BUILD_DIR="$HOME/ffmpeg_sources"
# CUDA version
export CUDA_VERSION="12-2"
# NVIDIA driver version
export NVIDIA_DRIVER_VERSION="535"
```
---
## 🛠 Install Build Tools
Update the system and install essential development packages:
```bash
sudo apt-get update -qq && sudo apt-get -y install \
autoconf automake build-essential cmake git-core \
libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev \
libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev \
libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev \
meson ninja-build pkg-config texinfo wget yasm \
zlib1g-dev mercurial nasm libssl-dev software-properties-common
```
---
## 🎶 Compile and Include Codecs
Build libraries from source for static integration into FFmpeg, supporting popular formats without external dependencies.
### 2.1 Create Build Directory
```bash
mkdir -p ${BUILD_DIR:-~/ffmpeg_sources} && cd ${BUILD_DIR:-~/ffmpeg_sources}
```
### 2.2 H.264 (libx264)
```bash
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared --enable-pic
make -j$(nproc)
sudo make install
cd ..
```
### 2.3 H.265 (libx265)
```bash
git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git/build
cmake ../source -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR:-$HOME/ffmpeg_build}" -DENABLE_SHARED=OFF
make -j$(nproc)
sudo make install
cd ../..
```
### 2.4 VP8/VP9 (libvpx)
```bash
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared --enable-pic
make -j$(nproc)
sudo make install
cd ..
```
### 2.5 Opus Audio (libopus)
```bash
wget https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
tar -xvzf opus-1.5.2.tar.gz
cd opus-1.5.2
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
### 2.6 Additional Libraries
* **libass** (subtitles)
* **libfreetype** (fonts)
* **libvorbis** (audio)
* **libmp3lame** (MP3)
* **libtheora** (Theora)
* **librtmp** (RTMP)
* **libunistring** (required by gnutls and librtmp)
* **bzip2**
*(Use the same build commands as in the Russian version, adjusting paths as needed.)*
---
## 🖥 NVIDIA & CUDA Installation
Install NVIDIA drivers and CUDA for hardware acceleration.
### 3.1 NVIDIA Driver Installation
```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-${NVIDIA_DRIVER_VERSION:-535}
```
> ⚠️ **Important:** Reboot after installation and verify GPU compatibility.
### 3.2 CUDA Toolkit Installation
```bash
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install -y cuda-toolkit-${CUDA_VERSION:-12-2}
```
### 3.3 NVENC Headers
```bash
cd ${BUILD_DIR:-~/ffmpeg_sources}
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make PREFIX="${INSTALL_DIR:-$HOME/ffmpeg_build}" install
cd ..
```
### 3.4 Optional NVIDIA Tools
```bash
sudo apt install -y nvidia-cuda-toolkit nvidia-cuda-dev
```
---
## 🔨 FFmpeg Build
### 4.1 Download Source
```bash
cd ${BUILD_DIR:-~/ffmpeg_sources}
wget https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION:-8.0}.tar.bz2
tar xjvf ffmpeg-${FFMPEG_VERSION:-8.0}.tar.bz2
cd ffmpeg-${FFMPEG_VERSION:-8.0}
```
### 4.2 Configuration
```bash
export PATH="${INSTALL_DIR:-$HOME/bin}:$PATH"
export PKG_CONFIG_PATH="${INSTALL_DIR:-$HOME/ffmpeg_build}/lib/pkgconfig"
./configure \
--prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" \
--pkg-config-flags="--static" \
--extra-cflags="-I${INSTALL_DIR:-$HOME/ffmpeg_build}/include -I/usr/local/cuda/include" \
--extra-ldflags="-L${INSTALL_DIR:-$HOME/ffmpeg_build}/lib -L/usr/local/cuda/lib64 -Wl,-Bstatic -lcrypto -lssl -Wl,-Bdynamic" \
--extra-version=XCVM \
--extra-libs="-lsupc++ -lgmp -lz -lunistring -lpthread -lm -lrt -ldl" \
--bindir="${INSTALL_DIR:-$HOME/bin}" \
--enable-gpl \
--enable-gnutls \
--enable-libass \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-librtmp \
--enable-libtheora \
--enable-bzlib \
--enable-fontconfig \
--enable-zlib \
--enable-nvenc \
--enable-ffnvcodec \
--enable-cuvid \
--enable-version3 \
--enable-nonfree \
--enable-pthreads \
--enable-runtime-cpudetect \
--enable-gray \
--disable-alsa \
--disable-indev=alsa \
--disable-outdev=alsa \
--disable-ffplay \
--disable-doc \
--disable-debug \
--disable-autodetect \
--enable-static \
--enable-muxer=hls \
--enable-muxer=dash \
--enable-demuxer=hls \
--extra-cflags=--static \
--target-os=linux
```
### 4.3 Compile
```bash
make -j$(nproc)
```
---
## 📦 Installation
```bash
mkdir -p ${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/
cp ffmpeg ffprobe ${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/
```
---
## ✅ Verification
Check version and NVIDIA support:
```bash
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -version
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffprobe -version
```
Check NVENC and CUVID support:
```bash
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -encoders | grep nvenc
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -decoders | grep cuvid
```
---
## 📝 Notes
1. All libraries are statically linked into the FFmpeg binary, ensuring full portability.
2. The NVIDIA driver must be compatible with your GPU.
3. A **reboot** may be required after installing drivers.
4. Building FFmpeg is CPU- and memory-intensive.
5. The resulting binary will be large due to included dependencies.
6. Adjust environment variables to match your system.
7. Configuration flags may need adjustments for different FFmpeg versions.
---
## 🔄 Version Compatibility
| FFmpeg Version | Recommended CUDA | Notes |
|----------------|------------------|------------------|
| 8.x | 12.2+ | Latest features |
| 7.x | 12.0+ | Stable |
| 6.x | 11.8+ | Outdated |
Check the [FFmpeg documentation](https://ffmpeg.org/) for specific version requirements.
---
<p align="center">
<a href="../../en/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-78
View File
@@ -1,78 +0,0 @@
<h1 align="center">❓ FAQ — Frequently Asked Questions</h1>
<p align="center">
Here you’ll find answers to the most common questions and issues when working with <b>XC_VM</b>.
</p>
---
## ⚙️ Stream Issues
<details>
<summary><b>❌ My stream doesn’t start on MAIN or LB</b></summary>
---
### 🔍 Diagnostics
Connect to your server console and run the following command:
```bash
sudo -u xc_vm /home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/monitor.php 291
````
> 🧩 Where `291` is your **stream ID** (replace it with your own).
---
### 📄 What the command does
The **monitor.php** script 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:
```bash
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
1. Run the diagnostic command.
2. Check for any errors.
3. Install missing libraries if necessary.
4. Report any other errors for further analysis.
---
</details>
---
📘 *This page is updated over time. If you discover a new common issue — please suggest it in [Issues](https://github.com/Vateron-Media/XC_VM/issues).*
---
-53
View File
@@ -1,53 +0,0 @@
<h1 align="center">📚 XC_VM Documentation</h1>
<p align="center">
Welcome to the official XC_VM documentation!<br>
Here you’ll find everything you need to work with the project — from API guides to build and update instructions.
</p>
---
## 🔌 API Reference
| Section | Description |
|:---------|:-------------|
| [System API](api/system_api.md) | Core system endpoints and utilities. |
| [Get Playlist](api/playlist.md) | Generate and download user playlists. |
| [XtreamCodes API](api/xtreamcodes_api.md) | Integration with XtreamCodes-compatible systems. |
---
## 🛠 Build & Compilation
| Section | Description |
|:---------|:-------------|
| [Binaries](builds/build_binaries.md) | Instructions for building core binary components. |
| [FFmpeg](builds/build_ffmpeg.md) | Guide to building and configuring FFmpeg for XC_VM. |
---
## 🔄 Update & Release
| Section | Description |
|:---------|:-------------|
| [Panel Update](update.md) | Step-by-step guide for upgrading XC_VM to the latest version. |
| [Pre-Release Checklist](updates_checklist.md) | A checklist to follow before publishing a new release. |
---
## 📦 Additional Resources
| Section | Description |
|:---------|:-------------|
| [Migration Guide](migration_guide.md) | Step-by-step guide for migrating from XUI, Xtream Codes, and similar panels. |
| [FAQ](faq.md) | Frequently asked questions and troubleshooting. |
---
<p align="center">
<a href="https://github.com/Vateron-Media/XC_VM">
🔗 Back to Repository
</a>
</p>
---
-118
View File
@@ -1,118 +0,0 @@
<h1 align="center">🧭 XC_VM Migration Guide</h1>
<p align="center">
Easily migrate from compatible IPTV systems using the built-in XC_VM migration tool.
</p>
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [⚙️ Before You Start](#before-you-start)
* [🚀 Migration Steps](#migration-steps)
* [🔑 Restoring Access After Migration](#restoring-access-after-migration)
* [🧩 Post-Migration](#post-migration)
* [🖥️ Load Balancer Preparation](#load-balancer-preparation)
---
## ⚙️ Before You Start
> 💡 **Recommendation:**
> It’s best to perform migration on a **fresh XC_VM installation**.
If you decide to use an **existing installation**, note the following:
* XC_VM **will delete all tables** in your main database that match the data found in your migration database.
* Always **create backups** before performing migration.
---
## 🚀 Migration Steps
### 1. Upload Backup
Upload your existing database backup to the XC_VM server via **SFTP**.
In this example, it is located at:
```
/tmp/backup.sql
```
### 2. Restore Backup to Migration Database
Use the tools script to clear the existing migration database and restore the backup:
```bash
/home/xc_vm/tools migration "/tmp/backup.sql"
```
### 3. Start Migration
If the restoration completed without errors, you can start the migration using one of two methods:
#### 🧩 Option 1 — Command Line (Recommended)
Run the migration manually:
```bash
/home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/migrate.php
```
#### 🌐 Option 2 — Web Installer
If you prefer not to use the command line, you can return to the **web installer** via the link provided during panel setup.
Select the **“Migration”** option and follow the on-screen instructions to complete the process interactively.
You will see real-time progress updates while XC_VM migrates your data.
Once complete, you will be able to log in to your system.
---
## 🔑 Restoring Access After Migration
If you cannot log in (e.g., due to missing username/password or invalid access code), you can use **rescue tools**:
### Create a Rescue Access Code
```bash
/home/xc_vm/tools access
```
### Create an Administrator to Restore Access
```bash
/home/xc_vm/tools user
```
> ⚠️ After logging in, immediately **change the access code and administrator credentials**.
---
## 🧩 Post-Migration
* Load balancers will initially appear **disabled**.
* All streams will **automatically stop** for safety.
### Next Steps
1. Reinstall load balancers and **manually start streams** after confirming migration.
2. Review and update **XC_VM default settings**.
3. Check main server data — domains, SSL configuration, etc.
4. Ensure everything matches your environment and settings.
---
## 🖥️ Load Balancer Preparation
You will need to reinstall the OS on the load balancers.
---
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
-90
View File
@@ -1,90 +0,0 @@
<h1 align="center">🔄 XC_VM Update Guide</h1>
<p align="center">
This document describes the process of updating <b>XC_VM</b> via the web control panel. Follow these steps to safely update the system and avoid errors.
</p>
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [⚙️ Before You Start](#before-you-start)
* [🪜 Step-by-Step Instructions](#step-by-step-instructions)
* [🧠 Notes and Recommendations](#notes-and-recommendations)
---
## ⚙️ Before You Start
Make sure all necessary resources are ready before updating. This helps prevent issues and data loss.
* 🔑 **Administrator access** to the control panel.
* 🌐 **Stable internet connection**.
* 💾 **Server data backup** *(strongly recommended before starting)*.
> ⚠️ **Important:** Do not interrupt the update process to avoid system corruption.
---
## 🪜 Step-by-Step Instructions
Follow these steps to update via the panel. Each step is illustrated with a screenshot for convenience.
### 1️⃣ Go to the **“Servers”** Section
* Log in to the control panel.
* Select **Servers** from the main menu.
![Servers](../img/update1.png)
### 2️⃣ Select **“Manage Servers”**
* In the **Servers** section, click **Manage Servers** to open the list of available servers.
![Manage Servers](../img/update2.png)
### 3️⃣ Open the **“Actions”** Menu
* Locate the server you want to update.
* Click the **Actions** button — usually a dropdown menu or an icon next to the server.
![Actions Menu](../img/update3.png)
### 4️⃣ Go to **“Server Tools”**
* In the **Actions** menu, select **Server Tools** to open server management utilities.
![Server Tools](../img/update4.png)
### 5️⃣ Run **“Update Server”**
* In **Server Tools**, click **Update Server**.
* Confirm the action if prompted (password may be required).
* Wait for the update to complete — **do not interrupt the process** to avoid errors.
![Update Server](../img/update5.png)
---
## 🧠 Notes and Recommendations
> 🕒 **Update Duration**
> Depends on server size and internet speed. Usually takes from a few minutes up to an hour.
> ✅ **Post-Update Check**
> After completion, verify server status, restart services, and ensure everything is working correctly.
> ⚠️ **Update Errors**
> If errors occur, check server logs (e.g., in `/home/xc_vm/logs/`). If the problem persists, create an issue in the [repository](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
-142
View File
@@ -1,142 +0,0 @@
<h1 align="center">✅ XC_VM Release Preparation Checklist</h1>
<p align="center">
This document describes the process of creating an <b>XC_VM</b> release — a step-by-step guide for developers on updating the version, building archives, and publishing on GitHub.
</p>
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
---
## 📚 Navigation
* [🔢 1. Update Version](#1-update-version)
* [🧹 2. Deleted Files](#2-deleted-files)
* [⚙️ 3. Build Archives](#3-build-archives)
* [📝 4. Changelog](#4-changelog)
* [🚀 5. GitHub Release](#5-github-release)
---
## 🔢 1. Update Version
* Set the **new `XC_VM_VERSION` value** in the following files:
**Files to edit:**
```
src/www/constants.php
src/www/stream/init.php
```
**Auto-update command:**
```bash
find -type f -name "*.php" -exec sed -i \
"s/define('XC_VM_VERSION', '[0-9]\+\.[0-9]\+\.[0-9]\+');/define('XC_VM_VERSION', 'X.Y.Z');/g" {} \;
```
**Commit the changes with a message:**
```bash
git add .
git commit -m "Bump version to X.Y.Z"
git push
```
> 💡 **Tip:** Replace `X.Y.Z` with the actual version, e.g., `1.2.3`.
---
## 🧹 2. Deleted Files
* Generate a list of deleted files:
```bash
make delete_files_list
```
* Open the file `dist/deleted_files.txt`.
* Copy the contents to `src/includes/cli/update.php` **after the comment** `// Update checkpoint`
> ⚠️ **Important:** Ensure paths are correct to avoid deleting critical files.
---
## ⚙️ 3. Build Archives
* Run the following commands sequentially:
```bash
make new
make lb
make main
make main_update
make lb_update
```
* Make sure the following files are created in `dist/`:
* `loadbalancer.tar.gz` — LB installation archive
* `loadbalancer_update.tar.gz` — LB update archive
* `XC_VM.zip` — MAIN installation archive
* `update.tar.gz` — MAIN update archive
* `hashes.md5` — file with checksums
> 🧰 **Check:** After building, verify archive integrity with `md5sum -c hashes.md5`.
---
## 📝 4. Changelog
Generate the changelog from git first:
```bash
git log --pretty=format:"- %s (%h)" X.Y.Z..main > dist/changes.md
```
* **Then add current release changes** using this JSON:
[https://github.com/Vateron-Media/XC_VM_Update/blob/main/changelog.json](https://github.com/Vateron-Media/XC_VM_Update/blob/main/changelog.json)
* Add current release changes in JSON format:
```json
[
{
"version": "X.Y.Z",
"changes": [
"Description of change 1",
"Description of change 2"
]
}
]
```
> 💬 **Recommendation:** Keep descriptions concise and informative, focusing on key improvements and fixes.
---
## 🚀 5. GitHub Release
* Create a new release on [GitHub Releases](https://github.com/Vateron-Media/XC_VM/releases).
* Attach the following files:
* `dist/loadbalancer.tar.gz`
* `dist/XC_VM.zip`
* `dist/update.tar.gz`
* `dist/loadbalancer_update.tar.gz`
* `dist/hashes.md5`
* Include the changelog in the release description.
> ✅ **Completion:** After publishing, verify that all files are downloadable and checksums match.
---
<p align="center">
<a href="../en/main-page.md"><b>⬅️ Back to Main Page</b></a>
</p>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

-160
View File
@@ -1,160 +0,0 @@
<h1 align="center">🔒 Генерация SSL-сертификата для Nginx в XC_VM</h1>
<p align="center">
В этом документе описан процесс <b>создания самоподписанного SSL-сертификата. Следуйте шагам, чтобы настроить безопасное HTTPS-соединение.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
* [📘 Введение](#-введение)
* [🧭 Расположение конфигурации](#-расположение-конфигурации)
* [🧱 Шаг 1. Создание приватного ключа](#-шаг-1-создание-приватного-ключа)
* [⚙️ Шаг 2. Создание конфигурационного файла servercnf](#️-шаг-2-создание-конфигурационного-файла-servercnf)
* [🔑 Шаг 3. Генерация самоподписанного SSL-сертификата](#-шаг-3-генерация-самоподписанного-ssl-сертификата)
* [📂 Итоговые файлы](#-итоговые-файлы)
* [✅ Результат](#-результат)
* [⚠️ Примечания](#️-примечания)
---
## 📘 Введение
**SSL (Secure Sockets Layer)** используется для шифрования соединений между клиентом и сервером, обеспечивая безопасность данных и доверие пользователей.
В этой инструкции показано, как создать **самоподписанный SSL-сертификат** для встроенного **Nginx** в проекте **XC_VM**.
---
## 🧭 Расположение конфигурации
Все SSL-файлы (ключ, сертификат и конфигурация) хранятся в директории:
```bash
/home/xc_vm/bin/nginx/conf
```
Перед началом работы перейдите в неё:
```bash
cd /home/xc_vm/bin/nginx/conf
```
---
## 🧱 Шаг 1. Создание приватного ключа
Сгенерируйте **RSA-приватный ключ** (2048 бит):
```bash
openssl genrsa -out server.key 2048
```
📄 После выполнения появится файл `server.key`, содержащий **закрытый ключ**.
Храните его **в секрете** — этот файл используется для подписи SSL-сертификата.
---
## ⚙️ Шаг 2. Создание конфигурационного файла `server.cnf`
Создайте файл конфигурации с параметрами сертификата:
```bash
cat > server.cnf << EOF
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = RU
ST = Moscow
L = Moscow
O = XC_VM
OU = XC_VM
CN = XC_VM
[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = XC_VM
EOF
```
📘 **Описание параметров:**
| Поле | Значение | Назначение |
| ------- | -------- | ------------------------------- |
| `C` | RU | Страна (Country) |
| `ST` | Moscow | Регион (State) |
| `L` | Moscow | Город (Locality) |
| `O` | XC_VM | Организация |
| `OU` | XC_VM | Отдел / подразделение |
| `CN` | XC_VM | Имя хоста (Common Name) |
| `DNS.1` | XC_VM | Альтернативное имя домена (SAN) |
> 💡 **Совет:** можно указать реальное доменное имя, например `DNS.1 = example.com`, чтобы избежать предупреждений в браузере.
---
## 🔑 Шаг 3. Генерация самоподписанного SSL-сертификата
Сгенерируйте сертификат с помощью созданного ключа и конфигурации:
```bash
openssl req -new -x509 -key server.key -out server.crt -days 3650 -config server.cnf
```
📆 **Пояснения:**
* `-new -x509` — создаёт новый самоподписанный сертификат.
* `-days 3650` — срок действия сертификата (10 лет).
* `-config server.cnf` — использование конфигурационного файла.
* Результатом будет файл `server.crt`.
---
## 📂 Итоговые файлы
После всех шагов в `/home/xc_vm/bin/nginx/conf` должны находиться:
| Файл | Назначение |
| ------------ | ------------------------------ |
| `server.key` | Приватный ключ |
| `server.crt` | Самоподписанный SSL-сертификат |
| `server.cnf` | Конфигурация сертификата |
---
## ✅ Результат
Теперь ваш **XC_VM Nginx сервер** доступен по протоколу **HTTPS**, используя созданный самоподписанный сертификат.
Браузеры могут предупреждать о «недоверенном сертификате» — это нормально для самоподписанных SSL.
---
## ⚠️ Примечания
* Самоподписанные сертификаты подходят **для внутреннего использования или тестирования**.
* Для публичных доменов используйте сертификаты от **доверенных центров** (например, [Let's Encrypt](https://letsencrypt.org/)).
* При изменении доменного имени (`CN` или `DNS.1`) необходимо **сгенерировать сертификат заново**.
* Чтобы проверить сертификат, выполните:
```bash
openssl x509 -in server.crt -text -noout
```
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-177
View File
@@ -1,177 +0,0 @@
<h1 align="center">⚙️ Механизм обновлений в XC_VM</h1>
<p align="center">
Система обновлений <b>XC_VM</b> реализована как многоуровневый процесс — от веб-интерфейса до системных скриптов.
Такой подход обеспечивает <b>надёжность, автоматизацию и целостность данных</b> при обновлении панели.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
* [🔁 1. Инициация обновления](#-1-инициация-обновления)
* [🕒 2. Запуск через CRON](#-2-запуск-через-cron)
* [🧠 3. Управление обновлением (PHP-уровень)](#-3-управление-обновлением-php-уровень)
* [🐍 4. Системное обновление (Python-уровень)](#-4-системное-обновление-python-уровень)
* [🔄 5. Завершение обновления](#-5-завершение-обновления)
* [✅ 6. Итоговая схема работы](#-6-итоговая-схема-работы)
* [🧩 Ключевые особенности](#-ключевые-особенности)
---
## 🔁 1. Инициация обновления
Процесс начинается с **нажатия кнопки "Обновить"** в веб-интерфейсе панели.
* Создаётся сигнал `update`, который записывается в таблицу `signals` базы данных.
* Этот сигнал выступает **триггером**, запускающим дальнейший процесс обновления.
---
## 🕒 2. Запуск через CRON
Каждую **минуту** выполняется системное задание CRON:
```bash
php /home/xc_vm/includes/cli/root_signals.php
```
Скрипт `root_signals.php` проверяет наличие новых сигналов и при обнаружении `update` запускает:
```bash
/home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/update.php update
```
> ⚙️ Этот механизм позволяет выполнять обновления **автоматически**, без ручного вмешательства администратора.
---
## 🧠 3. Управление обновлением (PHP-уровень)
Основная логика находится в:
```
/home/xc_vm/includes/cli/update.php
```
На этом этапе выполняются следующие действия:
1. Определение **текущей версии панели** (`MAIN` или `LB`).
2. Получение данных о новой версии с **GitHub**:
* Ссылка на архив обновления.
* Контрольная сумма (хеш) для проверки целостности.
3. Скачивание архива во временную директорию.
4. Проверка соответствия хеш-суммы.
5. Запуск системного обновления с помощью Python:
```bash
sudo /usr/bin/python3 /home/xc_vm/update "/home/xc_vm/tmp/.update.tar.gz" "HASH" > /dev/null 2>&1 &
```
---
## 🐍 4. Системное обновление (Python-уровень)
После вызова передача управления переходит к скрипту:
```
/home/xc_vm/update
```
Он выполняет операции на уровне системы:
1. **Повторная проверка контрольной суммы** архива.
2. **Остановка панели**, чтобы избежать конфликтов при обновлении.
3. **Распаковка** обновления в каталог:
```bash
/home/xc_vm/
```
4. **Настройка прав доступа:**
```bash
chown -R xc_vm:xc_vm /home/xc_vm/
```
5. **Запуск пост-обновления:**
```bash
/home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/update.php post-update
```
6. **Перезапуск панели** в рабочем режиме.
---
## 🔄 5. Завершение обновления
Финальные действия снова выполняются в `update.php`:
1. Проверка, **включено ли автообновление LB**:
* Если обновлялся `MAIN`, создаются сигналы обновления для всех Load Balancer’ов.
2. Обновление **версии панели** в базе данных.
3. Удаление устаревших файлов.
4. Повторное выравнивание прав:
```bash
chown -R xc_vm:xc_vm /home/xc_vm/
```
5. Перезагрузка системных демонов:
```bash
sudo systemctl daemon-reload
```
6. Проверка статуса панели:
```bash
sudo /home/xc_vm/status
```
7. Завершение процесса обновления.
---
## ✅ 6. Итоговая схема работы
```text
[ Веб-интерфейс ]
│
▼
[ БД: сигнал update ]
│
▼
[ CRON → root_signals.php ]
│
▼
[ update.php (PHP) ]
│
▼
[ update (Python) ]
│
▼
[ post-update → update.php ]
│
▼
[ Завершение, рестарт демонов, обновление версии ]
```
---
## 🧩 Ключевые особенности
* 🔒 **Двойная проверка целостности** (на уровне PHP и Python).
* 🧠 **Автоматическое распространение обновлений** между MAIN и LB.
* 🧹 **Очистка устаревших файлов** и выравнивание прав доступа.
* 🔄 **Безопасный перезапуск панели** после установки.
* ⚙️ **Гибкость и автономность** за счёт CRON и сигналов.
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-124
View File
@@ -1,124 +0,0 @@
<h1 align="center">📺 Получить список воспроизведения</h1>
<p align="center">
Этот API предоставляет функции аутентификации и создания плейлистов для XC_VM. Клиенты могут аутентифицироваться с помощью имени пользователя/пароля или токена, после чего генерируется персонализированный плейлист.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [📂 Расположение файла](#расположение-файла)
- [🔑 Аутентификация](#аутентификация)
- [🚀 Конечные точки](#конечные-точки)
- [❌ Коды ошибок](#коды-ошибок)
- [🧾 Примечания](#примечания)
---
## 📂 Расположение файла
Основной файл API расположен по следующему пути:
```bash
/home/xc_vm/wwwdir/playlist.php
```
---
## 🔑 Аутентификация
API требует аутентификацию либо через имя пользователя и пароль, либо через токен. Это обеспечивает безопасность доступа к контенту.
### Базовый URL
```http
http://<ваш-домен>:80/playlist
```
---
## 🚀 Конечные точки
### 1. Аутентификация и создание плейлиста
**Метод и конечная точка:**
```http
GET /
```
**Параметры запроса:**
| Параметр | Тип | Требуется | Описание |
|------------|----------|-----------|----------|
| username | string | Yes* | Имя пользователя для аутентификации (обязательно, если не используется `token`). |
| password | string | Yes* | Пароль для аутентификации (требуется, если `token` не используется). |
| token | string | Yes* | Токен аутентификации (требуется, если имя пользователя и пароль не используются). |
| type | string | No | Тип устройства (по умолчанию: `m3u_plus`). |
| key | string | No | Тип контента (live — прямой эфир, movies — фильмы, radio_streams — радио, series — сериалы). |
| output | string | No | Формат вывода (hls или m3u). |
| nocache | boolean | No | Если true, отключается кэширование. |
> 💡 *Yes* — обязательно один из вариантов: либо username/password, либо token.
**Примеры запросов:**
```bash
curl -X GET "http://<your-domain>:80/playlist/username/password/type&output=hls&key=live"
```
```bash
curl -X GET "http://<your-domain>:80/playlist/token/type&output=hls&key=live"
```
**Ответ:**
- Файл плейлиста в указанном формате (M3U или HLS).
---
## ❌ Коды ошибок
В случае ошибок API возвращает соответствующие коды для диагностики проблем.
| Код ошибки | Описание |
|-------------------------|----------|
| NO_CREDENTIALS | Отсутствуют данные аутентификации. |
| INVALID_CREDENTIALS | Неверное имя пользователя, пароль или токен. |
| BLOCKED_USER_AGENT | Агент пользователя заблокирован. |
| EXPIRED | Срок действия учетной записи истек. |
| DEVICE_NOT_ALLOWED | Тип устройства не разрешен. |
| BANNED | Пользователь заблокирован. |
| DISABLED | Учетная запись отключена. |
| EMPTY_USER_AGENT | Агент пользователя необходим, но отсутствует. |
| NOT_IN_ALLOWED_IPS | IP-адрес не разрешен. |
| NOT_IN_ALLOWED_COUNTRY | Страна не разрешена. |
| NOT_IN_ALLOWED_UAS | Агент пользователя не разрешен. |
| ISP_BLOCKED | Провайдер заблокирован. |
| ASN_BLOCKED | Применено ограничение ASN. |
| DOWNLOAD_LIMIT_REACHED | Слишком много запросов. |
| GENERATE_PLAYLIST_FAILED | Не удалось сгенерировать список воспроизведения. |
> ⚠️ **Совет:** Проверьте логи сервера для дополнительных деталей при возникновении ошибок.
---
## 🧾 Примечания
- **Параметры запроса:** Убедитесь, что все параметры указаны корректно, чтобы избежать ошибок аутентификации.
- **Ограничения:** API применяет фильтры по агенту пользователя, IP-адресу и стране для повышения безопасности.
- **Защита от перегрузки:** Установлены лимиты на количество запросов, чтобы предотвратить чрезмерную нагрузку на сервер.
- **Рекомендации:** Для тестирования используйте инструменты вроде cURL или Postman. В продакшене интегрируйте с вашим приложением для автоматизированной генерации плейлистов.
> 💬 Если возникнут вопросы по интеграции, создайте issue в [репозитории](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
-164
View File
@@ -1,164 +0,0 @@
<h1 align="center">📡 Системный API (Требуется проверка методов)</h1>
<p align="center">
Этот API предоставляет различные функциональные возможности, включая просмотр журналов, управление видео по запросу (VOD) и потоками, получение статистики, выполнение фоновых команд и многое другое.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## Расположение файлов
```
/home/xc_vm/wwwdir/api.php
```
## Обзор архитектуры API
**Базовый URI**: `http://<host>:25461/api.php`
**Аутентификация**: `password` параметр, соответствующий конфигурации `live_streaming_pass`
**Пример**: `http://<host>:25461/api.php?&password=<live_streaming_pass>`
---
## Основные конечные точки API
### 1. Управление VOD
#### **GET** `/api.php?action=vod`
**Описание:** Запуск или остановка потоков видео по запросу (VOD).
**Параметры:**
| Параметр | Тип | Требуется | Описание |
|------------|----------|----------|-------------|
|stream_ids |массив целых чисел |yes |Список идентификаторов потоков. |
|function |string |yes |Действие, которое необходимо выполнить (`start` или `stop`)|
---
### 2. Управление трансляций
#### **GET** `/api.php?action=stream`
**Описание:** Запуск или остановка прямых трансляций.
**Параметры:**
| Параметр | Тип | Требуется | Описание |
|------------|----------|----------|-------------|
|stream_ids |массив целых чисел |yes |Список идентификаторов потоков. |
|function |string |yes |Действие, которое необходимо выполнить (`start` или `stop`)|
---
### 3. Телеметрия системы
#### **GET** `/api.php?action=stats`
**Описание:** Получает системную статистику.
**Ответ:**
```json
{
"cpu": 8.32,
"cpu_cores": 56,
"cpu_avg": 8.86,
"cpu_name": "Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz",
...,
}
```
---
### 4. Проверка жизненного цикла процесса
#### **GET** `/api.php?action=pidsAreRunning`
**Описание:** Проверяет, запущены ли заданные идентификаторы процессов (PID).
| Параметр | Тип | Требуется | Описание |
|------------|----------|----------|-------------|
|pids |массив целых чисел | yes | Список PID для проверки. |
|program |string |yes |Имя программы. |
---
### 5. Получение файла
#### **GET** `/api.php?action=getFile`
**Описание:** Загружает указанный файл.
**Параметры:**
| Параметр | Тип | Требуется | Описание |
|------------|----------|----------|-------------|
|filename |string |yes |Путь к файлу.|
**Ответ:**
- Содержимое файла.
---
### 6. Список содержимого каталога
#### **GET** `/api.php?action=viewDir`
**Описание:** Получает список каталогов.
**Параметры:**
| Параметр | Тип | Требуется | Описание |
|------------|----------|----------|-------------|
|dir |string |yes |Путь к каталогу.|
**Ответ:**
```html
<ul class="jqueryFileTree" style="display: none;">
<li class="directory collapsed"><a href="#" rel="/path/to/directory/">directory_name</a></li>
<li class="file ext_txt"><a href="#" rel="/path/to/file.txt">file.txt</a></li>
</ul>
```
---
### 7. Перенаправление соединения
#### **GET** `/api.php?action=redirect_connection`
**Описание:** Перенаправляет соединение на основе идентификатора активности и идентификатора потока.
**Параметры:**
| Параметр | Тип | Обязательный | Описание |
|------------|----------|----------|-------------|
|activity_id |целое число |да |Идентификатор активности. |
|stream_id |целое число |да |Идентификатор потока. |
---
### 8. Отправить сигнал
#### **GET** `/api.php?action=signal_send`
**Описание:** Отправляет сигнальное сообщение для выполнения действия.
**Параметры:**
| Параметр | Тип | Обязательный | Описание |
|------------|----------|----------|-------------|
|message |строка |да |Предложение для отмены. |
|activity_id |целое число |да |Идентификатор активности.|
---
### 9. Очистить папку с временными файлами
#### **GET** `/api.php?action=free_temp`
**Описание:** Удаляет временные файлы и запускает скрипт для кэширования.
---
### 10. Очистить папку трансляций
#### **GET** `/api.php?action=free_streams`
**Описание:** Очищает папку потоков.
---
### 11. Получить свободное место
#### **GET** `/api.php?action=get_free_space`
**Описание:** Возвращает информацию о свободном дисковом пространстве.
---
### 12. Получить PID
#### **GET** `/api.php?action=get_pids`
**Описание:** Возвращает список запущенных процессов.
---
### 13. Завершить процес по PID
#### **GET** `/api.php?action=kill_pid`
**Описание:** Убивает процесс по PID.
---
## Коды ошибок
| Код | Описание |
|----------------------|-------------|
| INVALID_API_PASSWORD | Пароль API неверен |
| API_IP_NOT_ALLOWED | IP-адрес не разрешен |
| INVALID_REQUEST | Неверные параметры запроса |
## Примечания
- Все запросы должны быть аутентифицированы с помощью правильного пароля API.
- Некоторые действия могут потребовать дополнительных разрешений или ограничений в зависимости от конфигурации сервера.
-518
View File
@@ -1,518 +0,0 @@
<h1 align="center">📡 XtreamCodes API</h1>
<p align="center">
API предоставляет доступ к IPTV-потокам (Live TV, Радио), VOD (фильмы), сериалам и EPG (телепрограмма) в приложениях, совместимых с XtreamCodes. Это ключевой компонент для интеграции с XC_VM.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [📂 Расположение файлов](#расположение-файлов)
- [📑 Содержание](#содержание)
- [🔑 Авторизация](#авторизация)
- [📺 Live TV (ТВ и Радио)](#live-tv-тв-и-радио)
- [🎬 VOD (Фильмы)](#vod-фильмы)
- [📽 Сериалы](#сериалы)
- [🎞 Получение медиаконтента](#получение-медиаконтента)
- [🧾 Примечания](#примечания)
---
## 📂 Расположение файлов
Основной файл API расположен по следующему пути:
```
/home/xc_vm/wwwdir/player_api.php
```
---
## 📑 Содержание
API разделен на ключевые разделы для удобства интеграции. Каждый эндпоинт описан с примерами запросов и ответов.
---
## 🔑 Авторизация
Авторизация — первый шаг для доступа к контенту. Она подтверждает учетные данные пользователя и возвращает информацию о сервере.
### Запрос
```http
GET /player_api?username={username}&password={password}
```
### Пример ответа
```json
{
"user_info": {
"username": "testxc",
"password": "testxc",
"message": "Welcome to XC_VM",
"auth": 1,
"status": "Active",
"exp_date": null,
"is_trial": 0,
"created_at": 1757353729,
"max_connections": 1,
"allowed_output_formats": [
"m3u8",
"ts",
"rtmp"
]
},
"server_info": {
"xui": true,
"version": "1.1.0",
"url": "176.124.192.118",
"port": "80",
"https_port": "443",
"server_protocol": "http",
"rtmp_port": "8880",
"timestamp_now": 1757442189,
"time_now": "2025-09-09 19:23:09",
"timezone": "Europe/London"
}
}
```
> 💡 **Совет:** Используйте полученные данные для последующих запросов, чтобы избежать повторной авторизации.
---
## 📺 Live TV (ТВ и Радио)
Раздел для работы с живыми трансляциями, включая категории, стримы и EPG.
### Получить все категории Live
```http
GET /player_api?username={username}&password={password}&action=get_live_categories
```
**Пример ответа**
```json
[
{
"category_id": "1",
"category_name": "News",
"parent_id": 0
},
{
"category_id": "2",
"category_name": "Sports",
"parent_id": 0
}
]
```
### Получить все Live-стримы
```http
GET /player_api?username={username}&password={password}&action=get_live_streams
```
**Пример ответа**
```json
[
{
"num": 1,
"name": "BBC News",
"stream_type": "live",
"stream_id": 101,
"stream_icon": "http://176.124.192.118/images/bbc.png",
"epg_channel_id": "bbc.news.uk",
"added": "1660568200",
"category_id": "1",
"custom_sid": "",
"tv_archive": 0,
"direct_source": "",
"tv_archive_duration": 0
}
]
```
### Получить стримы категории
```http
GET /player_api?username={username}&password={password}&action=get_live_streams&category_id={id}
```
### Получить EPG канала (краткая программа)
```http
GET /player_api?username={username}&password={password}&action=get_short_epg&stream_id={id}&limit={N}
```
**Пример ответа**
```json
{
"epg_listings": [
{
"id": 1,
"title": "Morning News",
"start": "2022-08-15 07:00:00",
"end": "2022-08-15 08:00:00",
"description": "Daily morning news update."
}
]
}
```
### Получить полную программу канала
```http
GET /player_api?username={username}&password={password}&action=get_simple_data_table&stream_id={id}
```
### EPG для всех каналов (XMLTV)
```http
GET /xmltv.php?username={username}&password={password}
```
**Пример ответа (XMLTV)**
```xml
<tv>
<channel id="bbc.news.uk">
<display-name>BBC News</display-name>
</channel>
<programme start="20220815070000 +0000" stop="20220815080000 +0000" channel="bbc.news.uk">
<title>Morning News</title>
<desc>Daily morning news update.</desc>
</programme>
</tv>
```
---
## 🎬 VOD (Фильмы)
Раздел для видео по запросу, включая категории и информацию о фильмах.
### Категории фильмов
```http
GET /player_api?username={username}&password={password}&action=get_vod_categories
```
**Пример ответа**
```json
[
{
"category_id": "10",
"category_name": "Action",
"parent_id": 0
},
{
"category_id": "11",
"category_name": "Drama",
"parent_id": 0
}
]
```
> ⚠️ **Примечание:** Полный список категорий может быть большим; в примерах показаны только фрагменты.
### Получить все VOD-стримы
```http
GET /player_api?username={username}&password={password}&action=get_vod_streams
```
**Пример ответа**
```json
[
{
"num": 1,
"name": "The Dark Knight (2008)",
"title": "The Dark Knight",
"year": 2008,
"stream_type": "movie",
"stream_id": 1,
"stream_icon": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljuWhs_Jbsg3Nu1tBcV0ErgPL_v9ei3c1fI0mNI7C5eos.jpg",
"rating": 8.5,
"rating_5based": 4.3,
"added": 1757343129,
"plot": "Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.",
"cast": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine, Maggie Gyllenhaal",
"director": "Christopher Nolan, Christopher Nolan, Steve Gehrke",
"genre": "Drama, Action, Crime",
"release_date": "2008-07-16",
"youtube_trailer": "kmJLuwP3MbY",
"episode_run_time": "152",
"category_id": "1",
"category_ids": [1, 2],
"container_extension": "mp4",
"custom_sid": "",
"direct_source": ""
}
]
```
---
### Фильмы по категории
```http
GET /player_api?username={username}&password={password}&action=get_vod_streams&category_id={id}
```
### Информация о фильме
```http
GET /player_api?username={username}&password={password}&action=get_vod_info&vod_id={id}
```
**Пример ответа**
```json
{
"info": {
"kinopoisk_url": "https://www.themoviedb.org/movie/155",
"tmdb_id": 155,
"name": "The Dark Knight",
"o_name": "The Dark Knight",
"cover_big": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljuWhs_Jbsg3Nu1tBcV0ErgPL_v9ei3c1fI0mNI7C5eos.jpg",
"movie_image": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljuWhs_Jbsg3Nu1tBcV0ErgPL_v9ei3c1fI0mNI7C5eos.jpg",
"release_date": "2008-07-16",
"episode_run_time": 152,
"youtube_trailer": "kmJLuwP3MbY",
"director": "Christopher Nolan, Christopher Nolan, Steve Gehrke",
"actors": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine, Maggie Gyllenhaal",
"cast": "Christian Bale, Heath Ledger, Aaron Eckhart, Michael Caine, Maggie Gyllenhaal",
"description": "Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.",
"plot": "Batman raises the stakes in his war on crime. With the help of Lt. Jim Gordon and District Attorney Harvey Dent, Batman sets out to dismantle the remaining criminal organizations that plague the streets. The partnership proves to be effective, but they soon find themselves prey to a reign of chaos unleashed by a rising criminal mastermind known to the terrified citizens of Gotham as the Joker.",
"age": "",
"mpaa_rating": "",
"rating_count_kinopoisk": 0,
"country": "United Kingdom",
"genre": "Drama, Action, Crime",
"backdrop_path": [
"http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeATVLqPvNOO1tw6QZZproFAJRjrtA4EzIxoMJZlI2R3OlQ.jpg"
],
"duration_secs": 9120,
"duration": "02:32:00",
"bitrate": 0,
"rating": 8.52,
"releasedate": "2008-07-16",
"subtitles": []
},
"movie_data": {
"stream_id": 1,
"name": "The Dark Knight (2008)",
"title": "The Dark Knight",
"year": 2008,
"added": 1757343129,
"category_id": "1",
"category_ids": [1, 2],
"container_extension": "mp4",
"custom_sid": "",
"direct_source": ""
}
}
```
---
## 📽 Сериалы
Раздел для работы с сериалами, включая категории, сезоны и эпизоды.
### Категории сериалов
```http
GET /player_api?username={username}&password={password}&action=get_series_categories
```
**Пример ответа**
```json
[
{
"category_id": "20",
"category_name": "Drama",
"parent_id": 0
}
]
```
---
### Все сериалы
```http
GET /player_api?username={username}&password={password}&action=get_series
```
**Пример ответа**
```json
[
{
"num": 1,
"name": "Braceface (2001)",
"title": "Braceface",
"year": 2001,
"stream_type": "series",
"series_id": 1,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljpT6mCZeHa4zLXMQZ2eaTpGZUSOucptPKyuP5tgpEZm0.jpg",
"plot": "The show, set in Elkford, British Columbia, is based around Sharon Spitz, who is a junior high school student with braces that get in her way of leading a normal teenage life. In the first season, she is enrolled at Mary Pickford Junior High.",
"cast": "Stacey DePass",
"director": "Charles E. Bastien",
"genre": "Drama, Animation, Comedy",
"release_date": "2001-06-02",
"releaseDate": "2001-06-02",
"last_modified": "1757348651",
"rating": "7",
"rating_5based": 3.5,
"backdrop_path": [
"http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeATBaSzxZEgi9EPIvh5kU_50ecbH2L-yDt1PIfqijKTIMg.jpg"
],
"youtube_trailer": null,
"episode_run_time": 25,
"category_id": "4",
"category_ids": [4]
}
]
```
---
### Сериалы по категории
```http
GET /player_api?username={username}&password={password}&action=get_series&category_id={id}
```
### Информация о сериале
```http
GET /player_api?username={username}&password={password}&action=get_series_info&series_id={id}
```
**Пример ответа**
```json
{
"seasons": [
{
"air_date": "2001-06-02",
"episode_count": 26,
"id": 4937,
"name": "Season 1",
"overview": "",
"season_number": 1,
"vote_average": 4.5,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljJBrZ7sNEJHE6hlqofFOJSRKiMRvSj08-T6iTQVWvj2I.jpg",
"cover_big": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljJBrZ7sNEJHE6hlqofFOJSRKiMRvSj08-T6iTQVWvj2I.jpg"
}
],
"info": {
"name": "Braceface (2001)",
"title": "Braceface",
"year": 2001,
"cover": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCLaoCzC2XshRjzbEF-0-ISX3OBAKZPN21ASjMFFF_OljpT6mCZeHa4zLXMQZ2eaTpGZUSOucptPKyuP5tgpEZm0.jpg",
"plot": "The show, set in Elkford, British Columbia, is based around Sharon Spitz, who is a junior high school student with braces that get in her way of leading a normal teenage life. In the first season, she is enrolled at Mary Pickford Junior High.",
"cast": "Stacey DePass",
"director": "Charles E. Bastien",
"genre": "Drama, Animation, Comedy",
"release_date": "2001-06-02",
"releaseDate": "2001-06-02",
"last_modified": "1757348651",
"rating": "7",
"rating_5based": 3.5,
"backdrop_path": [
"http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeATBaSzxZEgi9EPIvh5kU_50ecbH2L-yDt1PIfqijKTIMg.jpg"
],
"youtube_trailer": null,
"episode_run_time": 25,
"category_id": "4",
"category_ids": [4]
},
"episodes": {
"1": [
{
"id": "2",
"episode_num": "1",
"title": "Braceface - S01E01 - Brace Yourself",
"container_extension": "mp4",
"info": {
"release_date": "2001-06-02",
"plot": "Sharon Spitz, a 13-year-old 8th grader get's braces the day before picture day. When getting braces at the ortadontist, there is a thunder storm and the power go's out. Something happens with Sharon's braces and now its making her do all sorts of weird things!",
"duration_secs": 649,
"duration": "00:10:49",
"movie_image": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeARCK8Ch0a6wlNxuIHhbJ3c1Dg_AqkwSsH-qdpnCvcMsiy6U85vvi1bs1xDOddBeOEQ.jpg",
"bitrate": 2791,
"rating": "5",
"season": "1",
"tmdb_id": "105800",
"cover_big": "http://176.124.192.118:80/images/7pQr8EhEi05VXRmZc5QfCADBzwKB171qpiTTqrZdeARCK8Ch0a6wlNxuIHhbJ3c1Dg_AqkwSsH-qdpnCvcMsiy6U85vvi1bs1xDOddBeOEQ.jpg"
},
"subtitles": [],
"custom_sid": "",
"added": 1757348651,
"season": 1,
"direct_source": ""
}
]
}
}
```
---
## 🎞 Получение медиаконтента
Получите прямые ссылки на медиафайлы после авторизации.
* **Live TV (канал):**
```http
http://176.124.192.118/live/{username}/{password}/{stream_id}.ts
```
* **Фильм (VOD):**
```http
http://176.124.192.118/movie/{username}/{password}/{vod_id}.mp4
```
* **Серия:**
```http
http://176.124.192.118/series/{username}/{password}/{episode_id}.mp4
```
> ⚠️ **Важно:** При первом запросе происходит редирект на `/auth/...` для авторизации, после чего отдаётся контент.
---
## 🧾 Примечания
- **Форматы вывода:** Поддерживаются m3u8, ts, rtmp — выбирайте в зависимости от устройства.
- **Безопасность:** Все запросы требуют авторизации; мониторьте логи на предмет ошибок.
- **Интеграция:** Для тестирования используйте инструменты вроде Postman. В приложении реализуйте кэширование ответов для оптимизации.
> 💬 Если возникнут вопросы по интеграции, создайте issue в [репозитории](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
-320
View File
@@ -1,320 +0,0 @@
<h1 align="center">🧱 XC_VM — Сборка бинарных файлов</h1>
<p align="center">
Это руководство поможет собрать бинарные файлы для XC_VM. Процесс подходит для разработчиков и администраторов, желающих настроить систему под свои нужды.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [🔧 Предварительная подготовка](#предварительная-подготовка)
- [🌐 Сборка NGINX](#сборка-nginx)
- [📺 Сборка NGINX с RTMP](#сборка-nginx-с-rtmp)
- [🐘 Сборка PHP-FPM](#сборка-php-fpm)
- [📦 Установка PHP-расширений](#установка-php-расширений)
- [⚙️ Сборка бинарника network](#сборка-бинарника-network)
- [✅ Заключение](#заключение)
---
## 🔧 Предварительная подготовка
> ⚠️ **Внимание:** Все действия выполняются **на сервере**, где установлен `xc_vm`.
### 1. Установите зависимости
Установите необходимые пакеты для сборки. Это обеспечит наличие всех инструментов и библиотек.
```bash
sudo apt-get install -y \
build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev \
libssl-dev libgd-dev libxml2 libxml2-dev uuid-dev libxslt1-dev \
unzip wget curl git
```
---
## 🌐 Сборка NGINX
### 1. Загрузите исходники
#### OpenSSL
```bash
wget https://github.com/openssl/openssl/releases/download/openssl-3.5.1/openssl-3.5.1.tar.gz
tar -xzvf openssl-3.5.1.tar.gz
```
#### Zlib
```bash
wget https://zlib.net/zlib-1.3.1.tar.gz
tar -xzvf zlib-1.3.1.tar.gz
```
#### PCRE
```bash
wget https://sourceforge.net/projects/pcre/files/pcre/8.45/pcre-8.45.tar.gz
tar -xzvf pcre-8.45.tar.gz
```
#### FLV-модуль
```bash
wget https://github.com/winshining/nginx-http-flv-module/archive/refs/tags/v1.2.12.zip
unzip v1.2.12.zip
```
#### Nginx
```bash
wget https://nginx.org/download/nginx-1.28.0.tar.gz
tar -zxvf nginx-1.28.0.tar.gz
cd nginx-1.28.0
```
### 2. Настройка сборки
Настройте конфигурацию для статической сборки с необходимыми модулями.
```bash
./configure \
--prefix=/home/xc_vm/bin/nginx \
--with-compat \
--with-http_auth_request_module \
--with-file-aio \
--with-threads \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-cc-opt='-static -static-libgcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \
--with-ld-opt='-static -Wl,-z,relro -Wl,-z,now -pie' \
--with-pcre=../pcre-8.45 \
--with-pcre-jit \
--with-zlib=../zlib-1.3.1 \
--with-openssl=../openssl-3.5.1 \
--with-openssl-opt=no-nextprotoneg
```
### 3. Сборка и установка
```bash
make
make install
```
---
## 📺 Сборка NGINX с RTMP
### 1. Загрузите RTMP-модуль
```bash
wget https://github.com/arut/nginx-rtmp-module/archive/refs/tags/v1.2.2.tar.gz
tar -xzvf v1.2.2.tar.gz
```
### 2. Сконфигурируйте сборку
```bash
cd nginx-1.28.0
./configure \
--prefix=/home/xc_vm/bin/nginx_rtmp \
--add-module=../nginx-http-flv-module-1.2.12 \
--with-compat \
--with-http_auth_request_module \
--with-file-aio \
--with-threads \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-cc-opt='-static -static-libgcc -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fPIC' \
--with-ld-opt='-static -Wl,-z,relro -Wl,-z,now -pie'
```
### 3. Сборка и установка
```bash
make
make install
```
### 4. Переименование исполняемого файла
```bash
mv /home/xc_vm/bin/nginx_rtmp/sbin/nginx /home/xc_vm/bin/nginx_rtmp/sbin/nginx_rtmp
```
---
## 🐘 Сборка PHP-FPM
### 1. Установите зависимости
```bash
sudo apt-get install -y \
libcurl4-gnutls-dev libbz2-dev libzip-dev autoconf automake \
libtool m4 gcc make pkg-config libmaxminddb-dev libssh2-1-dev
```
### 2. Загрузите исходники
```bash
wget -O php-8.1.33.tar.gz http://php.net/get/php-8.1.33.tar.gz/from/this/mirror
tar -xzvf php-8.1.33.tar.gz
cd php-8.1.33
```
### 3. Настройка сборки
```bash
./configure \
--prefix=/home/xc_vm/bin/php \
--with-fpm-user=xc_vm \
--with-fpm-group=xc_vm \
--enable-gd \
--with-jpeg \
--with-freetype \
--enable-static \
--disable-shared \
--enable-opcache \
--enable-fpm \
--without-sqlite3 \
--without-pdo-sqlite \
--enable-mysqlnd \
--with-mysqli \
--with-curl \
--disable-cgi \
--with-zlib \
--enable-sockets \
--with-openssl \
--enable-shmop \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-calendar \
--disable-rpath \
--enable-inline-optimization \
--enable-pcntl \
--enable-mbregex \
--enable-exif \
--enable-bcmath \
--with-mhash \
--with-gettext \
--with-xmlrpc \
--with-xsl \
--with-libxml \
--with-pdo-mysql \
--disable-mbregex \
--with-pear
```
### 4. Сборка и установка
```bash
make
make install
```
---
## 📦 Установка PHP-расширений
Используйте встроенный `pecl` из вашей сборки PHP для установки расширений.
```bash
/home/xc_vm/bin/php/bin/pecl install maxminddb
/home/xc_vm/bin/php/bin/pecl install ssh2
/home/xc_vm/bin/php/bin/pecl install igbinary
/home/xc_vm/bin/php/bin/pecl install redis
```
### Настройка Redis-расширения
Во время установки PECL задаёт вопросы:
```
enable igbinary serializer support? [no] : yes
enable lzf compression support? [no] :
enable zstd compression support? [no] :
enable msgpack serializer support? [no] :
enable lz4 compression? [no] :
use system liblz4? [yes] :
```
Рекомендуемые ответы: `yes` на igbinary, остальные — по желанию.
---
## ⚙️ Сборка бинарника network
### 1. Установите `PyInstaller` (однократно)
```bash
pip install -U pyinstaller
```
### 2. Соберите бинарный файл
```bash
cd /home/xc_vm/bin
pyinstaller --onefile network.py
```
После сборки исполняемый файл появится в директории:
```bash
/home/xc_vm/bin/dist/network
```
### 3. Переместите бинарник в нужное место
```bash
mv /home/xc_vm/bin/dist/network /home/xc_vm/bin/network
```
### 4. Очистите временные директории
```bash
rm -rf build dist network.spec __pycache__
```
---
## ✅ Заключение
После завершения всех шагов вы получите собственные статически собранные бинарные файлы:
- `nginx`
- `nginx_rtmp`
- `php-fpm`
- `pecl`-расширения
- `network` (бинарник Python-скрипта)
> 💡 **Совет:** Если возникнут проблемы, проверьте логи сборки или обратитесь в [Issues](https://github.com/Vateron-Media/XC_VM/issues).
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-400
View File
@@ -1,400 +0,0 @@
<h1 align="center">🚀 XC_VM — Сборка FFmpeg</h1>
<p align="center">
Это руководство по сборке FFmpeg с аппаратным ускорением NVIDIA (NVENC/CUVID) и статической интеграцией библиотек для полной переносимости в рамках проекта XC_VM.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [📋 Требования](#требования)
- [🔧 Конфигурация](#конфигурация)
- [🛠 Установка инструментов для сборки](#установка-инструментов-для-сборки)
- [🎶 Сборка и включение кодеков](#сборка-и-включение-кодеков)
- [🖥 Установка NVIDIA и CUDA](#установка-nvidia-и-cuda)
- [🔨 Сборка FFmpeg](#сборка-ffmpeg)
- [📦 Установка](#установка)
- [✅ Проверка](#проверка)
- [🧾 Примечания](#примечания)
- [🔄 Совместимость версий](#совместимость-версий)
---
## 📋 Требования
* **Ubuntu 22.04 или новее** — рекомендованная ОС для стабильной сборки.
* Видеокарта NVIDIA с поддержкой **NVENC** (опционально, но рекомендуется для аппаратного ускорения).
* ~15 ГБ свободного места на диске для исходников и временных файлов.
* Стабильное интернет-соединение для загрузки зависимостей.
> 💡 **Совет:** Убедитесь, что система обновлена перед началом, чтобы избежать конфликтов пакетов.
---
## 🔧 Конфигурация
Установите переменные окружения для кастомизации сборки. Это позволит легко изменить версии и пути.
```bash
# Версия FFmpeg для сборки
export FFMPEG_VERSION="8.0"
# Директория для установки
export INSTALL_DIR="/home/xc_vm/bin/ffmpeg_bin"
# Директория для сборки
export BUILD_DIR="$HOME/ffmpeg_sources"
# Версия CUDA
export CUDA_VERSION="12-2"
# Версия драйвера NVIDIA
export NVIDIA_DRIVER_VERSION="535"
```
---
## 🛠 Установка инструментов для сборки
Обновите систему и установите базовые пакеты для разработки. Это обеспечит наличие всех необходимых инструментов.
```bash
sudo apt-get update -qq && sudo apt-get -y install \
autoconf automake build-essential cmake git-core \
libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev \
libsdl2-dev libtool libva-dev libvdpau-dev libvorbis-dev \
libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev \
meson ninja-build pkg-config texinfo wget yasm \
zlib1g-dev mercurial nasm libssl-dev software-properties-common
```
---
## 🎶 Сборка и включение кодеков
Соберите библиотеки из исходников для статической интеграции в FFmpeg. Это обеспечит поддержку популярных форматов без внешних зависимостей.
### 2.1 Создание директории для сборки
```bash
mkdir -p ${BUILD_DIR:-~/ffmpeg_sources} && cd ${BUILD_DIR:-~/ffmpeg_sources}
```
### 2.2 H.264 (libx264)
```bash
git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared --enable-pic
make -j$(nproc)
sudo make install
cd ..
```
### 2.3 H.265 (libx265)
```bash
git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git/build
cmake ../source -DCMAKE_INSTALL_PREFIX="${INSTALL_DIR:-$HOME/ffmpeg_build}" -DENABLE_SHARED=OFF
make -j$(nproc)
sudo make install
cd ../..
```
### 2.4 VP8/VP9 (libvpx)
```bash
git clone https://chromium.googlesource.com/webm/libvpx
cd libvpx
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared --enable-pic
make -j$(nproc)
sudo make install
cd ..
```
### 2.5 Opus Audio (libopus)
```bash
wget https://downloads.xiph.org/releases/opus/opus-1.5.2.tar.gz
tar -xvzf opus-1.5.2.tar.gz
cd opus-1.5.2
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
### 2.6 Дополнительные библиотеки
- **libass** (субтитры):
```bash
git clone https://github.com/libass/libass.git
cd libass
./autogen.sh
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **libfreetype** (шрифты):
```bash
wget https://download.savannah.gnu.org/releases/freetype/freetype-2.13.2.tar.gz
tar -xvzf freetype-2.13.2.tar.gz
cd freetype-2.13.2
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **libvorbis** (аудио):
```bash
wget https://downloads.xiph.org/releases/vorbis/libvorbis-1.3.7.tar.xz
tar -xvf libvorbis-1.3.7.tar.xz
cd libvorbis-1.3.7
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **libmp3lame** (MP3):
```bash
wget https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
tar -xvzf lame-3.100.tar.gz
cd lame-3.100
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **libtheora** (Theora):
```bash
git clone https://github.com/xiph/theora.git
cd theora
./autogen.sh
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **librtmp** (RTMP):
```bash
git clone git://git.ffmpeg.org/rtmpdump
cd rtmpdump
make SYS=posix -j$(nproc)
sudo make prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" install
cd ..
```
- **libunistring** (для gnutls и librtmp):
```bash
wget https://ftp.gnu.org/gnu/libunistring/libunistring-1.2.tar.gz
tar -xvzf libunistring-1.2.tar.gz
cd libunistring-1.2
./configure --prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" --enable-static --disable-shared
make -j$(nproc)
sudo make install
cd ..
```
- **bzip2**
```bash
cd ${BUILD_DIR:-~/ffmpeg_sources}
wget https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
tar -xvzf bzip2-1.0.8.tar.gz
cd bzip2-1.0.8
make -f Makefile-libbz2_so CFLAGS="-fPIC" -j$(nproc)
make install PREFIX="${INSTALL_DIR:-$HOME/ffmpeg_build}"
cd ..
```
---
## 🖥 Установка NVIDIA и CUDA
Для аппаратного ускорения установите драйверы и инструменты NVIDIA.
### 3.1 Установка драйверов NVIDIA
```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-${NVIDIA_DRIVER_VERSION:-535}
```
> ⚠️ **Важно:** Перезагрузите систему после установки и проверьте совместимость с вашей видеокартой.
### 3.2 Установка CUDA Toolkit
```bash
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb
sudo dpkg -i cuda-keyring_1.0-1_all.deb
sudo apt update
sudo apt install -y cuda-toolkit-${CUDA_VERSION:-12-2}
```
### 3.3 Установка заголовков NVENC
```bash
cd ${BUILD_DIR:-~/ffmpeg_sources}
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git
cd nv-codec-headers
make
sudo make PREFIX="${INSTALL_DIR:-$HOME/ffmpeg_build}" install
cd ..
```
### 3.4 Опциональные инструменты NVIDIA
```bash
sudo apt install -y nvidia-cuda-toolkit nvidia-cuda-dev
```
---
## 🔨 Сборка FFmpeg
### 4.1 Загрузка исходного кода
```bash
cd ${BUILD_DIR:-~/ffmpeg_sources}
wget https://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION:-8.0}.tar.bz2
tar xjvf ffmpeg-${FFMPEG_VERSION:-8.0}.tar.bz2
cd ffmpeg-${FFMPEG_VERSION:-8.0}
```
### 4.2 Конфигурация
```bash
export PATH="${INSTALL_DIR:-$HOME/bin}:$PATH"
export PKG_CONFIG_PATH="${INSTALL_DIR:-$HOME/ffmpeg_build}/lib/pkgconfig"
./configure \
--prefix="${INSTALL_DIR:-$HOME/ffmpeg_build}" \
--pkg-config-flags="--static" \
--extra-cflags="-I${INSTALL_DIR:-$HOME/ffmpeg_build}/include -I/usr/local/cuda/include" \
--extra-ldflags="-L${INSTALL_DIR:-$HOME/ffmpeg_build}/lib -L/usr/local/cuda/lib64 -Wl,-Bstatic -lcrypto -lssl -Wl,-Bdynamic" \
--extra-version=XCVM \
--extra-libs="-lsupc++ -lgmp -lz -lunistring -lpthread -lm -lrt -ldl" \
--bindir="${INSTALL_DIR:-$HOME/bin}" \
--enable-gpl \
--enable-gnutls \
--enable-libass \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-librtmp \
--enable-libtheora \
--enable-bzlib \
--enable-fontconfig \
--enable-zlib \
--enable-nvenc \
--enable-ffnvcodec \
--enable-cuvid \
--enable-version3 \
--enable-nonfree \
--enable-pthreads \
--enable-runtime-cpudetect \
--enable-gray \
--disable-alsa \
--disable-indev=alsa \
--disable-outdev=alsa \
--disable-ffplay \
--disable-doc \
--disable-debug \
--disable-autodetect \
--enable-static \
--enable-muxer=hls \
--enable-muxer=dash \
--enable-demuxer=hls \
--extra-cflags=--static \
--target-os=linux
```
### 4.3 Компиляция
```bash
make -j$(nproc)
```
---
## 📦 Установка
```bash
mkdir -p ${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/
cp ffmpeg ffprobe ${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/
```
---
## ✅ Проверка
Проверьте версию и поддержку NVIDIA после сборки.
```bash
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -version
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffprobe -version
```
Проверка поддержки NVIDIA:
```bash
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -encoders | grep nvenc
${INSTALL_DIR:-/home/xc_vm/bin/ffmpeg_bin}/${FFMPEG_VERSION:-8.0}/ffmpeg -decoders | grep cuvid
```
---
## 🧾 Примечания
* Все библиотеки собраны статически и включены в бинарный файл FFmpeg, что обеспечивает полную переносимость.
* Драйвер NVIDIA должен быть совместим с вашей видеокартой.
* После установки драйверов может потребоваться **перезагрузка**.
* Сборка FFmpeg потребляет значительные ресурсы CPU и памяти.
* Итоговый бинарный файл будет большим из-за включения всех зависимостей.
* Настройте переменные окружения в соответствии с вашей системой.
* Для разных версий FFmpeg могут потребоваться корректировки флагов конфигурации.
> 💬 **Совет:** Если возникнут проблемы, проверьте логи сборки или создайте issue в [репозитории](https://github.com/Vateron-Media/XC_VM/issues).
---
## 🔄 Совместимость версий
| Версия FFmpeg | Рекомендуемая CUDA | Примечания |
|---------------|--------------------|------------|
| 8.x | 12.2+ | Новейшие функции |
| 7.x | 12.0+ | Стабильная |
| 6.x | 11.8+ | Устаревшая |
Проверяйте [документацию FFmpeg](https://ffmpeg.org/) для конкретных требований версий.
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-87
View File
@@ -1,87 +0,0 @@
<h1 align="center">❓ FAQ — Часто задаваемые вопросы</h1>
<p align="center">
Здесь собраны ответы на наиболее частые вопросы и проблемы при работе с <b>XC_VM</b>.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## ⚙️ Проблемы со стримами
<details>
<summary><b>❌ У меня не запускается стрим на MAIN или LB</b></summary>
---
### 🔍 Диагностика
Подключитесь к консоли сервера и выполните команду:
```bash
sudo -u xc_vm /home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/monitor.php 291
```
> 🧩 Где `291` — это **ID вашего стрима** (замените на свой).
---
### 📄 Что делает команда
Скрипт **monitor.php** попытается запустить стрим вручную и покажет ошибку, если не сможет.
---
### ⚠️ Возможные причины
#### 1️⃣ Отсутствуют системные библиотеки
Если вывод содержит ошибку вида:
```
error while loading shared libraries: libxyz.so.1: cannot open shared object file
```
Установите недостающую библиотеку командой:
```bash
sudo apt install <имя_библиотеки>
```
После установки повторите тест.
> 💬 Сообщите мне, если потребуется добавить библиотеку в установку.
---
#### 2️⃣ Ошибка не связана с библиотеками
Если ошибка иного типа — также пришлите её вывод, чтобы я помог с диагностикой.
---
### 🧾 Резюме
1. Выполните команду диагностики.
2. Проверьте наличие ошибок.
3. Установите недостающие библиотеки.
4. Сообщите о любых других ошибках для анализа.
---
</details>
---
📘 *Эта страница обновляется со временем. Если вы нашли новую типовую проблему — предложите её в [Issues](https://github.com/Vateron-Media/XC_VM/issues).*
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-119
View File
@@ -1,119 +0,0 @@
<h1 align="center">🧭 Руководство по миграции XC_VM</h1>
<p align="center">
Легко переходите с совместимых систем IPTV с помощью встроенного инструмента миграции XC_VM.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [⚙️ Перед началом](#перед-началом)
- [🚀 Шаги миграции](#шаги-миграции)
- [🔑 Восстановление доступа после миграции](#восстановление-доступа-после-миграции)
- [🧩 После миграции](#после-миграции)
- [🖥️ Подготовка балансировщика нагрузки](#подготовка-балансировщика-нагрузки)
---
## ⚙️ Перед началом
> 💡 **Рекомендация:**
> Лучше всего выполнять миграцию на **чистой установке XC_VM**.
Если вы решите использовать **существующую установку**, обратите внимание на следующее:
- XC_VM **удалит все таблицы** в вашей основной базе данных, которые соответствуют данным, найденным в вашей базе данных миграции.
- Всегда **создавайте резервные копии** перед выполнением миграции.
---
## 🚀 Шаги миграции
### 1. Загрузите резервную копию
Загрузите существующую резервную копию базы данных на сервер XC_VM через **SFTP**.
В этом примере мы предположим, что она находится по адресу:
```
/tmp/backup.sql
```
### 2. Восстановите резервную копию в базе данных миграции
Используйте скрипт инструментов, чтобы очистить существующую базу данных миграции и восстановить резервную копию:
```bash
/home/xc_vm/tools migration "/tmp/backup.sql"
```
### 3. Запустите миграцию
Если во время восстановления не произошло никаких ошибок, вы можете начать миграцию одним из двух способов:
#### 🧩 Вариант 1 — командная строка (рекомендуется)
Запустите миграцию вручную:
```bash
/home/xc_vm/bin/php/bin/php /home/xc_vm/includes/cli/migrate.php
```
#### 🌐 Вариант 2 — Веб-установщик
Если вы не хотите использовать инструменты командной строки, вы также можете вернуться к интерфейсу **веб-установщика** по ссылке, предоставленной скриптом при установке панели.
Там выберите опцию **«Миграция»** и следуйте инструкциям на экране, чтобы завершить процесс в интерактивном режиме.
Вы будете видеть обновления прогресса в режиме реального времени, пока XC_VM мигрирует ваши данные.
По завершении вы сможете войти в свою систему.
---
## 🔑 Восстановление доступа после миграции
Если вы не можете войти в систему (например, из-за отсутствия имени пользователя/пароля или недействительного кода доступа), вы можете использовать **инструменты спасения**:
### Создание кода доступа для спасения
```bash
/home/xc_vm/tools access
```
### Создание администратора для восстановления доступа
```bash
/home/xc_vm/tools user
```
> ⚠️ После входа в систему не забудьте немедленно **изменить код доступа и учетные данные администратора**.
---
## 🧩 После миграции
* Балансировщики нагрузки сначала будут отображаться как **отключенные**.
* Все потоки **автоматически остановятся** в целях безопасности.
### Следующие шаги
1. Переустановите балансировщики нагрузки и **вручную запустите потоки** после подтверждения миграции.
2. Просмотрите и обновите **настройки XC_VM по умолчанию**.
3. Проверьте данные **главного сервера** — доменные имена, конфигурацию SSL и т. д.
4. Убедитесь, что все соответствует вашей среде и настройкам.
---
## 🖥️ Подготовка балансировщика нагрузки
Вам необходимо будет переустановить ОС на балансировщиках нагрузки.
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-90
View File
@@ -1,90 +0,0 @@
<h1 align="center">🔄 Руководство по обновлению XC_VM</h1>
<p align="center">
В этом документе описан процесс обновления <b>XC_VM</b> через веб-панель управления. Следуйте шагам, чтобы безопасно обновить систему и избежать ошибок.
</p>
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [⚙️ Перед началом](#перед-началом)
- [🪜 Пошаговая инструкция](#пошаговая-инструкция)
- [🧠 Примечания и рекомендации](#примечания-и-рекомендации)
---
## ⚙️ Перед началом
Перед обновлением убедитесь, что готовы все необходимые ресурсы. Это поможет избежать проблем и потери данных.
- 🔑 **Доступ администратора** к панели управления.
- 🌐 **Стабильное интернет-соединение**.
- 💾 **Резервная копия данных сервера** *(настоятельно рекомендуется создать перед началом)*.
> ⚠️ **Важно:** Не прерывайте процесс обновления, чтобы избежать повреждения системы.
---
## 🪜 Пошаговая инструкция
Следуйте этим шагам для обновления через панель. Каждый этап иллюстрирован скриншотом для удобства.
### 1️⃣ Перейдите в раздел **“Servers”**
- Авторизуйтесь в панели управления.
- Выберите раздел **Servers** в главном меню.
![Servers](../img/update1.png)
### 2️⃣ Выберите **“Manage Servers”**
- В разделе **Servers** нажмите **Manage Servers**, чтобы открыть список доступных серверов.
![Manage Servers](../img/update2.png)
### 3️⃣ Откройте меню **“Actions”**
- Найдите сервер, который требуется обновить.
- Нажмите кнопку **Actions** — обычно это выпадающее меню или значок рядом с сервером.
![Actions Menu](../img/update3.png)
### 4️⃣ Перейдите в раздел **“Server Tools”**
- В меню **Actions** выберите пункт **Server Tools**, чтобы открыть инструменты управления сервером.
![Server Tools](../img/update4.png)
### 5️⃣ Запустите **“Update Server”**
- В разделе **Server Tools** нажмите **Update Server**.
- Подтвердите действие, если потребуется (возможно, будет запрошен пароль).
- Дождитесь завершения обновления — **не прерывайте процесс**, чтобы избежать ошибок.
![Update Server](../img/update5.png)
---
## 🧠 Примечания и рекомендации
> 🕒 **Время обновления**
> Зависит от размера сервера и скорости интернет-соединения. Обычно занимает от нескольких минут до часа.
> ✅ **Проверка после обновления**
> После завершения проверьте состояние сервера, перезапустите сервисы и убедитесь, что все работает корректно.
> ⚠️ **Ошибки при обновлении**
> В случае ошибок проверьте логи сервера (например, в `/home/xc_vm/logs/`). Если проблема persists, создайте issue в [репозитории](https://github.com/Vateron-Media/XC_VM/issues).
---
<p align="center">
<a href="../../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
-62
View File
@@ -1,62 +0,0 @@
<h1 align="center">📚 XC_VM Documentation</h1>
<p align="center">
Добро пожаловать в официальную документацию проекта!<br>
Здесь собраны все материалы по работе с системой — от API до сборки и обновлений.
</p>
---
## 🔌 API Reference
| Раздел | Описание |
|:--------|:----------|
| [Системный API](api/system_api.md) | Основные системные эндпоинты. |
| [Получить плейлист](api/playlist.md) | Генерация и загрузка пользовательских плейлистов. |
| [XtreamCodes API](api/xtreamcodes_api.md) | Интеграция и взаимодействие с XtreamCodes совместимыми сервисами. |
---
## 🛠 Сборка и Компиляция
| Раздел | Описание |
|:--------|:----------|
| [Бинарники](builds/build_binaries.md) | Инструкции по сборке основных бинарных компонентов проекта. |
| [FFmpeg](builds/build_ffmpeg.md) | Руководство по сборке и настройке FFmpeg для работы с XC_VM. |
---
## 🔄 Обновление и Релизы
| Раздел | Описание |
|:--------|:----------|
| [Обновление панели](info/update.md) | Подробное руководство по обновлению XC_VM до последней версии. |
| [Чеклист перед публикацией релиза](updates_checklist.md) | Контрольный список задач для подготовки нового релиза. |
---
## 🔐 Безопасность и SSL
| Раздел | Описание |
|:--------|:----------|
| [Генерация SSL-сертификата](administration/ssl-generation.md) | Руководство по созданию самоподписанного SSL для Nginx в XC_VM. |
---
## 📦 Дополнительно
| Раздел | Описание |
|:--------|:----------|
| [Как работает обновление панели](administration/update-system.md) | Обьяснение принципа работы обновления. |
| [Миграция с других систем](info/migration_guide.md) | Пошаговое руководство по миграции с XUI, Xtream Codes и других панелей. |
| [FAQ](info/faq.md) | Часто задаваемые вопросы и решения распространённых проблем. |
---
<p align="center">
<a href="https://github.com/Vateron-Media/XC_VM">
🔗 Перейти к репозиторию
</a>
</p>
---
-142
View File
@@ -1,142 +0,0 @@
# ✅ Чеклист подготовки релиза XC_VM
<p align="center">
В этом документе описан процесс создания релиза <b>XC_VM</b> — пошаговое руководство для разработчиков по обновлению версии, сборке архивов и публикации на GitHub.
</p>
<p align="center">
<a href="../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---
## 📚 Навигация
- [🔢 1. Обновить версию](#1-обновить-версию)
- [🧹 2. Удалённые файлы](#2-удалённые-файлы)
- [⚙️ 3. Сборка архивов](#3-сборка-архивов)
- [📝 4. Changelog](#4-changelog)
- [🚀 5. GitHub релиз](#5-github-релиз)
---
## 🔢 1. Обновить версию
* Установить **новое значение `XC_VM_VERSION`** в следующих файлах:
**Файлы для редактирования:**
```
src/www/constants.php
src/www/stream/init.php
```
**Auto-update команда:**
```bash
find -type f -name "*.php" -exec sed -i \
"s/define('XC_VM_VERSION', '[0-9]\+\.[0-9]\+\.[0-9]\+');/define('XC_VM_VERSION', 'X.Y.Z');/g" {} \;
```
**Закоммитить изменения с сообщением:**
```bash
git add .
git commit -m "Bump version to X.Y.Z"
git push
```
> 💡 **Совет:** Замените `X.Y.Z` на актуальную версию, например, `1.2.3`.
---
## 🧹 2. Удалённые файлы
* Выполнить команду для генерации списка удаленных файлов:
```bash
make delete_files_list
```
* Открыть файл `dist/deleted_files.txt`.
* Скопировать содержимое в `src/includes/cli/update.php` **после комментария** `// Update checkpoint`
> ⚠️ **Важно:** Убедитесь, что пути указаны корректно, чтобы избежать удаления важных файлов.
---
## ⚙️ 3. Сборка архивов
* Последовательно выполнить команды для сборки:
```bash
make new
make lb
make main
make main_update
make lb_update
```
* Убедиться, что созданы следующие файлы в директории `dist/`:
- `loadbalancer.tar.gz` — установочный архив LB
- `loadbalancer_update.tar.gz` — архив обновления LB
- `XC_VM.zip` — установочный архив MAIN
- `update.tar.gz` — архив обновления MAIN
- `hashes.md5` — файл с хеш-суммами
> 🧰 **Проверка:** После сборки проверьте целостность архивов с помощью `md5sum -c hashes.md5`.
---
## 📝 4. Changelog
Сначала сгенерируйте файл с изменениями из git:
```bash
git log --pretty=format:"- %s (%h)" X.Y.Z..main > dist/changes.md
```
* **Перейдите по ссылке и добавьте изменения текущего релиза:**
[https://github.com/Vateron-Media/XC_VM_Update/blob/main/changelog.json](https://github.com/Vateron-Media/XC_VM_Update/blob/main/changelog.json)
* Добавить изменения текущего релиза в формате JSON:
```json
[
{
"version": "X.Y.Z",
"changes": [
"Описание изменения 1",
"Описание изменения 2"
]
}
]
```
> 💬 **Рекомендация:** Держите описания изменений краткими и информативными, фокусируясь на ключевых улучшениях и фиксах.
---
## 🚀 5. GitHub релиз
* Создать новый релиз на [GitHub Releases](https://github.com/Vateron-Media/XC_VM/releases).
* Прикрепить следующие файлы к релизу:
- `dist/loadbalancer.tar.gz`
- `dist/XC_VM.zip`
- `dist/update.tar.gz`
- `dist/loadbalancer_update.tar.gz`
- `dist/hashes.md5`
* Указать changelog в описании релиза.
> ✅ **Завершение:** После публикации проверьте, что все файлы доступны для скачивания и хеш-суммы совпадают.
---
<p align="center">
<a href="../ru/main-page.md"><b>⬅️ Назад на главную</b></a>
</p>
---