跳到主要内容

自托管

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 Hostingfirebase 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-*Anthropicx-api-key
gpt-*o1*o3*OpenAIBearer token
grok-*xAIBearer token
meta-llama/deepseek/qwen/mistralai/google/OpenRouterBearer token
其他所有Ollama (localhost)

代理还支持 X-Provider 头来强制指定提供商,无论模型前缀如何。

从源代码构建:

cd serve
../tools/zig/zig build -Doptimize=ReleaseSmall
# 二进制文件位于: zig-out/bin/aiscouncil-serve(约 2.3 MB)

离线部署

对于隔离环境:

  1. 将文件部署到内部 Web 服务器
  2. 首次访问时,service worker 缓存所有内容
  3. 缓存后,应用程序无需任何网络访问即可工作
  4. 用户可以与在同一网络上运行的 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 实例中。

这意味着用户永远不会被锁定在特定的部署中。他们可以随时在自托管实例、官方站点或任何其他主机之间移动。