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>
9.4 KiB
Руководство по 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. |
Переключатель «Инстанс» не отображается
- Проверьте переменную контейнера панели:
docker inspect amnezia-admin --format '{{range .Config.Env}}{{println .}}{{end}}' | grep '^AWG_PROFILES=' - Если строки нет — один раз задайте JSON при установке (пример см. в основном README) или восстановите файл
/root/amnezia-admin.awg-profiles.jsonна VPS и снова запуститеinstall.shбез своегоAWG_PROFILES— установщик подставит значение из файла или из старого контейнера перед удалением. - После правок обновите страницу с жёстким сбросом кэша (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.