自托管
AISCouncil 是一个单一的、自包含的 HTML 文件。您可以在任何静态文件服务器上托管它,从 USB 驱动器运行它,甚至直接从文件系统打开它。无需后端、无需数据库、无需运行时 —— 只是一个文件。
最简单的方法
下载 index.html 并在浏览器中打开:
# 就这样。打开文件。
open index.html # macOS
xdg-open index.html # Linux
start index.html # Windows
应用程序立即从 file:// 协议工作。所有不需要 HTTPS 的功能(除 PWA 安装和剪贴板 API 外的所有功能)正常工作。
要获得包括 PWA 安装和剪贴板访问在内的完整体验,请使用任何静态文件服务器通过 HTTPS 提供文件。
静态文件服务器
上传到任何 Web 服务器。无需服务器端配置。
Python(快速本地测试)
python3 -m http.server 8000
# 打开 http://localhost:8000
Caddy(带自动证书的 HTTPS)
caddy file-server --root /path/to/aiscouncil --listen :8080
Nginx
server {
listen 443 ssl;
server_name aiscouncil.example.com;
ssl_certificate /etc/ssl/certs/example.com.pem;
ssl_certificate_key /etc/ssl/private/example.com.key;
root /var/www/aiscouncil;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
云托管
应用程序在任何静态托管平台上零配置工作:
| 平台 | 部署方法 |
|---|---|
| Cloudflare Pages | 连接 Git 仓库或拖放 |
| Netlify | 连接 Git 仓库或拖放 |
| Vercel | 连接 Git 仓库或 vercel deploy |
| GitHub Pages | 推送到 gh-pages 分支 |
| AWS S3 + CloudFront | 上传文件到 S3,通过 CloudFront 提供 |
| Firebase Hosting | firebase deploy |
推荐部署的文件
虽然严格来说只需要 index.html,但部署这些额外文件可启用 PWA 功能:
your-server/
index.html # 完整应用程序(必需)
sw.js # 用于离线支持的 service worker
manifest.webmanifest # PWA 清单(名称、图标、主题)
icon.svg # 矢量图标
icon-192.png # Android 主屏幕图标
icon-512.png # 启动屏幕 / 可遮罩图标
favicon.ico # 浏览器标签页图标
可选添加:
s/
index.html # Web 编辑器(如果您也想要编辑器)
registry/
models.json # 本地模型注册表(如果您想要离线模型数据)
ads.json # 广告配置(仅在使用免费额度广告系统时)
Docker 部署
使用 Nginx 的最小 Docker 部署:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/
COPY sw.js /usr/share/nginx/html/
COPY manifest.webmanifest /usr/share/nginx/html/
COPY icon.svg /usr/share/nginx/html/
COPY icon-192.png /usr/share/nginx/html/
COPY icon-512.png /usr/share/nginx/html/
COPY favicon.ico /usr/share/nginx/html/
EXPOSE 80
构建并运行:
docker build -t aiscouncil .
docker run -d -p 8080:80 aiscouncil
# 打开 http://localhost:8080
对于 Docker 的 HTTPS,在 Nginx 容器前面使用 Traefik 或 Caddy 等反向代理。
什么在本地运行
一切。HTML 文件内联包含所有 CSS、JavaScript 和模块代码。当用户打开页面时:
- UI 完全在客户端渲染
- API 密钥存储在用户的浏览器中(
localStorage) - 聊天历史和机器人配置存储在用户的浏览器中(IndexedDB)
- LLM API 调用直接从浏览器发送到提供商(Anthropic、OpenAI、xAI 等)
- 没有数据通过您的服务器
您的服务器提供静态文件。这是它唯一的工作。
访客模式
当托管在自定义域名(不是 aiscouncil.net)上时,应用程序以访客模式运行:
- 无需 Google 登录 —— 跳过登录门槛
- 所有功能无需身份验证即可工作
- 用户直接进入聊天界面
- 设置、存储和所有功能完全正常
当应用程序检测到它在 localhost、.pages.dev 域名或除 aiscouncil.net 以外的任何域名上运行时,访客模式自动激活。无需配置。
自定义 API 基础
默认情况下,应用程序将身份验证、计费和使用跟踪请求发送到 https://api.aiscouncil.net/v1。对于自托管部署,您可以覆盖此设置:
localStorage.setItem("ais-api-base", "https://your-api.example.com/v1");
这是可选的。如果您不使用托管计费/身份验证功能,应用程序无需任何 API 基础即可工作 —— 所有 LLM 调用直接从浏览器发送到提供商。
本地代理(aiscouncil-serve)
如果您想避免在浏览器中暴露 API 密钥(例如,在共享办公环境中),您可以运行 aiscouncil-serve 本地代理:
ANTHROPIC_API_KEY=sk-ant-... \
OPENAI_API_KEY=sk-... \
XAI_API_KEY=xai-... \
./aiscouncil-serve --port 8741
代理按模型前缀将请求路由到正确的提供商:
| 模型前缀 | 提供商 | 身份验证 |
|---|---|---|
claude-* | Anthropic | x-api-key 头 |
gpt-*、o1*、o3* | OpenAI | Bearer token |
grok-* | xAI | Bearer token |
meta-llama/、deepseek/、qwen/、mistralai/、google/ | OpenRouter | Bearer token |
| 其他所有 | Ollama (localhost) | 无 |
代理还支持 X-Provider 头来强制指定提供商,无论模型前缀如何。
从源代码构建:
cd serve
../tools/zig/zig build -Doptimize=ReleaseSmall
# 二进制文件位于: zig-out/bin/aiscouncil-serve(约 2.3 MB)
离线部署
对于隔离环境:
- 将文件部署到内部 Web 服务器
- 首次访问时,service worker 缓存所有内容
- 缓存后,应用程序无需任何网络访问即可工作
- 用户可以与在同一网络上运行的 Ollama 或任何本地 LLM 聊天
通过将 registry/models.json 放置在 index.html 旁边来预加载模型注册表。应用程序在尝试从 GitHub 获取之前会检查本地副本。
CORS 考虑
使用本地推理服务器(Ollama、vLLM 等)时,浏览器强制执行 CORS(跨源资源共享)。您的推理服务器必须允许来自您托管来源的请求。
Ollama:
# 在启动 Ollama 之前设置
OLLAMA_ORIGINS=* ollama serve
vLLM:
vllm serve model-name --allowed-origins '*'
通用(Nginx 后面的任何服务器):
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization' always;
add_header 'Access-Control-Allow-Methods' 'POST, OPTIONS' always;
使用 * 作为 Access-Control-Allow-Origin 对于本地开发可以,但在生产部署中应限制为您的特定来源。
从源代码构建
要修改应用程序并重新构建:
# 克隆仓库
git clone https://github.com/nicholasgasior/aiscouncil.net.git
cd aiscouncil.net
# 在 src/ 中编辑源文件(不要直接编辑 index.html)
# 应用程序被拆分为约 35 个源文件,这些文件被串联
# 构建单文件输出
./build.sh
# 验证构建是否匹配
./build.sh --check
构建过程按顺序将所有 src/ 文件串联成单个 index.html。无需打包器、无需转译器、无需 npm —— 只是 shell 串联。
Web 编辑器
要同时托管 Web 编辑器,请包含 s/ 目录:
your-server/
index.html # 机器人平台
s/
index.html # Web 编辑器 (aiscouncil.net/s/)
编辑器使用相同的压缩编解码器,但使用版本前缀 A 而不是 B。它是一个单独的自包含 HTML 文件,具有自己的功能集(所见即所得编辑、多格式支持、压缩算法)。
数据可移植性
用户可以通过设置 > 隐私 > 导出所有数据导出所有数据。导出是一个包含所有机器人配置文件、聊天历史和设置的 JSON 文件。API 密钥从导出中排除。导出可以导入到任何其他 AISCouncil 实例中。
这意味着用户永远不会被锁定在特定的部署中。他们可以随时在自托管实例、官方站点或任何其他主机之间移动。