Унифицированное решение с графическим интерфейсом, устойчивое к цензуре, на базе Xray
English / فارسی / 简体中文 / Русский
- Введение
- Руководство по установке
- Конфигурация
- API
- Backup
- Telegram бот
- Marzban CLI
- Marzban Node
- Webhook уведомления
- Поддержка
- Лицензия
- Участники
Marzban (Персидское слово "Пограничник" - произносится /mærz'ban/) — это инструмент управления прокси-серверами, который предоставляет простой и удобный пользовательский интерфейс для управления сотнями учетных записей прокси на базе Xray-core и созданный с использованием Python и ReactJS.
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 ) |
Marzban предоставляет REST API, позволяющий разработчикам программно взаимодействовать с сервисами Marzban. Для просмотра документации по API в Swagger UI или ReDoc установите переменную DOCS=True
и перейдите по ссылкам /docs
и /redoc
.
Всегда полезно регулярно создавать резервные копии файлов Marzban, чтобы предотвратить потерю данных в случае системных сбоев или случайного удаления. Ниже приведены шаги для создания резервной копии Marzban:
- По умолчанию все важные файлы Marzban сохраняются в папке
/var/lib/marzban
(в версиях Docker). Скопируйте весь каталог/var/lib/marzban
в выбранное вами место резервного копирования, например на внешний жесткий диск или в облачное хранилище. - Кроме того, не забудьте сделать резервную копию файла env, содержащего переменные конфигурации, а также файла конфигурации Xray. Если вы устанавливали Marzban с помощью marzban-scripts (рекомендуемый подход к установке), то env и другие конфигурации должны находиться в каталоге
/opt/marzban/
.
Выполнив эти действия, вы сможете обеспечить резервное копирование всех файлов и данных Marzban, а также переменных конфигурации и конфигурации Xray на случай, если в будущем потребуется их восстановить. Не забывайте регулярно обновлять резервные копии, чтобы поддерживать их в актуальном состоянии.
Marzban поставляется с встроенным ботом Telegram, который может управлять сервером, создавать и удалять пользователей, а также отправлять уведомления. Этот бот можно легко включить, выполнив несколько простых шагов, и он предоставляет удобный способ взаимодействия с Marzban без необходимости каждый раз заходить на сервер.
Чтобы включить Telegram-бота, выполните следующие действия:
- установите
TELEGRAM_API_TOKEN
в качестве API-токена вашего бота. - установите
TELEGRAM_ADMIN_ID
в качестве цифрового ID вашего Telegram-аккаунта, который вы можете получить от @userinfobot
Marzban поставляется с встроенным CLI под названием marzban-cli
, который позволяет администраторам напрямую взаимодействовать с ним.
Если вы установили Marzban с помощью скрипта установки, то доступ к командам cli можно получить, выполнив команду:
marzban cli [OPTIONS] COMMAND [ARGS]...
Для получения дополнительной информации можно ознакомиться с документацией по Marzban CLI.
Проект Marzban представляет Marzban-node, который помогает Вам в распределении инфраструктуры. С помощью Marzban-node можно распределить инфраструктуру по нескольким узлам, получив такие преимущества, как высокая доступность, масштабируемость и гибкость. Marzban-node позволяет пользователям подключаться к различным серверам, предоставляя им гибкость в выборе, а не ограничиваться только одним сервером. Более подробная информация и инструкции по установке приведены в официальной документации Marzban-node.
Вы можете задать адрес 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