新增说明文件
This commit is contained in:
260
NGINX_API.md
Normal file
260
NGINX_API.md
Normal file
@@ -0,0 +1,260 @@
|
||||
# Nginx 服务 API 说明
|
||||
|
||||
## 功能说明
|
||||
|
||||
1. **应用启动时自动检测 nginx 状态**
|
||||
- 启动应用时会自动调用 `OnStartup()` 检测 nginx 是否在运行
|
||||
- 如果检测到 nginx 进程,会自动设置 `Running = true`
|
||||
- 不会自动启动或停止 nginx
|
||||
|
||||
2. **应用关闭时保持 nginx 运行**
|
||||
- 关闭应用时调用 `OnShutdown()`,但不会停止 nginx
|
||||
- nginx 进程继续在后台运行
|
||||
- 下次启动应用时会自动检测到运行状态
|
||||
|
||||
## 前端可调用方法
|
||||
|
||||
### 进程管理
|
||||
|
||||
#### 启动 Nginx
|
||||
```typescript
|
||||
import { App } from '../bindings/go-site-clone'
|
||||
|
||||
try {
|
||||
await App.StartNginx()
|
||||
console.log('Nginx 启动成功')
|
||||
} catch (error) {
|
||||
console.error('Nginx 启动失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 停止 Nginx
|
||||
```typescript
|
||||
try {
|
||||
await App.StopNginx()
|
||||
console.log('Nginx 停止成功')
|
||||
} catch (error) {
|
||||
console.error('Nginx 停止失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 重启 Nginx
|
||||
```typescript
|
||||
try {
|
||||
await App.RestartNginx()
|
||||
console.log('Nginx 重启成功')
|
||||
} catch (error) {
|
||||
console.error('Nginx 重启失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 重载配置
|
||||
```typescript
|
||||
try {
|
||||
await App.ReloadNginx()
|
||||
console.log('Nginx 配置重载成功')
|
||||
} catch (error) {
|
||||
console.error('Nginx 配置重载失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 检查状态
|
||||
```typescript
|
||||
try {
|
||||
const running = await App.CheckNginxStatus()
|
||||
console.log('Nginx 运行状态:', running)
|
||||
} catch (error) {
|
||||
console.error('检查状态失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 测试配置
|
||||
```typescript
|
||||
try {
|
||||
await App.TestNginxConfig()
|
||||
console.log('配置文件有效')
|
||||
} catch (error) {
|
||||
console.error('配置文件测试失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
### 站点管理
|
||||
|
||||
#### 添加站点
|
||||
```typescript
|
||||
const siteConfig = {
|
||||
name: 'example.com',
|
||||
domains: ['example.com', '127.0.0.1'],
|
||||
port: 80,
|
||||
path: '/www/example.com',
|
||||
index: 'index.html',
|
||||
enabled: true
|
||||
}
|
||||
|
||||
try {
|
||||
await App.AddNginxSite(siteConfig)
|
||||
console.log('站点添加成功')
|
||||
} catch (error) {
|
||||
console.error('站点添加失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 删除站点
|
||||
```typescript
|
||||
try {
|
||||
await App.DeleteNginxSite('example.com')
|
||||
console.log('站点删除成功')
|
||||
} catch (error) {
|
||||
console.error('站点删除失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 更新站点
|
||||
```typescript
|
||||
const updatedConfig = {
|
||||
name: 'example.com',
|
||||
domains: ['example.com', 'www.example.com'],
|
||||
port: 8080,
|
||||
path: '/www/example.com',
|
||||
index: 'index.html',
|
||||
enabled: true
|
||||
}
|
||||
|
||||
try {
|
||||
await App.UpdateNginxSite(updatedConfig)
|
||||
console.log('站点更新成功')
|
||||
} catch (error) {
|
||||
console.error('站点更新失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 获取所有站点
|
||||
```typescript
|
||||
try {
|
||||
const sites = await App.GetAllNginxSites()
|
||||
console.log('站点列表:', sites)
|
||||
} catch (error) {
|
||||
console.error('获取站点列表失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 启用站点
|
||||
```typescript
|
||||
try {
|
||||
await App.EnableNginxSite('example.com')
|
||||
console.log('站点启用成功')
|
||||
} catch (error) {
|
||||
console.error('站点启用失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 禁用站点
|
||||
```typescript
|
||||
try {
|
||||
await App.DisableNginxSite('example.com')
|
||||
console.log('站点禁用成功')
|
||||
} catch (error) {
|
||||
console.error('站点禁用失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
### 日志管理
|
||||
|
||||
#### 获取访问日志(最后100行)
|
||||
```typescript
|
||||
try {
|
||||
const logs = await App.GetNginxAccessLog(100)
|
||||
console.log('访问日志:', logs)
|
||||
} catch (error) {
|
||||
console.error('获取访问日志失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 获取错误日志(最后100行)
|
||||
```typescript
|
||||
try {
|
||||
const logs = await App.GetNginxErrorLog(100)
|
||||
console.log('错误日志:', logs)
|
||||
} catch (error) {
|
||||
console.error('获取错误日志失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
#### 清空日志
|
||||
```typescript
|
||||
try {
|
||||
await App.ClearNginxLogs()
|
||||
console.log('日志清空成功')
|
||||
} catch (error) {
|
||||
console.error('日志清空失败:', error)
|
||||
}
|
||||
```
|
||||
|
||||
## 数据结构
|
||||
|
||||
### NginxSiteConfig
|
||||
```typescript
|
||||
interface NginxSiteConfig {
|
||||
ID: string // 站点唯一ID(可选)
|
||||
name: string // 站点名称
|
||||
domains: string[] // 域名列表
|
||||
port: number // 监听端口
|
||||
path: string // 网站根目录路径
|
||||
index: string // 默认首页文件
|
||||
enabled: boolean // 是否启用
|
||||
}
|
||||
```
|
||||
|
||||
## 工作流程示例
|
||||
|
||||
### 页面初始化时检查 nginx 状态
|
||||
```typescript
|
||||
import { ref, onMounted } from 'vue'
|
||||
import { App } from '../bindings/go-site-clone'
|
||||
|
||||
const nginxRunning = ref(false)
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
nginxRunning.value = await App.CheckNginxStatus()
|
||||
} catch (error) {
|
||||
console.error('检查 nginx 状态失败:', error)
|
||||
}
|
||||
})
|
||||
```
|
||||
|
||||
### 完整的站点托管流程
|
||||
```typescript
|
||||
// 1. 检查 nginx 状态
|
||||
const running = await App.CheckNginxStatus()
|
||||
|
||||
// 2. 如果未运行,启动 nginx
|
||||
if (!running) {
|
||||
await App.StartNginx()
|
||||
}
|
||||
|
||||
// 3. 添加站点配置
|
||||
await App.AddNginxSite({
|
||||
name: 'mysite.com',
|
||||
domains: ['mysite.com', '127.0.0.1'],
|
||||
port: 80,
|
||||
path: '/www/mysite.com',
|
||||
index: 'index.html',
|
||||
enabled: true
|
||||
})
|
||||
|
||||
// 4. 重载配置使其生效
|
||||
await App.ReloadNginx()
|
||||
|
||||
// 5. 验证站点已添加
|
||||
const sites = await App.GetAllNginxSites()
|
||||
console.log('当前托管站点:', sites)
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **Windows 路径处理**:路径会自动转换为 nginx 兼容格式(斜杠)
|
||||
2. **配置文件位置**:站点配置保存在 `plugin/nginx/conf/hosts/` 目录
|
||||
3. **禁用站点**:禁用的站点配置会移动到 `plugin/nginx/conf/hosts.disabled/` 目录
|
||||
4. **自动重载**:添加、删除、更新站点时,如果 nginx 正在运行会自动重载配置
|
||||
5. **持久化运行**:应用关闭后 nginx 继续运行,重新打开应用会自动检测状态
|
||||
Reference in New Issue
Block a user