# 平台架构文档 > 面向平台运维的架构描述。反映 **2026-07-16** 实际部署状态。 > 生产环境:阿里云 ECS(39.107.238.22)。 > 冷备:腾迅云 ECS(106.54.216.234),每日数据同步,不对外暴露。 --- ## 一、总览 ``` 用户 / AI Agent │ ▼ Nginx Proxy Manager (mercator-npm) ← HTTPS 统一入口 │ ├── www.mercator.cn → homepage:3000 ├── auth.mercator.cn → auth-center-frontend:3000 (→ backend :8000) ├── suites.mercator.cn → suite-market-frontend:3302 (→ backend :8001) ├── discussions.mercator.cn → discussions-frontend:3001 (→ backend :8005) └── git.mercator.cn → gitea:3000 ``` **核心原则:执行在本地,云端只做管理和分发。** --- ## 二、容器清单 全部运行在阿里云 ECS,Docker 网络 `mercator-net`。 ### 2.1 认证中心 — auth-center | 项目 | 说明 | |------|------| | 前端 | `mercator-auth-center-frontend`,Next.js,:3000 | | 后端 | `mercator-auth-center-backend`,FastAPI,:8000 | | 数据库 | `auth_center_db`(PostgreSQL) | API 分组:登录注册、企业微信 OIDC 扫码、API Key 管理(`mk_` 前缀)、服务账户 Token(HS256 JWT,1h)、MFA TOTP、OAuth2/OIDC 服务端、用户管理、会话管理、审计日志。 ### 2.2 套件市场 — suite-market | 项目 | 说明 | |------|------| | 前端 | `mercator-suite-market-frontend`,Next.js,:3302 | | 后端 | `mercator-suite-market-backend`,FastAPI,:8001 | | 数据库 | `suite_market_db`(PostgreSQL) | API 概览: | 路由 | 功能 | |------|------| | `GET/POST /api/v1/suites` | 套件 CRUD | | `GET /api/v1/suites/search?q=` | 搜索 | | `POST /api/v1/suites/{id}/versions` | 发布版本 | | `POST /publish` / `POST /publish/upload` | 发布套件 | | `POST /api/v1/compliance/check` | 合规检测 | | `POST /api/v1/parameters/validate` | 参数校验 | | `GET /api/v1/categories` | 分类管理 | | `GET /api/v1/health` | 健康检查 | ### 2.3 讨论区 — discussions | 项目 | 说明 | |------|------| | 前端 | `mercator-discussions-frontend`,Next.js,:3001 | | 后端 | `mercator-discussions-backend`,FastAPI,:8005 | | 数据库 | `discussions_db`(PostgreSQL) | API:话题 CRUD + 关闭/重开,评论 CRUD,标签管理。种子标签:bug, feature, question, discussion, announcement, suggestion。 ### 2.4 基础设施 | 服务 | 容器 | 版本 | |------|------|------| | PostgreSQL | mercator-postgres | postgres:16-alpine | | Redis | mercator-redis | redis:7-alpine | | NPM | mercator-npm | jc21/nginx-proxy-manager:latest | | MinIO | minio-nginx | nginx:alpine(MinIO 反代,:9000) | --- ## 三、Gitea | 域名 | 用途 | |------|------| | `git.mercator.cn` | 源码托管 + Packages(OCI 镜像仓库 + Generic 脚本包存储) | ### 组织与仓库 **AgentGIS**(源码仓库): | 仓库 | 说明 | |------|------| | `auth-center` | 认证中心 | | `suite-market` | 套件市场 | | `discussions` | 讨论区 | | `gis-actions` | 本地执行器(`cli.py` + `steps_executor.py`) | | `gis-base-image` | 基础镜像 Dockerfile | | `mercator-homepage` | 官网首页 | **SuiteHub**(项目文档):`agent-profiles` — Agent 认知文件 + 用户文档 + 平台架构文档 --- ## 四、认证 | 凭证 | 有效期 | 用途 | |------|--------|------| | JWT(密码/OIDC 登录) | 15 分钟 | 浏览器 Web UI | | API Key(`mk_`) | 自定义(默认 90 天) | AI Agent 自动化 | | 服务账户 Token(HS256 JWT) | 1 小时 | 微服务间通信 | | Gitea Token | 自定义 | Publish API 上传脚本包 | **认证流程:** ``` 浏览器 → auth.mercator.cn → 密码/企业微信扫码 → JWT AI Agent → API Key → suite-market API 微服务 → HS256 JWT → Auth Center 签发 ``` Auth Center 内置 OAuth2/OIDC 服务端,企业微信为身份源,RS256 签名。 --- ## 五、套件生命周期 ### 5.1 发布 ``` 开发者打包 workflow.yaml + scripts/ → .tar.gz → POST /publish/upload(需 API Key + Gitea Token) → 合规检测 → 参数校验 → 上传脚本包到 Gitea Packages → 写入 suite_suites ``` ### 5.2 本地执行 ``` agc run --suite-id --input key=value │ ├── GET suites.mercator.cn/api/v1/suites/{id}(查 package_url) ├── wget 从 Gitea Packages 下载脚本包 ├── 解压 → 读取 workflow.yaml ├── steps_executor: 按 depends_on 拓扑序 │ ├── runtime=docker → 每步 docker run --rm gis-base 隔离执行 │ └── runtime=python3/arcpy → 本地 subprocess(Windows agc.exe) ├── 清理脚本包 └── 结果留在本地 work_dir/_step_outputs/ ``` 平台上没有任务队列、没有 Worker。执行完全在用户本地完成。 ### 5.3 基础镜像 | 项目 | 说明 | |------|------| | 仓库 | `git.mercator.cn/AgentGIS/gis-base-image` | | 分发 | `https://packages.mercator.cn/public/gis-base/latest.tar.gz`(MinIO) | | 预装 | Python 3.11 + GDAL + Shapely + GeoPandas + Fiona + Rasterio + PyProj + numpy + scipy + pandas + openpyxl + python-docx + matplotlib + Pillow + requests + Jinja2 | | 大小 | ~465MB,Debian slim 基底 | --- ## 六、技术栈 | 层级 | 选型 | |------|------| | 前端 | Next.js | | 后端 | FastAPI | | 数据库 | PostgreSQL 16 + Redis 7 | | 反向代理 | Nginx Proxy Manager | | 代码托管 / Packages | Gitea | | OIDC 身份源 | 企业微信 | | 对象存储 | MinIO | | 邮件 | 阿里云 DirectMail | | 本地执行器(Linux) | gis-actions(Python CLI + Docker) | | 本地执行器(Windows) | gis-actions(agc.exe + 本机 subprocess) |