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

144 lines
3.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 配置
配置类是 dataclass。
默认环境是 `dev`
## 环境选择
```bash
iticli run dev
iticli run prod
```
也可以显式传入:
```python
from iti import create_app
app = create_app(config_name="test", config_mapping=config)
```
## 默认数据库
dev/test/prod 默认都使用 MySQL。
设置 `DATABASE_DIALECT=postgresql` 时,默认连接串改为 PostgreSQL。
`DATABASE_URL` 始终优先。
```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
postgresql+psycopg://postgres:password@127.0.0.1:5432/iti_dev
```
可用环境变量覆盖:
```bash
DATABASE_URL=mysql+pymysql://user:pass@host:3306/app?charset=utf8mb4
DATABASE_DIALECT=mysql
MYSQL_HOST=127.0.0.1
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=iti_dev
DATABASE_DIALECT=postgresql
POSTGRES_HOST=127.0.0.1
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=iti_dev
```
单元测试可以传入 SQLite 配置。
这不改变默认配置。
## env 文件
框架会从当前目录加载第一个存在的文件:
1. `.env.local`
2. `.env.<APP_ENV>`
3. `.env`
`APP_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 的路径,支持 `*`,默认包含 `/health`、`/ready`、`/docs`、`/openapi.json` |
| `docs_ui_enabled` | `/docs` 选择页展示的文档 UI默认 `swagger`、`scalar`、`redoc` |
| `ratelimit_enabled` | 是否启用内存限流 |
| `cache_default_timeout` | 默认缓存秒数 |
| `file_storage` | 文件存储配置 |
| `services` | 服务客户端配置 |
| `service_tokens` | 可信服务 token |
| `tasks_enabled` | 是否启动单机任务调度线程 |
| `mq_enabled` | 是否启动 MQ consumer runner默认关闭 |
| `mq` | MQ 配置v1 支持 Kafka backend |
| `exchange_enabled` | 是否默认自动挂载本地交换模块 |
| `exchange_default_storage` | 导入导出默认文件存储类型 |
| `exchange_storage` | 导入导出文件存储配置 |
| `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}
```
## MQ
MQ 默认关闭。
Kafka backend 需要安装 `iti-flask[mq-kafka]`
可用环境变量:
```bash
MQ_ENABLED=false
MQ_BACKEND=kafka
KAFKA_BOOTSTRAP_SERVERS=127.0.0.1:9092
KAFKA_GROUP_ID=my-app
KAFKA_CLIENT_ID=my-app-dev
KAFKA_AUTO_OFFSET_RESET=earliest
MQ_FAILURE_BACKOFF_SECONDS=1
MQ_POLL_TIMEOUT_SECONDS=1
```
业务项目也可以直接覆盖:
```python
self.mq_enabled = True
self.mq = {
"backend": "kafka",
"bootstrap_servers": "127.0.0.1:9092",
"group_id": "my-app",
}
```