ahserver/aidocs/configuredServer.md
2025-10-05 12:07:12 +08:00

295 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AHApp 技术文档
## 概述
`AHApp` 是一个基于 `aiohttp.web.Application` 构建的异步 Web 应用框架,专为支持复杂业务逻辑、插件化架构和灵活配置而设计。它集成了数据库连接池、模板引擎、身份认证、文件存储、中间件处理等功能,并通过配置驱动的方式实现高度可定制性。
该应用主要用于构建高性能、模块化的 Python 异步后端服务,适用于企业级 Web 服务或 API 网关场景。
---
## 依赖库说明
### 标准库
| 模块 | 用途 |
|------|------|
| `os`, `sys` | 路径与系统环境操作 |
| `platform` | 判断操作系统平台(用于端口复用) |
| `time` | 时间相关功能(预留扩展) |
| `ssl` | SSL/TLS 支持,用于 HTTPS 服务器启动 |
| `socket` | 套接字基础支持(可能用于网络检测或底层通信) |
### 第三方库
| 模块 | 用途 |
|------|------|
| `aiohttp.web` | 异步 Web 框架核心,提供 HTTP 服务支持 |
| `appPublic.*` 系列模块 | 自定义公共工具组件(路径、日志、配置、字典对象等) |
| `sqlor.dbpools.DBPools` | 数据库连接池管理器,支持多数据源 |
### 本地模块(相对导入)
| 模块 | 用途 |
|------|------|
| `.processorResource.ProcessorResource` | 可编程资源处理器,支持自定义请求处理逻辑 |
| `.auth_api.AuthAPI` | 认证接口抽象类,支持 JWT/OAuth 等机制 |
| `.myTE.setupTemplateEngine` | 初始化模板引擎(如 Jinja2 |
| `.globalEnv.initEnv` | 初始化全局运行环境变量 |
| `.serverenv.ServerEnv` | 全局服务器运行上下文容器 |
| `.filestorage.TmpFileRecord` | 临时文件记录管理器 |
| `.loadplugins.load_plugins` | 插件加载系统,实现功能扩展 |
| `.real_ip.real_ip_middleware` | 中间件:提取真实客户端 IP支持反向代理 |
---
## 核心类说明
### `AHApp(web.Application)`
继承自 `aiohttp.web.Application` 的增强型应用类,增加了用户数据存储和中间件预置功能。
#### 方法
##### `__init__(*args, **kw)`
初始化应用实例,设置最大请求体大小并插入真实 IP 中间件。
- **参数**
- `*args`, `**kw`: 传递给父类的参数
- **行为**
- 设置默认 `client_max_size = 1024000000` 字节(约 1GB
- 创建 `user_data: DictObject` 存储用户自定义数据
- 在中间件链首部插入 `real_ip_middleware`
##### `set_data(k, v)`
将键值对存入内部 `user_data` 容器中。
- **参数**
- `k` (str): 键名
- `v`: 任意类型值
##### `get_data(k)`
获取指定键对应的值。
- **参数**
- `k` (str): 键名
- **返回**
- 值或 `None`(若不存在)
---
### `ConfiguredServer`
主服务器配置类,负责加载配置、初始化组件、注册路由及启动服务。
#### 构造函数 `__init__(auth_klass=AuthAPI, workdir=None)`
- **参数**
- `auth_klass`: 认证类,需实现 `setupAuth(app)` 异步方法,默认使用 `AuthAPI`
- `workdir`: 工作目录路径,用于加载配置文件;若未指定则使用默认查找策略
- **初始化流程**
1. 加载配置文件(通过 `getConfig()`
- 若提供了 `workdir`,则传入上下文 `{workdir, ProgramPath}`
2. 若配置中包含 `databases`,初始化 `DBPools`
3. 调用 `initEnv()``setupTemplateEngine()` 初始化全局环境与模板引擎
4. 设置上传文件最大尺寸(默认 10MB可由配置覆盖
5. 实例化 `AHApp` 并注入 `client_max_size`
6. 加载插件(调用 `load_plugins(workdir)`
7. 初始化 `ServerEnv` 全局环境对象并设置工作目录
#### 方法
##### `async build_app()`
构建完整的 Web 应用实例。
- **流程**
1. 触发 `'ahapp_built'` 钩子事件(所有注册的协程函数执行)
2. 实例化认证模块并调用其 `setupAuth(app)` 完成认证配置
3. 返回最终的 `Application` 实例
> ⚠️ 注意:此方法返回的是 `awaitable`,必须在事件循环中调用。
##### `run(port=None)`
启动 HTTP/HTTPS 服务。
- **参数**
- `port`: 监听端口,优先级:传参 > 配置文件 > 默认 8080
- **功能细节**
- 读取配置中的主机地址(默认 `'0.0.0.0'`
- 若启用 SSL则创建 `ssl_context` 并加载证书 (`crtfile`, `keyfile`)
- 非 Windows 平台启用 `reuse_port=True` 提升性能(允许多进程绑定同一端口)
- 调用 `web.run_app()` 启动服务
##### `configPath(config)`
根据配置动态注册带有处理器的资源路径。
- **参数**
- `config`: 配置对象,预期结构为 `config.website.paths` 是一个 `(path, prefix)` 元组列表
- **行为**
- 对每条路径创建 `ProcessorResource` 实例
- 支持索引页显示(`show_index=True`
- 允许符号链接访问(`follow_symlinks=True`
- 支持自定义索引文件名列表(`indexes`
- 支持请求处理器链(`processors`
- 将资源注册到 `app.router`
---
## 配置结构示例JSON/YAML
```json
{
"databases": {
"default": {
"driver": "postgresql",
"host": "localhost",
"port": 5432,
"database": "mydb",
"username": "user",
"password": "pass"
}
},
"website": {
"host": "0.0.0.0",
"port": 8080,
"client_max_size": 10485760,
"ssl": {
"crtfile": "/path/to/cert.pem",
"keyfile": "/path/to/key.pem"
},
"paths": [
["/static", "/public"],
["/uploads", "/files"]
],
"indexes": ["index.html", "default.html"],
"processors": {
".html": "template_processor",
".py": "script_processor"
}
}
}
```
> 注:实际配置格式取决于 `jsonConfig.getConfig` 的实现,通常支持 `.json`, `.yaml`, `.toml` 等。
---
## 插件机制
通过 `load_plugins(workdir)` 实现插件自动发现与加载。插件可通过 `RegisterCoroutine` 注册生命周期钩子,例如:
```python
from appPublic.registerfunction import RegisterCoroutine
def on_ahapp_built(app):
app.router.add_get('/hello', lambda r: web.Response(text="Hello"))
RegisterCoroutine().register('ahapp_built', on_ahapp_built)
```
常见钩子事件包括:
- `ahapp_built`: 应用构建完成时触发
- `before_start`: 服务启动前
- `on_shutdown`: 关闭时清理资源
---
## 中间件
### `real_ip_middleware`
自动从请求头(如 `X-Forwarded-For`, `X-Real-IP`)提取真实客户端 IP 地址,防止因反向代理导致 IP 获取错误。
使用方式已在 `AHApp.__init__` 中自动注册。
---
## 使用示例
### 启动最简服务
```python
from your_module import ConfiguredServer
if __name__ == '__main__':
server = ConfiguredServer(workdir='./config')
server.run() # 默认端口 8080
```
### 自定义认证类
```python
class MyAuth(AuthAPI):
async def setupAuth(self, app):
# 添加 JWT 中间件或其他认证逻辑
pass
server = ConfiguredServer(auth_klass=MyAuth, workdir='./config')
server.run(port=9000)
```
---
## 运行环境要求
- Python >= 3.7
- 依赖包:
```txt
aiohttp
psycopg2-binary (PostgreSQL)
oracledb / pymysql 等(根据数据库类型)
pyyaml (可选,用于 YAML 配置)
jinja2 (模板引擎)
```
---
## 安全建议
1. **生产环境务必启用 SSL**
```json
"ssl": {
"crtfile": "/etc/letsencrypt/live/domain.com/fullchain.pem",
"keyfile": "/etc/letsencrypt/live/domain.com/privkey.pem"
}
```
2. 设置合理的 `client_max_size` 防止 DoS 攻击
3. 不要暴露调试信息,关闭详细异常回显
4. 使用 WAF 或 Nginx 做前置防护
---
## 日志系统
使用 `appPublic.log` 提供的日志接口:
```python
info("Application started")
debug("Detailed debug info")
warning("Something may go wrong")
error("An error occurred")
critical("Critical failure")
exception("Exception with traceback")
```
日志输出位置由配置决定,通常写入文件或标准输出。
---
## 总结
`AHApp` 和 `ConfiguredServer` 构成了一个完整、可扩展的异步 Web 服务骨架,具备以下特点:
✅ 模块化设计
✅ 插件热加载支持
✅ 多数据库连接池
✅ 安全认证集成
✅ 反向代理兼容
✅ HTTPS 支持
✅ 高性能异步处理
适合用于开发中大型 Python Web 后端项目。
---
> 📚 更多信息请参考配套模块文档:`appPublic`, `sqlor`, `processorResource` 等。