Backend (Go): - Добавлен полный функционал создания сайтов - Добавлен функционал удаления сайтов - Новые API методы в admin.go: - Добавлен шаблон стартовой страницы - Добавлена функция DecodeBase64 Исправления критических ошибок: - Исправлена работа wildcard алиасов (*.domain.com) в handler.go - Исправлены ошибки "файл не найден" при создании файлов Frontend (JavaScript + HTML + CSS): - Добавлена страница создания сайта - Добавлена кнопка "Удалить сайт" в редактировании - Мелкие доработки стилей Build: - Обновлён build_admin.ps1 - добавлен шаг генерации биндингов (wails generate module) Fixes: - #fix Wildcard алиасы (*.domain.com) теперь работают корректно - #fix Удалён порт из host при проверке алиасов - #fix Приоритет точных доменов над wildcard - #fix Ошибки "файл не найден" при создании сайтов/vAccess - #fix Секция добавления сайта теперь скрывается при навигации
🚀 vServer - Функциональный веб-сервер на Go
Функциональный веб-сервер с поддержкой HTTP/HTTPS, MySQL, PHP и веб-админкой
👨💻 Автор: Суманеев Роман
🌐 Сайт: voxsel.ru
📞 Контакт: VK
🎯 Возможности
🌐 Веб-сервер
- ✅ HTTP/HTTPS сервер с поддержкой SSL сертификатов
- ✅ Proxy сервер для проксирования запросов
- ✅ PHP сервер со встроенной поддержкой PHP 8
- ✅ Статический контент для размещения веб-сайтов
- ✅ vAccess - система контроля доступа для сайтов и прокси
🗄️ База данных
- ✅ MySQL сервер с полной поддержкой
🔧 Администрирование
- ✅ GUI Админка - Wails desktop приложение с современным интерфейсом
- ✅ Управление сервисами - запуск/остановка HTTP, HTTPS, MySQL, PHP, Proxy
- ✅ Редактор сайтов и прокси - визуальное управление конфигурацией
- ✅ vAccess редактор - настройка правил доступа через интерфейс
🏗️ Архитектура
vServer/
├── 🎯 main.go # Точка входа основного сервера
│
├── 🔧 Backend/ # Основная логика
│ │
│ ├── admin/ # | 🎛️ GUI Админка (Wails) |
│ │ ├── go/ # | Go backend для админки |
│ │ └── frontend/ # | Современный UI |
│ │
│ ├── config/ # | 🔧 Конфигурационные файлы Go |
│ ├── tools/ # | 🛠️ Утилиты и хелперы |
│ └── WebServer/ # | 🌐 Модули веб-сервера |
│
├── 🌐 WebServer/ # Веб-контент и конфигурация
│ │
│ ├── cert/ # | 🔐 SSL сертификаты |
│ ├── soft/ # | 📦 MySQL и PHP |
│ ├── tools/ # | 📊 Логи и инструменты |
│ └── www/ # | 🌍 Веб-контент |
│
├── 📄 go.mod # Go модули
├── 🔨 build_admin.ps1 # Сборка GUI админки
└── 🚀 vSerf.exe # GUI админка (после сборки)
🚀 Установка и запуск
🔨 Сборка основного сервера
./build_admin.ps1
Скрипт автоматически:
- Проверит/создаст
go.mod - Установит зависимости (
go mod tidy) - Проверит/установит Wails CLI
- Соберёт приложение →
vSerf.exe
📦 Подготовка компонентов
- Распакуйте архив
WebServer/soft/soft.rarв папкуWebServer/soft/ - Запустите
vServer.exe- основной сервер - Запустите
vSerf.exe- GUI админка для управления
🔑 Важно: Пароль MySQL по умолчанию -
root
📦 Готовый проект для пользователя
Для работы необходимы:
- 📄
vSerf.exe- GUI админка (опционально) - 📁
WebServer/- конфигурация и ресурсы
💡 Папка
Backend/и файлыgo.mod,main.goнужны только для разработки
⚙️ Конфигурация
Настройка через WebServer/config.json:
{
"Site_www": [
{
"name": "Локальный сайт",
"host": "127.0.0.1",
"alias": ["localhost"],
"status": "active",
"root_file": "index.html",
"root_file_routing": true
}
],
"Proxy_Service": [
{
"Enable": true,
"ExternalDomain": "git.example.ru",
"LocalAddress": "127.0.0.1",
"LocalPort": "3333",
"ServiceHTTPSuse": false,
"AutoHTTPS": true
}
],
"Soft_Settings": {
"mysql_port": 3306, "mysql_host": "127.0.0.1",
"php_port": 8000, "php_host": "localhost",
"proxy_enabled": true
}
}
Основные параметры:
Site_www- настройки веб-сайтовProxy_Service- конфигурация прокси-сервисовSoft_Settings- порты и хосты сервисов (MySQL, PHP, proxy_enabled)
🌐 Alias с поддержкой Wildcard
Для сайтов поддерживается wildcard (*) в алиасах:
{
"alias": [
"*.test.ru", // Все поддомены voxsel.ru
"*.test.com", // Все поддомены voxsel.com
"test.com", // Точное совпадение
"api.*" // api с любой зоной
],
"host": "test.ru"
}
Примеры работы wildcard:
*.example.com→api.example.com,admin.example.com,test.example.com✅example.*→example.com,example.ru,example.org✅*example.com→test-example.com,my-example.com✅*→ любой домен ✅ (осторожно!)example.com→ толькоexample.com✅ (без wildcard)
🔄 Прокси-сервер
Прокси-сервер позволяет перенаправлять внешние запросы на локальные сервисы.
Параметры Proxy_Service:
Enable- включить/отключить прокси (true/false)ExternalDomain- внешний домен для перехвата запросовLocalAddress- локальный адрес сервисаLocalPort- порт локального сервисаServiceHTTPSuse- использовать HTTPS для подключения к локальному сервису (true/false)AutoHTTPS- автоматически перенаправлять HTTP → HTTPS (true/false)
Пример множественных прокси:
"Proxy_Service": [
{
"Enable": true,
"ExternalDomain": "git.example.com",
"LocalAddress": "127.0.0.1",
"LocalPort": "3000",
"ServiceHTTPSuse": false,
"AutoHTTPS": true
},
{
"Enable": false,
"ExternalDomain": "api.example.com",
"LocalAddress": "127.0.0.1",
"LocalPort": "8080",
"ServiceHTTPSuse": false,
"AutoHTTPS": false
}
]
📖 Подробное описание параметров:
ServiceHTTPSuse - протокол подключения к локальному сервису:
false- vServer подключается к локальному сервису по HTTP (по умолчанию)true- vServer подключается к локальному сервису по HTTPS
AutoHTTPS - автоматический редирект на HTTPS:
true- все HTTP запросы автоматически перенаправляются на HTTPS (рекомендуется)false- разрешены как HTTP, так и HTTPS запросы
Схема работы:
Клиент (HTTP/HTTPS) → vServer (проверка AutoHTTPS) → Локальный сервис (ServiceHTTPSuse)
Применение изменений:
- Введите команду
config_reloadв консоли для перезагрузки конфигурации - Изменения применятся к новым запросам без перезапуска сервера
🔒 vAccess - Система контроля доступа
vServer включает гибкую систему контроля доступа vAccess для сайтов и прокси-сервисов.
📁 Расположение конфигураций
Для сайтов:
WebServer/www/{host}/vAccess.conf
Для прокси:
WebServer/tools/Proxy_vAccess/{domain}_vAccess.conf
⚙️ Основные возможности
- ✅ IP-фильтрация - разрешение/блокировка по IP адресам
- ✅ Контроль путей - ограничение доступа к определённым директориям
- ✅ Фильтрация файлов - блокировка по расширениям (*.php, *.exe)
- ✅ Исключения - гибкие правила с exceptions_dir
- ✅ Кастомные ошибки - редиректы или страницы ошибок
📝 Пример конфигурации
# Разрешаем админку только с локальных IP
type: Allow
path_access: /admin/*, /api/admin/*
ip_list: 127.0.0.1, 192.168.1.100
url_error: 404
# Блокируем опасные файлы в uploads
type: Disable
type_file: *.php, *.exe, *.sh
path_access: /uploads/*
url_error: 404
📚 Документация
Подробная документация по vAccess:
- Для сайтов: см.
WebServer/www/{host}/vAccess.conf(примеры в файле) - Для прокси: см.
WebServer/tools/Proxy_vAccess/README.md
📝 Логирование
Все логи сохраняются в WebServer/tools/logs/:
- 🌐
logs_http.log- HTTP запросы (включая прокси P-HTTP) - 🔒
logs_https.log- HTTPS запросы (включая прокси P-HTTPS) - 🔄
logs_proxy.log- Ошибки прокси-сервера - 🗄️
logs_mysql.log- MySQL операции - 🐘
logs_php.log- PHP ошибки - ⚙️
logs_config.log- Конфигурация - 🔐
logs_vaccess.log- Контроль доступа для сайтов - 🔐
logs_vaccess_proxy.log- Контроль доступа для прокси
🔐 SSL Сертификаты
Установка сертификата
- Откройте каталог
WebServer/ - Создайте папку
cert/(если её нет) - Создайте папку с именем вашего домена или IP-адреса
- Поместите в неё файлы сертификатов с точными именами:
certificate.crt private.key ca_bundle.crt - Сертификат будет автоматически загружен при запуске сервера
📁 Структура сертификатов
WebServer/
└── cert/
├── example.com/ # Основной домен
│ ├── certificate.crt
│ ├── private.key
│ └── ca_bundle.crt
│
└── sub.example.com/ # Поддомен (опционально)
├── certificate.crt
├── private.key
└── ca_bundle.crt
🎯 Работа с поддоменами
Важно: Если для поддомена не создана отдельная папка в cert/, то автоматически будет использоваться сертификат родительского домена.
Примеры:
- ✅ Запрос к
example.com→ использует сертификат изcert/example.com/ - ✅ Запрос к
sub.example.com(папка существует) → используетcert/sub.example.com/ - ✅ Запрос к
sub.example.com(папка НЕ существует) → используетcert/example.com/
Это удобно для wildcard-сертификатов: достаточно одного сертификата в папке основного домена для всех поддоменов! 🌟