部署
部署 OpenMAIC 到 Vercel、Docker,或你自己的主机。
OpenMAIC 是一个标准的 Next.js 应用,Next.js 能跑的地方它就能跑。
Vercel(一键)
最快的路径。点仓库 README里的 Deploy 按钮,fork 仓库,按提示填入至少一个 LLM 的 API key 即可。
Vercel 会在每次提交后重新构建并部署 Next.js 应用。部署时需要在项目设置中配置至少一个 LLM 提供方。
Vercel 部署默认使用浏览器端持久化。若需要服务端持久化,请使用外部 PostgreSQL 和服务端部署方案;server-persistence Compose profile 不能直接用于 Vercel。
Docker
仓库里有一份适合生产的 Dockerfile。镜像内部使用 Node.js 22,构建并运行:
docker build -t openmaic .
docker run --env-file .env.local -p 3000:3000 openmaic推荐使用仓库里的 Docker Compose 配置:
cp .env.example .env.local
# 编辑 .env.local,填入至少一个 LLM 提供方的配置,然后:
docker compose up --build默认 Compose 部署会启动 OpenMAIC 应用,并挂载 openmaic-data 数据卷。其他 provider 和功能按需配置,详见配置说明。
NEXT_PUBLIC_* 功能开关会在 Docker 构建时注入,不能只写在运行时的 .env.local 中。例如启用视频导出和实验性 PPTX 导入:
NEXT_PUBLIC_ENABLE_VIDEO_EXPORT=true \
NEXT_PUBLIC_ENABLE_PPTX_IMPORT=true \
docker compose --profile video-export up --build其他客户端功能开关也可以用同样方式传入。若使用 docker build,请改用对应的 --build-arg。
如需使用服务端 provider 配置,把文件挂载到容器内的固定路径:
services:
openmaic:
volumes:
- ./server-providers.yml:/app/server-providers.yml:roDocker 容器中的 localhost 指向容器自身。若 Ollama、Lemonade、VoxCPM 或 ComfyUI 运行在宿主机上,请使用 host.docker.internal,例如 http://host.docker.internal:11434/v1 或 http://host.docker.internal:8188。Linux Docker 通常还需要为 openmaic 服务添加 extra_hosts: ["host.docker.internal:host-gateway"]。其中 ComfyUI 目前不是服务端托管 provider,生产环境还要设置 ALLOW_LOCAL_NETWORKS=true,否则 SSRF 防护会拒绝该地址。
自建虚拟机
主机需要 Node.js 22.19.0 或更高版本,以及 pnpm 10.28.0。用 pnpm 构建并启动:
pnpm install
pnpm build
pnpm start # 默认监听 3000 端口前面套 nginx 或 Caddy 做 TLS 终止。默认情况下,课堂状态保存在浏览器 IndexedDB 中;启用服务端持久化后,运行时数据和课程文档会保存到服务端存储和 PostgreSQL。多实例部署前应先选择合适的持久化方案。
服务端持久化(PostgreSQL)
仓库的 server-persistence profile 会启动 OpenMAIC 和 PostgreSQL 两个容器。持久化 HTTP API 内嵌在 OpenMAIC 中,不需要额外的 persistence 服务。
先在 .env.local 中加入数据库连接和开发令牌:
DATABASE_URL=postgres://openmaic:openmaic-dev@postgres:5432/openmaic
PERSISTENCE_DEV_TOKEN=openmaic-local-dev然后启动 profile:
NEXT_PUBLIC_PERSISTENCE=1 \
NEXT_PUBLIC_PERSISTENCE_TOKEN=openmaic-local-dev \
docker compose --profile server-persistence up --buildNEXT_PUBLIC_PERSISTENCE 和 NEXT_PUBLIC_PERSISTENCE_TOKEN 是构建时变量,必须与运行时的服务端配置匹配。PERSISTENCE_DEV_TOKEN 方案只适合本地或可信内网部署,不提供真正的用户隔离,不应直接作为公开生产环境的认证方案。
PostgreSQL 数据保存在 openmaic-postgres volume 中。PERSISTENCE_POSTGRES_PASSWORD 只会在数据库目录首次初始化时设置密码,之后修改环境变量不会自动修改已有数据库用户密码。
不设置 NEXT_PUBLIC_PERSISTENCE 即保持原有的浏览器端持久化行为。
可选:MP4 视频导出
“导出视频”功能会先在浏览器中生成自包含的 Hyperframes 项目,再由独立的 render-service 使用 Chromium 和 FFmpeg 渲染为 MP4。该服务是可选的,不影响普通课堂生成。
启用 video-export profile:
docker compose --profile video-export up --buildCompose 会通过 RENDER_SERVICE_URL 让 OpenMAIC 连接渲染服务。未启用该 profile,或渲染服务不可用时,导出会退化为下载项目 ZIP,供本地 CLI 渲染。渲染服务使用隔离网络,启动时需要 NET_ADMIN capability;更多限制和独立部署方式见仓库的 render-service/README.md。
环境变量
完整的环境变量和 provider 配置见配置说明。至少要配置一个 LLM 提供方的 key。
访问控制
共享 demo 可以设置 ACCESS_CODE,给整站加密码门。见配置说明 → ACCESS_CODE。