Files
amnezia_web/README.md
Андрей Бобырев 443baaeafb fix: enable client management in basic panel
After PRO removal, readOnlyClients stayed true and client API routes
still used requireProTier, blocking toggle/rename/dates/export in UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-05-30 05:02:23 +03:00

150 lines
11 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# amnezia_web
Веб‑панель **AmneziaWG** на своём VPS (**Docker**): таблица клиентов, статусы «в туннеле», AllowedIPs, несколько инстансов через **`AWG_PROFILES`**, часы сервера и браузера, смена пароля панели.
**Базовая открытая панель:** просмотр клиентов, **удаление** peer с сервера, раздел установки **Telegram MTProtoпрокси** (Docker), несколько инстансов через **`AWG_PROFILES`**, смена пароля. Вкл/выкл клиентов, даты, переименование, экспорт `.conf`, каскад, Cloudflare WARP и синхронизация времени хоста в этой версии **не поддерживаются**.
---
## Amnezia Web — зачем этот проект
**Безопасный доступ к интернету без сложной настройки панели**
**Amnezia Web** (`amnezia_web`) — это **веб‑панель для администрирования уже развёрнутого сервера AmneziaWG**: клиенты, статусы, несколько инстансов WireGuard на одном VPS (**`AWG_PROFILES`**), пароль доступа и дополнительные блоки в браузере — вместо ручной возни только через SSH и конфиги.
Проект ориентирован на тех, кому важны:
* приватность и контроль над своим узлом;
* стабильная работа привычного VPNстека Amnezia;
* понятный интерфейс без лишней боли в повседневном администрировании.
Установка панели и лендинга — **скриптом одной командой** в Docker; сам VPNконтейнер AmneziaWG вы обычно поднимаете своим способом (как уже делаете с экосистемой Amnezia).
---
### Что умеет Amnezia Web
* **Управление через браузер** — таблица клиентов AmneziaWG, время сервера и браузера, удаление peer, установка MTProtoпрокси.
* **Быстрое развёртывание панели** — образ админки и опционально страницы для пользователей через **`scripts/install.sh`**.
* **Приватность** — всё крутится **на вашем VPS**; доступ к панели ограничиваете паролем (и при желании сетью/TLS).
* **Удобство** — одно место для обзора клиентов и (в FREE) установки **MTProtoпрокси** из интерфейса.
* **Несколько инстансов AWG на одном хосте** — переключатель профилей через **`AWG_PROFILES`**.
* **Современный стек** — Docker, Node.js, веб‑интерфейс.
---
### Для кого этот проект
* администраторам своего VPS с AmneziaWG;
* тем, кому нужна простая панель поверх уже знакомого стека Amnezia;
* небольшим группам пользователей одного сервера.
---
### Почему проект развивается
Независимое **opensource** решение для тех, кому нужен удобный инструмент администрирования без перегруженных коммерческих панелей. Идея — упростить сопровождение своего узла и при этом не навязывать чужую инфраструктуру.
---
### Поддержка проекта
Ссылки на GitHub, Boosty, Ozon СБП и Telegram — **в конце этого README**. Также можно поставить ⭐ репозиторию и рассказать тем, кому будет полезно.
Спасибо всем, кто поддерживает развитие проекта.
---
## Скриншоты
Интерфейс: управление клиентами (вкл/выкл, переименование, даты, экспорт `.conf`), удаление peer и установка MTProtoпрокси. Каскад, Cloudflare WARP и синхронизация времени хоста — только при включённых proинструментах на сервере.
<p align="center">
<img src="docs/screenshots/panel-users-table.png" alt="Панель: пользователи AmneziaWG, выбор инстанса, время, статусы в туннеле" width="780"/>
<br/><br/>
<img src="docs/screenshots/panel-overview-password.png" alt="Панель: заголовок, подсказки, форма смены пароля" width="780"/>
<br/><br/>
<img src="https://i.postimg.cc/8CFFLhKN/Snimok-ekrana-2026-05-15-v-11-45-37.png"
</p>
---
## Установка
```bash
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
```
Смена порта (пример):
```bash
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh \
| sudo -E env HOST_PORT=8884 LANDING_PORT=8081 bash
```
---
## Обновление
Обычно достаточно:
```bash
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/install.sh | sudo bash
```
После сообщения **`→ Клонирование релиза …`** несколько минут **может ничего не печататься**: идёт `curl … | tar` с GitHub. Для **полосы прогресса**: `sudo INSTALL_SCRIPT_VERBOSE=1 bash` (или передайте переменную в окружение до `|`). Если обрывает по времени или «тишина» часами задайте таймауты: **`CURL_CONNECT_TIMEOUT`** (по умолчанию 30с к подключению), **`CURL_MAX_TIME`** (по умолчанию до 900с на загрузку), **`CURL_RETRY`**. Полный URL tar.gz можно подменить: **`GITHUB_REPO_URL_OVERRIDE`** (должен указывать на архив того же вида **`${REPO}-${BRANCH}.tar.gz`**, после распаковки каталог будет **`ИмяРепозитория-${BRANCH}`**).
Принудительная пересборка образа: **`NO_CACHE=1`**.
---
## Удаление
```bash
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web/main/scripts/uninstall.sh | sudo bash
```
---
## Частые проблемы
### Установка «зависла» на сообщении **`→ Клонирование релиза …`** и долго без вывода
Это этап **скачивания и распаковки** архива с GitHub. Запустите установщик с **`INSTALL_SCRIPT_VERBOSE=1`** (полоска загрузки `curl`). Задайте **`CURL_MAX_TIME`** если нужно усечь ожидание. При блокировках GitHub с хоста — зеркальный полный URL в **`GITHUB_REPO_URL_OVERRIDE`** (см. раздел «Обновление»).
### `SKIP_DOWNLOAD=1 bash scripts/install.sh` завершается сразу без вывода («нифига» не происходит)
В старых версиях под **`set -o pipefail`** подсчёт контейнеров через **`grep`** падал, если **нет ни одного запущенного имени `amnezia-awg…`**; отдельно тот же эффект давал пайплайн **`docker port … | head | awk`** при **остановленном** `amnezia-admin`: `docker inspect` ещё «видит» контейнер, а **`docker port` возвращает ошибку**. Скрипт обрывался до **«Сборка образа»**. Обновите **`scripts/install.sh`** до актуального из `main` или временно выполните **`docker rm -f amnezia-admin`** перед установкой.
### Лендинг: порт 80 занят
Если на хосте уже что-то слушает **TCP 80**, установщик сообщит об этом и, при дефолтном **`LANDING_PORT=80`**, сам попробует другой свободный порт (обычно начиная с **8081**). Либо явно: **`LANDING_PORT=8083`**, либо **`SKIP_LANDING=1`**.
### Раздел MTProto или вся панель: ошибка «Not found», API не отвечает
Чаще всего браузер бьётся не в **Node**‑процесс панели, а в **прокси** (nginx и т.п.) с неполным маппингом: **`/api/mtproto/*`**, **`/api/clients`** и остальное должны уходить на тот же upstream, что и **`/`** панели. Должен проксироваться **любой** путь под **`/api/`**, а не только отдельные location. На самой VPS **`curl -fsS http://127.0.0.1:ПОРТАНЕЛИ/health`** должен вернуть JSON с **`version`**. Если с localhost работает, а через домен — **404**, смотрите конфигурацию обратного прокси и TLS.
### 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](LICENSE).
---
## Поддержка проекта
---
-**GitHub:** [andrey271192/amnezia_web](https://github.com/andrey271192/amnezia_web)
- 💖 **Boosty:** [boosty.to/andrey27/donate](https://boosty.to/andrey27/donate)
- 💳 **Ozon Bank (СБП):** [ссылка](https://finance.ozon.ru/apps/sbp/ozonbankpay/019dc200-2a5d-7931-a619-782d285f6798)
- ✉️ **Telegram:** [@lot_andrey](https://t.me/lot_andrey)