mirror of
https://github.com/andrey271192/amnezia_web-PRO.git
synced 2026-11-04 00:43:15 +00:00
Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1be56c1f60 | ||
|
|
a843f300a7 |
8
00. НАЧНИ ОТСЮДА.md
Normal file
8
00. НАЧНИ ОТСЮДА.md
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# 00. НАЧНИ ОТСЮДА — amnezia_web-PRO
|
||||||
|
|
||||||
|
**Промпт для нового чата:**
|
||||||
|
> Проект «Открытые проекты/amnezia_web-PRO» — полностью открытая веб-панель Amnezia (Node, `server.js` + `public/`). Закрытой версии нет (старая — в `Архив/amnezia_web-PRO_test`). Прочитай `PROJECT_INDEX.md` и `09. История и грабли`. Тесты — на school-friends (сервер) и school-it-kruzhok (клиент) через svault. Релиз: тег + GitHub API, затем Gitea, Notes, новость в @PCAdministration ботом PCA_jarvis_bot (токен `TG_BOT_TOKEN` в `~/jarvis-ru-windows/.env`).
|
||||||
|
|
||||||
|
## Оглавление
|
||||||
|
- `PROJECT_INDEX.md` — что где лежит, установка
|
||||||
|
- `09. История и грабли` — оглавление записей 09.N
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
# 09. История и грабли
|
# 09. История и грабли
|
||||||
|
|
||||||
- [09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема](<09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема.md>) — 23.10.2026
|
- [09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема](<09.1 Версия 1.3.0 — протоколы с сайта, каскад, домен, тема.md>) — 23.10.2026
|
||||||
|
- [09.2 Версия 1.4.0 — Xray VLESS, всё открыто](<09.2 Версия 1.4.0 — Xray VLESS, всё открыто.md>) — 23.10.2026
|
||||||
- 04.10.2026 — проект переехал в папку-группу; код не менялся.
|
- 04.10.2026 — проект переехал в папку-группу; код не менялся.
|
||||||
|
|||||||
20
09.2 Версия 1.4.0 — Xray VLESS, всё открыто.md
Normal file
20
09.2 Версия 1.4.0 — Xray VLESS, всё открыто.md
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
# 09.2 Версия 1.4.0 — Xray VLESS-Reality, всё открыто (23.10.2026)
|
||||||
|
|
||||||
|
**Задача.** Перенести Xray/VLESS из закрытой панели, закрытую версию не развивать, убрать всё «платное».
|
||||||
|
|
||||||
|
**Сделано.**
|
||||||
|
- Убрана редакция community («только просмотр», баннер «купите PRO», `requireProTier`, `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*`). Все функции открыты.
|
||||||
|
- Xray VLESS-Reality в `server.js` (блок «Xray VLESS-Reality») и раздел на странице: установка (TCP-порт, сайт-маскировка), клиенты создать/выкл/вкл/удалить, ссылка `vless://`.
|
||||||
|
Образ собирается на сервере (alpine + Xray v26.3.27), контейнер `amnezia-xray`, файлы `/opt/amnezia/xray` в формате приложения Amnezia (`xray_*.key`, `clientsTable`). Выключенный клиент — убран из `server.json`, помечен `disabled` в `clientsTable`.
|
||||||
|
- Закрытая панель `amnezia_web-PRO_test` перенесена в `Архив/` (SSD и Notes), там файл «АРХИВ — почему».
|
||||||
|
|
||||||
|
**Проверено** на school-friends (сервер) + school-it-kruzhok (клиент xray-core): соединение есть (HTTP 200 через socks), выключение клиента рвёт связь, включение возвращает. Тестовое удалено.
|
||||||
|
|
||||||
|
## Грабли
|
||||||
|
- **СИМПТОМ:** установка Xray «Не удалось получить ключи x25519». **ПРИЧИНА:** новый Xray пишет `Password (PublicKey): …` вместо `Public key:`. **ИСПРАВЛЕНИЕ:** регэксп `(?:Public\s*key|Password)[^:\n]*:`. **ПРОВЕРИТЬ:** `docker run --rm --entrypoint /usr/bin/xray amnezia-xray x25519`.
|
||||||
|
- **СИМПТОМ:** форма установки видна при установленном Xray. **ПРИЧИНА:** CSS `.instance-form` перебивает атрибут `hidden`. **ИСПРАВЛЕНИЕ:** `style.display`.
|
||||||
|
- Оба школьных сервера выходят в интернет через один NAT — проверка «по IP» не отличает туннель; проверять выключением клиента.
|
||||||
|
|
||||||
|
## Осталось
|
||||||
|
- Gitea (192.168.88.153) — Proxmox .5 был не в сети: `git push gitea main --tags`.
|
||||||
|
- QR-кода для vless нет (ссылка копируется) — добавить, если попросят.
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
| Заметки | Apple Notes → `МОИ ПРОЕКТЫ` → папка `amnezia_web-PRO` |
|
| Заметки | Apple Notes → `МОИ ПРОЕКТЫ` → папка `amnezia_web-PRO` |
|
||||||
| GitHub (публичный) | https://github.com/andrey271192/amnezia_web-PRO |
|
| GitHub (публичный) | https://github.com/andrey271192/amnezia_web-PRO |
|
||||||
| Ветка прода | `main` |
|
| Ветка прода | `main` |
|
||||||
| Тестовая копия рядом | `/Volumes/ssd/Мои проекты/Закрытые продукты/amnezia_web-PRO_test/` |
|
| Старая закрытая панель (архив, не развивается) | `/Volumes/ssd/Мои проекты/Архив/amnezia_web-PRO_test/` |
|
||||||
|
|
||||||
Путь `/Volumes/andrey/Мои проекты/...` из старого промпта синхронизации **не существует** —
|
Путь `/Volumes/andrey/Мои проекты/...` из старого промпта синхронизации **не существует** —
|
||||||
актуальная копия только на `/Volumes/ssd`.
|
актуальная копия только на `/Volumes/ssd`.
|
||||||
|
|||||||
50
README.md
50
README.md
@@ -5,6 +5,7 @@
|
|||||||
## Что нового в 1.4.0
|
## Что нового в 1.4.0
|
||||||
|
|
||||||
- **Xray VLESS‑Reality** — раздел «Xray VLESS‑Reality»: установка с выбором TCP‑порта и сайта‑маскировки, клиенты (создать, выключить/включить, удалить), ссылка `vless://` для Amnezia VPN, v2rayNG, Hiddify, Streisand, Happ. Файлы в `/opt/amnezia/xray` в том же формате, что у приложения Amnezia.
|
- **Xray VLESS‑Reality** — раздел «Xray VLESS‑Reality»: установка с выбором TCP‑порта и сайта‑маскировки, клиенты (создать, выключить/включить, удалить), ссылка `vless://` для Amnezia VPN, v2rayNG, Hiddify, Streisand, Happ. Файлы в `/opt/amnezia/xray` в том же формате, что у приложения Amnezia.
|
||||||
|
- **Установщик сам ставит Docker** на чистом сервере.
|
||||||
- **Всё открыто:** убрана редакция «community / только просмотр» и переменные `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*` — все функции доступны всем.
|
- **Всё открыто:** убрана редакция «community / только просмотр» и переменные `AMNEZIA_EDITION`, `COMMUNITY_UPGRADE_*` — все функции доступны всем.
|
||||||
|
|
||||||
## Что нового в 1.3.0
|
## Что нового в 1.3.0
|
||||||
@@ -25,6 +26,55 @@
|
|||||||
- **Светлая / тёмная тема** — кнопка «◐ Тема» в шапке (по умолчанию как в системе).
|
- **Светлая / тёмная тема** — кнопка «◐ Тема» в шапке (по умолчанию как в системе).
|
||||||
- Старые установки не затрагиваются: контейнеры, поставленные приложением Amnezia, остаются как были.
|
- Старые установки не затрагиваются: контейнеры, поставленные приложением Amnezia, остаются как были.
|
||||||
|
|
||||||
|
## Быстрый старт: от пустого сервера до VPN за 10 минут
|
||||||
|
|
||||||
|
**Что нужно:** VPS с Ubuntu 22.04/24.04 или Debian 12 (1 ГБ ОЗУ хватает), доступ root по SSH. Docker ставить не нужно — установщик поставит его сам.
|
||||||
|
|
||||||
|
**1. Установите панель.** Зайдите на сервер по SSH и выполните:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://raw.githubusercontent.com/andrey271192/amnezia_web-PRO/main/scripts/install.sh | sudo bash
|
||||||
|
```
|
||||||
|
|
||||||
|
В конце будет строка `Админ-панель: http://IP:8080`.
|
||||||
|
|
||||||
|
**2. Откройте порты** в фаерволе хостинга (панель управления VPS) и, если включён, в `ufw`:
|
||||||
|
|
||||||
|
| Порт | Зачем |
|
||||||
|
|---|---|
|
||||||
|
| `8080/tcp` | админ-панель |
|
||||||
|
| `80/tcp` | страница для пользователей (необязательно, `SKIP_LANDING=1` — без неё) |
|
||||||
|
| UDP-порт AmneziaWG, который выберете на шаге 4 (например `41010/udp`) | VPN AmneziaWG |
|
||||||
|
| TCP-порт Xray, если будете ставить (например `443/tcp`) | VPN Xray |
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo ufw allow 8080/tcp && sudo ufw allow 41010/udp # пример, если ufw включён
|
||||||
|
```
|
||||||
|
|
||||||
|
**3. Войдите** на `http://IP:8080` — пароль **`admin`**. Сразу смените его в блоке «Сменить пароль».
|
||||||
|
|
||||||
|
**4. Разверните протокол.** Раздел «Протоколы / инстансы» → выберите вариант → порт (например `41010`) → «Развернуть инстанс». Какой выбрать:
|
||||||
|
- **AmneziaWG 2.0** — по умолчанию, для телефонов и ПК (приложение Amnezia VPN);
|
||||||
|
- **AmneziaWG 3.1 / 3.0** — самые новые, нужна свежая версия приложения;
|
||||||
|
- **AmneziaWG 1.x** — для роутеров Keenetic / OpenWrt;
|
||||||
|
- **WireGuard** — для любых WG-клиентов, без маскировки.
|
||||||
|
|
||||||
|
Если на сервере уже стоит VPN, поставленный приложением Amnezia, — шаг пропустите: панель найдёт его сама.
|
||||||
|
|
||||||
|
**5. Создайте клиента.** Блок «Новый клиент» → имя → «Создать и скачать .conf». Файл импортируйте в Amnezia VPN (на телефоне/ПК: «+» → «Файл с настройками»).
|
||||||
|
|
||||||
|
**6. (по желанию) Xray VLESS‑Reality** — если AmneziaWG у провайдера режут. Раздел «Xray VLESS‑Reality» → порт TCP (`443`, если свободен) и сайт‑маскировка → «Установить Xray» (~1 минута) → «Создать» клиента — ссылка `vless://` скопируется. Вставьте её в Amnezia VPN, v2rayNG, Hiddify, Streisand или Happ («+» → «Из буфера обмена»).
|
||||||
|
|
||||||
|
**7. Свой домен (по желанию).** В «Протоколы / инстансы» → «Домен или IP сервера в конфигах клиентов» → «Сохранить адрес». Без него в конфиги подставляется IP.
|
||||||
|
|
||||||
|
**Обновление** — та же команда из шага 1: клиенты, пароль и настройки сохраняются. **Удаление** — см. «Удаление одной командой».
|
||||||
|
|
||||||
|
**Если не работает:**
|
||||||
|
- «Рукопожатие есть, интернета нет» или нет рукопожатия — не открыт UDP-порт у хостинга (шаг 2).
|
||||||
|
- Панель не открывается — не открыт `8080/tcp`; проверка на сервере: `curl -s localhost:8080/health`.
|
||||||
|
- Xray: «TCP-порт занят» — выберите другой порт (например `8443`) и откройте его.
|
||||||
|
- Логи панели: `sudo docker logs --tail 50 amnezia-admin`.
|
||||||
|
|
||||||
## Что открывается по какому порту
|
## Что открывается по какому порту
|
||||||
|
|
||||||
| Адрес | Назначение |
|
| Адрес | Назначение |
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "amnezia-admin",
|
"name": "amnezia-admin",
|
||||||
"version": "1.4.0",
|
"version": "1.4.1",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "amnezia_web-PRO — веб-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
"description": "amnezia_web-PRO — веб-панель AmneziaWG: несколько инстансов, WARP, каскад/Endpoint, экспорт .conf (Docker)",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
|
||||||
<script>try{var t=localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");document.documentElement.dataset.theme=t}catch(e){}</script>
|
<script>try{var t=localStorage.getItem("theme")||(matchMedia("(prefers-color-scheme: light)").matches?"light":"dark");document.documentElement.dataset.theme=t}catch(e){}</script>
|
||||||
<link rel="stylesheet" href="/styles.css?v=1.4.0">
|
<link rel="stylesheet" href="/styles.css?v=1.4.1">
|
||||||
</head>
|
</head>
|
||||||
<body class="page">
|
<body class="page">
|
||||||
<aside class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат">
|
<aside class="panel-promo-strip" role="complementary" aria-label="Поддержка и донат">
|
||||||
@@ -460,6 +460,6 @@
|
|||||||
</div>
|
</div>
|
||||||
</dialog>
|
</dialog>
|
||||||
|
|
||||||
<script src="/app.js?v=1.4.0" type="module"></script>
|
<script src="/app.js?v=1.4.1" type="module"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -21,8 +21,9 @@ need_root() {
|
|||||||
|
|
||||||
need_docker() {
|
need_docker() {
|
||||||
command -v docker >/dev/null 2>&1 || {
|
command -v docker >/dev/null 2>&1 || {
|
||||||
echo "Ошибка: нужен Docker."
|
echo "→ Docker не найден — ставлю официальным скриптом get.docker.com..."
|
||||||
exit 1
|
curl -fsSL https://get.docker.com | sh || { echo "Ошибка: не удалось поставить Docker."; exit 1; }
|
||||||
|
systemctl enable --now docker 2>/dev/null || true
|
||||||
}
|
}
|
||||||
docker info >/dev/null 2>&1 || {
|
docker info >/dev/null 2>&1 || {
|
||||||
echo "Ошибка: демон Docker не отвечает."
|
echo "Ошибка: демон Docker не отвечает."
|
||||||
|
|||||||
@@ -2626,10 +2626,7 @@ app.post("/api/settings", requireAuth, async (req, res) => {
|
|||||||
|
|
||||||
app.get("/api/protocols", requireAuth, (req, res) => {
|
app.get("/api/protocols", requireAuth, (req, res) => {
|
||||||
const rt = runtimeForRequest(req);
|
const rt = runtimeForRequest(req);
|
||||||
const hintSingle =
|
const hintSingle = "";
|
||||||
getProfiles().length < 2
|
|
||||||
? "Сейчас один инстанс: при установке не передали AWG_PROFILES или не восстановился снимок. Задайте JSON профилей и запустите install.sh — он сохранится в /root/amnezia-admin.awg-profiles.json."
|
|
||||||
: "";
|
|
||||||
res.json({
|
res.json({
|
||||||
currentId: rt.profile.id,
|
currentId: rt.profile.id,
|
||||||
currentLabel: rt.profile.label,
|
currentLabel: rt.profile.label,
|
||||||
|
|||||||
Reference in New Issue
Block a user