You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iTi-Flask/docs/CONFIGURATION.md

98 lines
2.4 KiB
Markdown

# 配置
配置类是 dataclass。
默认环境是 `dev`
## 环境选择
```bash
ITI_ENV=dev uv run uvicorn app:app --reload
ITI_ENV=prod uv run uvicorn app:app
```
也可以显式传入:
```python
from iti import create_app
app = create_app(config_name="test", config_mapping=config)
```
## 默认数据库
dev/test/prod 默认都使用 MySQL。
```text
mysql+pymysql://root:password@127.0.0.1:3306/iti_dev?charset=utf8mb4
mysql+pymysql://root:password@127.0.0.1:3306/iti_test?charset=utf8mb4
mysql+pymysql://root:password@127.0.0.1:3306/iti_prod?charset=utf8mb4
```
可用环境变量覆盖:
```bash
DATABASE_URL=mysql+pymysql://user:pass@host:3306/app?charset=utf8mb4
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=iti_dev
```
单元测试可以传入 SQLite 配置。
这不改变默认配置。
## env 文件
框架会从当前目录加载第一个存在的文件:
1. `.env.local`
2. `.env.<ITI_ENV>`
3. `.env`
`ITI_ENV_DIR` 可指定查找目录。
## 常用字段
| 字段 | 说明 |
| --- | --- |
| `app_name` | FastAPI 标题 |
| `debug` | debug 标记 |
| `secret_key` | 框架密钥 |
| `jwt_secret_key` | JWT 密钥 |
| `database_url` | SQLAlchemy URL |
| `cors_origins` | CORS origin 列表 |
| `health_enabled` | 是否注册 `/health``/ready` |
| `ready_check_db` | `/ready` 是否执行 DB ping |
| `response_envelope_http_status` | envelope 响应使用的 HTTP 状态码,默认 200 |
| `response_envelope_enabled` | 是否启用自动 envelope |
| `raw_response_paths` | 跳过自动 envelope 的路径,支持 `*` |
| `ratelimit_enabled` | 是否启用内存限流 |
| `cache_default_timeout` | 默认缓存秒数 |
| `file_storage` | 文件存储配置 |
| `services` | 服务客户端配置 |
| `service_tokens` | 可信服务 token |
| `tasks_enabled` | 是否启动单机任务调度线程 |
| `log_dir` | 运行日志目录 |
| `log_file_enabled` | 是否写滚动日志文件 |
| `audit_enabled` | 是否发送审计事件 |
| `audit_service_name` | 审计接收服务名,默认 `audit` |
## 业务项目覆盖
```python
from dataclasses import dataclass
from iti.config import DevConfig as BaseDevConfig
class DevConfig(BaseDevConfig):
def __init__(self) -> None:
super().__init__()
self.app_name = "my-app"
self.ready_check_db = True
config = {"dev": DevConfig, "default": DevConfig}
```