395 lines
11 KiB
Markdown
395 lines
11 KiB
Markdown
# 📡 vServer Admin API
|
||
|
||
API панели управления vServer. Все методы вызываются через Wails IPC биндинги.
|
||
|
||
> **Доступ из фронтенда:** `window.go.admin.App.MethodName()`
|
||
|
||
---
|
||
|
||
## 📋 Содержание
|
||
|
||
- [Сервисы](#-сервисы)
|
||
- [Сайты](#-сайты)
|
||
- [Прокси](#-прокси)
|
||
- [Сертификаты](#-сертификаты)
|
||
- [Конфигурация](#-конфигурация)
|
||
- [vAccess](#-vaccess)
|
||
- [Типы данных](#-типы-данных)
|
||
- [События](#-события)
|
||
|
||
---
|
||
|
||
## 🔧 Сервисы
|
||
|
||
### `GetAllServicesStatus()`
|
||
Возвращает статусы всех сервисов.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `AllServicesStatus`
|
||
|
||
```json
|
||
{
|
||
"http": { "name": "HTTP", "status": true, "port": "80", "info": "" },
|
||
"https": { "name": "HTTPS", "status": true, "port": "443", "info": "" },
|
||
"mysql": { "name": "MySQL", "status": true, "port": "3306","info": "" },
|
||
"php": { "name": "PHP", "status": true, "port": "8000","info": "" },
|
||
"proxy": { "name": "Proxy", "status": false, "port": "", "info": "" }
|
||
}
|
||
```
|
||
|
||
### `CheckServicesReady()`
|
||
Проверяет, готовы ли все основные сервисы (HTTP, HTTPS, MySQL, PHP).
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `bool`
|
||
|
||
---
|
||
|
||
### `StartServer()`
|
||
Запускает все сервисы (HTTP, HTTPS, PHP, MySQL, SSL).
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Server started"`
|
||
|
||
### `StopServer()`
|
||
Останавливает все сервисы.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Server stopped"`
|
||
|
||
### `RestartAllServices()`
|
||
Перезапускает все сервисы с перезагрузкой конфига и сертификатов.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"All services restarted"`
|
||
|
||
---
|
||
|
||
### `StartHTTPService()` / `StopHTTPService()`
|
||
Управление HTTP сервером (порт 80).
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"HTTP started"` / `"HTTP stopped"`
|
||
|
||
### `StartHTTPSService()` / `StopHTTPSService()`
|
||
Управление HTTPS сервером (порт 443).
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"HTTPS started"` / `"HTTPS stopped"`
|
||
|
||
### `StartMySQLService()` / `StopMySQLService()`
|
||
Управление MySQL сервером.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"MySQL started"` / `"MySQL stopped"`
|
||
|
||
### `StartPHPService()` / `StopPHPService()`
|
||
Управление PHP FastCGI пулом.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"PHP started"` / `"PHP stopped"`
|
||
|
||
### `EnableProxyService()` / `DisableProxyService()`
|
||
Включение/отключение прокси-сервиса. Сохраняет изменение в конфиг.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Proxy enabled"` / `"Proxy disabled"`
|
||
|
||
### `EnableACMEService()` / `DisableACMEService()`
|
||
Включение/отключение ACME (Let's Encrypt). Сохраняет изменение в конфиг.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"ACME enabled"` / `"ACME disabled"`
|
||
|
||
---
|
||
|
||
## 🌐 Сайты
|
||
|
||
### `GetSitesList()`
|
||
Получает список всех сайтов.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `[]SiteInfo`
|
||
|
||
```json
|
||
[
|
||
{
|
||
"name": "My Site",
|
||
"host": "example.com",
|
||
"alias": ["www.example.com"],
|
||
"status": "active",
|
||
"root_file": "index.html",
|
||
"root_file_routing": false,
|
||
"auto_create_ssl": true
|
||
}
|
||
]
|
||
```
|
||
|
||
### `CreateNewSite(siteJSON)`
|
||
Создаёт новый сайт. Создаёт папку, конфиг и шаблон index.html.
|
||
|
||
- **Параметры:** `siteJSON: string` — JSON строка с данными `SiteInfo`
|
||
- **Возвращает:** `string` — `"Site created successfully"` или `"Error: ..."`
|
||
|
||
### `DeleteSite(host)`
|
||
Удаляет сайт (папку и запись из конфига).
|
||
|
||
- **Параметры:** `host: string` — домен сайта
|
||
- **Возвращает:** `string` — `"Site deleted successfully"` или `"Error: ..."`
|
||
|
||
### `UpdateSiteCache()`
|
||
Обновляет кэш статусов сайтов.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Cache updated"`
|
||
|
||
### `OpenSiteFolder(host)`
|
||
Открывает папку сайта в проводнике Windows.
|
||
|
||
- **Параметры:** `host: string` — домен сайта
|
||
- **Возвращает:** `string` — `"Folder opened"` или `"Error: ..."`
|
||
|
||
---
|
||
|
||
## 🔀 Прокси
|
||
|
||
### `GetProxyList()`
|
||
Получает список всех прокси-сервисов.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `[]ProxyInfo`
|
||
|
||
```json
|
||
[
|
||
{
|
||
"enable": true,
|
||
"external_domain": "app.example.com",
|
||
"local_address": "127.0.0.1",
|
||
"local_port": "3000",
|
||
"service_https_use": false,
|
||
"auto_https": true,
|
||
"auto_create_ssl": true,
|
||
"status": "active"
|
||
}
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## 🔒 Сертификаты
|
||
|
||
### `GetCertInfo(domain)`
|
||
Получает информацию о сертификате для домена.
|
||
|
||
- **Параметры:** `domain: string`
|
||
- **Возвращает:** `CertInfo`
|
||
|
||
```json
|
||
{
|
||
"domain": "example.com",
|
||
"issuer": "Let's Encrypt",
|
||
"not_before": "2025-01-01T00:00:00Z",
|
||
"not_after": "2025-03-31T00:00:00Z",
|
||
"days_left": 60,
|
||
"is_expired": false,
|
||
"has_cert": true,
|
||
"dns_names": ["example.com", "www.example.com"]
|
||
}
|
||
```
|
||
|
||
### `GetAllCertsInfo()`
|
||
Получает информацию о всех сертификатах.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `[]CertInfo`
|
||
|
||
### `ObtainSSLCertificate(domain)`
|
||
Получает SSL сертификат через Let's Encrypt для указанного домена.
|
||
|
||
- **Параметры:** `domain: string`
|
||
- **Возвращает:** `string` — `"SSL certificate obtained successfully for ..."` или `"Error: ..."`
|
||
|
||
### `ObtainAllSSLCertificates()`
|
||
Получает сертификаты для всех доменов с флагом `auto_create_ssl: true`.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Completed: X success, Y errors"`
|
||
|
||
### `UploadCertificate(host, certType, certDataBase64)`
|
||
Загружает сертификат вручную.
|
||
|
||
- **Параметры:**
|
||
- `host: string` — домен
|
||
- `certType: string` — тип файла (`"cert"` или `"key"`)
|
||
- `certDataBase64: string` — содержимое файла в Base64
|
||
- **Возвращает:** `string` — `"Certificate uploaded successfully"` или `"Error: ..."`
|
||
|
||
### `DeleteCertificate(domain)`
|
||
Удаляет сертификат для домена.
|
||
|
||
- **Параметры:** `domain: string`
|
||
- **Возвращает:** `string` — `"Certificate deleted successfully"` или `"Error: ..."`
|
||
|
||
### `ReloadSSLCertificates()`
|
||
Перезагружает все SSL сертификаты.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"SSL certificates reloaded"`
|
||
|
||
---
|
||
|
||
## ⚙️ Конфигурация
|
||
|
||
### `GetConfig()`
|
||
Возвращает текущую конфигурацию сервера.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `object` — полный объект конфигурации
|
||
|
||
### `SaveConfig(configJSON)`
|
||
Сохраняет конфигурацию в файл и перезагружает.
|
||
|
||
- **Параметры:** `configJSON: string` — JSON строка с конфигурацией
|
||
- **Возвращает:** `string` — `"Config saved"` или `"Error: ..."`
|
||
|
||
### `ReloadConfig()`
|
||
Перезагружает конфигурацию из файла.
|
||
|
||
- **Параметры:** нет
|
||
- **Возвращает:** `string` — `"Config reloaded"`
|
||
|
||
---
|
||
|
||
## 🛡️ vAccess
|
||
|
||
### `GetVAccessRules(host, isProxy)`
|
||
Получает правила доступа для сайта или прокси.
|
||
|
||
- **Параметры:**
|
||
- `host: string` — домен
|
||
- `isProxy: bool` — `true` для прокси, `false` для сайта
|
||
- **Возвращает:** `VAccessConfig`
|
||
|
||
```json
|
||
{
|
||
"rules": [
|
||
{
|
||
"type": "allow",
|
||
"type_file": [".php", ".html"],
|
||
"path_access": ["/admin"],
|
||
"ip_list": ["192.168.1.0/24"],
|
||
"exceptions_dir": ["/public"],
|
||
"url_error": "/403.html"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
### `SaveVAccessRules(host, isProxy, configJSON)`
|
||
Сохраняет правила доступа.
|
||
|
||
- **Параметры:**
|
||
- `host: string` — домен
|
||
- `isProxy: bool` — `true` для прокси, `false` для сайта
|
||
- `configJSON: string` — JSON строка с `VAccessConfig`
|
||
- **Возвращает:** `string` — `"vAccess saved"` или `"Error: ..."`
|
||
|
||
---
|
||
|
||
## 📦 Типы данных
|
||
|
||
### `ServiceStatus`
|
||
```json
|
||
{
|
||
"name": "string",
|
||
"status": "bool",
|
||
"port": "string",
|
||
"info": "string"
|
||
}
|
||
```
|
||
|
||
### `AllServicesStatus`
|
||
```json
|
||
{
|
||
"http": "ServiceStatus",
|
||
"https": "ServiceStatus",
|
||
"mysql": "ServiceStatus",
|
||
"php": "ServiceStatus",
|
||
"proxy": "ServiceStatus"
|
||
}
|
||
```
|
||
|
||
### `SiteInfo`
|
||
```json
|
||
{
|
||
"name": "string",
|
||
"host": "string",
|
||
"alias": ["string"],
|
||
"status": "string",
|
||
"root_file": "string",
|
||
"root_file_routing": "bool",
|
||
"auto_create_ssl": "bool"
|
||
}
|
||
```
|
||
|
||
### `ProxyInfo`
|
||
```json
|
||
{
|
||
"enable": "bool",
|
||
"external_domain": "string",
|
||
"local_address": "string",
|
||
"local_port": "string",
|
||
"service_https_use": "bool",
|
||
"auto_https": "bool",
|
||
"auto_create_ssl": "bool",
|
||
"status": "string"
|
||
}
|
||
```
|
||
|
||
### `CertInfo`
|
||
```json
|
||
{
|
||
"domain": "string",
|
||
"issuer": "string",
|
||
"not_before": "string",
|
||
"not_after": "string",
|
||
"days_left": "int",
|
||
"is_expired": "bool",
|
||
"has_cert": "bool",
|
||
"dns_names": ["string"]
|
||
}
|
||
```
|
||
|
||
### `VAccessRule`
|
||
```json
|
||
{
|
||
"type": "string",
|
||
"type_file": ["string"],
|
||
"path_access": ["string"],
|
||
"ip_list": ["string"],
|
||
"exceptions_dir": ["string"],
|
||
"url_error": "string"
|
||
}
|
||
```
|
||
|
||
### `VAccessConfig`
|
||
```json
|
||
{
|
||
"rules": ["VAccessRule"]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 📡 События (Wails Events)
|
||
|
||
### `service:changed`
|
||
Эмитится каждые 500мс с текущими статусами сервисов.
|
||
|
||
- **Данные:** `AllServicesStatus`
|
||
|
||
### `server:already_running`
|
||
Эмитится при запуске, если vServer уже запущен в другом экземпляре.
|
||
|
||
- **Данные:** `bool` — `true`
|