4.2 KiB
4.2 KiB
VpnPanel
Веб‑панель (сайт) для управления WireGuard и AmneziaWG 2.0 на VPS.
В отличие от BandjuPanel это не десктопное приложение через SSH, а обычный веб‑сайт с админкой, который крутится на сервере (Dokploy / Docker Compose) и хранит данные в PostgreSQL.
Что уже есть
- Лендинг
/ - Админка
/admin(логин из ENV) - Серверы WireGuard и AWG 2.0 (создаются при старте)
- Клиенты: создать / вкл-выкл / удалить
- Скачивание
.confи QR‑код - Запись серверных конфигов в volumes
/data/wireguardи/data/amneziawg - PostgreSQL + Alembic миграции
- Docker Compose под Dokploy
Docker Compose (Dokploy)
Проект деплоится через docker-compose.yml:
| Сервис | Назначение |
|---|---|
postgres |
PostgreSQL 16 |
panel |
веб‑сайт + админка (FastAPI) |
- В Dokploy создайте приложение Docker Compose из этого репозитория.
- Compose file:
docker-compose.yml - Задайте Environment Variables (минимум):
SECRET_KEY=очень-длинный-секрет
ADMIN_USERNAME=admin
ADMIN_PASSWORD=надежный-пароль
ADMIN_EMAIL=admin@example.com
PUBLIC_HOST=ваш-домен-или-ip
POSTGRES_PASSWORD=надежный-пароль-бд
- Deploy. Панель: порт
4000(или домен через Traefik в Dokploy). - Вход:
/admin/login
Если Bad Gateway (502)
- В Dokploy Domain укажите сервис
panel, порт4000(неpostgres). - Откройте логи сервиса
panel— должны быть строкиDatabase is readyиStarting uvicorn. - Ошибка
Name or service not knownзначитpanelне видит хост БД:panelиpostgresсвязаны через внутреннюю сетьvpn_internal;panelтакже вdokploy-networkдля домена;- если БД внешняя (Dokploy Postgres) — задайте
POSTGRES_HOSTна её хост.
- Redeploy после правок.
Админ при каждом старте синхронизируется из ENV.
Файл .env на сервере не обязателен — все переменные читаются из Compose / Dokploy UI.
Локально
cp .env.example .env
docker compose up --build -d
docker compose ps
docker compose logs -f panel
Откройте http://localhost:4000
Как связаны VPN‑демоны
Панель:
- Хранит ключи и пиров в Postgres
- Генерирует клиентские конфиги (и AWG‑параметры Jc/Jmin/Jmax/S1/S2/H1–H4)
- Пишет серверный
wg0.conf/awg0.confв shared volume
Дальше volume монтируется в контейнер WireGuard / AmneziaWG (или на хост), и интерфейс поднимается отдельно. Это сделано специально: панель — веб‑сайт, а VPN‑ядро можно менять независимо.
Пример идеи для следующего шага (не включено в MVP):
# wireguard:
# image: linuxserver/wireguard
# volumes:
# - wg_data:/config
# ports:
# - "51820:51820/udp"
Структура
app/
main.py # FastAPI
models.py # Admin, VpnServer, VpnClient
routers/ # public + admin UI
services/ # ключи, конфиги WG/AWG
templates/ # HTML сайта и админки
docker-compose.yml
Dockerfile
alembic/ # миграции
Дальше
- Редактирование endpoint/DNS сервера из админки
- Подключение XRay / Hysteria2 / MTProto
- Статистика handshake / трафика
- Пользовательский кабинет (не только admin)