Русский | English
Готовый HTML-шаблон страницы подписки для панели Marzban.
Страница полностью автономная — все стили, скрипты, иконки, словари и логика находятся внутри одного файла
template_subscription_index.html.
Шаблон использует механизм Marzban и автоматически получает данные о пользователе (uuid, срок, лимиты, inbounds, подписочный URL) через Jinja.
- 🔄 Полная замена стандартной страницы Marzban
- 🔗 Автоматическая подстановка
subscription_url,user,inbounds,xray_config_base64 - 📱 Deeplink-импорт в популярные клиенты (V2RayTun, Sing-box, Hiddify и др.)
- 🌍 Многоязычие (ru/en), словари встроены в файл
- 🎨 Красивый современный интерфейс на Bootstrap + встроенный CSS
- 🧩 Встроенные SVG-иконки приложений
- 🧪 Вся логика — в одном HTML-файле, без внешних зависимостей
marzban-sub-page/
└── template_subscription_index.html # один файл, включающий CSS+JS+SVG+логика
В файле /opt/marzban/.env должна быть строка:
CUSTOM_TEMPLATES_DIRECTORY="/var/lib/marzban/templates/"
Marzban автоматически подгружает шаблоны из этой директории.
sudo mkdir -p /var/lib/marzban/templates/subscription/sudo cp template_subscription_index.html /var/lib/marzban/templates/subscription/index.htmlПосле этого Marzban автоматически начнёт использовать ваш шаблон.
docker compose down
docker compose up -dПользователь получает подписочную страницу по ссылке вида:
https://<domain>/sub/<base64-token>
Например:
https://marzban-s2.vpn-for-friends.com:4443/sub/dXNfMjI5LDE3NjM2...
Это корректный и единственный пользовательский URL.
Если хотите заменить шаблон напрямую внутри контейнера (не рекомендуется):
services:
marzban:
volumes:
- /opt/marzban/template_subscription_index.html:/code/app/templates/subscription/index.htmlНо при использовании CUSTOM_TEMPLATES_DIRECTORY этот метод не нужен.
| Переменная | Описание |
|---|---|
subscription_url |
URL подписки (/sub/<uuid>) |
panel_url |
URL панели |
user |
Объект пользователя |
user.uuid |
UUID |
user.username |
Логин |
user.expire_date |
Дата окончания |
user.data_limit |
Лимит трафика |
user.data_limit_reset_strategy |
Стратегия сброса |
user.sub_status |
Статус |
user.on_hold_expire_duration |
Заморозка |
inbounds |
Список инбаундов |
xray_config_base64 |
Base64-конфигурация |
<a href="{{ subscription_url }}" class="btn btn-primary">Download subscription</a><p>Your UUID: {{ user.uuid }}</p>{% for ib in inbounds %}
<li>{{ ib.remark }} — {{ ib.address }}:{{ ib.port }}</li>
{% endfor %}Все элементы страницы находятся в одном HTML-файле.
Вы можете изменять:
Внутри <script> расположен объект:
const MESSAGES = { ru: {...}, en: {...} }Можно:
- обновлять тексты
- добавлять новые языки (
fa,zh,tr…) - менять язык по умолчанию
Функции:
setupLink("href-v2raytun");
setupLink("href-singbox");формируют deeplink URL на основе {{ subscription_url }}.
CSS находится в <style> в начале файла — вы можете менять:
- цветовую тему
- фон
- размеры элементов
- кнопки и карточки
- логотип
SVG-спрайт встроен внутри HTML-файла.
Чтобы добавить новый значок — вставьте новый <symbol>.
PR-ы приветствуются!
Вы можете:
- улучшить UI
- добавить новые языки
- расширить список поддерживаемых клиентов
- улучшить логику deeplink
Проект распространяется под лицензией MIT.
Свободно используйте и модифицируйте под свои нужды.
Автор: Sergey Ryabkov
Проект: VPN for Friends
