Files
amnezia_web/docs/panel-guide.md
Андрей Бобырев 7f5fb921e6 feat: open community panel (read-only clients only)
Ship full install stack with .amnezia-panel-edition=community; docs and
footer point to Boosty/PRO. Managing peers, export, cascade and WARP
require private PRO build.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-14 21:53:15 +03:00

9.4 KiB
Raw Blame History

Руководство по Amnezia Admin WebUI

Краткий справочник по функциям, типичным проблемам и HTTP API.

Возможности

Блок в интерфейсе Назначение
Инстанс Переключение между профилями из AWG_PROFILES (разные контейнеры AmneziaWG / Legacy). Виден только если в контейнере панели задан JSON из двух и более профилей.
Время Отображение часов контейнера и браузера; синхронизация времени хоста VPS по SSH (если доступно).
Cloudflare WARP Необязательно. Вывод части клиентов в интернет через интерфейс warp в контейнере AWG. Если WARP не ставили — статус «Не установлен» нормален; панель и VPN без этого работают. Установка и удаление — скрипт scripts/warp-amnezia.sh на хосте (install / uninstall), подробности в основном README.
Новый клиент под каскад Создание нового peer на сервере с вашим Endpoint (промежуточный узел); выдача готового .conf.
Пользователи Вкл/выкл peer, удаление, переименование, даты отключения; экспорт .conf если в записи есть userData.last_config.

Переключатель «Инстанс» не отображается

  1. Проверьте переменную контейнера панели:
    docker inspect amnezia-admin --format '{{range .Config.Env}}{{println .}}{{end}}' | grep '^AWG_PROFILES='
    
  2. Если строки нет — один раз задайте JSON при установке (пример см. в основном README) или восстановите файл /root/amnezia-admin.awg-profiles.json на VPS и снова запустите install.sh без своего AWG_PROFILES — установщик подставит значение из файла или из старого контейнера перед удалением.
  3. После правок обновите страницу с жёстким сбросом кэша (Ctrl+Shift+R).

Лендинг не поднимается (порт 80 занят)

При ошибке bind :80 используйте при установке SKIP_LANDING=1 или LANDING_PORT=8081 — админка на HOST_PORT (например 8080) от этого не зависит.

Публичная страница и админка

  • http://IP:LANDING_PORT (часто 80) — статический nginx из каталога landing/: инструкция, переход в админку, напоминание написать администратору вашего сервера, дисклеймер. Ссылок на донат и автора репозитория здесь нет.
  • http://IP:HOST_PORT (часто 8080) — сама панель (public/). Футер со ссылками автора (GitHub, Boosty и т.д.) только здесь, внизу после таблицы клиентов.

Файл landing/admin-port.js пересобирается установщиком и задаёт порт админки для кнопки на лендинге.

Cloudflare WARP: нужно ли ставить

Нет, если обычного VPN достаточно. WARP — дополнительная опция «выход в интернет через Cloudflare» для отмеченных в панели клиентов (IPv4 вида 10.8.x.x/32).

Задача Действие
WARP не нужен Ничего не устанавливайте; раздел в вебе с текстом «Не установлен» можно игнорировать.
Включить WARP На VPS под root: bash scripts/warp-amnezia.sh install из каталога репозитория, затем настройка галочек в панели и «Применить» — см. README.
Полностью убрать WARP ./scripts/warp-amnezia.sh uninstall на хосте; учёт wgcf в /root/ при желании удалите вручную.

Скрытие разделов в панели (UI_HIDE_*)

Переменные контейнера amnezia-admin: UI_HIDE_SECTIONS (список users, warp, cascade) или отдельно UI_HIDE_USERS, UI_HIDE_WARP, UI_HIDE_CASCADE (1 / true). Подробности и пример — в таблице установки и разделе README про UI_HIDE_*.

  • warp — скрывает блок WARP; POST /api/warp/* → 403.
  • cascade — скрывает каскад; POST /api/clients/create-cascade → 403.
  • users — скрывает таблицу «Пользователи» и отладку awg show; GET /api/clients и остальные операции с клиентами остаются (скрыт только UI таблицы).

Конфигурации клиентов

  • Старые строки без last_config — полный .conf с сервера собрать нельзя (нет приватного ключа). Используйте приложение Amnezia или блок «Новый клиент под каскад» (новый ключ на сервере).
  • Экспорт по кнопкам — только если в clientsTable есть userData.last_config с полем config или client_priv_key.

Экспорт: имя файла и прямая ссылка

Ответ GET /api/clients/export-config отдаёт заголовок Content-Disposition: attachment; filename="…". В Node.js значение заголовка должно быть в ASCII: кириллическое имя клиента в приложении не попадает в имя файла как есть — используется безопасная подстановка (латиница из имени или короткий префикс от clientId), чтобы не было ошибки вида Invalid character in header content. Содержимое .conf при этом остаётся полным UTF-8 текстом.

Прямая ссылка в браузере работает при активной cookie-сессии после входа или с ?token=…, если задан EXPORT_CONFIG_SECRET.

HTTP API (все маршруты под /, кроме статики)

Требуют cookie-сессии после POST /api/login, если не указано иное.

Метод Путь Назначение
GET /health Проверка живости
GET /api/session Есть ли действующая сессия
POST /api/login { "password": "…" }
POST /api/logout Выход
POST /api/change-password Смена пароля
GET /api/protocols Текущий профиль, список инстансов, подсказка если профиль один
POST /api/protocol { "profileId": "…" } — смена инстанса
GET /api/clients Таблица клиентов и метаданные WARP
POST /api/clients/disable Выключить peer
POST /api/clients/enable Включить peer
POST /api/clients/delete Удалить
POST /api/clients/rename Переименовать
POST /api/clients/disconnect-date Даты отключения / расписание
GET/POST /api/clients/export-config Скачать .conf; GET — прямая ссылка (сессия); опционально ?token=… если задан EXPORT_CONFIG_SECRET
POST /api/clients/create-cascade { "endpointHost", "endpointPort?", "tunnelIp?", "clientName?", "profileId?" } — новый peer и файл .conf
POST /api/warp/host-setup Установка/удаление WARP на хосте по SSH: { "rootPassword", "cmd": "install" | "uninstall" } (как синхронизация времени; каталог скрипта — WARP_SSH_INSTALL_DIR)
POST /api/warp/start Поднять WARP
POST /api/warp/stop Остановить WARP
POST /api/warp/routing Политика по клиентам
GET /api/server-time Время и подсказки по поясам
GET /api/time-sync-capabilities Доступность синхронизации по SSH
POST /api/sync-host-time Запись времени на хост через SSH

Подробности переменных окружения — в таблице установки в README.