Перейти к содержимому

Справочник CLI

Развернуть один сервер и получить ссылку для обмена подключением. Сервер становится и контроль-планом (панель Remnawave), и выходом. Deploy строит ту же рассмотренную топологию, что и meridian setup, применяет её с контрольными точками, проверяет реальный трафик через доставленную подписку и выводит страницу подключения и URL подписки. Повторный запуск того же команды возобновляет прерванное развёртывание или переразворачивает, сохраняя пути, ключи и пользователей.

meridian deploy [SERVER] [flags]
ФлагПо умолчаниюОписание
--sni HOST(авто)Цель маскировки. Без него первое развёртывание пробует сайты из собственной подсети сервера, затем www.google.com, dl.google.com, www.cloudflare.com и использует первый, который несёт трафик; переразворачивание сохраняет сохранённую цель. Явный --sni никогда не меняется
--domain DOMAIN(нет)Ваш домен: XHTTP переносится на него и добавляется WSS, оба через CDN Cloudflare (XHTTP работает и без домена, на IP). Панель и страницы подключения остаются на IP-сертификате
--hysteria2/--no-hysteria2вклПредлагать Hysteria2 на UDP/443, замаскированный salamander, как последний возврат. Использует сертификат домена или IP-сертификат без домена
--fingerprint NAMEchromeОтпечаток TLS, который клиенты показывают на Reality, XHTTP и WSS (chrome, firefox, safari, ios, android, edge, random, randomized). Измените его, если ваш регион начнёт флагировать текущий; переразворачивание сохраняет сохранённое значение
--client-name NAMEdefaultИмя первого клиента
--display-name NAME(нет)Ярлык для страниц подключения
--icon EMOJI_OR_URL(нет)Значок страницы — эмодзи или URL изображения
--color PALETTEoceanТема цвета страницы (ocean/sunset/forest/lavender/rose/slate)
--user USERсохранено, иначе rootSSH пользователь (не-root требует passwordless sudo)
--ssh-port PORTсохранено, иначе 22SSH порт
--harden / --no-hardenвклSSH только по ключу, fail2ban и брандмауэр UFW. --no-harden для серверов, общих с другими сервисами
--warp / --no-warpвыклОтправлять исходящий трафик через Cloudflare WARP
--geo-block / --no-geo-blockвклБлокировать российские домены и IP (geosite:category-ru + geoip:ru) на выходе. Xray JSON и Mihomo подписки уже отправляют их напрямую с устройства
--client-ips / --no-client-ipsвыклПередавать Xray и панели реальный IP каждого клиента — для лимитов по IP и журналов подключений для каждого пользователя. Когда выключено, каждое TCP-соединение выглядит как приходящее с самого сервера
--country CCреестр адресаДвухбуквенный код страны, который показывается в названиях подключений и как флаг узла в панели. Без него при первом развёртывании Meridian спрашивает региональный интернет-реестр адреса сервера (через RDAP bootstrap IANA, без гео-IP сервиса); при повторном развёртывании сохраняется прежняя страна
--yesПропустить диалоги подтверждения
--jsonВыдать окончательный результат развёртывания как конверт meridian.output/v1
--events=jsonlПотоком передавать типизированные события прогресса как JSONL на stderr
--request FILEПрочитать deploy-request JSON от файла; используйте - для stdin
--dry-runКомпилировать и просмотреть развёртывание без SSH или локальных изменений

Без IP, deploy запрашивает его. local развёртывает на машине, на которой вы находитесь. Deploy только переразворачивает сервер, который уже является выходом во вашем флоте; добавляйте другие серверы с помощью meridian node add. Изменения дополняющие: удаление уже развёрнутого (например, отпадение --domain) отклоняется.

Поток машина/UI: meridian api workflow deploy --json возвращает отрисовываемый контракт мастера. UI собирает эти поля, проверяет их против deploy-request, затем запускает meridian deploy --request deploy.json --json --events=jsonl. Машинные развёртывания неинтерактивны: запрос должен содержать yes: true после подтверждения пользователем. --dry-run --json возвращает deploy-plan под data, чтобы UI мог просмотреть режим, порты и сгенерированные пути перед открытием SSH.

Возобновляемый пошаговый мастер для одного сервера или многих: выходы, ретрансляторы Realm, маршрутизирующие шлюзы с пулами отказоустойчивости и пользователи. Он написан для людей, которые никогда не настраивали VPN: каждый вопрос использует настоящий термин (выход, ретранслятор, SNI) и объясняет его в одном простом предложении с безопасным стандартом, который вы можете принять, нажав Enter.

meridian setup [--intent FILE|-] [--restart] [--yes]
ФлагПо умолчаниюОписание
--intent FILE(нет)Начать с проверки из полного документа JSON топологии; используйте - для stdin
--restartОтбросить сохранённый прогресс настройки перед запуском
--yes, -yОдобрить проверку и применить без запроса

Первый вопрос — язык (English, Русский, فارسی, 中文), предвыбранный из вашего терминала и запомненный в ~/.config/meridian/preferences.json; --lang или MERIDIAN_LANG пропускают его. Затем мастер проходит по серверам (IP, user@IP:port или local для этой машины), что делает каждый сервер, методы подключения, маршрутизация (спрашивается только если у вас есть маршрутизирующий шлюз), пользователи, сводка на простом языке и применение. На любом запросе вы можете ввести back, details, save или quit (или те же слова на вашем языке). Запуск meridian без команды в терминале, до того как существует VPN, предлагает запустить мастер. Прогресс сохраняется в ~/.config/meridian/setup.json после каждого этапа, поэтому запуск meridian setup снова возобновляет; пароли и приватные ключи никогда не сохраняются там. --intent не заменяет существующий черновик, если --restart также не указан. Когда применение успешно, setup проверяет каждый узел и подписку и выводит страницу подключения каждого пользователя.

Показать, что изменит meridian apply, сравнивая топологию в ~/.config/meridian/cluster.yml с живыми серверами и панелью. Ничего не меняется.

meridian plan [--json]
ФлагПо умолчаниюОписание
--jsonВыдать план как конверт meridian.output/v1 для CI и UI клиентов

Вывод показывает хеш плана, подсчёты ресурсов по типам и любые ресурсы, которые нужно исправить или не удалось наблюдать. JSON data содержит plan_hash, converged, resources[], drifted_resources[], observation_errors[] и state_changes[].

Коды выхода:

  • 0 — сходится, нечего делать
  • 1 — нечего планировать (нет флота, или неиспользуемое локальное состояние)
  • 2 — ожидающие изменения (запустите meridian apply)
  • 3 — требуемые доказательства (панель, SSH, локальное состояние) были недоступны

Не редактируйте топологию в cluster.yml вручную. Измените её с помощью meridian setup, deploy, client add, node add или relay add.

Применить рассмотренную топологию в cluster.yml на ваши серверы. Apply показывает хеш плана и подсчёт ресурсов, просит подтверждение, затем применяет точный показанный план с контрольными точками. Прерванное применение возобновляется там, где остановилось.

meridian apply [--yes] [--json]
ФлагПо умолчаниюОписание
--yes, -yПропустить подтверждение
--jsonВыдать окончательный результат применения как конверт meridian.output/v1

JSON data содержит plan_hash, generation и actions[] с status: "converged" | "applied" | "failed" | "unknown" | "skipped". JSON режим никогда не спрашивает: без --yes возвращает MERIDIAN_CONFIRMATION_REQUIRED с хешем плана и выходит 2. Неудавшийся ресурс выходит 3; исправьте причину и снова запустите apply. Если локальное состояние не может быть сохранено после удалённых изменений, apply выходит 3 и говорит это; исправьте разрешения ~/.config/meridian, затем запустите plan и apply снова.

Удаления тоже применяются: всё, что покинуло топологию (пользователи, пути протокола, выходы, ретрансляторы, маршрутизирующие шлюзы), удаляется после того как всё, что осталось в плане, сходится, и plan выводит это первым. Контрольный сервер уходит только через meridian teardown.

Управлять людьми, которые подключаются.

meridian client add NAME [NAME...] [--json]
meridian client show NAME [--repair-page] [--json]
meridian client list [--json]
meridian client enable NAME [--json]
meridian client disable NAME [--json]
meridian client remove NAME [--yes] [--json]
ФлагПо умолчаниюОписание
--jsonВыдать результат как конверт meridian.output/v1 (все команды client)
--repair-pageПереопубликовать страницу подключения клиента (client show)
--yes, -yПодтвердить client remove; требуется с --json

client add — добавляет одного или нескольких людей в топологию, применяет её и выводит страницу подключения и URL подписки каждого человека. Страница строится из их подлинной подписки, поэтому ретрансляторы и Hysteria2 появляются при наличии. Имена уже в топологии или уже в панели отклоняются. Если ссылка подписки клиента не может быть построена, клиент всё ещё добавляется и команда выходит 3; отсутствующая страница подключения одна — это предупреждение (исправьте её с помощью client show --repair-page).

client show — выводит страницу подключения, URL подписки, статус, трафик и время последнего видения. --repair-page переопубликовывает отсутствующую страницу; если это не удаётся, ссылки всё ещё показаны с предупреждением и выходом 3.

client list — выводит клиентов со статусом, трафиком, временем создания и последним временем видения. С --json возвращает подсчёты data.summary и data.clients[].

client enable / client disable — возобновить или приостановить клиента немедленно. Отключённый клиент остаётся отключённым, пока вы не выполните client enable: применения (включая переразворачивание, client add, node add и relay add) статус клиента не меняют.

client remove — удаляет клиента из топологии, удаляет пользователя панели и его страницу подключения. Запрашивает подтверждение, если не дан --yes. Последний клиент не может быть удалён. Не удаляйте пользователей в панели напрямую; Meridian воссоздаёт любого клиента, который осталась в топологии, при следующем применении.

Управлять сохранёнными SSH серверами (~/.config/meridian/servers.json).

meridian server add [USER@]IP[:PORT]|local [--name NAME] [--user USER] [--ssh-port PORT]
meridian server list
meridian server remove NAME_OR_IP [--yes]
ФлагПо умолчаниюОписание
--name NAME(нет)Имя для отображения сервера
--user/-u USERrootSSH пользователь
--ssh-port PORT22SSH порт
--yes, -yПропустить подтверждение удаления (server remove)

Имена и адреса должны быть уникальны; server add отклоняет коллизии вместо переориентирования существующего сервера. server remove удаляет только сохранённый профиль и отклоняет, пока сервер всё ещё имеет роль в вашей топологии.

Управлять серверами выхода. Первый сервер развёртывается с помощью meridian deploy (или meridian setup); добавляйте дополнительные выходы с помощью meridian node add.

meridian node add [USER@]IP[:PORT] [flags]
meridian node list [--json]
meridian node remove NAME_OR_IP [--yes] [--force]
meridian node replace EXIT [USER@]NEW_IP[:PORT] [--name NAME] [--yes]
ФлагПо умолчаниюОписание
--name NAME(авто)Дружественное имя для узла
--user USERсохранено, иначе rootSSH пользователь на узле
--ssh-port PORTсохранено, иначе 22SSH порт на узле (node add, node replace)
--sni HOSTwww.google.comЦель маскировки Reality для этого узла
--domain DOMAIN(нет)Домен узла: XHTTP переносится на него и добавляется WSS, оба через CDN Cloudflare; Hysteria2 использует его сертификат
--country CCреестр адресаСтрана в названиях подключений; задайте её, если реестр ошибается (anycast или арендованные диапазоны)
--harden / --no-hardenвклЗатвердевание ОС, SSH и брандмауэра. Серверы флота всегда его сохраняют; --no-harden отклоняется
--yesПропустить диалоги подтверждения
--forcenode remove: также удалить цепи ретрансляторов, которые маршрутизируют к этому выходу
--jsonВыдать node list как конверт meridian.output/v1

node add — подключается по SSH, добавляет сервер как выход в вашу топологию и применяет рассмотренный план (затвердевание, Docker, Xray, регистрация панели). Существующие клиенты получают новый выход при следующем обновлении подписки.

node list — выводит узлы с живым статусом панели, версией Xray и трафиком. Если статус панели недоступен, настроенные узлы показаны как unknown и команда выходит 3.

node remove — удаляет выход или маршрутизирующий шлюз из вашей топологии. Выводит каждый ресурс, который будет удален (панель узла и профиль, контейнер узла, правила брандмауэра, опубликованные Hosts), запрашивает подтверждение и применяет именно это рассмотрение; сервер остается в сохраненных серверах. Отклоняется для контрольного сервера (используйте meridian teardown), пока ретрансляторы все еще маршрутизируют к выходу (удалите их сначала или передайте --force), пока маршрутизирующий шлюз входит в флот через него, и когда результат нарушит топологию (например пустой пул исходящих связей или исходящий выход по умолчанию). Правила маршрутизации, ограниченные удаленным шлюзом, удаляются с ним.

node replace — перемещает один выход на другой сервер. EXIT это ID выхода или сохранённое имя его сервера или IP; новый сервер использует тот же синтаксис цели как node add (сохранённое имя или local работает тоже) и сохраняется как server add. Выход сохраняет свой ID, ключи Reality, пути протокола, SNI, настройки WARP и geo, и каждый ретранслятор который указывает на него, поэтому пользователи ретранслятора продолжают работать и прямые пользователи получают новый адрес на их следующем обновлении подписки. Рассмотрение выводит список что будет развёрнуто на новом сервере и каждый ресурс очищен на старом (контейнер узла, изображение и директория; его файлы nginx, правила брандмауэра и сертификаты); Docker и сохранённый сервер остаются. Отклоняется для контрольного сервера (перемещение панели изменит каждый URL подписки) и для нового сервера который уже имеет роль.

Управлять ретрансляторами — TCP форвардерами Realm, которые дают пользователям внутреннюю точку входа на выход за границей. Ретрансляторы несут трафик Reality.

meridian relay add [USER@]RELAY_IP[:PORT] --exit EXIT [flags]
meridian relay list [--exit EXIT] [--json]
meridian relay remove RELAY [--exit EXIT] [--yes]
ФлагПо умолчаниюОписание
--exit/-e EXIT(требуется для add)IP или имя сервера выхода
--name NAME(авто)Дружественное имя для ретранслятора (например, “ru-moscow”)
--port/-p PORT443Портслушания на сервере ретранслятора
--sni HOSTцель выходаЦель маскировки Reality для этого ретранслятора; пропустите, чтобы использовать цель выхода
--user/-u USERсохранено, иначе rootSSH пользователь на ретрансляторе
--ssh-port PORTсохранено, иначе 22SSH порт на сервере ретранслятора (relay add)
--yes/-yПропустить диалоги подтверждения
--jsonВыдать relay list (data.relays[]) как конверт meridian.output/v1

relay add — добавляет одноузловой ретранслятор в вашу топологию и применяет её. Клиенты получают его при следующем обновлении подписки. Для цепей с несколькими узлами используйте meridian setup.

relay remove — RELAY это IP ретранслятора или сохраненное имя, или ID цепи ретранслятора. Отбрасывает каждую цепь через этот сервер (сузить с --exit), выводит то, что будет удалено (Realm юниты, правила брандмауэра, слушатель со стороны выхода, опубликованные Hosts), подтверждает и применяет рассмотренное удаление. Серверы остаются в сохраненных серверах.

Для проверки хопов ретранслятора запустите meridian check RELAY.

Отправлять выбранные направления с выхода через Cloudflare WARP, напрямую или никуда, впереди исходящего по умолчанию выхода.

meridian route add EXIT VALUE... --via warp|direct|block [--name ID] [--json]
meridian route list [EXIT] [--json]
meridian route remove EXIT ROUTE [--yes] [--json]
ФлагПо умолчаниюОписание
--via ACTION(требуется для add)warp, direct, или block
--name IDдействие, пронумерованоID маршрута показанный через route list и используемый через route remove
--yes/-yПропустить подтверждение удаления (требуется с --json)
--jsonВыдать конверт meridian.output/v1 (data.override для add/remove, data.exits[] для list)

EXIT это ID выхода, сохранённое имя сервера или IP. Каждый VALUE это домен (поддомены включены), geosite:NAME или geoip:NAME; один маршрут держит один вид.

route add — добавляет маршрут к выходу в вашу топологию и применяет его. Маршруты совпадают в порядке который они были добавлены. Маршрут warp на выходе без WARP настраивает WARP только для того маршрута; остальной трафик остаётся прямым.

route list — показывает каждый исходящий выход по умолчанию и его маршруты в порядке совпадения.

route remove — удаляет один маршрут и применяет изменение; его направления следуют исходящему по умолчанию выхода снова. WARP остаётся установленным на сервере но ничего не несёт пока маршрут или --warp не используется снова.

Здоровье флота и инвентарь с живой панели, а также обновление Remnawave.

meridian fleet status [--json]
meridian fleet inventory [--json]
meridian fleet upgrade [--tested] [--yes]
ФлагПо умолчаниюОписание
--jsonВыдать результат как конверт meridian.output/v1 (status, inventory)
--testedfleet upgrade: использовать только версии Remnawave, с которыми протестирован этот релиз Meridian, не обращаясь к Docker Hub
--yes, -yfleet upgrade: пропустить подтверждение

fleet status — здоровье панели, биения сердца узла, слушатели ретранслятора и подсчёты клиентов. Отсутствующие объявленные клиенты понижают здоровье; отключённые, ограниченные или истёкшие клиенты подсчитываются но это ваш выбор, не неисправность. Достижимый слушатель ретранслятора только доказывает TCP, поэтому непроверенные маршруты ретранслятора сохраняют здоровье unknown; используйте meridian test для проверки полного пути. Выход 0 означает здоровый, 4 понижение и 3 неизвестный.

fleet inventory — ваши настроенные серверы, роли, узлы и ретрансляторы с живым статусом панели при достижимости. Никогда не выводит токен API панели или секретные пути. Если живой статус недоступен, настроенный инвентарь всё ещё показан с предупреждениями и команда выходит 3. Используйте plan --json для решения, имеет ли apply работу.

fleet upgrade — переводит Remnawave на самый новый релиз, не дожидаясь обновления Meridian. Команда запрашивает у Docker Hub самые новые релизы backend, узла и страницы подписки в рамках основной версии, которую поддерживает этот релиз Meridian (предрелизы и другие основные версии пропускаются), закрепляет каждый по его мультиархитектурному дайджесту и сохраняет выбор в cluster.yml, чтобы последующие применения его сохраняли. Более новое закрепление в следующем релизе Meridian снова берёт верх. --tested оставляет только версии, с которыми протестирован этот релиз. PostgreSQL и Valkey всегда остаются на закреплённых версиях Meridian. Затем она читает образы backend, страницы подписки, PostgreSQL, Valkey и узла, которые запускает каждый сервер (read-only docker inspect по SSH) и показывает каждое как current, upgrade, install или сохранённое. Политика версий та же, что использует setup: более новый тег версии или плавающий тег (latest, 3), который вы выбрали, сохраняется и сообщается, никогда не понижается. Основная версия PostgreSQL никогда не перемещается на месте — старая основная продолжает работать и команда объясняет дамп-и-восстановление которое ей нужно. После вашего подтверждения она применяет рассмотренный план и запускает meridian check на каждом сервере. Сервер чьи изображения не могут быть прочитаны останавливает команду с выходом 3 перед всеми изменениями; если apply сходится но сервер всё ещё запускает старое изображение, она выходит 3 тоже.

Проверить здоровье сервера, или сможет ли новый сервер запустить Meridian. Что проверяется зависит от роли сервера в вашем флоте:

  • Ещё не в флоте — проверки перед развёртыванием: достижимость цели маскировки и DNS, доступность и внешняя достижимость портов 443, DNS домена, ОС, диск и часы. Ничего не установлено; кратосрочный слушатель тестирует брандмауэр, когда порт 443 свободен. DNS использует собственный разрешитель сервера.
  • Контроль, выход или шлюз маршрутизации — подключение панели, SSH (или локальный доступ), контейнеры (включая здоровье страницы подписки), все скомпилированные публичные и внутренние порты, TLS сертификаты и дисковое пространство. Запустите с другой машины, контроль-сервер также получает проверку потока данных: загрузка ~50 КБ, которая предупреждает, когда она зависает примерно после 16–24 КБ (дросселирование, измеренное с того места, где вы находитесь).
  • Ретранслятор — каждый хоп Realm на сервере: сервис активен и может достичь следующего хопа, и публичный вход цепи принимает TCP с вашей машины.

Без сервера, каждый сервер в флоте проверяется.

meridian check [SERVER] [--domain NAME] [--sni HOST] [--user USER]
[--ssh-port PORT] [--ai] [--json]

--domain и --sni применяются к серверам, ещё не развёрнутым: проверяют, что домен разрешается на сервер и что конкретная цель маскировки достижима. --user и --ssh-port переопределяют сохранённого SSH пользователя и порт. --ai копирует готовый для AI диагностический запрос в буфер обмена. --json выводит один конверт meridian.output/v1 с отчётом по сервёрам и областям.

Отсутствующие доказательства никогда не рассматриваются как успех. Выход 0 означает, что все проверки прошли, 4 означает найденные проблемы, 3 означает требуемые доказательства были недоступны, и 2 означает недопустимый ввод. Каждая неудача выводит её исправление. Используйте meridian test для передачи реального трафика через весь маршрут.

Найти цели маскировки на собственной сети сервера, используя закреплённый выпуск RealiTLScanner. Meridian проверяет его SHA-256 контрольную сумму перед запуском и удаляет удалённое рабочее пространство после этого.

meridian scan [SERVER] [--user USER] [--ssh-port PORT]

RealiTLScanner сканирует IPv4 диапазоны; IPv6-только сервер выходит 3. Выбор результата выводит команду для его использования — он не изменяет развёрнутую топологию. Пропуск выходит 0, недопустимый выбор выходит 2, нет подходящих целей выходит 4 и сканер или ошибки загрузки выходят 3.

Протестировать доставленный прокси-трафик с вашего устройства. SSH не требуется.

Полный тест выбирает активного клиента, получает точный JSON Xray, который Remnawave доставляет им, и пропускает реальный трафик через автоматический возврат и через каждый путь целевого сервера. Первый запуск может потратить до 120 секунд на загрузку и проверку закреплённого времени выполнения Xray. Проверки трафика вращают независимых наблюдателей IP и сравнивают их с прямым запросом, поэтому отключение наблюдателя неубедительно вместо ложной неудачи. MERIDIAN_CONNECT_TEST_URL переопределяет наблюдателя для контролируемых окружений.

Отключение панели, HTTP 429 или HTTP 5xx делает подписку недоступной, поэтому запуск выходит 3. Любое другое отклонение подписки, такое как 400 или 422, это завершённый отказ и выходит 4.

meridian test [SERVER|DOMAIN] [--domain NAME] [--sni NAME]
[--client NAME] [--basic] [--probe] [--timeout SECONDS] [--json]

Без указания цели test проверяет сохранённый сервер, на котором запущен, или ваш единственный сохранённый сервер. Если их несколько, он по очереди проверяет каждую публичную точку входа вашего флота (каждый выход, затем точку входа каждого реле) и завершается с худшим результатом; тогда --json возвращает по одному результату на сервер в data.results.

--client тестирует конкретного активного клиента. --basic запускает только сетевые и TLS проверки без загрузки Xray и не может проверить пути только UDP; не может быть объединено с --client (выход 2). --timeout (по умолчанию 5, диапазон 1–30) ограничивает каждую сетевую операцию, отдельно от первой загрузки Xray.

Выход 0 означает каждая проверка прошла, 4 означает тест нашёл проблемы и 3 означает требуемые доказательства были недоступны. --json выдаёт конверт meridian.output/v1 с каждой проверкой и находкой.

Каждый путь сообщает время до первого байта. Когда путь не удаётся, Meridian открывает простое TCP соединение к его конечной точке, чтобы сказать, подключается ли, но без трафика (сервер отвечает, но сессия прокси не несёт ничего: неправильные учётные данные или сессия разорвана) или недостижим (ничего не отвечает на этом порту). С --json, data.transports содержит результат каждого пути (ok, no_traffic, unreachable, failed, egress_mismatch, inconclusive, invalid) и first_byte_ms.

--probe смотрит на сервер так, как активный зондировщик, чтобы проверить, раскрывает ли развёртывание себя, вместо отправки трафика. Работает на любом IP или домене и применяет более строгие проверки, когда цель принадлежит вашей сохранённой топологии.

Проверки следуют реальному развёртыванию: публичное и внутреннее раскрытие портов, поведение HTTP/TLS, консистентность и маскировка SNI, обычные пути прокси и панели, улучшения WebSocket, обратный DNS, HTTP/2, устаревшие версии TLS и настроенные домены. --sni переопределяет SNI для общих TLS зондов. Слушатели только UDP сообщаются как нуждающиеся в полной meridian test вместо предположения.

--probe также отвечает на вопрос «что блокируется?». Он открывает TLS к серверу с его маскировочным SNI; если это не удаётся, он повторяет попытку без SNI и открывает реальный сайт маскировки напрямую, затем сообщает, выглядит ли блокировано IP сервера или маскировочный SNI. Если реальный сайт тоже не может быть достигнут, результат неубедителен вместо вывода. На контроль-сервере он также загружает скрипт страницы подключения ~50 КБ и следит за передачей, которая зависает примерно после 16–24 КБ, что является тем, как дросселируемые иностранные IP ведут себя. Когда путь WSS проходит через CDN, та же загрузка выполняется через CDN. Эти результаты имеют значение только, когда вы их запускаете из цензурируемой сети. --probe не может быть объединён с --basic, --client или --domain. Коды выхода такие же как test; пропущенные проверки никогда не сообщаются как прохождения.

meridian probe [SERVER|DOMAIN] [--sni NAME] [--timeout SECONDS] [--json] — то же самое, что meridian test IP --probe.

Собрать системные диагностики для отчётов об ошибках.

meridian doctor [SERVER] [--sni HOST] [--user USER] [--ssh-port PORT] [--ai]

--sni выбирает цель маскировки для диагностики, --user и --ssh-port переопределяют сохранённого SSH пользователя и порт, и --ai копирует отредактированный, готовый к AI отчёт в буфер обмена вместо печати шаблона проблемы.

Doctor следует ролям сервера: сервер только ретранслятора не диагностируется как выход, и маршрутизирующие шлюзы помечены отдельно. Отсутствующие инструменты или потерянное SSH подключение делают отчёт неубедительным (выход 3); уже собранные секции всё ещё показаны.

Показать последние журналы сервера в отредактированном виде, не входя на него.

meridian logs [SERVER] [--lines N] [--grep TEXT] [--component NAME]
[--user USER] [--ssh-port PORT]
ФлагПо умолчаниюОписание
--lines, -n N100Сколько строк показать из каждого журнала (1–10000)
--grep, -g TEXTТолько строки с этим текстом; без учёта регистра, ищется буквально, а не как регулярное выражение
--component, -c NAMEвсеТолько node, panel, nginx или relay; повторите, чтобы выбрать несколько

logs читает то, что запускают роли сервера: выходы и маршрутизирующие шлюзы показывают контейнер узла Remnawave, управляющий сервер показывает контейнеры панели (бэкенд, база данных, Valkey, страница подписки), оба показывают журнал ошибок nginx, а ретрансляторы показывают журнал своих юнитов Realm. --user и --ssh-port переопределяют сохранённого SSH пользователя и порт.

Каждая строка проходит ту же редакцию, что и в meridian doctor: токены, пароли, ключи, UUID, идентификаторы подписок и секретные пути панели и страницы подключения заменяются на [REDACTED], поэтому вывод безопасно вставлять в отчёт об ошибке. Строки печатаются простым текстом, управляющие символы терминала удалены.

Сервер без роли в флоте или --component, который он не запускает, завершается с кодом 2 до подключения. Журнал, который не удалось прочитать (нет контейнера, потеряно SSH подключение), показывается как недоступный, и команда завершается с кодом 3.

Показать URL админ-панели Remnawave и имя администратора, и что Meridian управляет там против того что ваше для изменения.

meridian panel [--show-password]
ФлагПо умолчаниюОписание
--show-passwordТакже выведите пароль администратора

Правки на статус клиента, лимиты трафика, истечение и описания, и пользователи которых вы создали в панели выживают каждого применения. Правки узлов, профилей, Hosts, отрядов и шаблонов Meridian создала возвращаются при следующем применении; meridian plan показывает их сначала.

Удалить Meridian с сервера.

meridian teardown [SERVER] [--user USER] [--ssh-port PORT] [--yes]

При одиночном развёртывании сервера teardown удаляет всё, что создал Meridian: панель, узел, конфигурацию nginx, сертификаты, ретрансляторы и правила брандмауэра на сервере, а затем локальный cluster.yml и сохранённый профиль сервера. Docker, системные пакеты, настройки SSH и fail2ban остаются, а nginx продолжает работать, если он ещё обслуживает ваши собственные сайты. Также удаляет 3x-ui из Meridian 3.x. В многосерверном флоте, teardown отклоняет сервер, который всё ещё имеет роль в топологии.

--yes пропускает подтверждение; проверки ролей всё ещё запускаются первыми. Отклонение выходит 1. Неизвестное имя сервера, или ноль или несколько возможных целей выходит 2 вместо запроса.

Обновить CLI на последний выпуск своей основной версии на PyPI. Новая основная версия только анонсируется; --major переходит на неё после прочтения вами заметок о выпуске. Бета-версия следует за более новыми бета-версиями своей основной версии, а затем стабильным выпуском. Meridian пытается uv, pipx и pip, и только сообщает успех, когда активная команда meridian показывает новую версию. Выход 0 означает уже текущий или обновлённый; 3 означает обновление или его проверка не удалась. Обновление CLI не изменяет ваши серверы.

meridian update [--major]

Открыть Meridian Studio, экспериментальный браузерный UI, с его локальным Engine API. Сервер привязывается только к 127.0.0.1.

meridian studio [--port PORT] [--assets-dir DIRECTORY] [--no-open]
ФлагПо умолчаниюОписание
--port PORT0Локальный порт 0 по 65535; 0 выбирает свободный высокий порт
--assets-dir DIRECTORYупакованные ресурсыИспользовать встроенный директорий ресурсов Studio вместо упакованной копии
--no-openВыводить локальный URL без открытия браузера

Studio падает чётко, если порт занят или ресурсы отсутствуют. Явный директорий ресурсов должен содержать studio/index.html.

Проверить машиночитаемые контракты позади JSON вывода для скриптов и UI клиентов.

meridian api schemas [--json] [--include-schemas]
meridian api commands [--json] [--include-schemas]
meridian api schema NAME [--envelope|--json]
meridian api workflow NAME [--json]
ФлагПо умолчаниюОписание
--jsonВыдать каталог как конверт meridian.output/v1
--include-schemasВключить полные JSON Schemas (подразумевает JSON вывод) для api schemas или api commands
--envelope, --jsonОбернуть api schema NAME в конверт meridian.output/v1 вместо вывода сырой схемы

api schemas — выводит имена схем, такие как output-envelope, deploy-request, deploy-result, deploy-plan, plan-envelope, apply-envelope, client-list-envelope, fleet-status-envelope и event.

api commands — выводит контракты команд: argv, схемы конверта и данных, возможные статусы и результаты, значения кодов выхода, все опции, которые принимает команда (machine_flags), и interrupt_behavior. Аргументы, опции и описания читаются из самого CLI. Ctrl-C выходит 130 без конверта JSON (interrupt_behavior: "exit_130_without_envelope").

api schema NAME — выводит одну JSON Schema, например meridian api schema output-envelope.

api workflow NAME — выводит отрисовываемый UI поток работы, например meridian api workflow deploy --json.

Рассказать об Meridian ИИ-агенту или показать справку по одной команде.

meridian help [agents | COMMAND...]

meridian help agents выводит руководство в формате Markdown для ИИ-агентов: что делает Meridian, как связаны флот и его рассмотренная топология, где хранится состояние, правила безопасной работы с CLI (неинтерактивные флаги, конверты JSON, план перед применением, подтверждение перед удалением, ссылки как секреты), коды выхода и типовые задачи. Вывод всегда в чистом Markdown, так что агент может прочитать его из канала.

meridian help COMMAND показывает ту же справку, что и meridian COMMAND --help, например meridian help node add. Без аргументов выводит справку верхнего уровня. Неизвестная тема завершается с кодом 2.

Глобальные параметры идут перед командой, например meridian --quiet doctor. Параметры команд, такие как test --json, идут после неё.

ФлагОписание
--version, -vПоказать версию CLI и выйти
--verboseВключить отладочное логирование
--quiet, -qПодавить вывод прогресса
--lang CODEЯзык для мастера setup: en, ru, fa или zh (по умолчанию: сохранённый выбор, иначе спрашивается)
--jsonЗапросить конверт JSON из команды, которая его поддерживает; другие команды явно падают
--install-completionУстановить завершение оболочки для текущей оболочки
--show-completionВыводить скрипт завершения для текущей оболочки

JSON вывод использует конверт meridian.output/v1 (schema, command, operation_id, status, summary, data, warnings, errors). Он поддерживается каждой командой, у которой есть --json: deploy, plan, apply, check, test, probe, все команды client и route, статус/инвентарь флота, списки узла/ретранслятора и команды api. Глобальный --json и собственный --json команды взаимозаменяемы. Секреты отредактированы перед выходом JSON из процесса. Запустите meridian api commands --json для открытия контрактов.

Они повторяются по командам; каждая команда принимает только параметры, указанные в её собственном разделе.

ФлагИспользовано
SERVER аргументdeploy, check, scan, test, doctor, logs, teardown, node add, relay add, server add
--user, -u USERdeploy, check, node add, relay add, server add, scan, doctor, logs, teardown
--ssh-port PORTdeploy, check, node add, relay add, server add, scan, doctor, logs, teardown
--sni HOSTdeploy, check, node add, relay add, test, doctor
--domain DOMAINdeploy, check, node add, test

Команды client используют API панели напрямую и не принимают сервер. test запускается с вашего устройства и не использует SSH.

Сервер указывается первым, как в ssh: IP, сохранённое имя, user@host:port или local — запуск на текущей машине без SSH. --user и --ssh-port дополняют то, чего нет в цели, и не должны ей противоречить. Пустой пользователь или порт означают сохранённое значение, а если его нет — root и 22. Без сервера Meridian использует локальный режим (при запуске на развёрнутом сервере) или единственный сохранённый сервер. Если кандидатов нет или их несколько, команда завершается с кодом 2, а не задаёт вопрос.