mirror of
https://github.com/andrey271192/amnezia_web.git
synced 2026-09-20 14:41:59 +00:00
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>
150 lines
11 KiB
Markdown
150 lines
11 KiB
Markdown
# 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;
|
||
* небольшим группам пользователей одного сервера.
|
||
|
||
---
|
||
|
||
### Почему проект развивается
|
||
|
||
Независимое **open‑source** решение для тех, кому нужен удобный инструмент администрирования без перегруженных коммерческих панелей. Идея — упростить сопровождение своего узла и при этом не навязывать чужую инфраструктуру.
|
||
|
||
---
|
||
|
||
### Поддержка проекта
|
||
|
||
Ссылки на 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)
|