Улучшение фронта
This commit is contained in:
340
README.md
340
README.md
@@ -1,9 +1,9 @@
|
||||
# 🚀 vServer - Функциональный веб-сервер на Go
|
||||
**🇺🇸 [English version](README_EN.md)**
|
||||
> Функциональный веб-сервер с поддержкой HTTP/HTTPS, MySQL, PHP и GUI-админкой
|
||||
> Функциональный веб-сервер с поддержкой HTTP/HTTPS, MySQL, PHP, Let's Encrypt и GUI-админкой
|
||||
|
||||
**👨💻 Автор:** Суманеев Роман
|
||||
**🌐 Сайт:** [voxsel.ru](https://voxsel.ru)
|
||||
**🌐 Сайт:** [vserf.ru](https://vserf.ru)
|
||||
**📞 Контакт:** [VK](https://vk.com/felias)
|
||||
|
||||
## 🎯 Возможности
|
||||
@@ -13,287 +13,119 @@
|
||||
|
||||
### 🌐 Веб-сервер
|
||||
- ✅ **HTTP/HTTPS** сервер с поддержкой SSL сертификатов
|
||||
- ✅ **Proxy сервер** для проксирования запросов
|
||||
- ✅ **PHP сервер** со встроенной поддержкой PHP 8
|
||||
- ✅ **Статический контент** для размещения веб-сайтов
|
||||
- ✅ **vAccess** - система контроля доступа для сайтов и прокси
|
||||
- ✅ **Let's Encrypt** — автоматический выпуск и обновление SSL
|
||||
- ✅ **Proxy сервер** — обратный прокси для локальных сервисов
|
||||
- ✅ **PHP 8** — встроенная поддержка (FastCGI пул)
|
||||
- ✅ **MySQL** — встроенный сервер базы данных
|
||||
- ✅ **vAccess** — система контроля доступа
|
||||
- ✅ **Wildcard** — поддержка wildcard-алиасов и сертификатов
|
||||
|
||||
### 🗄️ База данных
|
||||
- ✅ **MySQL сервер** с полной поддержкой
|
||||
|
||||
### 🔧 Администрирование
|
||||
- ✅ **GUI Админка** - Wails desktop приложение с современным интерфейсом
|
||||
- ✅ **Управление сервисами** - запуск/остановка HTTP, HTTPS, MySQL, PHP, Proxy
|
||||
- ✅ **Редактор сайтов и прокси** - визуальное управление конфигурацией
|
||||
- ✅ **vAccess редактор** - настройка правил доступа через интерфейс
|
||||
### 🎛️ GUI Админка
|
||||
- ✅ **Управление сервисами** — запуск/остановка HTTP, HTTPS, MySQL, PHP, Proxy
|
||||
- ✅ **Управление сайтами** — создание, редактирование, удаление
|
||||
- ✅ **Управление прокси** — визуальная настройка reverse proxy
|
||||
- ✅ **SSL менеджер** — выпуск, перевыпуск, загрузка сертификатов
|
||||
- ✅ **vAccess редактор** — настройка правил доступа с drag-and-drop
|
||||
- ✅ **Настройки** — конфигурация портов MySQL, PHP, прокси, ACME
|
||||
- ✅ **Тёмная/Светлая тема** и **RU/EN** локализация
|
||||
|
||||
## 🏗️ Архитектура
|
||||
|
||||
```
|
||||
vServer/
|
||||
├── 🎯 main.go # Точка входа основного сервера
|
||||
├── 🎯 main.go # Точка входа (Wails)
|
||||
│
|
||||
├── 🔧 Backend/ # Основная логика
|
||||
│ │
|
||||
│ ├── admin/ # | 🎛️ GUI Админка (Wails) |
|
||||
│ │ ├── go/ # | Go backend для админки |
|
||||
│ │ └── frontend/ # | Современный UI |
|
||||
│ │
|
||||
│ ├── config/ # | 🔧 Конфигурационные файлы Go |
|
||||
│ ├── tools/ # | 🛠️ Утилиты и хелперы |
|
||||
│ └── WebServer/ # | 🌐 Модули веб-сервера |
|
||||
│ ├── admin/
|
||||
│ │ ├── go/ # Go backend админки
|
||||
│ │ └── API.md # Документация API
|
||||
│ ├── config/ # Конфигурация Go
|
||||
│ ├── tools/ # Утилиты и хелперы
|
||||
│ └── WebServer/ # Модули веб-сервера
|
||||
│ └── acme/ # Let's Encrypt
|
||||
│
|
||||
├── 🌐 WebServer/ # Веб-контент и конфигурация
|
||||
│ │
|
||||
│ ├── cert/ # | 🔐 SSL сертификаты |
|
||||
│ ├── soft/ # | 📦 MySQL и PHP |
|
||||
│ ├── tools/ # | 📊 Логи и инструменты |
|
||||
│ └── www/ # | 🌍 Веб-контент |
|
||||
├── 🖥️ front_vue/ # Vue 3 фронтенд админки
|
||||
│ └── src/
|
||||
│ ├── Core/ # API, stores, i18n, router
|
||||
│ └── Design/ # Компоненты, views, стили
|
||||
│
|
||||
├── 📄 go.mod # Go модули
|
||||
├── 🔨 build_admin.ps1 # Сборка GUI админки
|
||||
└── 🚀 vSerf.exe # GUI админка (после сборки)
|
||||
├── 🌐 WebServer/ # Рабочие файлы сервера
|
||||
│ ├── config.json # Конфигурация
|
||||
│ ├── cert/ # SSL сертификаты
|
||||
│ ├── soft/ # MySQL и PHP
|
||||
│ ├── tools/ # Логи, error page, vAccess
|
||||
│ └── www/ # Веб-контент (сайты)
|
||||
│
|
||||
├── 🔨 build_admin.ps1 # Скрипт сборки
|
||||
└── 🚀 vSerf.exe # Готовое приложение
|
||||
```
|
||||
|
||||
## 🚀 Установка и запуск
|
||||
|
||||
### 🔨 Сборка основного сервера
|
||||
### Для пользователей
|
||||
|
||||
1. Скачайте последний [релиз](https://github.com/AiVoxel/vServer/releases)
|
||||
2. Распакуйте архив `WebServer/soft/soft.rar` в папку `WebServer/soft/`
|
||||
3. Запустите `vSerf.exe` — откроется GUI админка
|
||||
4. Сервер стартует автоматически, управляйте через интерфейс
|
||||
|
||||
> 🔑 **Пароль MySQL по умолчанию:** `root`
|
||||
|
||||
### Для разработчиков
|
||||
|
||||
```powershell
|
||||
# Сборка (проверит/установит Go, Node.js, Wails)
|
||||
./build_admin.ps1
|
||||
```
|
||||
|
||||
Скрипт автоматически:
|
||||
- Проверит/создаст `go.mod`
|
||||
- Установит зависимости (`go mod tidy`)
|
||||
- Проверит/установит Wails CLI
|
||||
- Соберёт приложение → `vSerf.exe`
|
||||
- Проверит зависимости (Go, Node.js, npm) — предложит установить через `winget`
|
||||
- Установит Go модули и Wails CLI
|
||||
- Соберёт Vue фронтенд
|
||||
- Скомпилирует → `vSerf.exe`
|
||||
|
||||
### 📦 Подготовка компонентов
|
||||
1. Распакуйте архив `WebServer/soft/soft.rar` в папку `WebServer/soft/`
|
||||
2. Запустите `vServer.exe` - основной сервер
|
||||
3. Запустите `vSerf.exe` - GUI админка для управления
|
||||
## 🔒 vAccess — Контроль доступа
|
||||
|
||||
> 🔑 **Важно:** Пароль MySQL по умолчанию - `root`
|
||||
Гибкая система правил для сайтов и прокси. Настраивается через GUI админку (раздел vAccess).
|
||||
|
||||
### 📦 Готовый проект для пользователя
|
||||
Для работы необходимы:
|
||||
- 📄 `vSerf.exe` - GUI админка (опционально)
|
||||
- 📁 `WebServer/` - конфигурация и ресурсы
|
||||
|
||||
> 💡 Папка `Backend/` и файлы `go.mod`, `main.go` нужны только для разработки
|
||||
|
||||
## ⚙️ Конфигурация
|
||||
|
||||
Настройка через `WebServer/config.json`:
|
||||
|
||||
```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 (`*`) в алиасах:
|
||||
|
||||
```json
|
||||
{
|
||||
"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)
|
||||
|
||||
**Пример множественных прокси:**
|
||||
```json
|
||||
"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
|
||||
- ✅ **Кастомные ошибки** - редиректы или страницы ошибок
|
||||
|
||||
### 📝 Пример конфигурации
|
||||
|
||||
```conf
|
||||
# Разрешаем админку только с локальных 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` - Контроль доступа для прокси
|
||||
**Возможности:**
|
||||
- IP-фильтрация — разрешение/блокировка по IP
|
||||
- Контроль путей — ограничение доступа к директориям
|
||||
- Фильтрация файлов — блокировка по расширениям
|
||||
- Исключения — пути, к которым правило не применяется
|
||||
- Кастомные ошибки — редиректы или страницы ошибок
|
||||
|
||||
## 🔐 SSL Сертификаты
|
||||
|
||||
### Установка сертификата
|
||||
|
||||
1. Откройте каталог `WebServer/`
|
||||
2. Создайте папку `cert/` (если её нет)
|
||||
3. Создайте папку с именем вашего домена или IP-адреса
|
||||
4. Поместите в неё файлы сертификатов с **точными** именами:
|
||||
```
|
||||
certificate.crt
|
||||
private.key
|
||||
ca_bundle.crt
|
||||
```
|
||||
5. Сертификат будет автоматически загружен при запуске сервера
|
||||
|
||||
### 📁 Структура сертификатов
|
||||
### Автоматически (Let's Encrypt)
|
||||
Включите ACME в настройках → сертификаты выпускаются и обновляются автоматически.
|
||||
|
||||
### Вручную
|
||||
Загрузите через GUI админку (раздел SSL менеджер) или поместите файлы:
|
||||
```
|
||||
WebServer/
|
||||
└── cert/
|
||||
├── example.com/ # Основной домен
|
||||
│ ├── certificate.crt
|
||||
│ ├── private.key
|
||||
│ └── ca_bundle.crt
|
||||
│
|
||||
└── sub.example.com/ # Поддомен (опционально)
|
||||
├── certificate.crt
|
||||
├── private.key
|
||||
└── ca_bundle.crt
|
||||
WebServer/cert/{domain}/
|
||||
├── certificate.crt
|
||||
├── private.key
|
||||
└── ca_bundle.crt
|
||||
```
|
||||
|
||||
### 🎯 Работа с поддоменами
|
||||
> 💡 **Wildcard:** один сертификат в папке основного домена покрывает все поддомены.
|
||||
|
||||
**Важно:** Если для поддомена не создана отдельная папка в `cert/`, то автоматически будет использоваться сертификат родительского домена.
|
||||
## 📝 Логирование
|
||||
|
||||
**Примеры:**
|
||||
- ✅ Запрос к `example.com` → использует сертификат из `cert/example.com/`
|
||||
- ✅ Запрос к `sub.example.com` (папка существует) → использует `cert/sub.example.com/`
|
||||
- ✅ Запрос к `sub.example.com` (папка НЕ существует) → использует `cert/example.com/`
|
||||
Логи в `WebServer/tools/logs/`:
|
||||
|
||||
**Это удобно для wildcard-сертификатов:** достаточно одного сертификата в папке основного домена для всех поддоменов! 🌟
|
||||
| Файл | Содержимое |
|
||||
|------|------------|
|
||||
| `logs_http.log` | HTTP запросы |
|
||||
| `logs_https.log` | HTTPS запросы |
|
||||
| `logs_proxy.log` | Ошибки прокси |
|
||||
| `logs_mysql.log` | MySQL операции |
|
||||
| `logs_php.log` | PHP ошибки |
|
||||
| `logs_config.log` | Конфигурация |
|
||||
| `logs_vaccess.log` | Контроль доступа |
|
||||
| `logs_acme.log` | Let's Encrypt |
|
||||
|
||||
## 📡 API
|
||||
|
||||
Документация всех методов API админки: [`Backend/admin/API.md`](Backend/admin/API.md)
|
||||
|
||||
Reference in New Issue
Block a user