Реселлеры (white-label)
Где в панели управления: Customers › Resellers › List (
/resellers), Domains & SSL (/resellers/domains), Permissions & wholesale (/resellers/entitlements), Defaults (/resellers/settings). Слоты реселлеров: System › Admin › License & updates (/license).
Назначение
Реселлер получает брендированную копию клиентского портала на собственном домене, с собственной клиентской базой, балансом, тарифами и (опционально) платежными шлюзами. Он покупает у вас по оптовой цене и продает по своей. Его клиенты не видят ваш бренд, а с домена реселлера невозможно открыть вашу консоль администратора. Реселлер ведет бизнес через партнерскую консоль по адресу https://partner.<your-domain>.
Требования
| Параметр | Требование |
|---|---|
| Лицензия | Один слот реселлерского домена в лицензии на каждый собственный домен реселлера. На странице лицензии отображается количество слотов used/max и ссылка для покупки дополнительных. При отсутствии свободного слота добавление домена завершается ошибкой "Out of license reseller domain slots". |
| DNS | Каждый реселлерский домен должен быть направлен на ваш сервер (см. ниже). |
| Веб-сервер и TLS | Имя хоста должно направляться на панель NexCMP через ваш reverse proxy с действующим сертификатом для этого имени. |
| SMTP, настроенный для отправки писем с приглашениями и уведомлениями. | |
| Главный переключатель | Reseller settings › General › rs_enabled включен по умолчанию. |
Подготовка инфраструктуры
Определите публичный адрес сервера: его IPv4-адрес и, если вы предпочитаете CNAME, имя хоста, указывающее на него (например,
sites.cloud.example.com).Откройте Customers › Resellers › Defaults (
/resellers/settings), блок Domains & SSL, и укажите:Ключ Значение rs_server_ipv4Публичный IPv4, на который должны указывать A-записи реселлеров. rs_cname_targetИмя хоста, на которое должны указывать CNAME-записи реселлеров. rs_master_hostsИмена хостов, принадлежащие вашему основному сайту (их нельзя передавать реселлерам). rs_platform_domainНеобязательный родительский домен для поддоменов платформы (например, partners.cloud.example.com, чтобы предоставлять реселлерамacme.partners.cloud.example.com). Пустое поле отключает опцию.rs_sites_stale_minutesКоличество минут, по истечении которых служба сертификатов считается устаревшей (по умолчанию 15). rs_ssl_fail_hoursКоличество часов неудачных попыток до регистрации ошибки (по умолчанию 48). Проверьте эти значения перед отправкой инструкций
Параметры
rs_server_ipv4,rs_cname_targetиrs_master_hostsсодержат демонстрационные значения. Замените их на данные вашего сервера и домена до того, как предоставите DNS-инструкции реселлеру, иначе инструкции на экране будут указывать на неверный адрес.Нажмите Save (потребуется указать причину).
Убедитесь, что ваш reverse proxy перенаправляет имена хостов реселлера на панель NexCMP и отдает сертификат для каждого из них. Установщик настраивает nginx и Let's Encrypt только для основного домена (и имен
admin.иpartner., которые резолвятся). Если используется Cloudflare, включите проксирование имени хоста и режим Full SSL.
Подключение в NexCMP
Создание реселлера
Откройте Customers › Resellers › List и нажмите New reseller. Мастер состоит из 8 шагов и инициализирует все настройки в конце; любой шаг можно безопасно повторить.
Шаг Заполняемые данные Reseller Юридическое или коммерческое наименование, slug (от 4 до 31 символов a–z, 0–9 или -, начинается с буквы; также служит префиксом инвойсов), контактное лицо, e-mail и телефон, язык по умолчанию, платежные реквизиты реселлера (как покупателя пополнений баланса).Console account Имя пользователя, e-mail учетной записи, ФИО; выберите Send a one-time invite link by e-mail (действует 72 часа, рекомендуется) или покажите временный пароль один раз. Brand Название бренда, краткое наименование, слоганы, основные цвета, e-mail и телефон службы поддержки, имя продавца в инвойсах клиентов, логотипы (для светлого и темного фона), квадратный значок и favicon: PNG, JPEG, WEBP или ICO размером до 256 КБ, без SVG. Domains Домен(ы) клиента с also www, выбор основного, test domain (sslip.io) и опция dry-run либо поддомен платформы. Мастер отображает DNS OK / DNS not ready и записи, которые необходимо создать. Pricing & wallet Оптовая скидка (%), минимальная розничная цена (% от каталожной), наценка по умолчанию (%), кредитный лимит, начальный баланс, оповещение о низком балансе, лимиты на клиентов, ВМ и домены, функции сайта (регистрация клиентов, защита от DDoS, тикеты поддержки, индивидуальный тариф, изменение размера, Auto Scaling). Payment channels Кто принимает платежи клиентов (см. ниже), а также подключение собственного PayPal и банковского перевода VN (опционально). Email Имя отправителя и Reply-To. Адрес From остается адресом платформы до тех пор, пока для домена реселлера не будет настроен DKIM. Review Проверьте все параметры и нажмите Provision everything или Save draft (provision later). Подготовка продолжается в фоновом режиме (каждые 30 секунд). Откройте реселлера, чтобы отслеживать прогресс, и используйте Continue provisioning или Retry, если какой-либо шаг завершился с ошибкой.

Направление DNS (выполняется реселлером)
Реселлер (или вы) создает записи, указанные на вкладке Domains & SSL:
| Запись | Name | Значение |
|---|---|---|
| TXT (подтверждение владения, только в первый раз) | _site-verify.<domain> | sv=<token>, указанное на экране |
A (apex-домен, например shop.example.net) | домен | ваш rs_server_ipv4 |
CNAME (поддомен, например cloud.example.net) | домен | ваш rs_cname_target (или A-запись на rs_server_ipv4) |
| CNAME (опционально) | www.<domain> | ваш rs_cname_target |
Также:
- Удалите любые записи AAAA (IPv6), если только ваш сервер не отвечает по этому IPv6-адресу.
- Отключите CDN-прокси (off, серое облако) на время проверки домена.
- Если у домена настроены записи CAA, разрешите
letsencrypt.org.
Токен в TXT-записи уникален для каждого домена; скопируйте его с экрана. Система повторно проверяет DNS каждые 5 минут в течение первых 48 часов, затем каждый час, и освобождает имя, для которого TXT-запись так и не появилась спустя 72 часа.
Статусы доменов
В разделе Customers › Resellers › Domains & SSL (все реселлеры) и на вкладке реселлера Domains & SSL:
| Состояние | Значение |
|---|---|
pending_verify | Ожидание TXT-записи. |
pending_dns / verifying | Ожидание направления A или CNAME на вас. |
issuing | Выпуск сертификата. |
active | Обслуживает сайт реселлера. |
cert_expiring | Срок действия сертификата подходит к концу; ожидается продление. |
dns_lost | DNS больше не указывает на вас; через 30 дней домен будет удален. |
error | См. код ошибки; нажмите Retry после устранения проблемы. |
removing / removed | Удаляется; слот лицензии освобождается. |
Действия в строке: Check now, Retry, Make primary, Test mode (для тестового домена), Remove.
Права доступа и оптовые цены
Customers › Resellers › Permissions & wholesale (/resellers/entitlements) представляет собой матрицу: по одной строке на реселлера с оптовой скидкой и наценкой, а также переключатели для каждой услуги (например, DDoS Shield и VPN). Переключатель доступен для редактирования, если функция включена на уровне платформы; иначе ячейка доступна только для чтения и ведет к соответствующей настройке. На вкладке Top-up codes задается количество кодов пополнения, которое реселлер может выпускать в месяц (см. Promotions).
Правила ценообразования:
- Оптовая цена = базовая цена x (1 - скидка); ее можно переопределить для каждого тарифа и расчетного периода на вкладке реселлера Wholesale pricing.
- Реселлер сам устанавливает розничные цены, но не может опускаться ниже минимального порога (floor, процент от базовой цены).
- С кошелька реселлера списывается оптовая цена при покупках его клиентов. Для кошелька действуют кредитный лимит, льготный период и лимит овердрафта (см. Defaults).
Defaults
В разделе Customers › Resellers › Defaults (/resellers/settings) находятся ключи rs_*, применяемые ко всем реселлерам. При каждом изменении запрашивается причина, и действие фиксируется в аудите.
| Группа | Ключ | По умолчанию | Значение |
|---|---|---|---|
| Общие | rs_enabled | 1 | Реселлерская программа включена. |
rs_platform_collect_enabled | 0 | Разрешает платформе принимать платежи клиентов в пользу реселлеров. Включайте только после юридической проверки. | |
rs_totp_required | 1 | Учетные записи консоли реселлера должны использовать двухфакторную аутентификацию. | |
rs_agreement_version | 1 | Версия партнерского соглашения, которую реселлеры обязаны принять. | |
| Цены по умолчанию | rs_default_discount_bp | 2000 (20 %) | Оптовая скидка для новых реселлеров (в базисных пунктах, от 0 до 9000). |
rs_default_markup_bp | 2500 (25 %) | Наценка по умолчанию (от 0 до 50000). | |
rs_default_floor_bp | 9000 (90 %) | Минимальный порог розничной цены (от 0 до 20000). | |
rs_default_max_domains | 3 | Допустимое количество доменов на одного реселлера. | |
| Кошелек и выплаты | rs_grace_hours | 72 | Льготный период до приостановки услуг клиентов при нулевом балансе реселлера. |
rs_overdraft_cap_cents | 5000 | Разрешенный овердрафт по кошельку. | |
rs_retention_days | 14 | Количество дней до удаления VM закрытого реселлера. | |
rs_payout_hold_days | 30 | Срок удержания комиссии (в днях) перед выводом средств. | |
rs_payout_min_cents | 5000 | Минимальная сумма вывода. | |
rs_topup_min_cents | 2000 | Минимальная сумма пополнения кошелька реселлером. | |
| Платежи и почта | rs_webhook_base | пусто | Публичный базовый URL для вебхуков шлюзов реселлера (если пусто — используется URL сайта). |
rs_mail_from | пусто | Адрес отправителя (From) для писем реселлера. | |
rs_invoice_show_processor | 1 | Отображать платежный шлюз в счетах. | |
rs_gw_stripe_enabled, rs_gw_usdt_enabled | 1 | Разрешено ли реселлерам подключать собственные аккаунты Stripe или USDT. |
Кто принимает платежи клиентов
| Режим | Значение |
|---|---|
| Принимает реселлер (собственные каналы) — по умолчанию | Реселлер подключает собственный аккаунт Stripe, PayPal, USDT или банковский счет. Его вебхуки: https://<reseller-domain>/v1/billing/<gateway>/webhook/r/<id>. Сохраненные карты и auto top-up для таких сайтов недоступны. |
| Принимает платформа | На сайте реселлера отображаются ваши каналы оплаты. Заблокировано до rs_platform_collect_enabled = 1. |
| Смешанный режим | Комбинация, настраиваемая отдельно для каждого канала. |
Что видит реселлер
В консоли партнера по адресу https://partner.<your-domain> доступны разделы Overview, Reports, Customers, VMs, Tickets, Orders, Payments, Prices, Brand, Landing & legal, Domains & SSL, Email, Wallet и Payment channels. Пользователи консоли получают роль reseller (полный доступ) или staff (только чтение). Чтобы войти в нее самостоятельно, откройте карточку реселлера и нажмите Sign in to partner console: сессия действует 60 минут, каждая операция записи логируется с вашим именем в журнале администратора и реселлера, а финансовые операции требуют повторного подтверждения.
Проверка
- После развертывания в строке реселлера в списке отображается active и зеленый столбец Provisioning.
- Откройте домен реселлера в браузере: появится собственная страница входа реселлера с его брендингом.
https://<reseller-domain>/adminвозвращает 404. - Зарегистрируйте тестового клиента на этом домене: клиент появится в разделе Customers › List с указанием реселлера в столбце Site.
- На странице лицензии отображается еще один занятый слот.
Ограничения и примечания
- Один слот лицензии на каждый собственный или тестовый домен; поддомены платформы не занимают слоты.
- Приостановка реселлера сохраняет данные; действие Close reseller освобождает все слоты доменов, а удаление VM разрешено только после истечения срока хранения.
- Клиенты реселлера отображаются в общем списке клиентов; войти под их учетной записью можно как обычно (ссылка откроется на домене реселлера).
- Реселлеры не могут просматривать или изменять ваши платежные каналы, значения квот по умолчанию и других реселлеров.
Устранение неполадок
| Симптом | Причина | Решение |
|---|---|---|
| «Исчерпаны слоты доменов реселлера по лицензии» | Все слоты заняты | Освободите слот (удалите домен) или приобретите дополнительные слоты на странице лицензии. |
Домен завис в статусе pending_verify | Отсутствует TXT-запись | Создайте TXT-запись точно так, как указано; нажмите Check now. |
Домен завис в статусе pending_dns | Запись A/CNAME указывает не на вас, присутствует AAAA-запись либо включено проксирование CDN | Исправьте DNS, отключите проксирование, затем нажмите Check now. |
Состояние error | См. код в строке (например, CAA блокирует Let's Encrypt, превышен лимит запросов) | Исправьте проблему и нажмите Retry. |
| В браузере отображается ошибка неизвестного хоста или «421» | Имя хоста не включено в лицензию или не маршрутизируется на панель | Добавьте домен через реселлера (расходует слот) и исправьте обратный прокси. |
| В инструкциях указан неверный IP-адрес или хост | В rs_server_ipv4 / rs_cname_target по-прежнему указаны примерные значения | Задайте их в Defaults. |
| Реселлер не может включить сбор платежей через платформу | Заблокировано | Установите rs_platform_collect_enabled после юридической проверки. |