No description
- Go 36.4%
- JavaScript 31.8%
- CSS 21.9%
- HTML 9.9%
| cmd/server | ||
| internal | ||
| web | ||
| go.mod | ||
| go.sum | ||
| README.md | ||
VPN Manager
VPN Manager — веб-приложение для управления VPN конфигурациями (WireGuard, OpenVPN, IKEv2, 3Proxy, MTProto Proxy) с поддержкой Telegram бота.
Переписано на Go с дизайном в стиле PackerHub Dashboard.
📦 Структура проекта
vpn-manager/
├── cmd/
│ └── server/
│ └── main.go # Точка входа
├── internal/
│ ├── api/
│ │ └── handlers.go # HTTP handlers
│ ├── config/
│ │ └── config.go # Env конфигурация
│ ├── db/
│ │ └── sqlite.go # SQLite операции
│ ├── models/
│ │ └── models.go # Структуры данных
│ └── bot/
│ ├── bot.go # Telegram bot
│ └── handlers.go # Handlers бота
├── web/
│ ├── static/
│ │ ├── css/styles.css # Стили (Graphite glassmorphism)
│ │ └── js/app.js # Frontend логика
│ └── templates/
│ └── index.html # Главная страница
├── go.mod
└── README.md
🚀 Установка и запуск
1. Требования
- Go 1.22+
- SQLite3 (для CGO)
2. Клонирование и сборка
git clone <repo-url>
cd vpn-manager
# Установка зависимостей
go mod tidy
# Обычная сборка
go build -o server cmd/server/main.go
# Запуск
./server -addr :8080
3. Статическая сборка (Alpine Linux)
# На Alpine:
apk add --no-cache go gcc musl-dev sqlite-dev
# Сборка статического бинарника
CGO_ENABLED=1 GOOS=linux GOARCH=amd64 \
go build -ldflags='-linkmode external -extldflags "-static"' \
-o server-static cmd/server/main.go
# Проверка
file server-static
# ELF 64-bit LSB executable, x86-64, statically linked
ldd server-static
# not a dynamic executable
⚙️ Конфигурация
Все настройки через переменные окружения или флаги командной строки:
Переменные окружения
| Переменная | Описание | По умолчанию |
|---|---|---|
VPNMGR_ADDR |
Адрес и порт сервера | :8080 |
VPNMGR_DB |
Путь к SQLite БД | vpn_manager.db |
VPNMGR_SECRET_KEY |
Секретный ключ для сессий | change-me-in-production |
VPNMGR_API_TOKEN |
Bearer токен для API | (пусто) |
VPNMGR_WEB_PATH |
Префикс пути | (пусто) |
VPNMGR_TELEGRAM_BOT_TOKEN |
Токен Telegram бота | (из БД) |
Пути к конфигам
| Переменная | Описание | По умолчанию |
|---|---|---|
VPNMGR_PATH_WIREGUARD |
Путь к .conf файлам | /etc/wireguard/configs/ |
VPNMGR_PATH_OVPN |
Путь к .ovpn файлам | /etc/openvpn/client/ |
VPNMGR_PATH_IKEV2 |
Папки IKEv2 | /etc/ipsec.d/ikev2/ |
VPNMGR_PATH_PROXY |
Путь к прокси конфигам | /etc/3proxy/configs/ |
VPNMGR_PATH_MTPROTO |
Путь к MTProto | /etc/mtg/ |
Примеры запуска
# Простой запуск
./server
# Свой порт
./server -addr :8090
# Своя БД
./server -db /data/vpn.db
# С префиксом
./server -web-path /vpn
# Через env
export VPNMGR_ADDR=":8090"
export VPNMGR_DB="/data/vpn.db"
export VPNMGR_PATH_WIREGUARD="/opt/wireguard/configs/"
./server
🔑 Первый вход
- URL:
http://localhost:8080 - Пароль по умолчанию:
admin
Важно: Смените пароль после первого входа в админ-панели.
🔌 API Endpoints
Аутентификация
POST /api/login— Вход (JSON:{password: "..."})POST /api/logout— Выход
Конфиги
GET /api/configs/{protocol}— Список конфигов (wireguard, ovpn, ikev2, proxy, mtproto)GET /api/configs/{protocol}/{name}— Получить содержимое конфигаGET /api/download/{protocol}/{name}— Скачать файл- Для IKEv2:
?format=mobileconfig|p12|sswan
- Для IKEv2:
Теги
GET /api/tags/{protocol}/{name}— Получить тегиPOST /api/tags/{protocol}/{name}— Добавить тег ({tag: "..."})DELETE /api/tags/{protocol}/{name}— Удалить тег ({tag: "..."})
Инструкции
GET /api/instructions/{protocol}— Получить инструкциюPOST /api/instructions/{protocol}— Сохранить инструкцию ({content: "..."})
MTProto
GET /api/mtproto/generate-secret?domain=...— Сгенерировать секретPOST /api/mtproto/{name}— Сохранить конфигурацию
Загрузка
POST /api/upload-image— Загрузить изображение (multipart/form-data)
Админ
POST /api/admin/password— Сменить пароль ({password: "..."})GET /api/admin/telegram— Получить настройки TelegramPOST /api/admin/telegram— Сохранить настройки Telegram ({token, chat_id})GET /api/admin/logs— Журнал входов
🤖 Telegram Bot
- Создайте бота через @BotFather
- Получите токен
- Введите токен и chat_id в админ-панели
- Бот запустится автоматически
Команды бота:
/help— Справка/list— Список конфигов/status— Статус системы
🎨 Темы
- Темная тема (по умолчанию)
- Светлая тема
- Переключение через кнопку в хедере
- Сохранение выбора в localStorage
📱 Поддерживаемые протоколы
| Протокол | Скачивание | Просмотр | QR-код | Теги | Инструкции |
|---|---|---|---|---|---|
| WireGuard | .conf | Да | Да | Да | Да |
| OpenVPN | .ovpn | Да | Нет | Да | Да |
| IKEv2 | .mobileconfig, .p12, .conf | Да | Нет | Да | Да |
| 3Proxy | .txt | Да | Нет | Да | Да |
| MTProto | JSON конфиг | Да | Нет | Да | Да |
🔒 Безопасность
- Пароли хешируются SHA-256
- Bearer token авторизация
- Логирование попыток входа
- CORS защита
- Sanitization имен файлов (защита от path traversal)
🐛 Траблшутинг
"binding to port failed"
# Проверьте что порт свободен
lsof -i :8080
# Запустите на другом порте
./server -addr :8090
"database is locked"
# Удалите старую БД если есть проблемы
rm vpn_manager.db
./server
CORS ошибки
- Убедитесь что frontend и backend на одном домене
- Проверьте заголовки через
curl -I http://localhost:8080/api/configs/wireguard
📝 Лицензия
MIT