amnezia_web
Открытая базовая веб-панель для просмотра клиентов AmneziaWG на своём VPS: таблица клиентов, статус «в туннеле», AllowedIPs, несколько инстансов через AWG_PROFILES, часы сервера и браузера. В редакции FREE/community можно удалить клиента с сервера (peer и строка в таблице).
Нет в интерфейсе и по API в FREE: включение/выключение peer, правка дат отключения, переименование, экспорт .conf, «Новый клиент под каскад», Cloudflare WARP, синхронизация времени хоста по SSH — это версия PRO (приватный репозиторий amnezia_web-PRO, доступ подписчикам).
Редакция community задаётся автоматически файлом .amnezia-panel-edition в корне репозитория (community) или переменной окружения AMNEZIA_EDITION=community в контейнере. Кнопка и текст про подписку настраиваются COMMUNITY_UPGRADE_URL и COMMUNITY_UPGRADE_PITCH.
Безопасность: доступ к Docker-сокету в контейнере панели эквивалентен root на хосте — используйте сложный пароль и ограничьте доступ по IP / TLS. Поле установки PRO по GitHub‑токену (ALLOW_COMMUNITY_GITHUB_ACTIVATION=1) отключено по умолчанию: при включении любой авторизованный администратор может запускать произвольный install.sh на хосте через Docker‑сокет.
Справочник по типичным сбоям и API (в т.ч. для PRO): в полной документации репозитория PRO.
Установка одной командой
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
Форк или ветка:
GITHUB_REPO=вы/репо BRANCH=main curl -fsSL https://raw.githubusercontent.com/вы/репо/main/scripts/install.sh | sudo bash
Уже скачали проект:
cd /opt/amnezia-admin && chmod +x scripts/install.sh && sudo SKIP_DOWNLOAD=1 bash scripts/install.sh
Переменные окружения и sudo
Если передаёте AWG_PROFILES или ADMIN_PASSWORD в одной строке с curl, используйте sudo -E bash, иначе sudo не увидит переменные. Альтернатива — записать JSON профилей в /root/amnezia-admin.awg-profiles.json и запустить обычный curl … | sudo bash. Подробнее см. историю коммитов и зеркальный README в репозитории PRO.
Важные переменные
| Переменная | По умолчанию | Назначение |
|---|---|---|
GITHUB_REPO |
andrey271192/amnezia_web |
Архив для установки |
HOST_PORT |
8080 |
Порт панели |
AWG_CONTAINER |
amnezia-awg2 |
Контейнер WG по умолчанию |
AWG_PROFILES |
(нет) | Несколько инстансов; см. примеры в репозитории PRO |
COMMUNITY_UPGRADE_URL |
Страница подписки PRO на Boosty (зашита в код по умолчанию) | Переопределите, если смените уровень подписки |
COMMUNITY_UPGRADE_PITCH |
(текст по умолчанию в коде) | Текст под заголовком базовой версии |
SKIP_LANDING |
0 |
1 — без лендинга на порту 80 |
ALLOW_COMMUNITY_GITHUB_ACTIVATION |
0 |
1 — в редакции community показывать ввод GitHub-токена и запускать приватный install.sh (доступ к репо с Contents Read / repo; высокая чувствительность, см. раздел безопасности) |
COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL |
https://raw.githubusercontent.com/andrey271192/amnezia_web-pro/main/scripts/install.sh |
Сырой URL scripts/install.sh в вашем приватном репозитории PRO |
COMMUNITY_INSTALL_FETCH_MS |
60000 |
Таймаут HTTP при скачивании установщика из GitHub |
PRIVATE_INSTALL_SCRIPT_MAX_BYTES |
2097152 |
Максимальный размер скачанного скрипта (байты) |
Чтобы включить форму установки из панели, задайте в контейнере AMNEZIA_EDITION=community и ALLOW_COMMUNITY_GITHUB_ACTIVATION=1 (install.sh: добавьте -e ALLOW_COMMUNITY_GITHUB_ACTIVATION=1 или пересоздайте контейнер после правки переменных). URL приватного install.sh при необходимости переопределите через COMMUNITY_PRIVATE_INSTALL_SCRIPT_URL.
Важно: при запуске curl … | bash переменная должна быть экспортирована, иначе её не увидит install.sh:
export ALLOW_COMMUNITY_GITHUB_ACTIVATION=1
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo -E bash
(Под не-root добавьте sudo; sudo -E сохраняет экспортированные переменные.)
Остальные переменные совместимы с образом панели (см. Dockerfile / server.js в этом репозитории).
Обновление
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
Принудительная пересборка образа: NO_CACHE=1.
Удаление
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/uninstall.sh | sudo bash
Частые проблемы
Пропало поле «токен GitHub» под плашкой FREE
Форма показывается только если в контейнере ALLOW_COMMUNITY_GITHUB_ACTIVATION=1 (и редакция community). Переменную нужно хотя бы один раз задать с export (см. выше). Начиная с актуального install.sh, при следующем обновлении панели ALLOW_COMMUNITY_*, COMMUNITY_UPGRADE_*, AMNEZIA_EDITION и ряд других значений подтягиваются из предыдущего контейнера amnezia-admin, чтобы не терять настройку.
Bind for 0.0.0.0:8080 failed: port is already allocated у amnezia-admin-pro
На 8080 уже слушает FREE‑панель (amnezia-admin). Перед запуском образа PRO (docker compose, amnezia-web-pro-deploy, свой скрипт): docker rm -f amnezia-admin, затем снова up. Два контейнера панели на один и тот же порт не поднять.
Лендинг: порт 80 занят
Если на хосте уже что-то слушает TCP 80, установщик сообщит об этом и, при дефолтном LANDING_PORT=80, сам попробует другой свободный порт (обычно начиная с 8081). Либо явно: LANDING_PORT=8083, либо SKIP_LANDING=1.
AmneziaWG Legacy: удаление клиента не срабатывает (wg0.conf is world accessible / No such device)
Панель синхронизирует живой интерфейс через wg-quick strip + syncconf. У Legacy конфиг часто /opt/amnezia/awg/wg0.conf, интерфейс — wg0, не awg0. В актуальном коде интерфейс выводится из имени файла (wg0.conf → wg0). Если путь другой — задайте в профиле AWG_IFACE / в AWG_PROFILES поле iface. Предупреждение про world-accessible: перед применением конфига файл на стороне контейнера выставляется в chmod 600.
Лицензия
MIT — см. LICENSE.