Marzban (the Persian word for "border guard" - pronounced /mærz'ban/) is a proxy management tool that provides a simple and easy-to-use user interface for managing hundreds of proxy accounts powered by Xray-core and built using Python and Reactjs.
Marzban is user-friendly, feature-rich and reliable. It lets you to create different proxies for your users without any complicated configuration. Using its built-in web UI, you are able to monitor, modify and limit users.
Run the following command
sudo bash -c "$(curl -sL https://github.com/Gozargah/Marzban-scripts/raw/master/marzban.sh)" @ install
Once the installation is complete:
Ctrl+C
/opt/marzban
/opt/marzban/.env
(refer to configurations section to see variables)/var/lib/marzban
http://YOUR_SERVER_IP:8000/dashboard/
(replace YOUR_SERVER_IP with the actual IP address of your server)Next, you need to create a sudo admin for logging into the Marzban dashboard by the following command
marzban cli admin create --sudo
That's it! You can login to your dashboard using these credentials
To see the help message of the Marzban script, run the following command
marzban --help
If you are eager to run the project using the source code, check the section below
<details markdown="1"> <summary><h3>Manual install (advanced)</h3></summary>Install xray on your machine
You can install it using Xray-install
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
Clone this project and install the dependencies (you need 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
Alternatively, to have an isolated environment you can use Python Virtualenv
Then run the following command to run the database migration scripts
alembic upgrade head
If you want to use marzban-cli
, you should link it to a file in your $PATH
, make it executable, and install the auto-completion:
sudo ln -s $(pwd)/marzban-cli.py /usr/bin/marzban-cli sudo chmod +x /usr/bin/marzban-cli marzban-cli completion install
Now it's time to configuration
Make a copy of .env.example
file, take a look and edit it using a text editor like nano
.
You probably like to modify the admin credentials.
cp .env.example .env nano .env
Check configurations section for more information
Eventually, launch the application using command below
python3 main.py
To launch with linux systemctl (copy marzban.service file to /var/lib/marzban/marzban.service
)
systemctl enable /var/lib/marzban/marzban.service
systemctl start marzban
To use with 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;
}
}
or
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;
}
}
By default the app will be run on http://localhost:8000/dashboard
. You can configure it using changing the UVICORN_HOST
and UVICORN_PORT
environment variables.
You can set settings below using environment variables or placing them in
.env
file.
Variable | Description |
---|---|
SUDO_USERNAME | Superuser's username |
SUDO_PASSWORD | Superuser's password |
SQLALCHEMY_DATABASE_URL | Database URL (SQLAlchemy's docs) |
UVICORN_HOST | Bind application to this host (default: 0.0.0.0 ) |
UVICORN_PORT | Bind application to this port (default: 8000 ) |
UVICORN_UDS | Bind application to a UNIX domain socket |
UVICORN_SSL_CERTFILE | SSL certificate file to have application on https |
UVICORN_SSL_KEYFILE | SSL key file to have application on https |
XRAY_JSON | Path of Xray's json config file (default: xray_config.json ) |
XRAY_EXECUTABLE_PATH | Path of Xray binary (default: /usr/local/bin/xray ) |
XRAY_ASSETS_PATH | Path of Xray assets (default: /usr/local/share/xray ) |
XRAY_SUBSCRIPTION_URL_PREFIX | Prefix of subscription URLs |
XRAY_FALLBACKS_INBOUND_TAG | Tag of the inbound that includes fallbacks, needed in the case you're using fallbacks |
XRAY_EXCLUDE_INBOUND_TAGS | Tags of the inbounds that shouldn't be managed and included in links by application |
CUSTOM_TEMPLATES_DIRECTORY | Customized templates directory (default: app/templates ) |
CLASH_SUBSCRIPTION_TEMPLATE | The template that will be used for generating clash configs (default: clash/default.yml ) |
SUBSCRIPTION_PAGE_TEMPLATE | The template used for generating subscription info page (default: subscription/index.html ) |
HOME_PAGE_TEMPLATE | Decoy page template (default: home/index.html ) |
TELEGRAM_API_TOKEN | Telegram bot API token (get token from @botfather) |
TELEGRAM_ADMIN_ID | Numeric Telegram ID of admin (use @userinfobot to found your ID) |
TELEGRAM_PROXY_URL | Run Telegram Bot over proxy |
JWT_ACCESS_TOKEN_EXPIRE_MINUTES | Expire time for the Access Tokens in minutes, 0 considered as infinite (default: 1440 ) |
DOCS | Whether API documents should be available on /docs and /redoc or not (default: False ) |
DEBUG | Debug mode for development (default: False ) |
WEBHOOK_ADDRESS | Webhook address to send notifications to. Webhook notifications will be sent if this value was set. |
WEBHOOK_SECRET | Webhook secret will be sent with each request as x-webhook-secret in the header (default: None ) |
NUMBER_OF_RECURRENT_NOTIFICATIONS | How many times to retry if an error detected in sending a notification (default: 3 ) |
RECURRENT_NOTIFICATIONS_TIMEOUT | Timeout between each retry if an error detected in sending a notification in seconds (default: 180 ) |
NOTIFY_REACHED_USAGE_PERCENT | At which percentage of usage to send the warning notification (default: 80 ) |
NOTIFY_DAYS_LEFT | When to send warning notifaction about expiration (default: 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 ) |
Marzban provides a REST API that enables developers to interact with Marzban services programmatically. To view the API documentation in Swagger UI or ReDoc, set the configuration variable DOCS=True
and navigate to the /docs
and /redoc
.
It's always a good idea to backup your Marzban files regularly to prevent data loss in case of system failures or accidental deletion. Here are the steps to backup Marzban:
/var/lib/marzban
(Docker versions). Copy the entire /var/lib/marzban
directory to a backup location of your choice, such as an external hard drive or cloud storage./opt/marzban/
directory.By following these steps, you can ensure that you have a backup of all your Marzban files and data, as well as your configuration variables and Xray configuration, in case you need to restore them in the future. Remember to update your backups regularly to keep them up-to-date.
Marzban comes with an integrated Telegram bot that can handle server management, user creation and removal, and send notifications. This bot can be easily enabled by following a few simple steps, and it provides a convenient way to interact with Marzban without having to log in to the server every time.
To enable Telegram Bot:
TELEGRAM_API_TOKEN
to your bot's API TokenTELEGRAM_ADMIN_ID
to your Telegram account's numeric ID, you can get your ID from @userinfobotMarzban comes with an integrated CLI named marzban-cli
which allows administrators to have direct interaction with it.
If you've installed Marzban using easy install script, you can access the cli commands by running
marzban cli [OPTIONS] COMMAND [ARGS]...
For more information, You can read Marzban CLI's documentation.
The Marzban project introduces the Marzban-node, which revolutionizes infrastructure distribution. With Marzban-node, you can distribute your infrastructure across multiple locations, unlocking benefits such as redundancy, high availability, scalability, flexibility. Marzban-node empowers users to connect to different servers, offering them the flexibility to choose and connect to multiple servers instead of being limited to only one server. For more detailed information and installation instructions, please refer to the Marzban-node official documentation
You can set a webhook address and Marzban will send the notifications to that address.
the requests will be sent as a post request to the adress provided by WEBHOOK_ADDRESS
with WEBHOOK_SECRET
as x-webhook-secret
in the headers.
Example request sent from Marzban:
Headers:
Host: 0.0.0.0:9000
User-Agent: python-requests/2.28.1
Accept-Encoding: gzip,
AI辅助编程,代码自动修复
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。
像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
AI数字人视频创作平台
Keevx 一款开箱即用的AI数字人视频创作平台,广泛适用于电商广告、企业培训与社媒宣传,让全球企业与个人创作者无需拍摄剪辑,就能快速生成多语言、高质量的专业视频。
一站式AI创作平台
提供 AI 驱动的图片、 视频生成及数字人等功能,助力创意创作
AI办公助手,复杂任务高效处理
AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!
AI小说写作助手,一站式润色、改写、扩写
蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。
全能AI智能助手,随时解答生活与工作的多样问题
问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。
实时语音翻译/同声传译工具
Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号