VpnPanel
Версия 1.0.0
Веб‑панель (сайт) для управления WireGuard, AmneziaWG 2.0 и панелями 3x-ui на VPS.
В отличие от BandjuPanel это не десктопное приложение через SSH, а обычный веб‑сайт с админкой, который крутится на сервере (Dokploy / Docker Compose) и хранит данные в PostgreSQL.
Что есть в 1.0
- Лендинг
/и админка/admin(логин из ENV) - Серверы WireGuard / AWG 2.0: SSH, установка VPN на VPS, синхронизация конфигов
- Клиенты WG/AWG: создать / вкл-выкл / удалить,
.confи QR - Панели 3x-ui: подключение по API, VLESS / WireGuard клиенты
- Выбор inbound’ов, доступных пользователям; клиенты, созданные через сайт
- 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. Доступ через домен Dokploy (сервис
panel, порт контейнера20000). - Вход:
/admin/login
Не публикуйте host-порт в compose — иначе будет port is already allocated.
В ENV Dokploy удалите PANEL_PORT, если он остался от старых деплоев.
Если Bad Gateway (502)
- В Dokploy Domain укажите сервис
panel, порт20000(не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:20000
Как связаны 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/ # миграции
Дальше (после 1.0)
- Пользовательский кабинет (не только admin)
- Статистика handshake / трафика
- Редактирование endpoint/DNS сервера из админки