No description
Find a file
49 c34565b02b
fix(provider-test): 修复测试供应商配置时 DetachedInstanceError (#270)
两处修复:

1. endpoint_checker.py: 移除 asyncio.to_thread 包装同步 DB 查询,
   避免跨线程导致 SQLAlchemy Session 失效

2. provider_query.py: 并发测试预加载 ProviderEndpoint 和 ProviderAPIKey 时
   添加 joinedload(provider),确保 expunge 后不会触发懒加载
2026-04-17 10:37:19 +08:00
.github/workflows ci(hub): 移除 build-hub workflow 中的 Docker 构建和推送步骤 2026-03-12 15:34:09 +08:00
aether-hub chore: bump aether-hub version to 0.2.0 2026-03-17 22:15:07 +08:00
aether-proxy chore(proxy): update download links for proxy-v0.2.5 2026-03-17 14:23:27 +00:00
alembic fix(migration): 用 UPDATE...FROM 子查询修复 total_tokens 自引用更新问题,增加批次上限防止死循环 2026-03-24 02:07:24 +08:00
docs refactor(docs/home): 重构首页导航和文档结构 2026-02-24 12:15:14 +08:00
frontend feat(analytics): 重构统计分析模块,统一 API 与前端视图 2026-03-24 01:51:53 +08:00
scripts feat: 引入 status_snapshot 统一 provider key 状态管理 2026-03-20 19:16:52 +08:00
src fix(provider-test): 修复测试供应商配置时 DetachedInstanceError (#270) 2026-04-17 10:37:19 +08:00
tests feat(analytics): 重构统计分析模块,统一 API 与前端视图 2026-03-24 01:51:53 +08:00
.dockerignore fix: 修改hub构建方式 2026-03-02 04:05:40 +08:00
.env.example feat: 流式空闲超时、健康监控查询优化、限流桶内存上限与维护清理修复 2026-03-18 23:38:26 +08:00
.gitignore feat(cleanup): 解耦 request_candidates 与 provider_api_keys 生命周期 2026-03-14 01:33:08 +08:00
.python-version feat: TTFB 追踪记录与前端展示 + 缓存调度器代码整理 2026-02-10 17:37:53 +08:00
alembic.ini Initial commit 2025-12-10 20:52:44 +08:00
deploy.sh feat(oauth): 账号封禁前置 OAuth 验证、抽取 provider_context、完善账号状态分类 2026-03-20 16:50:59 +08:00
dev.sh refactor: 限制流式文本收集内存增长,降低默认连接池和缓存上限 2026-03-10 15:33:46 +08:00
docker-compose.build.yml fix(build): 构建时 GitHub API 请求支持可选 GITHUB_TOKEN 避免限流 2026-03-07 03:03:55 +08:00
docker-compose.yml fix: 移除redis持久化功能 2026-03-03 12:44:48 +08:00
Dockerfile.app feat: 流式空闲超时、健康监控查询优化、限流桶内存上限与维护清理修复 2026-03-18 23:38:26 +08:00
Dockerfile.app.local feat: 流式空闲超时、健康监控查询优化、限流桶内存上限与维护清理修复 2026-03-18 23:38:26 +08:00
Dockerfile.base chore: Docker 基础镜像从 Python 3.14 降级到 3.13 2026-02-10 17:41:36 +08:00
Dockerfile.base.local chore: Docker 基础镜像从 Python 3.14 降级到 3.13 2026-02-10 17:41:36 +08:00
entrypoint.sh feat(pool): 批量操作对话框改为服务端分页筛选,新增凭据导出功能 2026-03-11 19:32:19 +08:00
generate_keys.py refactor(proxy): 将 aether-proxy 从 HMAC 正向代理迁移到 WebSocket 隧道模式 2026-02-25 21:59:29 +08:00
gunicorn_conf.py feat(hub,stability): bounded outbound queue、worker liveness 检测、事件循环 watchdog 及 DB 操作异步化 2026-03-12 12:19:04 +08:00
LICENSE docs: 更新许可证说明、README 文档和模拟数据;调整模型版本至最新 2025-12-30 09:41:03 +08:00
pyproject.toml feat(analytics): 重构统计分析模块,统一 API 与前端视图 2026-03-24 01:51:53 +08:00
README.md 移除deplpy.sh中每次自动拉取最新代码, 以便于回退版本 2026-03-12 14:57:15 +08:00
uv.lock feat(analytics): 重构统计分析模块,统一 API 与前端视图 2026-03-24 01:51:53 +08:00

Aether Logo

Aether

一站式 AI 基础设施平台
支持 Claude / OpenAI / Gemini 及其 CLI 客户端的统一接入、格式转换、正/反向代理, 致力于成为用户驱动AI服务的底座

简介部署环境变量Q&A


简介

Aether 是一个自托管的 AI API 网关,为团队和个人提供多租户管理、智能负载均衡、成本配额控制和健康监控能力。通过统一的 API 入口,可以无缝对接 Claude、OpenAI、Gemini 等主流 AI 服务及其 CLI 工具。

Aether Architecture

页面预览: https://fawney19.github.io/Aether/

部署

Docker Compose推荐预构建镜像

# 1. 克隆代码
git clone https://github.com/fawney19/Aether.git
cd Aether

# 2. 配置环境变量
cp .env.example .env
python generate_keys.py  # 生成密钥, 并将生成的密钥填入 .env

# 3. 部署 / 更新(自动执行数据库迁移)
docker compose pull && docker compose up -d

# 4. 升级前备份 (可选)
docker compose exec postgres pg_dump -U postgres aether | gzip > backup_$(date +%Y%m%d_%H%M%S).sql.gz

Docker Compose本地构建镜像

# 1. 克隆代码
git clone https://github.com/fawney19/Aether.git
cd Aether

# 2. 配置环境变量
cp .env.example .env
python generate_keys.py  # 生成密钥, 并将生成的密钥填入 .env

# 3. 部署 / 更新(自动构建、启动、迁移)
git pull
./deploy.sh

本地开发

# 启动依赖
docker compose -f docker-compose.build.yml up -d postgres redis

# 后端
uv sync
./dev.sh

# 前端
cd frontend && npm install && npm run dev

Aether Proxy (可选)

Aether Proxy 是配套的正向代理节点,部署在海外 VPS 上,为墙内的 Aether 实例中转 API 流量。或者部署在其他服务器为指定的提供商、账号、Key使用不同的节点访问。支持 TUI 向导一键配置、systemd 服务管理、TLS 加密、DNS 缓存及连接池调优。

  • Docker Compose 部署或下载预编译二进制直接运行
  • 通过 aether-proxy setup 完成交互式配置,自动注册为系统服务
  • 详细文档见 aether-proxy/README.md

环境变量

必需配置

变量 说明
DB_PASSWORD PostgreSQL 数据库密码
REDIS_PASSWORD Redis 密码
JWT_SECRET_KEY JWT 签名密钥(使用 generate_keys.py 生成)
ENCRYPTION_KEY API Key 加密密钥(更换后需重新配置 Provider Key
ADMIN_EMAIL 初始管理员邮箱
ADMIN_USERNAME 初始管理员用户名
ADMIN_PASSWORD 初始管理员密码

可选配置

变量 默认值 说明
APP_PORT 8084 应用端口
API_KEY_PREFIX sk API Key 前缀
LOG_LEVEL INFO 日志级别 (DEBUG/INFO/WARNING/ERROR)
GUNICORN_WORKERS 2 Gunicorn 工作进程数
DB_PORT 5432 PostgreSQL 端口
REDIS_PORT 6379 Redis 端口

Q&A

Q: 如何开启/关闭请求体记录?

管理员在 系统设置 中配置日志记录的详细程度:

级别 记录内容
Base 基本请求信息
Headers Base + 请求头
Full Headers + 请求体

Q: 更新出问题如何回滚?

有备份的情况(推荐):

# 1. 停止应用
docker compose stop app

# 2. 恢复数据库(先清空再导入)
docker compose exec -T postgres psql -U postgres -c "DROP DATABASE aether; CREATE DATABASE aether;"
gunzip < backup_xxx.sql.gz | docker compose exec -T postgres psql -U postgres -d aether

# 3. 拉取旧版本镜像并重启
#    方式一:使用具体版本 tag如果有发布版本号
#    将 docker-compose.yml 中 image 从 ghcr.io/fawney19/aether:latest 改为指定版本
#    方式二:使用之前记录的镜像 digest
#    将 image 改为 ghcr.io/fawney19/aether@sha256:xxxxx
docker compose up -d app

可以在升级前通过 docker inspect ghcr.io/fawney19/aether:latest --format '{{index .RepoDigests 0}}' 记录当前镜像 digest方便回滚时使用。

没有备份的情况:

# 1. 用当前容器回退数据库迁移(回退 1 步,按需调整数字)
docker compose exec app alembic downgrade -1

# 2. 查看回退后的版本确认正确
docker compose exec app alembic current

# 3. 切回旧镜像并重启(同上方式修改 docker-compose.yml 中的 image
docker compose up -d app

注意:没有备份的回滚依赖 alembic downgrade如果迁移涉及不可逆的数据变更如删除列可能无法完全恢复数据。因此强烈建议升级前备份。


许可证

本项目采用 Aether 非商业开源许可证。允许个人学习、教育研究、非盈利组织及企业内部非盈利性质的使用;禁止用于盈利目的。商业使用请联系获取商业许可。

联系作者

QQ二维码      QQ群二维码

Star History

Star History Chart