2025-12-10 20:52:44 +08:00
|
|
|
|
<p align="center">
|
|
|
|
|
|
<img src="frontend/public/aether_adaptive.svg" width="120" height="120" alt="Aether Logo">
|
|
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
<h1 align="center">Aether</h1>
|
|
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
2026-02-22 01:37:04 +08:00
|
|
|
|
<strong>一站式 AI 基础设施平台</strong><br>
|
|
|
|
|
|
支持 Claude / OpenAI / Gemini 及其 CLI 客户端的统一接入、格式转换、正/反向代理, 致力于成为用户驱动AI服务的底座
|
2025-12-10 20:52:44 +08:00
|
|
|
|
</p>
|
|
|
|
|
|
<p align="center">
|
2025-12-11 01:26:19 +08:00
|
|
|
|
<a href="#简介">简介</a> •
|
2025-12-10 20:52:44 +08:00
|
|
|
|
<a href="#部署">部署</a> •
|
2026-05-03 17:32:41 +08:00
|
|
|
|
<a href="#api-文档">API 文档</a> •
|
2025-12-10 20:52:44 +08:00
|
|
|
|
<a href="#环境变量">环境变量</a> •
|
|
|
|
|
|
<a href="#qa">Q&A</a>
|
|
|
|
|
|
</p>
|
|
|
|
|
|
|
2025-12-11 01:26:19 +08:00
|
|
|
|
|
2025-12-10 20:52:44 +08:00
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 简介
|
|
|
|
|
|
|
|
|
|
|
|
Aether 是一个自托管的 AI API 网关,为团队和个人提供多租户管理、智能负载均衡、成本配额控制和健康监控能力。通过统一的 API 入口,可以无缝对接 Claude、OpenAI、Gemini 等主流 AI 服务及其 CLI 工具。
|
|
|
|
|
|
|
2026-02-24 12:15:14 +08:00
|
|
|
|
<p align="center">
|
|
|
|
|
|
<picture>
|
|
|
|
|
|
<source media="(prefers-color-scheme: dark)" srcset="docs/architecture/architecture-dark.svg">
|
|
|
|
|
|
<source media="(prefers-color-scheme: light)" srcset="docs/architecture/architecture-light.svg">
|
|
|
|
|
|
<img src="docs/architecture/architecture-light.svg" width="680" alt="Aether Architecture">
|
|
|
|
|
|
</picture>
|
|
|
|
|
|
</p>
|
|
|
|
|
|
|
2026-02-22 01:37:04 +08:00
|
|
|
|
页面预览: https://fawney19.github.io/Aether/
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
## 部署
|
|
|
|
|
|
|
2026-03-10 18:11:08 +08:00
|
|
|
|
### Docker Compose(推荐:预构建镜像)
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 1. 克隆代码
|
|
|
|
|
|
git clone https://github.com/fawney19/Aether.git
|
2026-01-02 16:17:24 +08:00
|
|
|
|
cd Aether
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
# 2. 配置环境变量
|
|
|
|
|
|
cp .env.example .env
|
2026-04-11 13:00:04 +08:00
|
|
|
|
./generate_keys.sh # 生成密钥, 并将生成的密钥填入 .env
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-04-13 14:01:22 +08:00
|
|
|
|
# 3. 首次部署 / 更新
|
2026-03-03 16:38:22 +08:00
|
|
|
|
docker compose pull && docker compose up -d
|
2026-02-06 21:52:22 +08:00
|
|
|
|
|
2026-04-22 18:20:24 +08:00
|
|
|
|
# 4. 默认会在 app 启动前自动执行挂起的 migration / backfill
|
|
|
|
|
|
# 如需手工控制,可在 .env 中设 AETHER_GATEWAY_AUTO_PREPARE_DATABASE=false
|
|
|
|
|
|
# 然后按需执行:
|
2026-04-13 14:53:46 +08:00
|
|
|
|
docker compose run --rm app --migrate
|
2026-04-22 17:29:39 +08:00
|
|
|
|
docker compose run --rm app --apply-backfills
|
|
|
|
|
|
|
2026-04-22 18:20:24 +08:00
|
|
|
|
# 5. 升级前备份 (可选)
|
2026-02-06 21:52:22 +08:00
|
|
|
|
docker compose exec postgres pg_dump -U postgres aether | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz
|
2025-12-10 20:52:44 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-03 16:38:22 +08:00
|
|
|
|
### Docker Compose(本地构建镜像)
|
2025-12-11 10:52:47 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-12-11 18:16:19 +08:00
|
|
|
|
# 1. 克隆代码
|
|
|
|
|
|
git clone https://github.com/fawney19/Aether.git
|
2026-01-02 16:17:24 +08:00
|
|
|
|
cd Aether
|
2025-12-11 10:52:47 +08:00
|
|
|
|
|
2025-12-11 18:16:19 +08:00
|
|
|
|
# 2. 配置环境变量
|
|
|
|
|
|
cp .env.example .env
|
2026-04-11 13:00:04 +08:00
|
|
|
|
./generate_keys.sh # 生成密钥, 并将生成的密钥填入 .env
|
2025-12-11 18:16:19 +08:00
|
|
|
|
|
2026-04-13 14:01:22 +08:00
|
|
|
|
# 3. 部署 / 更新(自动构建并启动)
|
2026-03-12 14:57:15 +08:00
|
|
|
|
git pull
|
2025-12-11 10:52:47 +08:00
|
|
|
|
./deploy.sh
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-12-10 20:52:44 +08:00
|
|
|
|
### 本地开发
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 启动依赖
|
2026-01-03 01:39:45 +08:00
|
|
|
|
docker compose -f docker-compose.build.yml up -d postgres redis
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-04-13 14:01:22 +08:00
|
|
|
|
# 数据库迁移(仅在已有数据库引入新 migration 时需要)
|
|
|
|
|
|
./dev.sh --migrate
|
|
|
|
|
|
|
2026-04-22 17:29:39 +08:00
|
|
|
|
# 数据回填
|
|
|
|
|
|
./dev.sh --apply-backfills
|
|
|
|
|
|
|
2025-12-10 20:52:44 +08:00
|
|
|
|
# 后端
|
|
|
|
|
|
./dev.sh
|
|
|
|
|
|
|
|
|
|
|
|
# 前端
|
|
|
|
|
|
cd frontend && npm install && npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-31 19:19:04 +08:00
|
|
|
|
`./dev.sh` 现在只保留一种本地模式:
|
2026-03-21 12:57:09 +08:00
|
|
|
|
|
2026-03-31 19:19:04 +08:00
|
|
|
|
| 角色 | 本地地址 | 说明 |
|
|
|
|
|
|
|------|----------|------|
|
2026-04-11 17:39:02 +08:00
|
|
|
|
| Rust frontdoor | 默认 `http://localhost:8084` | `aether-gateway`,本地唯一公开入口;实际端口由 `APP_PORT` 控制 |
|
2026-03-21 12:57:09 +08:00
|
|
|
|
|
2026-03-31 19:19:04 +08:00
|
|
|
|
本地默认链路是:
|
2026-03-21 12:57:09 +08:00
|
|
|
|
|
|
|
|
|
|
```text
|
2026-04-03 14:59:58 +08:00
|
|
|
|
client -> rust frontdoor (aether-gateway) -> execution_runtime/provider transport
|
2026-03-21 12:57:09 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2026-03-31 19:19:04 +08:00
|
|
|
|
其中:
|
|
|
|
|
|
|
2026-04-03 14:59:58 +08:00
|
|
|
|
- `aether-gateway` 负责公开入口、健康检查、格式转换、本地执行 runtime,以及当前已迁到 Rust 的 frontdoor/control/background 路径。
|
2026-04-04 01:40:24 +08:00
|
|
|
|
- `./dev.sh` 不再启动 Python 宿主;未下沉到 Rust 的 legacy 路由会直接失败。
|
2026-04-13 14:01:22 +08:00
|
|
|
|
- `./dev.sh --migrate` 会复用 `.env` 里的数据库配置,显式执行一次数据库迁移后退出。
|
2026-03-31 19:19:04 +08:00
|
|
|
|
- `./dev.sh` 默认把 `AETHER_GATEWAY_VIDEO_TASK_TRUTH_SOURCE_MODE` 设为 `rust-authoritative`,避免本地还依赖 Python sync report 语义。
|
2026-04-13 14:01:22 +08:00
|
|
|
|
- 空库首次启动会自动初始化到当前 baseline。
|
|
|
|
|
|
- `aether-gateway` 默认启动不会自动应用后续 schema migration;如果数据库版本落后,服务会拒绝启动,并提示先执行 `aether-gateway --migrate`。
|
2026-04-22 22:16:51 +08:00
|
|
|
|
- 仓库自带的 `docker-compose.yml` 和 `docker-compose.build.yml` 都已把 `AETHER_GATEWAY_AUTO_PREPARE_DATABASE` 设为默认开启,因此无论是预构建镜像部署还是 `./deploy.sh` / 本地构建 compose,常规启动都会在监听端口前自动执行挂起的 migration 和 backfill。
|
2026-03-31 19:19:04 +08:00
|
|
|
|
|
2026-03-03 16:38:22 +08:00
|
|
|
|
## Aether Proxy (可选)
|
2026-02-22 01:37:04 +08:00
|
|
|
|
|
2026-02-24 12:15:14 +08:00
|
|
|
|
Aether Proxy 是配套的正向代理节点,部署在海外 VPS 上,为墙内的 Aether 实例中转 API 流量。或者部署在其他服务器为指定的提供商、账号、Key使用不同的节点访问。支持 TUI 向导一键配置、systemd 服务管理、TLS 加密、DNS 缓存及连接池调优。
|
2026-02-22 01:37:04 +08:00
|
|
|
|
|
|
|
|
|
|
- Docker Compose 部署或下载预编译二进制直接运行
|
|
|
|
|
|
- 通过 `aether-proxy setup` 完成交互式配置,自动注册为系统服务
|
2026-04-03 14:59:58 +08:00
|
|
|
|
- 详细文档见 [apps/aether-proxy/README.md](apps/aether-proxy/README.md)
|
2026-02-22 01:37:04 +08:00
|
|
|
|
|
2026-05-03 17:32:41 +08:00
|
|
|
|
## API 文档
|
|
|
|
|
|
|
|
|
|
|
|
- Embeddings: [OpenAI compatible `POST /v1/embeddings`](docs/api/embeddings.md)
|
|
|
|
|
|
- Rerank: [OpenAI/Jina compatible `POST /v1/rerank`](docs/api/rerank.md)
|
|
|
|
|
|
|
2025-12-10 20:52:44 +08:00
|
|
|
|
## 环境变量
|
|
|
|
|
|
|
2026-04-05 20:23:16 +08:00
|
|
|
|
部署建议直接参考对应示例文件:
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- Docker Compose:根目录 [`.env.example`](.env.example)
|
|
|
|
|
|
- systemd 二进制部署:[deploy/systemd/aether-gateway.env.example](deploy/systemd/aether-gateway.env.example)
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-04-05 20:23:16 +08:00
|
|
|
|
当前主链路真正要关注的是这组变量:
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-04-11 17:39:02 +08:00
|
|
|
|
- `APP_PORT`:`aether-gateway` 唯一监听端口,固定绑定 `0.0.0.0:${APP_PORT}`
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- `DATABASE_URL` / `REDIS_URL`:`aether-gateway` 直接读取的共享后端连接串
|
2026-04-22 22:16:51 +08:00
|
|
|
|
- `AETHER_GATEWAY_AUTO_PREPARE_DATABASE`:常规启动前自动执行挂起的 schema migration 和 backfill;仓库自带的 `docker-compose.yml` 和 `docker-compose.build.yml` 默认开启
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- `JWT_SECRET_KEY` / `ENCRYPTION_KEY`:认证和敏感数据加密所需密钥
|
2026-04-11 17:39:02 +08:00
|
|
|
|
- `API_KEY_PREFIX`:用户和管理员新建 API Key 时使用的前缀,默认 `sk`
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- `PAYMENT_CALLBACK_SECRET`:支付回调公开入口的共享密钥;未配置时相关路由保持禁用
|
2026-04-11 17:39:02 +08:00
|
|
|
|
- `ADMIN_USERNAME` / `ADMIN_PASSWORD` / `ADMIN_EMAIL`:首次启动时自举首个本地管理员
|
|
|
|
|
|
- `CORS_ORIGINS` / `CORS_ALLOW_CREDENTIALS`:前端跨域来源控制;如果要跨域带登录 Cookie,`CORS_ORIGINS` 不能写 `*`
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- `AETHER_GATEWAY_DEPLOYMENT_TOPOLOGY=single-node|multi-node`
|
|
|
|
|
|
- `AETHER_GATEWAY_NODE_ROLE=all|frontdoor|background`
|
2026-04-11 17:39:02 +08:00
|
|
|
|
- `RUST_LOG`:Rust 日志过滤,例如 `aether_gateway=info`、`aether_gateway=debug,sqlx=warn`
|
2026-04-05 20:23:16 +08:00
|
|
|
|
- 如果使用仓库内置的数据栈 compose,再额外配置 `DB_PASSWORD` / `REDIS_PASSWORD`
|
|
|
|
|
|
|
|
|
|
|
|
systemd 的 `.env` 必须保持简单 `KEY=VALUE` 形式,不要写 `export`、`${VAR}` 或命令替换。
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
## Q&A
|
|
|
|
|
|
|
|
|
|
|
|
### Q: 如何开启/关闭请求体记录?
|
|
|
|
|
|
|
2025-12-11 01:26:19 +08:00
|
|
|
|
管理员在 **系统设置** 中配置日志记录的详细程度:
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2025-12-11 01:26:19 +08:00
|
|
|
|
| 级别 | 记录内容 |
|
|
|
|
|
|
|------|----------|
|
|
|
|
|
|
| Base | 基本请求信息 |
|
|
|
|
|
|
| Headers | Base + 请求头 |
|
|
|
|
|
|
| Full | Headers + 请求体 |
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-02-06 21:52:22 +08:00
|
|
|
|
### Q: 更新出问题如何回滚?
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
2026-02-06 21:52:22 +08:00
|
|
|
|
**有备份的情况(推荐):**
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
2026-04-05 20:23:16 +08:00
|
|
|
|
# Docker Compose:
|
|
|
|
|
|
# 1. 切回旧镜像 tag / digest
|
|
|
|
|
|
# 2. 恢复 Postgres 备份
|
|
|
|
|
|
# 3. 再启动 app
|
2026-02-06 21:52:22 +08:00
|
|
|
|
|
2026-04-05 20:23:16 +08:00
|
|
|
|
# systemd:
|
|
|
|
|
|
# 1. 把 /opt/aether/current 切回旧 release
|
|
|
|
|
|
# 2. systemctl restart aether-gateway
|
|
|
|
|
|
# 3. 如果升级包含数据库结构变更,再恢复 Postgres 备份
|
2026-02-06 21:52:22 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
> 可以在升级前通过 `docker inspect ghcr.io/fawney19/aether:latest --format '{{index .RepoDigests 0}}'` 记录当前镜像 digest,方便回滚时使用。
|
|
|
|
|
|
|
|
|
|
|
|
**没有备份的情况:**
|
|
|
|
|
|
|
2026-04-22 22:16:51 +08:00
|
|
|
|
当前不应该再依赖旧的 `alembic downgrade` 路线。空库首次启动会自动初始化;如果开启 `AETHER_GATEWAY_AUTO_PREPARE_DATABASE=true`(仓库自带的两份 compose 默认都如此),常规服务启动也会自动应用挂起的 migration/backfill。无论是否自动执行,只要本次发布带来了不可逆的数据结构变化,没有备份就不能保证安全回滚。因此升级前强烈建议先备份 `Postgres`。
|
2025-12-10 20:52:44 +08:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
## 许可证
|
|
|
|
|
|
|
2025-12-30 09:41:03 +08:00
|
|
|
|
本项目采用 [Aether 非商业开源许可证](LICENSE)。允许个人学习、教育研究、非盈利组织及企业内部非盈利性质的使用;禁止用于盈利目的。商业使用请联系获取商业许可。
|
|
|
|
|
|
|
|
|
|
|
|
## 联系作者
|
|
|
|
|
|
|
|
|
|
|
|
<p align="center">
|
2025-12-30 09:44:45 +08:00
|
|
|
|
<img src="docs/author/qq_qrcode.jpg" width="200" alt="QQ二维码">
|
2026-02-09 02:56:21 +08:00
|
|
|
|
|
|
|
|
|
|
<img src="docs/author/qrcode_1770574997172.jpg" width="200" alt="QQ群二维码">
|
2025-12-30 09:41:03 +08:00
|
|
|
|
</p>
|
|
|
|
|
|
|
|
|
|
|
|
## Star History
|
|
|
|
|
|
|
|
|
|
|
|
[](https://star-history.com/#fawney19/Aether&Date)
|