Skip to content

Latest commit

 

History

History
403 lines (311 loc) · 26.9 KB

README-ru.md

File metadata and controls

403 lines (311 loc) · 26.9 KB

Marzban

Унифицированное решение с графическим интерфейсом, устойчивое к цензуре, на базе Xray


English / فارسی / 简体中文 / Русский

Marzban screenshots

Оглавление

Введение

Marzban (Персидское слово "Пограничник" - произносится /mærz'ban/) — это инструмент управления прокси-серверами, который предоставляет простой и удобный пользовательский интерфейс для управления сотнями учетных записей прокси на базе Xray-core и созданный с использованием Python и ReactJS.

Почему Marzban?

Marzban удобен в использовании, многофункционален и надежен. Он позволяет создавать различные прокси для пользователей без сложной настройки. С помощью встроенного веб-интерфейса можно контролировать, изменять и ограничивать пользователей.

Функции

  • Готовый Web UI
  • REST API бэкэнд
  • Поддержка множества узлов (для распределения инфраструктуры и масштабируемости)
  • Поддержка протоколов Vmess, VLESS, Trojan и Shadowsocks
  • Возможность активации нескольких протоколов для каждого пользователя
  • Несколько пользователей на одном inbound
  • Несколько inbound на одном порту (поддержка fallbacks)
  • Ограничения на основе количества трафика и срока действия
  • Ограничение трафика по периодам (например выдавать трафик на день, неделю и т. д.)
  • Поддержка ссылок-подписок совместимых с V2ray (такие как V2RayNG, OneClick, Nekoray, и др.), Clash и ClashMeta
  • Автоматическая генерация Ссылок и QRcode
  • Мониторинг ресурсов сервера и использования трафика
  • Настраиваемые конфигурации xray
  • Поддержка TLS и REALITY
  • Встроенный Telegram Bot
  • Встроенный Command Line Interface (CLI)
  • Несколько языков
  • Поддержка Нескольких администраторов (WIP)

Руководство по установке

Выполните быструю установку с помощью следующей команды:

sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install

Когда установка будет завершена:

  • Вы увидите логи, которые можно остановить, нажав Ctrl+C или закрыв терминал.
  • Файлы Marzban будут размещены по адресу /opt/marzban.
  • Файл конфигурации будет размещен по адресу /opt/marzban/.env (см. Конфигурация).
  • Файлы с данными будут размещены по адресу /var/lib/marzban.
  • Вы можете получить доступ к панели управления, введя в адресной строке http://YOUR_SERVER_IP:8000/dashboard/ (заменив YOUR_SERVER_IP на актуальный IP адрес вашего сервера).

Далее, Вам нужно создать главного администратора для входа в панель управления Marzban, выполнив следующую команду:

marzban cli admin create --sudo

Готово! Теперь Вы можете войти, используя данные своей учетной записи.

Для того, чтобы увидеть справочное сообщение от скрипта Marzban, выполните команду:

marzban --help

Если Вы хотите запустить проект, используя его исходный код, обратитесь к разделу ниже

Ручная установка

Установите xray на Ваш сервер.

Вы можете сделать это, используя Xray-install:

bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install

Клонируйте этот проект и установите зависимости (Вам нужен Python >= 3.8):

git clone https://github.com/Gozargah/Marzban.git
cd Marzban
wget -qO- https://bootstrap.pypa.io/get-pip.py | python3 -
python3 -m pip install -r requirements.txt

В качестве альтернативы для создания виртуальной среды можно использовать Python Virtualenv.

Затем выполните следующую команду для запуска скрипта миграции базы данных:

alembic upgrade head

Если Вы хотите использовать marzban-cli, необходимо связать его с файлом в $PATH, сделать его исполняемым и установить:

sudo ln -s $(pwd)/marzban-cli.py /usr/bin/marzban-cli
sudo chmod +x /usr/bin/marzban-cli
marzban-cli completion install

Теперь настало время настройки.

Создайте копию файла .env.example, посмотрите его и отредактируйте с помощью текстового редактора,например nano.

Возможно, вам захочется изменить учетные данные администратора.

cp .env.example .env
nano .env

Проверьте раздел Конфигурации для получения большей информации.

В завершение запустите приложение с помощью следующей команды:

python3 main.py

Для запуска с помощью linux systemctl (скопируйте файл marzban.service в /var/lib/marzban/marzban.service):

systemctl enable /var/lib/marzban/marzban.service
systemctl start marzban

Для использования с nginx:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name  example.com;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

    location ~* /(dashboard|api|docs|redoc|openapi.json) {
        proxy_pass http://0.0.0.0:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    # xray-core ws-path: /
    # client ws-path: /marzban/me/2087
    #
    # All traffic is proxed through port 443, and send to the xray port(2087, 2088 etc.).
    # The '/marzban' in location regex path can changed any characters by yourself.
    #
    # /${path}/${username}/${xray-port}
    location ~* /marzban/.+/(.+)$ {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:$1/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

или:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name  marzban.example.com;

    ssl_certificate      /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://0.0.0.0:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

По умолчанию приложение будет запускаться на http://localhost:8000/dashboard. Вы можете настроить его, изменив переменные окружения UVICORN_HOST и UVICORN_PORT.

Конфигурация

Ниже приведены настройки, которые можно задать с помощью переменных окружения поместив их в файл .env.

Перменная Описание
SUDO_USERNAME Имя пользователя главного администратора
SUDO_PASSWORD Пароль главного администратора
SQLALCHEMY_DATABASE_URL Путь к файлу БД (SQLAlchemy's docs)
UVICORN_HOST Привязка приложения к хосту (по умолчанию: 0.0.0.0)
UVICORN_PORT Привязка приложения к порту (по умолчанию: 8000)
UVICORN_UDS Привязка приложения к UNIX domain socket
UVICORN_SSL_CERTFILE Адрес файла сертификата SSL
UVICORN_SSL_KEYFILE Адрес файла ключа SSL
XRAY_JSON Адрес файла JSON конфигурации Xray. (по умолчанию: xray_config.json)
XRAY_EXECUTABLE_PATH Путь к бинарникам Xray (по умолчанию: /usr/local/bin/xray)
XRAY_ASSETS_PATH Путь к папке с рессурсными файлами для Xray (файлы geoip.dat и geosite.dat) (по умолчанию: /usr/local/share/xray)
XRAY_SUBSCRIPTION_URL_PREFIX Префикс адреса подписки
XRAY_FALLBACKS_INBOUND_TAG Если вы используете входящее соединение с несколькими резервными вариантами, укажите здесь его тег
XRAY_EXCLUDE_INBOUND_TAGS Теги входящих соединений, которые не требуют управления и не должны быть включены в список прокси
CUSTOM_TEMPLATES_DIRECTORY Путь к папке с пользовательскими шаблонами (по умолчанию: app/templates)
CLASH_SUBSCRIPTION_TEMPLATE Шаблон для создания конфигурации Clash (по умолчанию: clash/default.yml)
SUBSCRIPTION_PAGE_TEMPLATE Шаблон для страницы подписки (по умолчанию: subscription/index.html)
HOME_PAGE_TEMPLATE Шаблон главной страницы (по умолчанию: home/index.html)
TELEGRAM_API_TOKEN Токен Telegram-бота (полученный от @botfather)
TELEGRAM_ADMIN_ID Числовой идентификатор администратора в Telegram (полученный от @userinfobot)
TELEGRAM_PROXY_URL URL прокси для запуска Telegram-бота (если серверы Telegram заблокированы на вашем сервере).
JWT_ACCESS_TOKEN_EXPIRE_MINUTES Время истечения срока действия доступного токена в минутах, 0 означает "без истечения срока действия" (по умолчанию: 1440)
DOCS Активация документации API по адресам /docs и /redoc. (по умолчанию: False)
DEBUG Активация режима разработки (development) (по умолчанию: False)
WEBHOOK_ADDRESS Адрес Webhook для отправки уведомлений. Уведомления Webhook будут отправляться, если это значение было установлено
WEBHOOK_SECRET Webhook secret будет передаваться с каждым запросом в виде x-webhook-secret в заголовке (по умолчанию: None)
NUMBER_OF_RECURRENT_NOTIFICATIONS Сколько раз повторять попытку отправки уведомления при обнаружении ошибки (по умолчанию: 3)
RECURRENT_NOTIFICATIONS_TIMEOUT Тайм-аут между каждым повторным запросом при обнаружении ошибки в секундах (по умолчанию: 180)
NOTIFY_REACHED_USAGE_PERCENT При каком проценте использования отправлять предупреждение (по умолчанию: 80)
NOTIFY_DAYS_LEFT Когда отправлять предупреждение об истечении срока действия (по умолчанию: 3)
USERS_AUTODELETE_DAYS Delete expired (and optionally limited users) after this many days (Negative values disable this feature, default: -1)
USER_AUTODELETE_INCLUDE_LIMITED_ACCOUNTS Weather to include limited accounts in the auto-delete feature (default: False)
USE_CUSTOM_JSON_DEFAULT Enable custom JSON config for ALL supported clients (default: False)
USE_CUSTOM_JSON_FOR_V2RAYNG Enable custom JSON config only for V2rayNG (default: False)
USE_CUSTOM_JSON_FOR_STREISAND Enable custom JSON config only for Streisand (default: False)
USE_CUSTOM_JSON_FOR_V2RAYN Enable custom JSON config only for V2rayN (default: False)

API

Marzban предоставляет REST API, позволяющий разработчикам программно взаимодействовать с сервисами Marzban. Для просмотра документации по API в Swagger UI или ReDoc установите переменную DOCS=True и перейдите по ссылкам /docs и /redoc.

Backup

Всегда полезно регулярно создавать резервные копии файлов Marzban, чтобы предотвратить потерю данных в случае системных сбоев или случайного удаления. Ниже приведены шаги для создания резервной копии Marzban:

  1. По умолчанию все важные файлы Marzban сохраняются в папке /var/lib/marzban (в версиях Docker). Скопируйте весь каталог /var/lib/marzban в выбранное вами место резервного копирования, например на внешний жесткий диск или в облачное хранилище.
  2. Кроме того, не забудьте сделать резервную копию файла env, содержащего переменные конфигурации, а также файла конфигурации Xray. Если вы устанавливали Marzban с помощью marzban-scripts (рекомендуемый подход к установке), то env и другие конфигурации должны находиться в каталоге /opt/marzban/.

Выполнив эти действия, вы сможете обеспечить резервное копирование всех файлов и данных Marzban, а также переменных конфигурации и конфигурации Xray на случай, если в будущем потребуется их восстановить. Не забывайте регулярно обновлять резервные копии, чтобы поддерживать их в актуальном состоянии.

Telegram Bot

Marzban поставляется с встроенным ботом Telegram, который может управлять сервером, создавать и удалять пользователей, а также отправлять уведомления. Этот бот можно легко включить, выполнив несколько простых шагов, и он предоставляет удобный способ взаимодействия с Marzban без необходимости каждый раз заходить на сервер.

Чтобы включить Telegram-бота, выполните следующие действия:

  1. установите TELEGRAM_API_TOKEN в качестве API-токена вашего бота.
  2. установите TELEGRAM_ADMIN_ID в качестве цифрового ID вашего Telegram-аккаунта, который вы можете получить от @userinfobot

Marzban CLI

Marzban поставляется с встроенным CLI под названием marzban-cli, который позволяет администраторам напрямую взаимодействовать с ним.

Если вы установили Marzban с помощью скрипта установки, то доступ к командам cli можно получить, выполнив команду:

marzban cli [OPTIONS] COMMAND [ARGS]...

Для получения дополнительной информации можно ознакомиться с документацией по Marzban CLI.

Marzban Node

Проект Marzban представляет Marzban-node, который помогает Вам в распределении инфраструктуры. С помощью Marzban-node можно распределить инфраструктуру по нескольким узлам, получив такие преимущества, как высокая доступность, масштабируемость и гибкость. Marzban-node позволяет пользователям подключаться к различным серверам, предоставляя им гибкость в выборе, а не ограничиваться только одним сервером. Более подробная информация и инструкции по установке приведены в официальной документации Marzban-node.

Webhook уведомления

Вы можете задать адрес webhook, и Marzban будет отправлять уведомления на этот адрес.

Запросы будут отправляться в виде POST-запроса на адрес, указанный в WEBHOOK_ADDRESS, с WEBHOOK_SECRET в качестве x-webhook-secret в заголовках.

Пример запроса, отправленного Marzban:

Headers:
Host: 0.0.0.0:9000
User-Agent: python-requests/2.28.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
x-webhook-secret: something-very-very-secret
Content-Length: 107
Content-Type: application/json



Body:
{"username": "marzban_test_user", "action": "user_updated", "enqueued_at": 1680506457.636369, "tries": 0}

Различные типы действий: user_created, user_updated, user_deleted, user_limited, user_expired, user_disabled, user_enabled

Поддержка

Если вы нашли Marzban полезным и хотели бы поддержать его развитие, вы можете сделать пожертвование в одной из следующих криптовалютных сетей:

  • TRON network (TRC20): TX8kJoDcowQPBFTYHAJR36GyoUKP1Xwzkb
  • ETH, BNB, MATIC network (ERC20, BEP20): 0xFdc9ad32454FA4fc4733270FCc12ddBFb68b83F7
  • Bitcoin network: bc1qpys2nefgsjjgae3g3gqy9crsv3h3rm96tlkz0v
  • Dogecoin network: DJAocBAu8y6LwhDKUktLAyzV8xyoFeHH6R
  • TON network: EQAVf-7hAXHlF-jmrKE44oBwN7HGQFVBLAtrOsev5K4qR4P8

Спасибо за поддержку!

Лицензия

Сделано в [Unknown!] и опубликовано под AGPL-3.0.

Участники

Мы ❤️‍🔥 участников проекта! Если вы хотите внести свой вклад, пожалуйста, ознакомьтесь с нашим Contributing Guidelines и не стесняйтесь отправлять запросы на исправление ошибок или сообщить о проблеме. Мы также приглашаем вас присоединиться к нашей группе Telegram для получения поддержки.

Проверьте open issues, чтобы помочь развитию этого проекта.

Спасибо всем участникам, благодаря которым Marzban становится лучше:

Made with contrib.rocks