Files
vpwg/README.md
T
orohiandCursor bac78dd3fc first commit
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-27 08:18:58 +03:00

111 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
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 VPN Share Panel
Система управления гостевыми VPN-ссылками для Amnezia Web Panel.
## Требования
- PHP 8.0+
- MySQL 8.0+
- cURL (расширение PHP)
- Amnezia Web Panel (установленная и настроенная)
## Установка
1. Скопируйте файлы на веб-сервер (Apache/Nginx с поддержкой PHP).
2. Создайте базу данных MySQL и пользователя:
```sql
CREATE DATABASE amnezia_share CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
3. Скопируйте `config.sample.php` в `config.php` и заполните параметры подключения к БД.
4. Выполните SQL-миграции из папки `sql/`:
```bash
mysql -u user -p amnezia_share < sql/users.sql
mysql -u user -p amnezia_share < sql/site_settings.sql
mysql -u user -p amnezia_share < sql/share_links.sql
mysql -u user -p amnezia_share < sql/share_link_creations.sql
mysql -u user -p amnezia_share < sql/panel_server_labels.sql
```
5. Откройте `install.php` в браузере — создайте первого администратора.
6. Войдите в админку (`admin/index.php`) и настройте:
- **URL панели Amnezia** и **API-токен** (Настройки)
- **Названия серверов** и **флаги стран** (Серверы)
- **Протоколы** для каждого сервера (Серверы)
## Подключение Pocket ID (OIDC)
Pocket ID — OIDC-провайдер с авторизацией через passkey (без паролей).
### Настройка в Pocket ID
1. Откройте админку Pocket ID → OIDC Clients → создайте нового клиента.
2. Укажите **Callback URL**:
```
https://your-domain.com/oidc_callback.php
```
3. Скопируйте **Client ID** и **Client Secret**.
### Настройка в панели
1. Откройте **Настройки** в админке.
2. В блоке **Pocket ID (OIDC)** заполните:
- **URL Pocket ID** — адрес вашего Pocket ID (например `https://id.example.com`)
- **Client ID** — скопированный из Pocket ID
- **Client Secret** — секрет клиента
3. Нажмите «Сохранить Pocket ID».
4. На странице входа появится кнопка **«Войти через Pocket ID»**.
### Логика авторизации
- Имя пользователя из Pocket ID (`preferred_username`) сопоставляется с `username` в таблице `users`.
- Если пользователей в базе нет — первый вошедший через Pocket ID автоматически становится администратором.
- Если пользователь не найден — доступ запрещён (админ должен создать учётную запись с таким именем).
## Структура проекта
```
├── admin/
│ ├── index.php — Панель управления
│ ├── share_links.php — Управление ссылками
│ ├── server_labels.php — Серверы: названия, флаги, протоколы
│ ├── server_traffic_notices.php — Уведомления о трафике
│ ├── settings.php — Настройки (панель + Pocket ID)
│ └── admin_layout.php — Общий шаблон админки
├── includes/
│ ├── amnezia_settings.php — Настройки сайта и Pocket ID
│ ├── auth.php — Авторизация и CSRF
│ ├── bootstrap.php — Инициализация
│ ├── db.php — Подключение к MySQL
│ ├── panel_http.php — HTTP-запросы к Amnezia Panel API
│ ├── share_repo.php — Логика ссылок и конфигов
│ └── share_downloads.php — Генерация файлов для скачивания
├── share.php — Гостевая страница (создание конфигов)
├── share_servers.php — API: список серверов для гостя
├── oidc_callback.php — Callback для Pocket ID OIDC
├── login.php — Вход администратора
├── index.php — Редирект на admin/
└── config.php — Конфигурация БД (не в git)
```
## Гостевая ссылка
Формат: `share.php?k=<32-символьный токен>`
Пользователь по ссылке:
1. Выбирает сервер (с флагами стран и бейджами протоколов)
2. Выбирает тип подключения (WireGuard / AmneziaWG 2)
3. Получает конфигурацию (файл, QR-код, текст)
4. Может перенести конфиг на другой сервер без потери лимита