Back to the catalog

ATEX AI Gateway

One API key for 6 AI models. Pay-per-use. MCP protocol support with web search.

Open source Repository Open in the app JSON README (API)

About

One API key for 6 AI models. Pay-per-use. MCP protocol support with web search.

Details

Kind
MCP servers
Topic
Web search, scraping & browser
Publisher
lm203688
Origin
official
Category
ferramentas
Transport
http
Version
4.3.0
Stars
2
Last push
2026-09-03T14:13:21Z
Repository state
ativo
Language
Python
Added
2026-08-29 04:00:24
Updated
2026-08-29 04:00:24
Origin id
io.github.lm203688/atex-ai-gateway

README

# 真测 Realcast

合规版积分预测社区(类 Manifold × Good Judgment Open × Kalshi 信息呈现)。
FastAPI + SQLite,积分**只送不卖 / 不可流通 / 不可回兑 / 彻底去加密**,合规优先。

## 合规红线(贯穿全系统,不可破)
1. 积分只送不卖(禁人民币买积分)
2. 积分不可用户间流通
3. 积分不可回兑现金(商城单向换实物/虚拟权益)
4. 彻底去加密货币
5. 结算用「平台奖励池」替代「赢家通吃输家筹码」,规避赌博三要素
6. 台港澳属中国,不得当外国政治;国外政治仅大选季引流且需人工复核
7. 数据出售必须匿名化(PIPL)
8. 人工兜底(广告审核 / 敏感选题 / 群体投诉 / Oracle 冲突)

## 部署
见 `deploy/`:`Dockerfile` / `docker-compose.yml` / `nginx.conf` / `.env.example` /
`realcast.service`(systemd) / `backup.sh`(热备) / `healthcheck.sh` / `部署运维手册.md`。

```bash
cd deploy && cp .env.example .env   # 填 ADMIN_TOKEN / CORS_ORIGINS
docker compose up -d --build
```

### Railway(海外部署,绕过 ICP 备案)

Railway 提供持久化卷,SQLite 可直接用,无需改 Postgres。配置文件已就绪:
`railway.json` + `deploy/Dockerfile.railway`(构建上下文为**仓库根目录**,与
`deploy/Dockerfile` 不同,别混用)。

控制台操作步骤:
1. New Project → Deploy from GitHub Repo,选本仓库
2. Settings → Volumes → **Add Volume**,挂载路径填 `/data`
   (不挂卷 = 容器每次重建数据归零;库目录不存在时应用会**拒绝启动**并打印排查提示)
3. Variables 里设置:

   | 变量 | 值 | 说明 |
   |---|---|---|
   | `ADMIN_TOKEN` | 长随机串(≥32 位) | 运营后台/审核/结算必填 |
   | `CORS_ORIGINS` | 你的 Railway 域名 | 不要留 `*` |
   | `DB_PATH` | `/data/platform.db` | 镜像已默认,与卷挂载点对应 |
   | `APP_TZ` | `8`(国内)/ `0`(UTC) | 决定「今天是哪一天」的边界 |
   | `UVICORN_WORKERS` | `1` | **不可 >1**,原因见下 |
   | `SEED_ON_BOOT` | `0` | 演示环境可设 `1` 自动播种(幂等) |
   | `REDIS_URL` | 可选 | 配了才能安全扩容到多 worker |

4. 部署后访问 `https://<你的域名>/api/health`,确认 `status=ok`

**为什么 `UVICORN_WORKERS` 必须是 1**:未配 `REDIS_URL` 时实时广播走进程内
`MemoryBackplane`(`app/core/backplane.py`),一个 worker 就是一个独立广播域。
worker > 1 时,A 进程的市场状态变更推不到连在 B 进程上的客户端,不同用户看到的
概率会不一致。要扩容必须先配 `REDIS_URL` 切到 `RedisBackplane`,并建议同时迁 Postgres。

**为什么 `overlapSeconds = 0`**:Railway 默认在新旧容器间做短暂重叠实现零停机,
但重叠窗口内两个进程会同时写同一个 SQLite 文件,轻则锁竞争、重则损坏数据。
设为 0 = 先停旧再起新,代价是每次部署几秒中断。

## 质量门禁
```bash
cd app && python tests/smoke.py --fresh   # 期望 99/99 全绿
cd app && python tests/uat_customer.py    # 期望 90/90 全绿
```

> 提示:本机若设了 `HTTP_PROXY`,测试脚本访问 `127.0.0.1` 会被代理拦截(表现为 502),
> 运行时请加 `env -u HTTP_PROXY -u HTTPS_PROXY -u http_proxy -u https_proxy` 清除。

## 安全边界(CSP nonce)
`script-src`(v0.7.1 起)与 `style-src`(v0.7.5 起)均已去掉 `'unsafe-inline'`,
改为每请求生成的一次性 nonce。nonce 只能由后端在渲染 HTML 时注入,因此:
- SPA 首页**必须**由 FastAPI 渲染下发(`_render_index`),不能由 nginx 等静态托管;
- CSP 头**只能**由应用层下发,nginx 不得重复下发(见 `deploy/nginx.conf` 文件头说明)。

## 上线硬性前提(未满足不得公开运营)
- 服务器 ICP 备案(腾讯云)
- 律所合规意见书

More