diff --git a/marzban/ru/config.ts b/marzban/ru/config.ts index 2fd3bd1..b28def7 100644 --- a/marzban/ru/config.ts +++ b/marzban/ru/config.ts @@ -21,6 +21,7 @@ export const config = { text: 'Документация', items: [ { text: 'Xray входящих', link: '/ru/docs/xray-inbounds' }, + { text: 'Core Settings', link: '/ru/docs/core-settings' }, { text: 'Настройки хоста', link: '/ru/docs/host-settings' }, { text: 'Подписки', link: '/ru/docs/subscription' }, { text: 'Узел Marzban ✨', link: '/ru/docs/marzban-node' }, diff --git a/marzban/ru/docs/core-settings.md b/marzban/ru/docs/core-settings.md new file mode 100644 index 0000000..024f961 --- /dev/null +++ b/marzban/ru/docs/core-settings.md @@ -0,0 +1,268 @@ +--- +title: Основные настройки +--- + +# Основные настройки + +Поскольку панель Marzban основана на `Xray-core`, данный документ призван объяснить практические аспекты `Xray`, которые вы можете использовать в разделе `Core Settings` панели, чтобы вы были знакомы с его полезными функциями. + +## DNS + +Чтобы настроить `DNS` в разделе `Core Settings` панели Marzban, просто добавьте следующий раздел в начало. + +```json{5-10} [xray-config.json] +{ + "log": { + "loglevel": "info" + }, + "dns": { + "servers": [ + "1.1.1.1" + ], + "queryStrategy": "UseIPv4" + }, + "inbounds": [ +``` + +В приведённом примере используется DNS от Cloudflare. Ниже приведена таблица с различными типами DNS и их назначением. + +| Тип `DNS` | Провайдер | Назначение | +| -------------- | ------------------ | --------------------------------------------------------------- | +| `1.1.1.1` | `Cloudflare` | Скорость, конфиденциальность и безопасность | +| `1.1.1.3` | `Cloudflare` | Блокировка порнографического контента, подходит для семейного использования | +| `1.1.1.2` | `Cloudflare` | Блокировка вредоносных программ | +| `1.0.0.2` | `Cloudflare` | Блокировка порнографического контента и вредоносных программ | +| `8.8.8.8` | `Google` | Надёжность благодаря глобальной сети сервисов Google | +| `8.8.4.4` | `Google` | Резервный DNS для основного DNS-сервиса от Google | +| `9.9.9.9` | `Quad9` | Фокусируется на безопасности и блокировке доступа к вредоносным доменам | +| `208.67.222.222` | `OpenDNS` | Защита от фишинга и возможность настройки параметров | +| `208.67.222.123` | `OpenDNS` | Блокировка порнографического контента, подходит для семейного использования | + +## Inbounds + +Раздел `Inbounds` в `Xray-core` определяет, как прокси-сервис обрабатывает входящие подключения. Каждый `Inbound` задаёт прослушиватель, который принимает подключения на назначенном порту и применяет к ним определённые протоколы или правила для управления ими. + +Inbounds, указанные в разделе `Core Settings`, определяют прокси в Marzban. Входящие подключения управляются на основе этого раздела. Список практичных inbounds можно найти в документе: [Xray Inbounds](https://gozargah.github.io/marzban/en/docs/xray-inbounds). + +- Далее мы проанализируем различные разделы одного inbound. + +::: details VLESS TCP REALITY +::: code-group +```json +{ + "tag": "VLESS TCP REALITY", + "listen": "0.0.0.0", + "port": 443, + "protocol": "vless", + "settings": { + "clients": [], + "decryption": "none" + }, + "streamSettings": { + "network": "tcp", + "tcpSettings": {}, + "security": "reality", + "realitySettings": { + "show": false, + "dest": "google.com:443", + "xver": 0, + "serverNames": [ + "example.com", + "" + ], + "privateKey": "oNDJxLaAiXojgAcdW5gzwuQB_gMYL0DXfRnqswUKvTE", + "publicKey": "oVRY8h7Njgw25j3CNhaJVMUys378tTvecrSRbrB3gyo" + "shortIds": [ + "2ebd6e17dec6a5d9" + ] + } + }, + "sniffing": { + "enabled": true, + "destOverride": [ + "http", + "tls", + "quic" + ] + } +} +``` +::: + +::: tip tag +```json +"tag": "VLESS TCP REALITY" +``` +Тег используется для идентификации конкретного inbound. Он помогает отличать inbounds, особенно в сложных конфигурациях или при наличии нескольких inbound, что облегчает их управление. +::: + +::: tip listen +```json +"listen": "0.0.0.0" +``` +IP-адрес, на котором `Xray-Core` будет принимать подключения. Адрес `0.0.0.0` означает, что `Xray-Core` слушает все доступные IP-адреса сервера. +::: + +::: tip port +```json +"port": 443 +``` +Сетевой порт, на котором `Xray-Core` должен принимать подключения. Порт `443` обычно используется для HTTPS-трафика и здесь применяется для протокола `VLESS`. +::: + +::: tip protocol +```json +"protocol": "vless" +``` +Протокол, используемый для этого inbound, — `vless`, современный и безопасный протокол передачи данных. +::: + +::: tip settings +```json +"settings": { + "clients": [], + "decryption": "none" +} +``` + +Этот раздел содержит специфические настройки для протокола `vless`. + +- Раздел `clients` перечисляет авторизованных пользователей, которым разрешено подключаться. + +- Раздел `decryption` указывает метод дешифрования. +::: + +::: tip streamSettings +```json +"streamSettings": { + "network": "tcp", + "tcpSettings": {}, + "security": "reality", + "realitySettings": { + "show": false, + "dest": "google.com:443", + "xver": 0, + "serverNames": [ + "example.com", + "" + ], + "privateKey": "oNDJxLaAiXojgAcdW5gzwuQB_gMYL0DXfRnqswUKvTE", + "publicKey": "oVRY8h7Njgw25j3CNhaJVMUys378tTvecrSRbrB3gyo", + "shortIds": [ + "2ebd6e17dec6a5d9" + ] + } +} +``` +Настройки, связанные с потоками и сетевыми протоколами: + +- Раздел `network` указывает тип сети для передачи данных. Здесь выбран `tcp`. + +- Раздел `tcpSettings` содержит специфические настройки TCP. Он пуст, что означает использование настроек по умолчанию. + +- Раздел `security` указывает тип защиты, используемой для данного подключения, в данном случае — `Reality`. Reality — технология для повышения безопасности. + +- Раздел `realitySettings` включает специальные настройки для технологии Reality. + +- Параметр `show` определяет, следует ли отображать информацию об этом подключении. Значение `false` означает, что информация не будет отображаться. + +- Параметр `dest` задаёт конечное назначение, используемое для имитации или обфускации, здесь установлено как `google.com:443`. + +- Параметр `xver` указывает версию протокола, где 0 означает начальную версию. + +- Раздел `serverNames` содержит список имён серверов, который должен включать домен, который вы планируете использовать. + +- Параметр `privateKey` содержит приватный ключ для шифрования и безопасности, являющийся длинным случайным ключом. + +- Параметр `publicKey` используется для шифрования информации и является общедоступным. Он может использоваться для шифрования данных. + +- Раздел `shortIds` содержит короткие идентификаторы для уникальной идентификации, включающие случайный ID. + +- Обратите внимание, что включение `publicKey` в настройки inbound не обязательно. При наличии `privateKey` Marzban автоматически сгенерирует `publicKey` для вашего прокси. Здесь он приведён исключительно для пояснения различных разделов этого inbound. +::: + +::: tip sniffing +```json +"sniffing": { + "enabled": true, + "destOverride": [ + "http", + "tls", + "quic" + ] +} +``` +Настройки перехвата трафика (sniffing): + +- Параметр `enabled` указывает, включён ли перехват трафика. Значение `true` означает, что он включён. + +- Раздел `destOverride` содержит список протоколов, которые игнорируются при перехвате трафика, включая `http`, `tls` и `quic`. + +- Игнорирование указанных протоколов означает, что `Xray-Core` обрабатывает их напрямую, без глубокого анализа и имитации трафика, что может повысить эффективность и упростить управление трафиком, снижая нагрузку на систему. +::: + +## Outbounds + +Разделы `Outbounds` и `Routing` тесно связаны и определяют, как управлять и направлять трафик. Раздел `Routing` использует правила (`Rules`), чтобы определить, как следует обрабатывать различные типы трафика, в то время как раздел `Outbounds` указывает назначения или конкретные прокси, через которые направляется трафик. + +Такой интегрированный подход позволяет гибко и динамично управлять трафиком, обеспечивая точный контроль над его направлением. Раздел `Outbounds` определяет доступные назначения или прокси, включая информацию об их протоколах и настройках. Каждый `Outbound` идентифицируется уникальным тегом. + +
+ +::: tip freedom +Протокол `freedom` разработан для обхода цензуры или ограничений маршрутизации в определённых сетевых условиях. Это полезный инструмент в Xray-core, который обеспечивает неограниченный доступ в Интернет, позволяя трафику свободно протекать без вмешательства промежуточных сетевых слоёв. +::: + +```json + { + "protocol": "freedom", + "settings": {}, + "tag": "DIRECT" + }, +``` +
+ +::: tip blackhole +Протокол `blackhole` действует как «чёрная дыра» для пакетов, отбрасывая трафик без обработки или ответа. Вы можете использовать его для специальных целей. +::: + +```json + { + "protocol": "blackhole", + "settings": {}, + "tag": "BLOCK" + }, +``` +
+ +::: tip IPv4 +Например, добавив следующий `Outbound`, вы можете отдать приоритет использованию IPv4, чтобы избежать ошибок `403` на различных платформах. Протокол `freedom` вероятно уже включён в ваши outbounds; если это так, просто добавьте к нему раздел `settings`. +::: + +```json + "outbounds": [ + { + "protocol": "freedom", + "settings": { + "domainStrategy": "ForceIPv4" + }, + "tag": "direct" + }, +``` + +## Routing & Rules + +Как уже упоминалось, в `Xray-core` раздел `Routing` вместе с правилами включает различные настройки, определяющие, как управлять входящим трафиком и куда его направлять. + +Если посмотреть на приведённый ниже пример, то видно, что мы использовали `Routing` для направления запросов к определённым доменам на outbound с тегом `BLOCK`, который использует протокол `blackhole`. В результате запросы к этим сайтам не достигнут своего назначения. + +```json +{ + "domain": [ + "www.speedtest.net", + "fast.com" + ], + "outboundTag": "BLOCK", + "type": "field" +}, +``` diff --git a/marzban/ru/docs/installation.md b/marzban/ru/docs/installation.md index 916048d..631388b 100644 --- a/marzban/ru/docs/installation.md +++ b/marzban/ru/docs/installation.md @@ -1,92 +1,90 @@ --- -title: Installation +title: Установка --- -# Marzban Installation +# Установка Marzban - -## Quick Installation (Recommended) -::: tip Pre-installation Notes -By running the quick installation command: -- Docker will be installed on your machine and Marzban will be executed using Docker. -- The `marzban` command will be available on your machine. -- Marzban data will be stored in the `/var/lib/marzban` directory. -- Marzban application files (`docker-compose.yml` and `.env`) will be stored in the `/opt/marzban` directory. +## Быстрая установка (рекомендуется) +::: tip Замечания перед установкой +При выполнении команды быстрой установки: +- Docker будет установлен на вашей машине, и Marzban будет запускаться с использованием Docker. +- Команда `marzban` станет доступна на вашей машине. +- Данные Marzban будут сохраняться в каталоге `/var/lib/marzban`. +- Файлы приложения Marzban (`docker-compose.yml` и `.env`) будут храниться в каталоге `/opt/marzban`. ::: -First, execute the following command. +Сначала выполните следующую команду. ```bash sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install ``` -::: tip After Installation -- The Marzban logs will be displayed, and you can stop it by pressing `Ctrl+C`. -- The dashboard will be running on port 8000 by default, and you can access it through `http://YOUR_SERVER_IP:8000/dashboard/`. +::: tip После установки +- Будут отображаться логи Marzban, и вы сможете остановить его, нажав `Ctrl+C`. +- Панель управления будет работать по умолчанию на порту 8000, и вы можете получить к ней доступ по адресу `http://YOUR_SERVER_IP:8000/dashboard/`. ::: -Next, create a sudo admin by executing the following command. +Затем создайте администратора с привилегиями sudo, выполнив следующую команду. ```bash marzban cli admin create --sudo ``` -Now you can log in to the Marzban dashboard using the username and password you have set. +Теперь вы можете войти в панель управления Marzban, используя заданное имя пользователя и пароль. -To view the Marzban script guide, you can execute the following command: +Чтобы просмотреть руководство по скриптам Marzban, выполните следующую команду: ```bash marzban --help ``` -To modify the default settings, you can open the `/opt/marzban/.env` file and change the desired variables. Then, restart Marzban using the following command. +Чтобы изменить настройки по умолчанию, откройте файл `/opt/marzban/.env` и измените нужные переменные. Затем перезапустите Marzban, выполнив следующую команду. -::: details Editing the file with nano -The easiest way to edit the `.env` file is to use the `nano` editor. Open the file with the following command. +::: details Редактирование файла с помощью nano +Проще всего редактировать файл `.env` с помощью редактора `nano`. Откройте файл командой: ```bash nano /opt/marzban/.env ``` -Apply your changes and save the file by pressing `Ctrl+s`. Then, exit the editor by pressing `Ctrl+x`. +Внесите необходимые изменения и сохраните файл, нажав `Ctrl+s`. Затем выйдите из редактора, нажав `Ctrl+x`. ::: ```bash marzban restart ``` -To view the list of variables, refer to the [Configuration](configuration.md) section. +Чтобы просмотреть список переменных, обратитесь к разделу [Конфигурация](configuration.md). -## Manual Installation (Advanced) +## Ручная установка (для продвинутых) -::: warning Attention -Manual installation of the Marzban is not recommended for non-professionals. If you have the patience to study the documentation or are familiar with the programming environment and Linux, try installing this way. +::: warning Внимание +Ручная установка Marzban не рекомендуется для непрофессионалов. Если у вас есть терпение изучить документацию или вы хорошо знакомы с программной средой и Linux, попробуйте установить таким способом. -Also, in manual installation, the Marzban script is not available and you need to be familiar with `git` for updates. +Кроме того, при ручной установке скрипт Marzban недоступен, и вам необходимо знать `git` для обновлений. ::: -First, you need to install Xray on your machine. -It is recommended to do this with the [Xray-install](https://github.com/XTLS/Xray-install) script. +Сначала необходимо установить Xray на вашу машину. Рекомендуется сделать это с помощью скрипта [Xray-install](https://github.com/XTLS/Xray-install). ```bash bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install ``` -Then clone the project and install the prerequisites. -::: warning Attention -Marzban is compatible with Python 3.8 and higher versions. If possible, Python 3.10 is recommended. +Затем клонируйте проект и установите необходимые зависимости. +::: warning Внимание +Marzban совместим с Python 3.8 и выше. При возможности рекомендуется использовать Python 3.10. ::: -::: details Install pip -If the pip command is not installed on your machine, install it by running the following command. +::: details Установка pip +Если на вашей машине не установлена команда pip, установите её, выполнив следующую команду. ```bash wget -qO- https://bootstrap.pypa.io/get-pip.py | python3 - ``` ::: - -::: details Install in virtualenv If you are a programmer and are familiar with the virtual environment, it is recommended to use [Virtualenv](https://pypi.org/project/virtualenv/) +::: details Установка в виртуальном окружении +Если вы программист и знакомы с виртуальными окружениями, рекомендуется использовать [Virtualenv](https://pypi.org/project/virtualenv/). ```bash python3 -m pip install virtualenv python3 -m virtualenv .venv -# activation +# активация source .venv/bin/activate -# deactivation +# деактивация deactivate ``` ::: @@ -97,19 +95,18 @@ cd Marzban python3 -m pip install -r requirements.txt ``` -Now to build the database, run the following command. +Теперь, чтобы создать базу данных, выполните следующую команду. ```bash alembic upgrade head ``` -Create a copy of the `.env.example` file named `.env`. You can use this file to set environment variables. For more information, see the [Configuration](configuration.md) section. +Создайте копию файла `.env.example` с именем `.env`. Вы можете использовать этот файл для установки переменных окружения. Для получения дополнительной информации смотрите раздел [Конфигурация](configuration.md). ```bash cp .env.example .env ``` -To use `marzban-cli`, you need to link it to a file in your `$PATH`, make it executable, and install its auto-completion: - +Чтобы использовать `marzban-cli`, необходимо создать символическую ссылку на него в вашем `$PATH`, сделать его исполняемым и установить автодополнение: ```bash sudo ln -s $(pwd)/marzban-cli.py /usr/bin/marzban-cli @@ -117,31 +114,30 @@ sudo chmod +x /usr/bin/marzban-cli marzban-cli completion install ``` -To create a sudo admin (superuser) with `marzban-cli`, run the following command. +Чтобы создать администратора с привилегиями sudo (суперпользователя) с помощью `marzban-cli`, выполните следующую команду. ```bash marzban-cli admin create --sudo ``` -Now you can run Marzban by running the following command. +Теперь вы можете запустить Marzban, выполнив следующую команду. ```bash python3 main.py ``` -Marzban will run on port 8000 by default. (You can change it by changing the value of `UVICORN_PORT`.) - +По умолчанию Marzban будет работать на порту 8000. (Вы можете изменить это, изменив значение переменной `UVICORN_PORT`.) -::: details Install the Marzban service in systemctl -To install the Marzban service, you can use the install_service.sh script in the Marzban files. +::: details Установка сервиса Marzban в systemctl +Чтобы установить сервис Marzban, вы можете использовать скрипт `install_service.sh`, входящий в состав файлов Marzban. ```bash sudo chmod +x install_service.sh sudo ./install_service.sh -# enable and start marzban service +# включение и запуск сервиса Marzban sudo systemctl enable --now marzban.service ``` ::: -::: details Marzban with Nginx (SSL enabled) +::: details Marzban с Nginx (SSL включен) ```nginx server { listen 443 ssl http2; diff --git a/marzban/ru/docs/marzban-script.md b/marzban/ru/docs/marzban-script.md index e69de29..b319ae3 100644 --- a/marzban/ru/docs/marzban-script.md +++ b/marzban/ru/docs/marzban-script.md @@ -0,0 +1,203 @@ +--- +title: Скрипт Marzban +--- + +# Скрипт Marzban + +В этом разделе вы можете ознакомиться со скриптами для настройки Marzban или Marzban-node. + +## Установка панели Marzban + +- Установите Marzban с базой данных `SQLite` на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install +``` +- Установите Marzban с базой данных `MySQL` на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql +``` +- Установите Marzban с базой данных `MariaDB` на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb +``` +::: tip Совет +- Если у вас небольшое количество пользователей и узлов, база данных `SQLite` вам подойдет. Однако для большого числа пользователей и узлов настоятельно рекомендуется устанавливать Marzban с базой данных `MySQL`. `SQLite` всегда работает с одним соединением, и при большом количестве пользователей и узлов это приведет к большему числу подключений к базе данных, что, вероятно, вызовет блокировку базы данных. +::: +::: tip Совет +- В настоящее время отсутствует подробное описание работы с базой данных `MariaDB` и ее скриптом резервного копирования. Поэтому используйте ее только, если обладаете достаточными знаниями для работы с ней. +::: +- Это пример установки конкретной версии Marzban с базой данных `SQLite`. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --version v0.5.2 +``` +- Это пример установки конкретной версии Marzban с базой данных `MySQL`. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql --version v0.5.2 +``` +- Это пример установки конкретной версии Marzban с базой данных `MariaDB`. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb --version v0.5.2 +``` +::: warning Предупреждение +- База данных MySQL поддерживается с версии `v0.3.2` и выше. +::: +- Чтобы установить версию для разработчиков Marzban с базой данных `SQLite` на вашем сервере, используйте следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --dev +``` +- Чтобы установить версию для разработчиков Marzban с базой данных `MySQL` на вашем сервере, используйте следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mysql --dev +``` +- Чтобы установить версию для разработчиков Marzban с базой данных `MariaDB` на вашем сервере, используйте следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb --dev +``` +::: warning Предупреждение +- Версия для разработчиков Marzban постоянно меняется и находится в стадии тестирования, поэтому рекомендуется только для пользователей с программными знаниями. Если вы обычный пользователь, не устанавливайте эту версию, так как изменения могут вызвать ошибки в работе панели и вашей базы данных. +::: +- Вы можете установить этот скрипт (команда marzban) на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install-script +``` +::: tip Совет +- Используйте следующую команду для просмотра всех команд Marzban. +```bash +marzban help +``` +::: + +## Установка Marzban-node + +- Установите Marzban-node на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install +``` +- Установите Marzban-node на вашем сервере с указанием произвольного имени, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install --name marzban-node2 +``` +- Или вы можете установить этот скрипт (команда marzban-node) на вашем сервере, используя следующую команду. +```bash +sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban-node.sh)" @ install-script +``` +::: tip Совет +- Используйте следующую команду для просмотра всех команд Marzban-node. +```bash +marzban-node help +``` +::: + +## Команды Marzban + +- Используйте следующую команду для просмотра всех команд Marzban. +``` +marzban help +``` +- Включите Marzban, используя следующую команду. +``` +marzban up +``` +- Выключите Marzban, используя следующую команду. +``` +marzban down +``` +- Перезапустите Marzban, используя следующую команду. +``` +marzban restart +``` +- Просмотрите статус Marzban, используя следующую команду. +``` +marzban status +``` +- Просмотрите логи Marzban, используя следующую команду. +``` +marzban logs +``` +- Получите доступ к CLI Marzban, используя следующую команду. +``` +marzban cli +``` +- Обновите Marzban, используя следующую команду. +``` +marzban update +``` +- Удалите Marzban с вашего сервера, используя следующую команду. +``` +marzban uninstall +``` +- Отредактируйте Docker-конфигурацию Marzban, используя следующую команду. +``` +marzban edit +``` +- Отредактируйте файл `.env` Marzban, используя следующую команду. +``` +marzban edit-env +``` +- Настройте сервис резервного копирования Marzban, используя следующую команду. +``` +marzban backup-service +``` +- Сделайте немедленное резервное копирование, используя следующую команду. +``` +marzban backup +``` +- Измените версию ядра `Xray` в Marzban, используя следующую команду. +``` +marzban core-update +``` +::: tip Совет +При вводе вышеуказанной команды будут отображаться только последние `10` версий ядра `Xray`. Если вы хотите использовать определенную версию ядра `Xray`, введите букву `m`, а затем укажите нужную версию, как показано ниже: +``` +v1.8.24 +``` +::: + +## Команды Marzban-node + +- Используйте следующую команду для просмотра всех команд Marzban-node. +``` +marzban-node help +``` +- Включите Marzban-node, используя следующую команду. +``` +marzban-node up +``` +- Выключите Marzban-node, используя следующую команду. +``` +marzban-node down +``` +- Перезапустите Marzban-node, используя следующую команду. +``` +marzban-node restart +``` +- Просмотрите статус Marzban-node, используя следующую команду. +``` +marzban-node status +``` +- Просмотрите логи Marzban-node, используя следующую команду. +``` +marzban-node logs +``` +- Обновите Marzban-node, используя следующую команду. +``` +marzban-node update +``` +- Удалите Marzban-node с вашего сервера, используя следующую команду. +``` +marzban-node uninstall +``` +- Отредактируйте Docker-конфигурацию Marzban-node, используя следующую команду. +``` +marzban-node edit +``` +- Измените версию ядра `Xray` в Marzban-node, используя следующую команду. +``` +marzban-node core-update +``` +::: tip Совет +При вводе вышеуказанной команды будут отображаться только последние пять версий ядра `Xray`. Если вы хотите использовать определенную версию ядра `Xray`, введите букву `m`, а затем укажите нужную версию, как показано ниже: +``` +v1.8.24 +``` +::: diff --git a/marzban/ru/examples/all-on-one-port.md b/marzban/ru/examples/all-on-one-port.md index 31bcf0c..3c3e86a 100644 --- a/marzban/ru/examples/all-on-one-port.md +++ b/marzban/ru/examples/all-on-one-port.md @@ -1,48 +1,40 @@ --- -title: راه‌اندازی همه چیز روی یک پورت +title: Настройка всего на одном порту --- -# یک پورت برای همه -به کمک این آموزش می‌توانید تمام ارتباطات با سرور خود (پنل، کانفیگ‌های TLSدار و کانفیگ‌های REALITY) را از طریق یک (یا دو) پورت انجام دهید. -هدف از این کار، طبیعی‌تر شدن ارتباطات سرور، دور زدن محدودیت‌های روی یک پورت یا مواردی از این دست است. +# Один порт для всех +С помощью этого руководства вы сможете осуществлять все подключения к вашему серверу (панель управления, TLS-конфигурации и REALITY-конфигурации) через один (или два) порта. Цель данного подхода — сделать соединения с сервером более естественными, обойти ограничения на один порт и решить подобные задачи. -::: tip نکته -اگر پورت پنل خود را در طی زمان عوض کرده‌اید و می‌خواهید لینک‌های سابسکریپشن قبلی همچنان کار کنند هم می‌توانید با این آموزش، HAProxy را روی پورت قدیمی listen کرده و ترافیک ورودی را به پورت لوکال جدید بفرستید تا هر دو لینک سابسکریپشن کار کنند. برای این کار فقط کافیست پورت قبلی خود هم مثل پورت ۴۴۳ اضافه کنید. +::: tip Примечание +Если вы меняли порт для панели управления и хотите, чтобы старые ссылки подписки продолжали работать, вы также можете, следуя этому руководству, настроить HAProxy на прослушивание старого порта и перенаправление входящего трафика на новый локальный порт, чтобы обе ссылки подписки функционировали. Для этого достаточно добавить старый порт аналогично порту 443. ::: +В этом руководстве мы используем HAProxy для достижения нашей цели. В дальнейшем предполагается, что поддомен панели — **panel.example.com**, поддомен для TLS-конфигураций — **sub.example.com**, а адрес SNI, используемый в REALITY-конфигурации — **reality.com**. -ما در این آموزش از ابزار HAProxy برای رسیدن به هدف خود استفاده می‌کنیم. در ادامه آموزش، فرض می‌شود که ساب‌دامنه‌ی پنل panel.example.com، -ساب‌دامنه‌ی مربوط به کانفیگ‌های TLSدار sub.example.com و آدرس SNI استفاده شده در کانفیگ ریلیتی reality.com است. +Таким образом, в этом руководстве мы сначала установим и настроим HAProxy, а затем внесем необходимые изменения в конфигурации и панель, чтобы весь трафик принимался через один порт. В конце приведены некоторые дополнительные замечания. -پس در ادامه‌ی این آموزش ابتدا HAProxy را نصب و پیکربندی کرده و سپس تغییرات لازم را در کانفیگ‌ها و پنل ایجاد می‌کنیم تا تمام ترافیک را روی یک پورت قبول کنند. در آخر هم برخی نکات اضافی آمده است. - - -::: warning توجه -چنان‌چه قبلا از HAProxy برای گرفتن SSL برای پنل خود استفاده کرده‌اید، باید از یک روش دیگر (پیشنهاد ما UNIVCORN) برای پنل SSL بگیرید تا با این تنظیمات تداخل پیدا نکند +::: warning Внимание +Если ранее вы использовали HAProxy для получения SSL-сертификата для панели управления, то для панели SSL рекомендуем использовать другой метод (наш совет — UNIVCORN), чтобы избежать конфликтов с данными настройками. ::: +## Установка и настройка HAProxy -## نصب و پیکربندی HAProxy - -::: tip نکته -ما در این آموزش HAProxy را به صورت مستقیم روی سرور نصب می‌کنیم؛ چنانچه تمایل داشتید می‌توانید خودتان آن را در داکر هم نصب کنید. - -همچنین اگر در آینده قصد اعمال ruleهای پیچیده‌تر خواهید داشت، فراموش نکنید که HAProxy را از مخزن اصلی خود نصب کنید و نه از مخازن لینوکس. +::: tip Примечание +В этом руководстве мы устанавливаем HAProxy непосредственно на сервер; если хотите, вы можете установить его в Docker. +Также, если в будущем планируете использовать более сложные правила, не забудьте установить HAProxy из его официального репозитория, а не из стандартных репозиториев Linux. ::: - -ابتدا برای نصب دستورات زیر را بزنید: +Сначала выполните следующие команды для установки: ```bash apt update apt install -y haproxy ``` -پس از نصب، فایل پیکربندی HAProxy در آدرس `/etc/haproxy/haproxy.cfg` قرار می‌گیرد. این فایل را با `nano` برای ویرایش باز کنید. - -حال، پیکربندی زیر را پس از تغییر طبق توضیحات به انتهای فایل پیکربندی اضافه کرده و سیو کنید. +После установки файл конфигурации HAProxy находится по адресу `/etc/haproxy/haproxy.cfg`. Откройте его для редактирования с помощью `nano`. +Затем добавьте в конец файла следующую конфигурацию (с учетом необходимых изменений согласно инструкциям) и сохраните файл. ::: code-group ```[haproxy.cfg] @@ -68,31 +60,30 @@ backend fallback backend reality mode tcp server srv1 127.0.0.1:12000 send-proxy - ``` ::: +Конфигурация HAProxy состоит из одного или нескольких **frontend** и **backend**. Каждый frontend направляет трафик к одному из backend'ов в соответствии с заданными правилами. Понимание этих двух компонентов поможет лучше настроить HAProxy. -پیکربندی‌های HAProxy شامل یک یا چند frontend و یک یا چند backend هستند. هر frontend بر اساس قوانینی که در آن تعریف می‌شود ترافیک را به سمت یکی از backendها می‌فرستد. فهم این دو بخش در پیکربندی بهتر HAProxy به ما کمک می‌کند. - -با دقت در این پیکربندی می‌توانید متوجه شوید که با آن، HAProxy بر روی پورت ۴۴۳ سرور گوش داده و تمام ترافیک را دریافت می‌کند. سپس بر اساس sni ترافیک دریافتی، آن را روی یک پورت «لوکال» سرور فوروارد می‌کند و از این طریق می‌توانیم بین ترافیک‌های مختلف تفاوت قائل شویم. +Из приведенной конфигурации видно, что HAProxy прослушивает порт 443 на сервере и принимает весь трафик. Затем, исходя из SNI входящего запроса, трафик перенаправляется на соответствующий локальный порт сервера, что позволяет разделять различные типы трафика. - -::: tip نکته -در این پیکربندی یک backend پیش‌فرض با استفاده از default_backend تعریف شده است که اگر ترافیک ورودی مربوط به هر چیزی بجز دو sni تعریف شده بود، آن را به این backend می‌فرستد. شما می‌توانید این تکه از کد را بردارید تا ترافیک‌های غیر از sniهای مشخص شده مسدود شوند. +::: tip Примечание +В данной конфигурации определен backend по умолчанию с помощью `default_backend`. Если входящий трафик не соответствует ни одному из указанных SNI, он перенаправляется к этому backend. Вы можете удалить этот фрагмент, чтобы блокировать трафик, не соответствующий указанным SNI. ::: -پس از جای‌گذاری دامنه‌های خود و قراردادن این پیکربندی در انتهای فایل گفته شده، با دستور زیر HAProxy را ریستارت کرده تا کار ما با آن در این مرحله تمام شود. +После того как вы замените домены на свои и добавите эту конфигурацию в конец файла, перезапустите HAProxy командой: ```bash systemctl restart haproxy ``` -## آماده‌سازی کانفیگ‌ها -### آماده‌سازی کانفیگ REALITY - فرض کنید که شما می‌خواهید چند اینباند مختلف برای هر نود خود یا چند اینباند مختلف با sniهای مختلف داشته باشید. اگر صرفاً این اینباندها را زیر هم قرار داده و پورت آن‌ها را یکسان کنید، اتصال با اختلال روبرو می‌شود و عملا امکان برقراری ارتباط وجود ندارد. +## Подготовка конфигураций + +### Подготовка конфигурации REALITY - تک پورت کردن کانفیگ‌ها این مشکل را حل می‌کند. برای این کار، تنظیمات کانفیگ‌های خود را باید به شکل زیر تغییر دهید (به خط‌های ۳ و ۴ و ۱۳ توجه کنید): +Предположим, что вы хотите иметь несколько inbound-конфигураций для каждого нода или несколько inbound-конфигураций с различными SNI. Если просто разместить эти inbound'ы подряд и назначить им одинаковый порт, соединение будет нестабильным, и установить связь практически невозможно. + +Использование одного порта для всех конфигураций решает эту проблему. Для этого измените настройки ваших конфигураций следующим образом (обратите внимание на строки 3, 4 и 13): ::: code-group ```json{3-4,13} [xray_config.json] @@ -135,13 +126,11 @@ systemctl restart haproxy ``` ::: +### Подготовка TLS-конфигураций -با این تغییرات، اینباند شما بجای گوش دادن روی 0.0.0.0، روی 127.0.0.1 یا همان لوکال، گوش می‌دهد و می‌توانید هر تعداد اینباند که می‌خواهید به این شکل ساخته (با پورت‌های لوکال متفاوت) و در HAProxy براساس sni بین آن‌ها تفکیک قائل شوید. - -### آماده‌سازی کانفیگ‌های TLSدار -برای اینکه تمام انواع کانفیگ‌های TLSدار را روی یک پورت داشته باشیم، از فالبک استفاده می‌کنیم (اگر پیش از این از فالبک برای تک‌پورت کردن استفاده کرده‌اید، این مرحله را بگذرید و فقط پورت کانفیگ فالبک خود را با HAProxy یکسان کنید) +Чтобы запустить все виды TLS-конфигураций на одном порту, мы используем fallback (если вы уже использовали fallback для работы на одном порту, можете пропустить этот шаг и просто привести порт вашей fallback-конфигурации в соответствие с HAProxy). -ما ابتدا به یک اینباند فالبک نیاز داریم. به این منظور می‌توانید از اینباند زیر به عنوان نمونه استفاده کنید: +Сначала нам нужен inbound fallback. Для этого можно использовать следующий пример inbound: ::: code-group ```json{3-4,13} [xray_config.json] @@ -200,10 +189,9 @@ systemctl restart haproxy ``` ::: +Чтобы лучше использовать данную возможность, полезно понять её концепцию и принцип работы. Fallback действует следующим образом: если входящий трафик соответствует данному inbound, он принимается; если нет — перенаправляется к другим inbound'ам в зависимости от пути (path). Таким образом, после настройки fallback, создайте несколько других inbound-конфигураций, каждая из которых соответствует одному из путей, указанных в fallback. (Если такие inbound'ы уже существуют, достаточно изменить значение их параметра `listen` на заданное (например, `@vless-ws`, `@vmess-ws` или `@trojan-ws`), а также установить их путь (path) в fallback.) -برای استفاده‌ی بهتر از این امکان، خوب است مفهوم و کارکرد آن را یاد بگیریم. فالبک به‌طور کلی به این صورت عمل می‌کند که اگر ترافیک ورودی مطابق با این اینباند بود آن را قبول کرده و اگر نبود، برحسب path آن را به دیگر اینباندها می‌دهد. پس، بعد از قرار دادن اینباند بالا با فالبک، حال چند اینباند دیگر هریک با path گفته شده در اینباند فالبک تعریف می‌کنیم (اگر از قبل چنین اینباندهایی دارید کافی‌ست مقدار listen آن‌ها را فقط به مقدارهای تعریف‌شده (@vless-ws و @vmess-ws و @trojan-ws) تغییر داده و path آن‌ها هم در اینباند فالبک قرار دهید. - -پس اینباند فالبک براساس path هریک از ترافیک‌های ورودی را به سمت دیگر اینباندها می‌فرستد: +То есть, fallback перенаправляет входящий трафик по следующим правилам: ``` path = /lw -> listen: "@vless-ws" @@ -211,56 +199,51 @@ path = /mw -> listen: "@vmess-ws" path = /tw -> listen: "@trojan-ws" ``` -پس طبق مثال بالا کافی‌ست بخش‌های listen و path اینباندهای خود را با فالبک همسان کنید تا تمام کانفیگ‌ها روی یک پورت اجرا شوند. +Таким образом, согласно приведенному примеру, достаточно привести в соответствие значения `listen` и `path` ваших inbound-конфигураций с fallback, чтобы все они работали на одном порту. - -::: tip نکته -استفاده از فالبک، بار پردازشی سرور را افزایش می‌دهد. شما می‌توانید برای هر کانفیگ خود یک ساب دامنه متفاوت تعیین کرده و با استفاده از همان HAProxy و بدون نیاز به فالبک، کانفیگ‌های TLSدار را هم تک‌پورت کنید. +::: tip Примечание +Использование fallback увеличивает нагрузку на сервер. Вы можете для каждой конфигурации назначить отдельный поддомен и, используя HAProxy, настроить TLS-конфигурации на одном порту без fallback. ::: - -::: warning توجه -توجه کنید که در اینباندهایی که مقدار listen آن‌ها به شکل @xxx هست و در فالبک استفاده شده‌اند، خط مربوط به port را پاک کنید +::: warning Внимание +Обратите внимание, что для тех inbound-конфигураций, у которых значение `listen` имеет вид `@xxx` и которые используются во fallback, строку, относящуюся к порту, следует удалить. ::: - -حال اگر با استفاده از این روش فالبک اینباندها را تک‌پورت کرده‌اید، وارد فایل `.env` شده و متغیر زیر را مساوی با تگ اینباند فالبک خود قرار دهید: +Если вы настроили inbound-конфигурации на одном порту с помощью fallback, откройте файл `.env` и установите следующую переменную равной тегу вашего inbound fallback: ``` XRAY_FALLBACKS_INBOUND_TAG = "TROJAN_FALLBACK_INBOUND" ``` -## آماده‌سازی پنل -همان‌طور که گفته شد هدف ما داشتن تمام ارتباطات از جمله پنل (لینک سابسکریپشن) بر روی یک پورت است. پیش‌تر تنظیمات مربوط به پنل را در پیکربندی HAProxy وارد کردیم و در این مرحله کافیست تا پورتی که پنل روی آن گوش می‌دهد را با HAProxy همسان کنیم. پس برای اینکار کافی‌ست با ویرایش فایل `.env` متغیرهای زیر را برابر با مقدار تعریف‌شده (یا هرچیزی که در HAProxy وارد کرده‌اید) کنید: +## Настройка панели +Как уже было сказано, наша цель — использование одного порта для всех подключений, включая панель (ссылки подписки). Ранее настройки панели были внесены в конфигурацию HAProxy, и теперь достаточно привести порт, на котором панель слушает, в соответствие с HAProxy. Для этого отредактируйте файл `.env` и установите следующие переменные равными значениям, указанным в HAProxy (или любым другим, которые вы выбрали): ``` UVICORN_HOST = "127.0.0.1" UVICORN_PORT = 10000 ``` - -حال مرزبان را ریستارت کنید: +После этого перезапустите Marzban: ```bash marzban restart ``` -## آماده‌سازی هاست ستینگز -چون پورتی که در اینباند قرار داده‌اید یک پورت لوکال بوده و در اصل تمام ترافیک از پورت ۴۴۳ به سرور شما می‌رسد، لازم است که در قسمت هاست ستینگز کانفیگ‌هایی که ساخته‌اید خودتان پورت را به ۴۴۳ تغییر دهید وگرنه به صورت پیش‌فرض پورت‌های لوکال برای کانفیگ‌ها تعیین می‌شود. +## Настройка host settings -## نکات جانبی: -::: warning توجه -تنظیمات مربوط به HAProxy باید در تمام سرورهای نود هم انجام شوند، یا اینکه می‌توانید برای برخی سرورهای نود اینباند جدا تعریف کرده و مستقیم روی `0.0.0.0` لیسن کنید. -::: +Поскольку порт, указанный в inbound-конфигурации, является локальным, а фактически весь трафик поступает на ваш сервер через порт 443, необходимо в разделе host settings ваших конфигураций изменить порт на 443. Иначе по умолчанию для конфигураций будут использоваться локальные порты. +## Дополнительные замечания -::: tip توجه -در پیکربندی قرارداده‌شده برای HAProxy تمام ترافیکی که با یکی از sniهای panel.example.com و reality.com هم‌خوانی نداشته باشد به سمت اینباند فالبک منتقل می‌شود و در نتیجه با اینکار جلوی سواستفاده از آی‌پی شما به عنوان آی‌پی تمیز کلادفلر گرفته می‌شود +::: warning Внимание +Настройки HAProxy должны быть выполнены на всех нод-серверах. Либо вы можете определить отдельный inbound для некоторых нод и настроить прослушивание напрямую на `0.0.0.0`. ::: - -::: warning هشدار -چنان‌چه از محدودکننده‌ی آی‌پی استفاده می‌کنید، باید عبارت `send-proxy` را در انتهای هر سرور backend از HAProxy اضافه کنید و همچنین مقدار `"acceptProxyProtocol": true` را در کانفیگ اینباند خود، مطابق نمونه‌ی قرارداده‌شده برای REALITY در بالا قرار دهید. اگر کانفیگی `send-proxy` داشته ولی `"acceptProxyProtocol": true` نداشته باشد متصل نمی‌شود. +::: tip Примечание +В предложенной конфигурации HAProxy весь трафик, не совпадающий с SNI **panel.example.com** или **reality.com**, перенаправляется к inbound fallback, что предотвращает злоупотребление вашим IP в качестве «чистого» IP от Cloudflare. ::: +::: warning Предупреждение +Если вы используете IP-лимитер, необходимо добавить параметр `send-proxy` в конце каждой строки с сервером в backend-конфигурации HAProxy, а также установить значение `"acceptProxyProtocol": true` в вашей inbound-конфигурации, как показано в примере REALITY выше. Если конфигурация содержит `send-proxy`, но отсутствует `"acceptProxyProtocol": true`, соединение не установится. +::: diff --git a/marzban/ru/examples/blocking-rules.md b/marzban/ru/examples/blocking-rules.md index 1854f0d..9bf0fcb 100644 --- a/marzban/ru/examples/blocking-rules.md +++ b/marzban/ru/examples/blocking-rules.md @@ -1,46 +1,47 @@ --- -title: مسدود سازی سایت ها +title: Блокировка сайтов --- -# مسدود سازی سایت‌های ایرانی -به کمک این آموزش می‌توانید سایت‌های ایرانی را مسدود کنید. هدف از این کار جلوگیری از لو رفتن آیپی سرور شما و فیلتر شدن آن است برای این کار کافی‌ست مراحل زیر را برای سرور مستر و سرور مرزبان نود که در آخر آموزش توضیح داده شده انجام دهید. +# Блокировка иранских сайтов +С помощью этого руководства вы сможете заблокировать иранские сайты. Цель данного процесса — предотвратить утечку IP-адреса вашего сервера и его последующую блокировку. Для этого достаточно выполнить следующие шаги как на мастер-сервере, так и на сервере ноды Marzban (подробности в конце руководства). -## دستورات سرور مستر +## Команды для мастер-сервера -### قدم اول: دانلود فایل‌ها و ساخت پوشه‌های مورد نیاز +### Шаг первый: Загрузка файлов и создание необходимых папок -ابتدا با دستور زیر پوشه `assets` را ایجاد کنید. +Сначала создайте папку `assets` с помощью следующей команды: -``` bash +```bash mkdir -p /var/lib/marzban/assets/ ``` -### قدم دوم: دانلود فایل‌ها و تنظیم فایل env +### Шаг второй: Загрузка файлов и настройка файла env -سپس دستورات زیر را برای دانلود فایل‌های مورد نظر در ترمینال سرور وارد کنید. -``` bash +Затем выполните следующие команды в терминале сервера для загрузки необходимых файлов: +```bash wget -O /var/lib/marzban/assets/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat wget -O /var/lib/marzban/assets/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat wget -O /var/lib/marzban/assets/iran.dat https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat ``` -حالا با دستور زیر فایل `.env` را باز کنید. +Теперь откройте файл `.env` с помощью следующей команды: ```bash nano /opt/marzban/.env ``` -مقدار متغیر `XRAY_ASSETS_PATH` را به مقدار تعیین شده در کد زیر تغییر دهید. -``` bash +Измените значение переменной `XRAY_ASSETS_PATH` на следующее: + +```bash XRAY_ASSETS_PATH = "/var/lib/marzban/assets/" ``` -### قدم سوم: تنظیم و جایگذاری قوانین +### Шаг третий: Настройка и применение правил -دیگه وقت تنظیم کردن مرزبانه :) وارد پنل‌تون بشین و در قسمت `Core Settings` به قسمت `routing` برید و بخش `routing` را مطابق نمونه زیر پر کنید یا کلا بخش `routing` را پاک کنید و مقدار زیر را جایگزین کنید. -(توجه کنید که فقط بخش routing را باید پاک کنید. اگر کلا تا انتهای فایل پاک کردین باید یدونه { به آخرش اضافه کنید.) +Теперь время настроить Marzban :) Войдите в вашу панель управления, перейдите в раздел `Core Settings`, затем в подраздел `routing` и заполните его согласно примеру ниже. Либо полностью удалите раздел `routing` и замените его следующим содержимым. +*(Обратите внимание, что удалять нужно только раздел routing. Если вы удалите всё до конца файла, не забудьте добавить одну фигурную скобку `{` в конце.)* -``` json +```json "routing": { "domainStrategy": "IPIfNonMatch", "rules": [ @@ -109,62 +110,62 @@ XRAY_ASSETS_PATH = "/var/lib/marzban/assets/" } ``` -::: warning توجه -حتما چک کنید که مقدار tag پروتکل blackhole در بخش outbounds برابر با blackhole باشد. +::: warning Внимание +Обязательно убедитесь, что значение тега протокола `blackhole` в разделе outbounds установлено как `blackhole`. ::: -### قدم چهارم: اعمال تغییرات +### Шаг четвертый: Применение изменений -در نهایت برای اعمال تغییرات با دستور زیر مرزبان را ریستارت کنید. +Чтобы применить изменения, перезапустите Marzban с помощью следующей команды: -``` bash +```bash marzban restart ``` -## دستورات سرور مرزبان نود +## Команды для сервера ноды Marzban -### قدم اول: دانلود فایل‌ها و ساخت پوشه‌های مورد نیاز +### Шаг первый: Загрузка файлов и создание необходимых папок -ابتدا با دستور زیر پوشه `assets` را ایجاد کنید. -``` bash +Сначала создайте папку `assets` с помощью следующей команды: +```bash mkdir -p /var/lib/marzban/assets/ ``` -### قدم دوم: دانلود فایل‌ها +### Шаг второй: Загрузка файлов -سپس دستورات زیر را برای دانلود فایل های مورد نظر در ترمینال سرور وارد کنید. +Затем выполните следующие команды в терминале сервера для загрузки необходимых файлов: -``` bash +```bash wget -O /var/lib/marzban/assets/geosite.dat https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat wget -O /var/lib/marzban/assets/geoip.dat https://github.com/v2fly/geoip/releases/latest/download/geoip.dat wget -O /var/lib/marzban/assets/iran.dat https://github.com/bootmortis/iran-hosted-domains/releases/latest/download/iran.dat ``` - ### قدم سوم: تنظیم فایل docker-compose.yml +### Шаг третий: Настройка файла docker-compose.yml - وارد پوشه `Marzban-node` شوید. +Перейдите в папку `Marzban-node`: -``` bash +```bash cd Marzban-node ``` -با دستور زیر فایل `docker-compose.yml` را باز کنید. +Откройте файл `docker-compose.yml` с помощью следующей команды: -``` bash +```bash nano docker-compose.yml ``` -خط زیر را مانند نمونه به بخش `volumes` در فایل `docker-compose.yml` اضافه کنید. +Добавьте следующую строку в раздел `volumes` файла `docker-compose.yml`, как показано в примере: ::: code-group -```yml [docker-compose.yml] +```yml - /var/lib/marzban/assets:/usr/local/share/xray ``` ::: -::: details نمونه پیکربندی فایل `docker-compose.yml` +::: details Пример конфигурации файла `docker-compose.yml` ::: code-group -```yml{13} [docker-compose.yml] +```yml services: marzban-node: # build: . @@ -181,14 +182,14 @@ services: ``` ::: -::: warning توجه -فایل `docker-compose.yml` به راستای خطوط و فاصله‌گذاری‌ها حساس است. +::: warning Внимание +Файл `docker-compose.yml` чувствителен к отступам и пробелам. ::: -### قدم چهارم: اعمال تغییرات +### Шаг четвертый: Применение изменений -در نهایت برای اعمال تغییرات با دستور زیر مرزبان را ریستارت کنید. +Чтобы применить изменения, перезапустите Marzban с помощью следующей команды: -``` bash +```bash marzban restart -``` +``` diff --git a/marzban/ru/examples/issue-ssl-certificate.md b/marzban/ru/examples/issue-ssl-certificate.md index eb6656a..93eb00f 100644 --- a/marzban/ru/examples/issue-ssl-certificate.md +++ b/marzban/ru/examples/issue-ssl-certificate.md @@ -1,50 +1,49 @@ --- -title: ساخت گواهی SSL +title: Создание SSL-сертификата --- -# ساخت گواهی SSL -آموزش های پایین مربوط به دریافت گواهی SSL برای استفاده در مرزبان است. +# Создание SSL-сертификата +Ниже приведены инструкции по получению SSL-сертификата для использования в Marzban. -::: warning توجه -فایل های گواهی باید در آدرس `/var/lib/marzban/certs` در دسترس باشند تا مرزبان بتواند به آنها دسترسی داشته باشد. +::: warning Внимание +Файлы сертификатов должны находиться по адресу `/var/lib/marzban/certs`, чтобы Marzban мог получить к ним доступ. -در تمام مثال های پایین، فایل ها در این آدرس نصب خواهند شد. +Во всех приведённых ниже примерах файлы будут установлены в эту директорию. ::: -::: warning توجه -شما باید قبل از اقدام به دریافت گواهی SSL، رکورد های DNS دامنه را ثبت کرده باشید. +::: warning Внимание +Перед получением SSL-сертификата вы должны настроить DNS-записи вашего домена. ::: -## دریافت گواهی با acme.sh +## Получение сертификата с помощью acme.sh -- به دلیل استفاده از روش standalone با دستور زیر socat را نصب کتید. +- Из-за использования режима standalone установите пакет socat с помощью следующей команды: ```bash apt install curl socat -y ``` -::: tip نکته -در صورتی که socat را قبلا نصب کرده‌اید، دیگر نیازی به انجام این مرحله نیست. +::: tip Примечание +Если socat уже установлен, этот шаг можно пропустить. ::: -- با دستور زیر، [acme.sh](https://github.com/acmesh-official/acme.sh) را نصب کنید. +- Установите [acme.sh](https://github.com/acmesh-official/acme.sh) с помощью следующей команды. -`YOUR_EMAIL` را به ایمیل خود تغییر دهید. +Замените `YOUR_EMAIL` на ваш адрес электронной почты. -::: tip نکته -در صورتی که acme.sh را قبلا نصب کرده‌اید، دیگر نیازی به انجام این مرحله نیست. +::: tip Примечание +Если acme.sh уже установлен, этот шаг можно пропустить. ::: ```bash curl https://get.acme.sh | sh -s email=YOUR_EMAIL ``` -- برای دریافت گواهی، دستورات زیر را به ترتیب اجرا کنید. +- Для получения сертификата выполните последовательно следующие команды. -`YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +Замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ```bash - export DOMAIN=YOUR_DOMAIN mkdir -p /var/lib/marzban/certs @@ -53,46 +52,45 @@ mkdir -p /var/lib/marzban/certs --issue --force --standalone -d "$DOMAIN" \ --fullchain-file "/var/lib/marzban/certs/$DOMAIN.cer" \ --key-file "/var/lib/marzban/certs/$DOMAIN.cer.key" - ``` -## دریافت گواهی دامنه ثبت شده بر کلودفلر +## Получение сертификата для домена, зарегистрированного на Cloudflare -- اگر دامنه بر روی کلودفلر ثبت شده و روش های بالا پاسخگو نبود، از حالت دستی استفاده کنید +- Если ваш домен зарегистрирован на Cloudflare и предыдущие методы не сработали, используйте ручной режим. - `example.com` را به دامنه خود تغییر دهید + Замените `example.com` на ваш домен. - - بعد از نصب acme مراحل زیر را اجرا کنید + - После установки acme.sh выполните следующие шаги: ``` curl https://get.acme.sh ``` -1. قدم اول: +1. **Первый шаг:** ``` ~/.acme.sh/acme.sh --issue -d example.com --dns \ --yes-I-know-dns-manual-mode-enough-go-ahead-please ``` -- بعد از اجرا دو مقدار مانند عکس زیر به شما داده میشود +После выполнения команды вам будут выведены два значения, как показано на изображении ниже: - ![image](https://github.com/Gozargah/gozargah.github.io/assets/67644313/538c8341-fa77-4b06-96a4-73c29f3e0ded) +![image](https://github.com/Gozargah/gozargah.github.io/assets/67644313/538c8341-fa77-4b06-96a4-73c29f3e0ded) -2. قدم دوم: -به کلودفلر رفته و یک رکورد از تایپ txt ایجاد کنید و مقادیر را مانند عکس زیر وارد کنید +2. **Второй шаг:** +Перейдите в Cloudflare и создайте TXT-запись, введя значения, как показано на изображении ниже: ![image](https://github.com/Gozargah/gozargah.github.io/assets/67644313/dad9c59a-da1f-440b-aa6e-ad524aff212a) -3. قدم سوم: - با دستور زیر سرتیفیکیت را دریافت کنید +3. **Третий шаг:** +Получите сертификат с помощью следующей команды: ``` ~/.acme.sh/acme.sh --renew -d example.com \ --yes-I-know-dns-manual-mode-enough-go-ahead-please ``` -- در آخر فایل سرتیفیکیت دامین شما در آدرس زیر +- В итоге, файл сертификата вашего домена будет находиться по адресу: `/root/.acme.sh/example.com_ecc/fullchain.cer` -- و فایل پرایوت کی در آدرس زیر ذخیره میشود +- А файл приватного ключа — по адресу: `/root/.acme.sh/example.com_ecc/example.com.key` diff --git a/marzban/ru/examples/mariadb.md b/marzban/ru/examples/mariadb.md index 62d5bc3..3e7fb60 100644 --- a/marzban/ru/examples/mariadb.md +++ b/marzban/ru/examples/mariadb.md @@ -1,3 +1,260 @@ --- title: Настройка MariaDB ---- \ No newline at end of file +--- + +# Настройка MariaDB + +::: tip Замечание +На самом деле база данных MariaDB является форком MySQL и, учитывая, что она меньше нагружает ресурсы сервера, кажется, что она несколько оптимизирована. +::: + +::: warning Внимание +MariaDB поддерживается начиная с версии `v0.3.2` и выше. +::: + +## Быстрый запуск базы данных MariaDB + +- Если вы ещё не установили Marzban, установите его с базой данных `MariaDB` на вашем сервере с помощью следующей команды: + + ```bash + sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install --database mariadb + ``` + +::: tip Замечание +В процессе установки у вас попросят ввести пароль для базы данных `MariaDB`. Рекомендуется выбрать достаточно надёжный пароль для обеспечения безопасности, или просто нажать Enter, чтобы сгенерировать случайный пароль. +::: + +::: tip Замечание +Если вы установите Marzban с базой данных `MariaDB` указанной выше командой, по умолчанию панель управления базой данных `phpMyAdmin` не будет активирована. Поэтому, если вам она нужна, добавьте сервис `phpMyAdmin` в конец файла Docker Marzban согласно приведённым ниже инструкциям. +::: + +## Переход на MariaDB (новая установка) + +- Если вы установили Marzban с базой данных `SQLite`, с помощью данного руководства вы можете вручную перейти на использование `MariaDB`. + +- Необходимо создать сервис для `MariaDB`. Для этого измените файл `docker-compose.yml` следующим образом: + +::: code-group +```yml +services: + marzban: + image: gozargah/marzban:latest + restart: always + env_file: .env + network_mode: host + volumes: + - /var/lib/marzban:/var/lib/marzban + - /var/lib/marzban/logs:/var/lib/marzban-node + depends_on: + mariadb: + condition: service_healthy + + mariadb: + image: mariadb:lts + env_file: .env + network_mode: host + restart: always + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_ROOT_HOST: '%' + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + command: + - --bind-address=127.0.0.1 # Ограничивает доступ только с localhost для повышения безопасности + - --character_set_server=utf8mb4 # Устанавливает кодировку UTF-8 для полной поддержки Unicode + - --collation_server=utf8mb4_unicode_ci # Задает сопоставление (collation) для Unicode + - --host-cache-size=0 # Отключает кэширование хостов для предотвращения DNS-проблем + - --innodb-open-files=1024 # Устанавливает ограничение на количество открытых файлов InnoDB + - --innodb-buffer-pool-size=256M # Выделяет размер буферного пула для InnoDB + - --binlog_expire_logs_seconds=1209600 # Устанавливает время жизни бинарного лога на 14 дней (2 недели) + - --innodb-log-file-size=64M # Устанавливает размер файла лога InnoDB для балансировки между хранением логов и производительностью + - --innodb-log-files-in-group=2 # Использует два файла лога для баланса восстановления и дисковой активности + - --innodb-doublewrite=0 # Отключает двойную запись (уменьшает дисковую активность, но может увеличить риск потери данных) + - --general_log=0 # Отключает общий лог запросов для уменьшения использования дискового пространства + - --slow_query_log=1 # Включает лог медленных запросов для выявления проблем с производительностью + - --slow_query_log_file=/var/lib/mysql/slow.log # Логирует медленные запросы для устранения неполадок + - --long_query_time=2 # Устанавливает порог медленного запроса равным 2 секундам + volumes: + - /var/lib/marzban/mysql:/var/lib/mysql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + start_period: 10s + start_interval: 3s + interval: 10s + timeout: 5s + retries: 3 +``` +::: + +::: details Активация phpMyAdmin +Чтобы активировать phpMyAdmin, добавьте его сервис в файл `docker-compose.yml` следующим образом: + +::: code-group +```yml +services: + marzban: + image: gozargah/marzban:latest + restart: always + env_file: .env + network_mode: host + volumes: + - /var/lib/marzban:/var/lib/marzban + - /var/lib/marzban/logs:/var/lib/marzban-node + depends_on: + mariadb: + condition: service_healthy + + mariadb: + image: mariadb:lts + env_file: .env + network_mode: host + restart: always + environment: + MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} + MYSQL_ROOT_HOST: '%' + MYSQL_DATABASE: ${MYSQL_DATABASE} + MYSQL_USER: ${MYSQL_USER} + MYSQL_PASSWORD: ${MYSQL_PASSWORD} + command: + - --bind-address=127.0.0.1 # Ограничивает доступ только с localhost для повышения безопасности + - --character_set_server=utf8mb4 # Устанавливает кодировку UTF-8 для полной поддержки Unicode + - --collation_server=utf8mb4_unicode_ci # Задает сопоставление (collation) для Unicode + - --host-cache-size=0 # Отключает кэширование хостов для предотвращения DNS-проблем + - --innodb-open-files=1024 # Устанавливает ограничение на количество открытых файлов InnoDB + - --innodb-buffer-pool-size=256M # Выделяет размер буферного пула для InnoDB + - --binlog_expire_logs_seconds=1209600 # Устанавливает время жизни бинарного лога на 14 дней (2 недели) + - --innodb-log-file-size=64M # Устанавливает размер файла лога InnoDB для балансировки между хранением логов и производительностью + - --innodb-log-files-in-group=2 # Использует два файла лога для баланса восстановления и дисковой активности + - --innodb-doublewrite=0 # Отключает двойную запись (уменьшает дисковую активность, но может увеличить риск потери данных) + - --general_log=0 # Отключает общий лог запросов для уменьшения использования дискового пространства + - --slow_query_log=1 # Включает лог медленных запросов для выявления проблем с производительностью + - --slow_query_log_file=/var/lib/mysql/slow.log # Логирует медленные запросы для устранения неполадок + - --long_query_time=2 # Устанавливает порог медленного запроса равным 2 секундам + volumes: + - /var/lib/marzban/mysql:/var/lib/mysql + healthcheck: + test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] + start_period: 10s + start_interval: 3s + interval: 10s + timeout: 5s + retries: 3 + + phpmyadmin: + image: phpmyadmin/phpmyadmin:latest + restart: always + env_file: .env + network_mode: host + environment: + PMA_HOST: 127.0.0.1 + APACHE_PORT: 8010 + UPLOAD_LIMIT: 1024M + depends_on: + - mariadb +``` +::: + +С этим сервисом phpMyAdmin будет доступен на порту 8010 вашего сервера. + +Имя пользователя для входа будет **root**, а пароль вы зададите позже согласно инструкциям. + +- Задайте следующие переменные в файле `.env`. + +Замените `DB_PASSWORD` на желаемый пароль для базы данных. + +::: warning Внимание +- Переменная `DB_PASSWORD` должна быть одинаковой в обоих случаях. +- Для переменной `STRONG_PASSWORD` выберите другой, более надёжный пароль. +- Следующие переменные используются в сервисе MariaDB и отсутствуют в стандартных переменных Marzban, поэтому вам необходимо добавить их в файл `.env`. +::: + +```env +SQLALCHEMY_DATABASE_URL="mysql+pymysql://marzban:DB_PASSWORD@127.0.0.1:3306/marzban" +MYSQL_ROOT_PASSWORD=STRONG_PASSWORD +MYSQL_DATABASE=marzban +MYSQL_USER=marzban +MYSQL_PASSWORD=DB_PASSWORD +``` + +- Затем закомментируйте (добавив `#` в начало строки) следующий код, относящийся к базе данных `SQLite`: + +``` +# SQLALCHEMY_DATABASE_URL = "sqlite:////var/lib/marzban/db.sqlite3" +``` + +- Перезапустите Marzban: + +```bash +marzban restart +``` + +С этого момента данные Marzban будут сохраняться в MariaDB (в каталоге `/var/lib/marzban/mysql`). + +## Миграция на MariaDB (перенос данных) + +::: warning Внимание +Эта операция может занять некоторое время, поэтому заранее примите необходимые меры предосторожности. +::: + +Для переноса данных и перехода базы данных Marzban с SQLite на MariaDB выполните следующие шаги: + +- Выполните шаги, описанные в разделе [Переход на MariaDB (новая установка)](mariadb.md#تغییر-دیتابیس-به-mariadb-نصب-تازه). + +- После перезапуска Marzban выполните следующую команду для создания дампа предыдущей базы данных: + +```bash +sqlite3 /var/lib/marzban/db.sqlite3 '.dump --data-only' | sed "s/INSERT INTO \([^ ]*\)/REPLACE INTO \`\\1\`/g" > /tmp/dump.sql +``` + +- Перейдите в каталог `/opt/marzban`: + +```bash +cd /opt/marzban +``` + +- Выполните следующую команду, чтобы скопировать файл `dump.sql` в контейнер MariaDB: + +```bash +docker compose cp /tmp/dump.sql mariadb:/dump.sql +``` + +- Выполните следующую команду для переноса данных в MariaDB: + +::: tip Руководство +На этом этапе вам потребуется ввести пароль базы данных, который вы ранее установили вместо `STRONG_PASSWORD`. +::: +```bash +docker compose exec mariadb mysql -u root -p -h 127.0.0.1 marzban -e "SET FOREIGN_KEY_CHECKS = 0; SET NAMES utf8mb4; SOURCE dump.sql;" +``` + +- Удалите файл `/tmp/dump.sql`: + +```bash +rm /tmp/dump.sql +``` + +- Перезапустите Marzban: + +```bash +marzban restart +``` + +Теперь данные из вашей предыдущей базы данных перенесены в MariaDB. + +::: tip Замечание +Возможно, после перезапуска Marzban процесс миграции не завершится полностью. Вместо простого перезапуска вы можете выполнить остановку и запуск Marzban следующей командой: +```bash +marzban down && marzban up +``` +::: + +::: tip Замечание +Если вы используете [скрипт резервного копирования](https://gozargah.github.io/marzban/fa/examples/backup), после миграции на `MariaDB` необходимо снова запустить скрипт резервного копирования, иначе резервная копия базы данных MariaDB не будет создана. +::: + +## Дополнительные замечания + +::: tip Замечание +Дополнительные советы по работе с панелью управления базой данных `phpMyAdmin`, а также по устранению ошибок, описанных в документации [Запуск MySQL](https://gozargah.github.io/marzban/fa/examples/mysql), применимы и для базы данных MariaDB. +::: diff --git a/marzban/ru/examples/marzban-ssl.md b/marzban/ru/examples/marzban-ssl.md index 4b72cff..02c9436 100644 --- a/marzban/ru/examples/marzban-ssl.md +++ b/marzban/ru/examples/marzban-ssl.md @@ -1,28 +1,25 @@ --- -title: فعال‌سازی SSL در مرزبان +title: Активация SSL в Marzban --- -# فعال‌سازی SSL در مرزبان +# Активация SSL в Marzban -با فعال کردن SSL در مرزبان، داشبورد و لینک سابسکریپشن از طریق https در دسترس خواهد بود. -رویکرد های متفاوتی برای فعال‌سازی SSL در مرزبان وجود دارد که در زیر به سه روش آن به ترتیب از ساده به پیچیده اشاره میکنیم. +При включении SSL в Marzban панель управления и ссылки подписки будут доступны через HTTPS. Существует несколько подходов для активации SSL в Marzban, и ниже представлены три метода в порядке от простого к сложному. -::: tip نکته -در تمام مثال های پایین، فایل‌ های `docker-compose.yml` و `.env` در مسیر `/opt/marzban‍‍‍` و `xray_config.json` در مسیر `/var/lib/marzban` ‌می‌توانید پیدا کنید. +::: tip Примечание +Во всех приведённых ниже примерах файлы `docker-compose.yml` и `.env` можно найти по адресу `/opt/marzban`, а файл `xray_config.json` — по адресу `/var/lib/marzban`. -در صورتی که مرزبان را به صورت دستی نصب کرده‌اید، باید تغییرات مورد نیاز را شخصاً انجام دهید. +Если вы устанавливали Marzban вручную, необходимые изменения вам придется внести самостоятельно. ::: +## Активация SSL с помощью Caddy -## فعال‌سازی SSL با Caddy +В этом методе вам не нужно создавать SSL-сертификат — Caddy выполнит всю работу за вас! -در این روش، شما نیازی به ساخت گواهی SSL ندارید، Caddy تمام کار را برای شما انجام می‌دهد! - - -- فایل `docker-compose.yml` به شکل زیر تغییر دهید. +- Измените файл `docker-compose.yml` следующим образом: ::: code-group -```yml{9-10,12-22,24-25} [docker-compose.yml] +```yml services: marzban: image: gozargah/marzban:latest @@ -51,51 +48,46 @@ volumes: ``` ::: -- فایل جدیدی به نام ‍`Caddyfile` در مسیر `/opt/marzban` ایجاد کنید و `YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +- Создайте новый файл с именем `Caddyfile` в каталоге `/opt/marzban` и замените `YOUR_DOMAIN` на нужный вам домен или поддомен. -::: warning توجه -حرف اول در نام فایل `Caddyfile` حتما باید `C` بزرگ باشد. +::: warning Внимание +Первая буква в названии файла `Caddyfile` обязательно должна быть заглавной (C). ::: ::: code-group -```caddy [Caddyfile] +```caddy YOUR_DOMAIN { reverse_proxy unix//var/lib/marzban/marzban.socket } +``` ::: - -::: warning توجه -اگر می‌خواهید دامنه یا ساب‌دامنه‌ی سابسکریپشن از پنل متفاوت باشد، در فایل Caddyfile خود محتوای بالا رو دوبار زیرهم قرار داده و جفت دامنه یا ساب‌دامنه‌ها را بجای `YOUR_DOMAIN` قرار دهید. +::: warning Внимание +Если вы хотите, чтобы домен или поддомен для подписки отличался от домена панели, продублируйте содержимое файла Caddyfile дважды и укажите оба домена или поддомена вместо `YOUR_DOMAIN`. ::: -- متغیر های زیر را در فایل `.env` مقداردهی کنید. - -`YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +- Задайте следующие переменные в файле `.env`. Замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ```env UVICORN_UDS = /var/lib/marzban/marzban.socket XRAY_SUBSCRIPTION_URL_PREFIX = https://YOUR_DOMAIN ``` -- مرزبان را ری‌استارت کنید. +- Перезапустите Marzban: ```bash marzban restart ``` -حالا داشبورد مرزبان در آدرس دامنه یا ساب‌دامنه‌ی شما از طریق https در دسترس خواهد بود. - +Теперь панель Marzban будет доступна по HTTPS по указанному домену или поддомену. -## فعال‌سازی SSL با Uvicorn +## Активация SSL с помощью Uvicorn -مرزبان به صورت پیش‌فرض به کمک `Uvicorn` اجرا می‌شود. همچنین `Uvicorn` به شما امکان تعریف فایل های گواهی SSL را می‌دهد. +По умолчанию Marzban запускается с помощью `Uvicorn`, который позволяет задавать SSL-сертификаты. -- برای شروع، شما باید فایل های گواهی را برای دامنه یا ساب‌دامنه‌ی خود دریافت کنید. برای این کار، آموزش [ساخت گواهی SSL](issue-ssl-certificate.md) را مشاهده کنید. +- Для начала вам необходимо получить файлы сертификата для вашего домена или поддомена. Для этого ознакомьтесь с руководством [Создание SSL-сертификата](issue-ssl-certificate.md). -- بعد از ساخت فایل های گواهی SSL، متغیر های زیر را در فایل `.env` مقداردهی کنید. - -`YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +- После получения файлов сертификата задайте следующие переменные в файле `.env`. Замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ```env UVICORN_PORT = 443 @@ -104,20 +96,18 @@ UVICORN_SSL_KEYFILE = "/var/lib/marzban/certs/YOUR_DOMAIN.cer.key" XRAY_SUBSCRIPTION_URL_PREFIX = https://YOUR_DOMAIN ``` -حالا داشبورد مرزبان در آدرس دامنه یا ساب‌دامنه‌ی شما از طریق https در دسترس خواهد بود. - - -## فعال‌سازی SSL با HAProxy +Теперь панель Marzban будет доступна по HTTPS по указанному домену или поддомену. -`HAProxy` یکی از بهترین ابزار ها برای انجام این کار هست. در این روش مرزبان را با کمک `HAProxy` روی https اجرا می‌کنیم. +## Активация SSL с помощью HAProxy -- برای شروع، شما باید فایل های گواهی را برای دامنه یا ساب‌دامنه‌ی خود دریافت کنید. برای این کار، آموزش [ساخت گواهی SSL](issue-ssl-certificate.md) را مشاهده کنید. +`HAProxy` — один из лучших инструментов для этой задачи. В этом методе Marzban запускается через HTTPS с помощью HAProxy. +- Для начала вам необходимо получить файлы сертификата для вашего домена или поддомена. Для этого ознакомьтесь с руководством [Создание SSL-сертификата](issue-ssl-certificate.md). -- فایل `docker-compose.yml` به شکل زیر تغییر دهید. +- Измените файл `docker-compose.yml` следующим образом: ::: code-group -```yml{9-10,12-20} [docker-compose.yml] +```yml services: marzban: image: gozargah/marzban:latest @@ -141,10 +131,10 @@ services: ``` ::: -- فایل جدیدی به نام ‍`haproxy.cfg` در مسیر `/opt/marzban` ایجاد کنید و `YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +- Создайте новый файл с именем `haproxy.cfg` в каталоге `/opt/marzban` и замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ::: code-group -```cfg [haproxy.cfg] +```cfg defaults mode tcp timeout client 30s @@ -165,21 +155,20 @@ frontend https_frontend backend marzban_backend server marzban /var/lib/marzban/marzban.socket +``` ::: -- متغیر های زیر را در فایل `.env` مقداردهی کنید. - -`YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +- Задайте следующие переменные в файле `.env`. Замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ```env UVICORN_UDS = /var/lib/marzban/marzban.socket XRAY_SUBSCRIPTION_URL_PREFIX = https://YOUR_DOMAIN ``` -- مرزبان را ری‌استارت کنید. +- Перезапустите Marzban: ```bash marzban restart ``` -حالا داشبورد مرزبان در آدرس دامنه یا ساب‌دامنه‌ی شما از طریق https در دسترس خواهد بود. +Теперь панель Marzban будет доступна по HTTPS по указанному домену или поддомену. diff --git a/marzban/ru/examples/mysql-queries.md b/marzban/ru/examples/mysql-queries.md index 5ba25c9..bc68c6d 100644 --- a/marzban/ru/examples/mysql-queries.md +++ b/marzban/ru/examples/mysql-queries.md @@ -1,3 +1,657 @@ --- -title: Практичные SQL-запросы ---- \ No newline at end of file +title: Полезные SQL-запросы +--- + +::: warning Внимание +При неправильном использовании запросов или триггеров любые повреждения базы данных ложатся на вашу ответственность. Если у вас недостаточно технических знаний, воздержитесь от использования запросов, а особенно триггеров. +::: + +# Полезные SQL-запросы +С помощью этого руководства вы сможете выполнять различные операции в вашей базе данных с помощью полезных SQL-запросов, которые недоступны через панель управления. + +Вкратце, запрос — это способ задать вопрос базе данных и получить результат, однако многие запросы вместо вывода данных вносят изменения в базу данных. Поэтому обычно вторую группу не называют запросами, но по привычке мы называем их все запросами. + +::: warning Внимание +Для использования SQL-запросов необходимо сначала настроить MySQL согласно руководству [Запуск MySQL](https://gozargah.github.io/marzban/fa/examples/mysql) и активировать панель управления базой данных PhpMyAdmin. Также MySQL поддерживается в версиях v0.3.2 и выше. +::: + +::: warning Внимание +Если SQL-коды вносят изменения в базу данных вместо того, чтобы просто выводить результат, обязательно сделайте резервную копию согласно документации [Резервное копирование](https://gozargah.github.io/marzban/fa/examples/backup), так как изменения могут быть необратимыми. +::: + +## Как вводить запросы +Сначала войдите в панель управления базой данных Marzban, которая по умолчанию работает на порту `8010`. В левой панели выберите `marzban`, затем в верхней части страницы нажмите на раздел `SQL`. Появится белое окно с предварительно заполненным кодом — сначала его удалите, затем введите нужный запрос и, наконец, нажмите кнопку `Go`, расположенную внизу окна. + +## Список полезных SQL-запросов + +- **Список пользователей, у которых подписка заканчивается в определённый день.** + + ```sql + SELECT * FROM users + WHERE expire >= UNIX_TIMESTAMP('2024-06-13 00:00:00') + AND expire < UNIX_TIMESTAMP('2024-06-14 00:00:00') + AND status = 'active'; + ``` + + ::: tip Примечание + Фактически, этот запрос выводит список пользователей, у которых подписка истекает 13 июня; ориентиром служит первая дата. + ::: + +- **Список пользователей, у которых подписка истекает до указанной даты.** + + ```sql + SELECT * FROM users + WHERE expire < UNIX_TIMESTAMP('2024-03-10') + AND status = 'active'; + ``` + + ::: tip Примечание + Например, если сегодня 7 марта, а в запросе указана дата 10 марта, то он выведет всех пользователей, у которых осталось 3 дня до истечения подписки. + ::: + +- **Список пользователей, у которых осталось менее 2 ГБ от установленного лимита.** + + ```sql + SELECT * FROM users + WHERE data_limit - used_traffic < (2 * 1024 * 1024 * 1024) + AND status = 'active' + AND data_limit IS NOT NULL + ``` + +- **Список пользователей, которые использовали 90% своего лимита.** + + ```sql + SELECT * FROM users + WHERE used_traffic >= 0.9 * data_limit + AND status = 'active' + AND data_limit IS NOT NULL; + ``` + +- **Список назначенных лимитов (в ГБ) по каждому администратору.** + + ```sql + SELECT admins.username, users.data_limit/1073741824, Count(*) + FROM admins + LEFT JOIN users ON users.admin_id = admins.id + GROUP BY admins.username, users.data_limit + ``` + +- **Просмотр объёма потреблённого трафика администраторов (в ГБ).** + + ```sql + SELECT admins.username, (SUM(users.used_traffic) + IFNULL(SUM(user_usage_logs.used_traffic_at_reset), 0)) / 1073741824 + FROM admins + LEFT JOIN users ON users.admin_id = admins.id + LEFT JOIN user_usage_logs ON user_usage_logs.user_id = users.id + GROUP BY admins.username + ``` + +- **Объём потреблённого трафика администраторов по каждому узлу (в ГБ).** + + ```sql + SELECT admins.username, nodes.name, SUM(node_user_usages.used_traffic)/1073741824 + FROM nodes + LEFT JOIN node_user_usages ON node_user_usages.node_id = nodes.id + LEFT JOIN users ON node_user_usages.user_id = users.id + LEFT JOIN admins ON users.admin_id = admins.id + GROUP BY admins.username, nodes.name; + ``` + +- **Просмотр количества пользователей для администратора с различными статусами.** + + ```sql + SELECT + COUNT(*) AS total_users, + SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_users, + SUM(CASE WHEN status = 'expired' THEN 1 ELSE 0 END) AS expired_users, + SUM(CASE WHEN status = 'limited' THEN 1 ELSE 0 END) AS limited_users, + SUM(CASE WHEN TIMESTAMPDIFF(MINUTE, now(), online_at) = 0 THEN 1 ELSE 0 END) AS online_users + FROM users + WHERE admin_id = ADMIN_ID; + ``` + +- **Просмотр названий клиентских программ (User-Agent) активных пользователей с подсчётом количества.** + + ```sql + SELECT SUBSTR(sub_last_user_agent ,1,9), COUNT(*) FROM users + WHERE status = 'active' GROUP By SUBSTR(sub_last_user_agent ,1,9) + ORDER By SUBSTR(sub_last_user_agent ,1,9); + ``` + +- **Вывод списка онлайн-пользователей.** + + ```sql + SELECT username + FROM users + WHERE TIMESTAMPDIFF(MINUTE, now(), online_at) = 0; + ``` + +- **Просмотр пользователей, не активных более 24 часов.** + + ```sql + SELECT username, TIMESTAMPDIFF(HOUR, online_at, NOW()) AS LastOnlineHours + FROM users + WHERE TIMESTAMPDIFF(HOUR, online_at, NOW()) >= 24 + AND status = 'active' + ORDER BY LastOnlineHours DESC; + ``` + +- **Список пользователей, обновивших ссылку подписки за последние 24 часа.** + + ```sql + SELECT username, datediff(now(), sub_updated_at) as LastUpdate FROM users + WHERE datediff(now(), sub_updated_at) < 1 AND status = 'active' ORDER BY LastUpdate DESC; + ``` + +- **Список пользователей, которые не обновляли ссылку подписки за последние 10 дней.** + + ```sql + SELECT username, datediff(now(), sub_updated_at) as LastUpdate FROM users + WHERE datediff(now(), sub_updated_at) > 10 AND status = 'active' ORDER BY LastUpdate DESC; + ``` + + ::: tip Примечание + В этом запросе число `10` можно заменить на любое желаемое количество дней. + ::: + +- **Список пользователей с отключённым inbound.** + + ```sql + SELECT users.username, proxies.id, exclude_inbounds_association.inbound_tag FROM users INNER JOIN proxies + ON proxies.user_id = users.id INNER JOIN exclude_inbounds_association + ON exclude_inbounds_association.proxy_id = proxies.id ORDER BY users.username; + ``` + +- **Список пользователей, для которых протокол `VMess` отключён.** + + ```sql + SELECT users.username FROM users + WHERE users.username not in (SELECT users.username FROM users LEFT JOIN proxies ON proxies.user_id = users.id + WHERE proxies.type = 'VMESS'); + ``` + + ::: tip Примечание + Для проверки других протоколов просто замените `VMESS` на нужное название (обязательно заглавными буквами). + ::: + +- **Список пользователей, использующих определённый узел, отсортированный по убыванию потреблённого трафика.** + + ```sql + SELECT users.id, users.username, SUM(node_user_usages.used_traffic) AS total_used_traffic + FROM node_user_usages + INNER JOIN users ON node_user_usages.user_id = users.id + WHERE node_user_usages.node_id = 100 + GROUP BY users.id, users.username + ORDER BY total_used_traffic DESC; + ``` + + ::: tip Примечание + Вместо числа `100` укажите id нужного узла, найденный в таблице `nodes`. + ::: + +- **Общий объём установленных лимитов для пользователей каждого администратора (в терабайтах).** + + ```sql + SELECT admins.username, SUM(users.data_limit) / 1099511627776 AS total_data_limit_tb + FROM users + LEFT JOIN admins ON users.admin_id = admins.id + GROUP BY admins.username; + ``` + +- **Общий объём установленных лимитов для пользователей каждого администратора (в гигабайтах).** + + ```sql + SELECT admins.username, SUM(users.data_limit) / 1073741824 AS total_data_limit_gb + FROM users + LEFT JOIN admins ON users.admin_id = admins.id + GROUP BY admins.username; + ``` + +- **Пользователи без ограничения по времени.** + + ```sql + SELECT id, username + FROM users + WHERE expire IS NULL; + ``` + +- **Пользователи без ограничения по объёму.** + + ```sql + SELECT id, username + FROM users + WHERE data_limit IS NULL; + ``` + +## Полезные SQL-скрипты +В отличие от запросов, SQL-скрипты вносят изменения в базу данных, а не выводят результат. + +- **Перевод пользователей между администраторами.** + + ```sql + UPDATE users SET users.admin_id = 3 + WHERE users.admin_id = 6; + ``` + + ::: tip Примечание + В приведённом примере пользователи с `admin_id = 6` будут переведены на администратора с `id = 3`. + ::: + +- **Деактивация всех пользователей определённого администратора.** + + ```sql + UPDATE users SET users.status= 'disabled' + WHERE users.admin_id = '1' and users.status= 'active' + ``` + +- **Активация всех неактивных пользователей определённого администратора.** + + ```sql + UPDATE users SET users.status= 'active' + WHERE users.admin_id = '1' and users.status= 'disabled' + ``` + +- **Добавление 1 дня ко времени для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + UPDATE users SET expire=expire+(86400 * 1) WHERE expire IS NOT NULL + ``` + +- **Вычитание 1 дня из времени для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + UPDATE users SET expire=expire-(86400 * 1) WHERE expire IS NOT NULL + ``` + +- **Добавление 1 дня ко времени для пользователей определённого администратора.** + + ```sql + UPDATE users SET expire=expire+(86400 * 1) WHERE expire IS NOT NULL and admin_id in (100,200) + ``` + +- **Вычитание 1 дня из времени для пользователей определённого администратора.** + + ```sql + UPDATE users SET expire=expire-(86400 * 1) WHERE expire IS NOT NULL and admin_id in (100,200) + ``` + +- **Добавление 20% от установленного лимита для всех пользователей определённого администратора.** + + ```sql + UPDATE users SET data_limit = data_limit + (data_limit * 20) / 100 WHERE data_limit IS NOT NULL and admin_id in (100,200) + ``` + +- **Вычитание 20% от установленного лимита для всех пользователей определённого администратора.** + + ```sql + UPDATE users SET data_limit = data_limit - (data_limit * 20) / 100 WHERE data_limit IS NOT NULL and admin_id in (100,200) + ``` + + ::: tip Примечание + В этих скриптах для изменения процента замените число `20` на нужное значение. Обратите внимание, что к установленному лимиту каждого пользователя прибавляется 20% — например, если лимит составляет 100 ГБ, после выполнения кода он станет 120 ГБ. + ::: + +::: tip Примечание +В SQL-скриптах, предназначенных для определённого администратора, необходимо указать id администратора из таблицы базы данных перед выполнением кода. В некоторых случаях может потребоваться указать только имя администратора, поэтому обратите внимание на различия. Если в коде указаны два id в скобках, разделённых запятой, то если у вас один администратор — укажите его id, а если несколько — разделите их запятой. +::: + +- **Удаление пользователей, у которых прошло более 30 дней с даты истечения подписки.** + + ```sql + delete from users where datediff(now(),from_unixtime(expire))> 30 + ``` + + ::: tip Примечание + Для данного запроса необходимо отключить опцию `enable foreign key checks`. + ::: + +- **Удаление всех неактивных пользователей.** + + ```sql + delete from users where status = 'disabled' + ``` + +- **Для пользователей с активированным протоколом `VLESS`: если параметр `Flow` не установлен, установить его.** + + ```sql + UPDATE proxies + SET settings = JSON_SET(settings, '$.flow', 'xtls-rprx-vision') + WHERE type = 'VLESS' AND JSON_UNQUOTE(JSON_EXTRACT(settings, '$.flow')) = ''; + ``` + +- **Активация протокола `VMess` для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + INSERT INTO proxies (user_id, type,  settings) + SELECT id, "VMess", CONCAT("{""id"": """, CONVERT(UUID() , CHAR) , """}") + FROM users; + ``` + +- **Деактивация протокола `VMess` для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + DELETE FROM proxies WHERE type = "VMess" + ``` + +- **Активация протокола `VMess` для пользователей определённого администратора.** + + ```sql + INSERT INTO proxies (user_id, type,  settings) SELECT id, "VMess", CONCAT("{""id"": """, CONVERT(UUID() , CHAR) , """}") + FROM users INNER JOIN admins ON  users.admin_id = admins.id + WHERE admins.username = "admin1"; + ``` + +- **Деактивация протокола `VMess` для пользователей определённого администратора.** + + ```sql + DELETE proxies + FROM proxies + WHERE type = 'VMess' and proxies.id in ( +     SELECT p.id +     FROM +     ( +         SELECT proxies.id +         FROM proxies +         INNER JOIN users ON proxies.user_id = users.id +         INNER JOIN admins ON users.admin_id = admins.id +         WHERE admins.username = 'admin1' +     ) AS p + ); + ``` + + ::: tip Примечание + Для активации или деактивации других протоколов замените `VMess` на нужное название, а вместо `admin1` укажите имя нужного администратора. + ::: + +- **Запрос для активации протокола Trojan.** + + ```sql + INSERT INTO proxies (TYPE, user_id, settings) + SELECT 'trojan' AS TYPE, id, CONCAT( '{"password": "', SUBSTRING( CONCAT( CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(97 + (RAND() * 26))), CHAR(FLOOR(48 + (RAND() * 10))), CONVERT(SHA2(RAND(), 256) USING utf8mb4)), 1, 22 ), '", "flow": ""}' ) AS settings FROM users WHERE id in ( select id from users where id not in ( select user_id from proxies where type = 'trojan' ) ); + ``` + +- **Запрос для активации протокола Shadowsocks.** + + ```sql + INSERT INTO proxies (TYPE, user_id, settings) + SELECT 'Shadowsocks' AS TYPE, id, CONCAT( '{"password": "', SUBSTRING( CONCAT( CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(97 + (RAND() * 26))), CHAR(FLOOR(48 + (RAND() * 10))), CONVERT(SHA2(RAND(), 256) USING utf8mb4)), 1, 22 ), '", "method": "aes-128-gcm"}' ) AS settings FROM users WHERE id in ( select id from users where id not in ( select user_id from proxies where type = 'Shadowsocks' ) ); + ``` + +- **Активация определённого inbound для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + DELETE FROM exclude_inbounds_association + WHERE proxy_id IN ( + SELECT proxies.id + FROM users + INNER JOIN admins ON users.admin_id = admins.id + INNER JOIN proxies ON proxies.user_id = users.id + ) AND inbound_tag = 'INBOUND_NAME'; + ``` + +- **Активация определённого inbound для пользователей определённого администратора.** + + ```sql + DELETE FROM exclude_inbounds_association + WHERE proxy_id IN ( + SELECT proxies.id + FROM users + INNER JOIN admins ON users.admin_id = admins.id + INNER JOIN proxies ON proxies.user_id = users.id + WHERE admins.username = 'ADMIN' + ) AND inbound_tag = 'INBOUND_NAME'; + ``` + +- **Деактивация определённого inbound для пользователей всех администраторов (sudo и non-sudo).** + + ```sql + INSERT INTO exclude_inbounds_association (proxy_id, inbound_tag) + SELECT proxies.id, "INBOUND_NAME" + FROM users INNER JOIN admins ON users.admin_id = admins.id INNER JOIN proxies ON proxies.user_id = users.id + ``` + +- **Деактивация определённого inbound для пользователей определённого администратора.** + + ```sql + INSERT INTO exclude_inbounds_association (proxy_id, inbound_tag) + SELECT proxies.id, "INBOUND_NAME" + FROM users INNER JOIN admins ON users.admin_id = admins.id INNER JOIN proxies ON proxies.user_id = users.id + WHERE admins.username = "ADMIN"; + ``` + + ::: tip Примечание + В запросах, связанных с активацией и деактивацией inbound, вместо `INBOUND_NAME` укажите название нужного inbound, а в запросах для определённого администратора вместо `ADMIN` — имя нужного администратора. + ::: + +::: warning Внимание +В четырёх приведённых выше запросах для активации или деактивации inbound имейте в виду, что если, например, протокол `Vless` не активирован для пользователей, данные запросы не окажут эффекта. Сначала активируйте соответствующий протокол, затем уже включайте или отключайте нужный inbound. +::: + +::: warning Внимание +Если вы используете приведённые выше SQL-скрипты для активации протокола или inbound, и если данный протокол/inbound уже активирован даже для одного пользователя, он будет зарегистрирован повторно, что приведёт к многократному перезапуску Xray на всех узлах. Поэтому, если вы собираетесь активировать определённый протокол или inbound для пользователей, сначала деактивируйте его для всех, а затем активируйте. +::: + +- **Если вы использовали запрос для удаления пользователей, рекомендуется выполнить следующие 3 запроса, чтобы очистить записи о прокси, сбросах трафика и настройках exclude для удалённых пользователей, что позволит облегчить базу данных.** + + ```sql + delete from proxies where user_id not in (select id from users); + ``` + ```sql + delete from user_usage_logs where user_id not in (select id from users); + ``` + ```sql + delete from exclude_inbounds_association where proxy_id not in (select id from proxies); + ``` + + Если у вас нет настроек exclude inbound, третий запрос не удалит ни одной записи. + + ::: tip Примечание + Рекомендуется также очистить таблицу `node_user_usages`. + + В конце выполните оптимизацию таблиц: + + - `users` + - `proxies` + - `exclude_inbound_association` + - `user_usages_logs` + + Это можно сделать в разделе `Operations` → `Table maintenance` в верхней части страницы. + ::: + +::: tip Примечание +Также обязательно регулярно удаляйте неактивных пользователей, так как это влияет на скорость работы панели и может вызывать такие ошибки, как dead lock. +::: + +## Полезные SQL-события +События (events) используются для запуска SQL-скриптов в определённое время. Их можно назначать только для запросов, изменяющих базу данных (а не для запросов, которые только выводят результат). + +- **SQL-код ниже создаёт событие, которое каждую пятницу в полночь очищает таблицу `node_user_usages`, чтобы объём резервной копии не был чрезмерным и не возникли проблемы с восстановлением. Если у вас большое количество пользователей, можно настроить это событие на ежедневное выполнение.** + + ```sql + CREATE EVENT Clear_NodeUserUsages ON SCHEDULE + EVERY 1 WEEK STARTS '2024-05-03 00:00:00' ON COMPLETION NOT PRESERVE ENABLE + DO TRUNCATE node_user_usages + ``` + +- **Ежедневное событие для установки параметра `Flow` для пользователей, если вы забудете его установить.** + + ```sql + CREATE DEFINER=`root`@`%` EVENT `SetFlow` ON SCHEDULE EVERY 1 DAY STARTS '2024-06-01 01:00:00' ON COMPLETION NOT PRESERVE ENABLE DO + UPDATE proxies SET settings = JSON_SET(settings, '$.flow', 'xtls-rprx-vision') + WHERE type = 'VLESS' AND JSON_UNQUOTE(JSON_EXTRACT(settings, '$.flow')) = ''; + ``` + +::: tip Примечание +Как отключить событие? После его активации нажмите кнопку `Drop` — событие будет деактивировано. Однако обратите внимание, что переключая все события между `On` и `Off`, вы можете отключить все события сразу. +::: + +## Полезные SQL-триггеры +Триггер — это событие, происходящее на таблице, и может быть одного из трёх типов: + +- При добавлении записи в таблицу. +- При обновлении записи. +- При удалении записи. + +Для всех этих случаев можно задать триггер, который выполнит определённое действие или полностью предотвратит операцию. + +- **Триггер для предотвращения удаления аккаунта определёнными администраторами.** + + ```sql + DELIMITER // + + CREATE TRIGGER admin_delete + BEFORE DELETE ON users + FOR EACH ROW + BEGIN + IF OLD.admin_id IN (100, 200, 300) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Deletion not allowed.'; + END IF; + END // + + DELIMITER ; + ``` + + Чтобы отключить триггеры, как и события, нажмите кнопку `Drop`. + + ::: tip Примечание + Обратите внимание, что внутри скобок приведены, например, три id. Это зависит от того, для каких администраторов вы хотите применить триггер. Найдите нужный admin id в таблицах базы данных и замените его. + ::: + +- **Триггер для деактивации кнопки сброса трафика для администраторов.** + + ```sql + DELIMITER // + + CREATE TRIGGER admin_edit_permission + BEFORE UPDATE ON users + FOR EACH ROW + BEGIN + IF NEW.used_traffic <> OLD.used_traffic AND NEW.used_traffic = 0 THEN + IF OLD.admin_id IN (3, 4) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Edit is not allowed.'; + END IF; + END IF; + END; + // + + DELIMITER ; + ``` + +- **Триггер для установки лимита общего объёма данных для пользователей определённого администратора.** + + ```sql + DELIMITER // + + CREATE TRIGGER Limit_Admin_TotalData + BEFORE INSERT ON users + FOR EACH ROW + BEGIN + DECLARE total_data_limit BIGINT; + + -- Подсчёт общего лимита данных для всех пользователей данного администратора + SELECT SUM(data_limit) INTO total_data_limit + FROM users + WHERE admin_id = 1; + + -- Проверка, превышает ли общий лимит или равен 1 ТБ + IF total_data_limit >= (1 * 1024 * 1024 * 1024 * 1024) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Admin has reached the total data limit.'; + END IF; + END // + + DELIMITER ; + ``` + + ```sql + DELIMITER // + + CREATE TRIGGER Limit_Admin_TotalData_Update + BEFORE UPDATE ON users + FOR EACH ROW + BEGIN + DECLARE total_data_limit BIGINT; + + -- Подсчёт общего лимита данных для всех пользователей данного администратора + SELECT SUM(data_limit) INTO total_data_limit + FROM users + WHERE admin_id = 1; + + -- Проверка, превышает ли общий лимит или равен 1 ТБ + IF total_data_limit >= (1 * 1024 * 1024 * 1024 * 1024) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Admin has reached the total data limit.'; + END IF; + END // + + DELIMITER ; + ``` + + ::: tip Примечание + Первый триггер применяется при создании пользователя, второй — при обновлении. Если вы хотите установить лимит объёма для администратора, настройте оба триггера в соответствии с требуемым лимитом. + ::: + + ::: tip Примечание + Этот триггер ограничивает заданный лимит для выбранного администратора, а не фактически потреблённый объём. То есть сумма лимитов для всех пользователей данного администратора должна быть меньше или равна установленному значению. По умолчанию лимит равен 1 ТБ, но вы можете изменить его, изменив число `1`. + ::: + + ::: tip Примечание + Если у вас несколько администраторов и вы хотите установить для каждого свой лимит, создайте этот триггер для каждого администратора с уникальным именем, так как два триггера не могут иметь одинаковое имя. + ::: + +- **Триггер для ограничения количества пользователей, которых может создать администратор.** + + ```sql + DELIMITER // + + CREATE TRIGGER Limit_Admin_UserCreation + BEFORE INSERT ON users + FOR EACH ROW + BEGIN + DECLARE user_count INT; + + -- Подсчёт количества пользователей, созданных данным администратором + SELECT COUNT(*) INTO user_count + FROM users + WHERE admin_id = 1; + + -- Если количество пользователей достигает лимита, отменить операцию + IF user_count = 100 THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Admin has reached the limit of users.'; + END IF; + END // + + DELIMITER ; + ``` + + ::: tip Примечание + В этом триггере установлен лимит в `100`, который вы можете заменить на нужное значение, а также изменить admin id по необходимости. + ::: + +- **Триггер для добавления префикса к имени пользователя для определённых администраторов.** + + ```sql + DELIMITER // + + CREATE TRIGGER Add_Prefix_To_Username + BEFORE INSERT ON users + FOR EACH ROW + BEGIN + -- Если admin_id соответствует одному из указанных + IF NEW.admin_id IN (50, 100) THEN + -- Если имя пользователя ещё не начинается с префикса + IF LEFT(NEW.username, LENGTH('prefix_')) != 'prefix_' THEN + SET NEW.username = CONCAT('prefix_', NEW.username); + END IF; + END IF; + END // + + DELIMITER ; + ``` + + ::: tip Примечание + Этот триггер добавляет заданный вами префикс к имени пользователя, создаваемого администратором, но применяется только к новым пользователям. Замените `prefix_` на нужный вам префикс. + ::: diff --git a/marzban/ru/examples/warp.md b/marzban/ru/examples/warp.md index bde329f..cc74dde 100644 --- a/marzban/ru/examples/warp.md +++ b/marzban/ru/examples/warp.md @@ -1,92 +1,92 @@ --- -title: فعال سازی CloudFlare Warp +title: Активация CloudFlare Warp --- -# فعال سازی CloudFlare Warp +# Активация CloudFlare Warp -با استفاده از این آموزش میتوانید برخی محدودیت هایی که از سمت شرکت های بزرگ مثل google و spotify روی IP شما اعمال شده رو برطرف کنید و بدون مشکل از سرویس ها شون استفاده کنید. +С помощью этого руководства вы можете устранить некоторые ограничения, наложенные на ваш IP крупными компаниями, такими как Google и Spotify, и без проблем пользоваться их сервисами. ::: warning -توجه داشته باشید برای کانفیگ های Warp محدودیت اتصال حداکثر 5 دستگاه همزمان وجود دارد ، برای حل مشکل میتوانید از چند کانفیگ استفاده کنید. +Обратите внимание, что для конфигураций Warp существует ограничение на одновременное подключение максимум 5 устройств. Чтобы обойти это ограничение, можно использовать несколько конфигураций. ::: -## قدم اول : ساخت کانفیگ Wireguard +## Шаг первый: Создание конфигурации Wireguard -### روش اول :با استفاده از ویندوز +### Способ первый: с использованием Windows -- ابتدا باید `Asset` مورد نیاز رو از بخش [releases](https://github.com/ViRb3/wgcf/releases) دانلود کنید ، این فایل بسته به پردازنده متفاوت می باشد. -- نام فایل `Asset` رو به `wgcf` تغییر بدید. -- حالا در قسمت ادرس دهی File Explorer عبارت `cmd.exe` رو وارد کنید. +- Сначала скачайте необходимый `Asset` из раздела [releases](https://github.com/ViRb3/wgcf/releases); этот файл различается в зависимости от процессора. +- Переименуйте скачанный файл в `wgcf`. +- Затем в адресной строке Проводника введите `cmd.exe`. ![image](https://github.com/Gozargah/gozargah.github.io/assets/50927468/fb9f3eae-8390-45a5-a7b3-c50db4aa82a1) -- در ترمینال باز شده عبارت `wgcf.exe` رو وارد کنید. -- یک بار دستور `wgcf.exe register` و سپس `wgcf.exe generate` رو وارد کنید. -- فایل جدیدی به اسم `wgcf-profile.conf` ایجاد شده و این فایل `Wireguard` مورد نیاز ما می باشد. -- کانفیگ شما امادست و میتونید از اون استفاده کنید. +- В открывшемся терминале введите команду `wgcf.exe`. +- Выполните команду `wgcf.exe register`, а затем `wgcf.exe generate`. +- Будет создан новый файл с именем `wgcf-profile.conf`, который является необходимой конфигурацией для Wireguard. +- Ваша конфигурация готова, и вы можете её использовать. -### روش دوم : با استفاده از لینوکس +### Способ второй: с использованием Linux -- ابتدا باید `Asset` مورد نیاز رو از بخش [releases](https://github.com/ViRb3/wgcf/releases) دانلود کنید ، این فایل بسته به پردازنده متفاوت می باشد. -- با دستور `wget` میتوانید این کار را انجام دهید. +- Сначала скачайте необходимый `Asset` из раздела [releases](https://github.com/ViRb3/wgcf/releases); этот файл различается в зависимости от процессора. +- Вы можете выполнить эту задачу с помощью команды `wget`. -برای پردازنده های معماری AMD64 : +Для процессоров с архитектурой AMD64: ```bash wget https://github.com/ViRb3/wgcf/releases/download/v2.2.22/wgcf_2.2.22_linux_amd64 ``` -برای پردازنده های معماری ARM64 : +Для процессоров с архитектурой ARM64: ```bash wget https://github.com/ViRb3/wgcf/releases/download/v2.2.22/wgcf_2.2.22_linux_arm64 ``` -مسیر فایل رو به `/usr/bin/` تغییر داده و اسم اون رو به `wgcf` تغییر بدید. +Переместите скачанный файл в каталог `/usr/bin/` и переименуйте его в `wgcf`. -برای پردازنده های معماری AMD64 : +Для архитектуры AMD64: ```bash mv wgcf_2.2.22_linux_amd64 /usr/bin/wgcf chmod +x /usr/bin/wgcf ``` -برای پردازنده های معماری ARM64 : +Для архитектуры ARM64: ```bash mv wgcf_2.2.22_linux_arm64 /usr/bin/wgcf chmod +x /usr/bin/wgcf ``` -سپس با استفاده از این 2 دستور کانفیگ رو ایجاد کنید. +Затем создайте конфигурацию, выполнив следующие две команды: ```bash wgcf register wgcf generate ``` -فایلی با نام `wgcf-profile.conf` ساخته شده و این کانفیگ مورد نیاز ما می باشد. +Будет создан файл с именем `wgcf-profile.conf`, который является необходимой конфигурацией. -## قدم دوم : استفاده از Warp+ (اختیاری) +## Шаг второй: Использование Warp+ (необязательно) -- برای دریافت لایسنس و استفاده از Warp+ میتونید از طریق [این](https://t.me/generatewarpplusbot) بات تلگرام اقدام به دریافت `license_key` کنید. -- بعد از دریافت `license_key` باید اون رو در فایل `wgcf-account.toml` جایگزین کنید. -::: tip نکته - این تغییر رو میتونید در لینوکس با `nano` و در ویندوز با `Notepad` و یا هر نرم افزار دیگه ای انجام بدید. +- Чтобы получить лицензию и воспользоваться Warp+, вы можете обратиться к [этому](https://t.me/generatewarpplusbot) Telegram-боту для получения `license_key`. +- После получения `license_key` замените его в файле `wgcf-account.toml`. +::: tip Примечание +Эту замену можно выполнить в Linux с помощью `nano` или в Windows с помощью `Notepad` (или любого другого текстового редактора). ::: ::: details Windows -برای استفاده از کامند ها روی ویندوز نیاز دارید به جای استفاده از کامند `wgcf` از `wgcf.exe` استفاده کنید. +Для использования команд в Windows вместо команды `wgcf` используйте `wgcf.exe`. ::: -سپس باید اطلاعات کانفیگ ها رو بروزرسانی کنید. +Затем обновите данные конфигурации: ```bash wgcf update ``` -سپس باید فایل کانفیگ جدیدی ایجاد کنید. +После этого создайте новый конфигурационный файл: ```bash wgcf generate ``` -## قدم سوم : فعالسازی Warp روی مرزبان +## Шаг третий: Активация Warp в Marzban -### روش اول : با استفاده از هسته Xray +### Способ первый: с использованием ядра Xray -::: warning توجه -- این روش فقط برای نسخه Xray 1.8.3 و یا بالاتر پیشنهاد میشود ، در نسخه های قدیمی تر احتمالا با مشکل Memory Leak مواجه خواهید شد. -- در صورتی که ورژن `Xray` شما پایین تر از این نسخه می باشد می توانید به کمک [ اموزش تغییر ورژن Xray-core](/examples/change-xray-version) ورژن `Xray` خودتون رو ارتقا بدید. +::: warning Внимание +- Этот метод рекомендуется только для версии Xray 1.8.3 и выше; в более старых версиях возможно возникновение проблемы утечки памяти. +- Если ваша версия Xray ниже указанной, вы можете обновить её с помощью [руководства по смене версии Xray-core](/examples/change-xray-version). ::: -- وارد بخش Core Setting در پنل مرزبان شوید. -- ابتدا یک outbound همانند نمونه اضافه می کنیم و اطلاعات فایل `wgcf-profile.conf` را در آن جایگذاری می کنیم. +- Перейдите в раздел Core Setting в панели управления Marzban. +- Сначала добавьте outbound, как в примере, и вставьте в него данные из файла `wgcf-profile.conf`. ```json { @@ -107,22 +107,22 @@ wgcf generate } ``` -::: tip نکته -در صورتی که میخواهید تمام ترافیک به صورت پیش فرض از Warp عبور کنید این Outbound رو اول قرار بدید و دیگه نیازی به انجام مرحله بعد نیست. +::: tip Примечание +Если вы хотите, чтобы весь трафик по умолчанию проходил через Warp, разместите этот outbound первым, и выполнение следующих шагов станет необязательным. ::: -### روش دوم : با استفاده از هسته Wireguard +### Способ второй: с использованием ядра Wireguard -ابتدا باید پیش نیاز های استفاده از Wireguard رو روی سرور نصب کنید. +Сначала установите необходимые компоненты для использования Wireguard на сервере. ```bash sudo apt install wireguard-dkms wireguard-tools resolvconf ``` -اگر از اوبونتو 24 استفاده میکنید برای نصب وایرگارد از دستور زیر استفاده کنید. +Если вы используете Ubuntu 24, для установки Wireguard выполните команду: ```bash sudo apt install wireguard ``` -سپس باید عبارت `Table = off` رو مثل نمونه به فایل Wireguard اضافه کنید. +Затем добавьте строку `Table = off` в файл конфигурации Wireguard, как в примере: ```conf [Interface] @@ -139,30 +139,30 @@ AllowedIPs = ::/0 Endpoint = engage.cloudflareclient.com:2408 ``` -::: warning توجه -در صورت عدم اضافه کردن `Table = off` دسترسی شما به سرور قطع خواهد شد و دیگر نمیتوانید به سرور متصل شوید و باید از طریق وب سایت دیتاسنتر خود به سرور وارد شده و اتصال به `Warp` رو قطع کنید تا بتونید دوباره به صورت عادی ارتباط برقرار کنید. +::: warning Внимание +Если не добавить строку `Table = off`, вы потеряете доступ к серверу. В таком случае вам придется зайти через сайт вашего дата-центра и отключить соединение с Warp, чтобы восстановить обычное подключение. ::: -- سپس نام فایل رو از `wgcf-profile.conf` به `warp.conf` تغییر بدید. -- فایل رو در پوشه `/etc/wireguard` در سرور قرار بدید. +- Переименуйте файл `wgcf-profile.conf` в `warp.conf`. +- Переместите файл в каталог `/etc/wireguard` на сервере. ```bash sudo mv wgcf-profile.conf /etc/wireguard/warp.conf ``` -- با دستور پایین Wireguard رو فعال کنید. +- Активируйте Wireguard с помощью команды: ```bash sudo systemctl enable --now wg-quick@warp ``` -با این دستور نیز می‌توانید `Warp` را غیر فعال کنید +Чтобы деактивировать Warp, выполните команду: ```bash sudo systemctl disable --now wg-quick@warp ``` -- وارد بخش Core Setting در پنل مرزبان شوید. -- ابتدا یک outbound همانند نمونه اضافه کنید. +- Перейдите в раздел Core Setting в панели управления Marzban. +- Добавьте outbound, как в примере: ```json { @@ -177,13 +177,13 @@ sudo systemctl disable --now wg-quick@warp } ``` -::: tip نکته -در صورتی که میخواهید تمام ترافیک به صورت پیش فرض از Warp عبور کنید این Outbound رو اول قرار بدید و دیگه نیازی به انجام مرحله بعد نیست. +::: tip Примечание +Если вы хотите, чтобы весь трафик по умолчанию проходил через Warp, разместите этот outbound первым, и выполнение следующих шагов станет необязательным. ::: -## قدم چهارم : تنظیمات بخش routing +## Шаг четвёртый: Настройка раздела routing -ابتدا یک `rule` در بخش `routing` همانند نمونه اضافه می کنیم. +Сначала добавьте правило в разделе routing, как в примере: ```json { @@ -193,7 +193,7 @@ sudo systemctl disable --now wg-quick@warp } ``` -حال باید وب سایت های دلخواه خودتون رو مثل نمونه اضافه کنید. +Затем добавьте нужные вам сайты, как в примере: ```json { @@ -210,10 +210,9 @@ sudo systemctl disable --now wg-quick@warp } ``` -تغییرات رو ذخیره می کنیم ، هم اکنون میتوانید از `Warp` استفاده کنید. +Сохраните изменения — теперь вы можете использовать Warp. ::: details Marzban-Node -- در صورتی که با کمک هسته xray از `Warp` استفاده می کنید نیاز به انجام تغییر در نود ندارید و به صورت اتوماتیک در نود نیز اعمال می شود. - -- در صورتی که از هسته `Wireguard` استفاده می کنید باید مرحله سوم ، روش دوم رو روی نود هم انجام دهید. - ::: +- Если вы используете Warp с помощью ядра Xray, изменения автоматически применяются и на ноде. +- Если вы используете ядро Wireguard, то аналогичные изменения (Шаг третий, Способ второй) нужно выполнить и на ноде. +::: diff --git a/marzban/ru/examples/wildcard-ssl.md b/marzban/ru/examples/wildcard-ssl.md index 0bba30f..236ebbd 100644 --- a/marzban/ru/examples/wildcard-ssl.md +++ b/marzban/ru/examples/wildcard-ssl.md @@ -1,3 +1,68 @@ --- -title: Получение Wildcard SSL ---- \ No newline at end of file +title: Получение wildcard SSL +--- + +# Применение + +Используя этот тип SSL, вы можете, создав один сертификат, получить сертификат для всех ваших поддоменов, и вам не придётся создавать отдельный сертификат для каждого из них. + +::: warning Внимание +Файлы сертификатов должны находиться по адресу `/var/lib/marzban/certs`, чтобы Marzban мог получить к ним доступ. + +Во всех приведённых ниже примерах файлы будут установлены в этот каталог. +::: + +::: warning Внимание +Для получения этого типа SSL ваш домен обязательно должен быть на Cloudflare. +::: + +## Установка необходимых зависимостей +```shell +apt install socat certbot +curl https://get.acme.sh | sh +~/.acme.sh/acme.sh --set-default-ca --server letsencrypt +``` + +## Создание папки для сертификатов + +::: warning Внимание +Если данный каталог уже существует, не запускайте следующую команду. +::: + +```shell +mkdir /var/lib/marzban/certs/ +``` + +## Ввод необходимых данных +Значение `CF_Key` – это ваш `Global API Key` аккаунта Cloudflare. + +::: warning Внимание +Ни в коем случае не передавайте ваш `Global API Key` другим лицам. +::: + +Значение `CF_Email` – это ваш email, на который зарегистрирован ваш аккаунт Cloudflare. + +```shell +export CF_Key="exampleglobalapikey1234" +export CF_Email="example@gmail.com" +``` + +## Создание сертификата +Для создания сертификата замените в команде ниже ваш домен и выполните команду + +```shell +~/.acme.sh/acme.sh --issue -d 'domain.xxx' -d '*.domain.xxx' --dns dns_cf --key-file /var/lib/marzban/certs/key.pem --fullchain-file /var/lib/marzban/certs/fullchain.pem +``` + +::: details Получение сертификата для нескольких доменов одновременно +Если вы используете несколько различных доменов, вы можете получить один сертификат для всех них, используя этот метод. + +Добавьте ваши домены к предыдущей команде следующим образом: +``` +-d 'domain.xxx' -d '*.domain.xxx' +``` +Пример для 2 доменов: +``` +~/.acme.sh/acme.sh --issue -d 'domain1.xxx' -d '*.domain1.xxx' -d 'domain2.xxx' -d '*.domain2.xxx' --dns dns_cf --key-file /var/lib/marzban/certs/key.pem --fullchain-file /var/lib/marzban/certs/fullchain.pem +``` +::: diff --git a/marzban/ru/examples/xray-tls-inbound.md b/marzban/ru/examples/xray-tls-inbound.md index b0bf3bb..9d170a3 100644 --- a/marzban/ru/examples/xray-tls-inbound.md +++ b/marzban/ru/examples/xray-tls-inbound.md @@ -1,18 +1,18 @@ --- -title: فعال‌سازی TLS +title: Активация TLS --- -# فعال‌سازی TLS +# Активация TLS -به کمک این آموزش، شما می‌توانید لایه TLS را بر روی inboundهای پیکربندی Xray خود فعال کنید. +С помощью этого руководства вы можете активировать слой TLS для inbound-конфигураций Xray. -- برای شروع، شما باید فایل های گواهی را برای دامنه یا ساب‌دامنه‌ی خود دریافت کنید. برای این کار، آموزش [ساخت گواهی SSL](issue-ssl-certificate.md) را مشاهده کنید. +- Для начала вам необходимо получить файлы сертификата для вашего домена или поддомена. Для этого ознакомьтесь с руководством [Создание SSL-сертификата](issue-ssl-certificate.md). -- سپس پیکربندی Xray خود را باز کنید (از بخش Core Settings) و در بخش `streamSettings` هر inbound که مورد نظر شماست، مقدار `security` را به `tls` تغییر داده و فایل های گواهی خود را مطابق مثال زیر در `certificates` وارد کنید. +- Затем откройте конфигурацию Xray (в разделе Core Settings) и в разделе `streamSettings` для каждого нужного вам inbound измените параметр `security` на `tls` и добавьте файлы сертификата в параметр `certificates` согласно примеру ниже. -برای مثال به نمونه زیر توجه کنید. +Например, обратите внимание на следующий пример. -`YOUR_DOMAIN` را به دامنه یا ساب‌دامنه‌ی مورد نظر خود تغییر دهید. +Замените `YOUR_DOMAIN` на нужный вам домен или поддомен. ```json{3-13} "streamSettings": { @@ -32,5 +32,5 @@ title: فعال‌سازی TLS ``` ::: info tlsSettings -مستندات مربوط به تنظیمات tls را می‌توانید در [اینجا](https://xtls.github.io/config/transport.html#tlsobject) مشاهده کنید -::: \ No newline at end of file +Документацию по настройкам TLS вы можете посмотреть [здесь](https://xtls.github.io/config/transport.html#tlsobject) +:::