选项 A:Docker(推荐)
无需本地 Python 或 Node.js — 所有内容都在容器内构建。fim-data、fim-uploads)中,容器重启后数据保留。
注意: Docker 模式不支持热重载。代码更改需要重新构建镜像(docker compose up --build -d)。如需进行带实时重载的活跃开发,请使用下面的选项 B。
选项 B:本地开发
前置条件:Python 3.11+、uv、Node.js 18+、pnpm。配置
FIM One 与任何 OpenAI 兼容的 LLM 提供商配合使用 — OpenAI、DeepSeek、Anthropic、Qwen、Ollama、vLLM 等。
Jina AI 解锁网络搜索/获取、嵌入和完整的 RAG 管道(提供免费层)。
最小化
.env:
生产部署
Docker(推荐)
docker compose up -d 启动您需要的所有服务 — 无需手动配置服务:
使用 Workers 扩展
默认情况下,API 运行单个 worker 进程。要处理更多并发用户,请通过.env 增加 workers:
- PostgreSQL — SQLite 是单写入器,不支持并发写入。将
DATABASE_URL设置为 PostgreSQL 连接字符串。 - Redis — 已包含在 Docker Compose 中(自动配置)。处理跨 worker 中断/注入中继。
WORKERS=1(默认值)时,不需要 Redis 或 PostgreSQL — SQLite 可以正常工作。
Nginx 反向代理
对于 HTTPS 和自定义域名,在前面放置一个 Nginx 反向代理:/api/* 请求。只需要暴露端口 3000。
代码执行沙箱
如果您使用代码执行沙箱(CODE_EXEC_BACKEND=docker),请挂载 Docker 套接字:
Cloudflare Tunnel
对于零开放端口的设置,使用 Cloudflare Tunnel 代替 Nginx。所有流量都通过 Cloudflare 的边缘节点流动 — 无需暴露 80/443 端口、管理 SSL 证书或配置防火墙规则。1
创建隧道
前往 Cloudflare Zero Trust → Networks → Tunnels → Create a tunnel。
选择 Cloudflared 作为连接器类型。
2
配置公共主机名
在隧道配置中,添加一个公共主机名:
将所有其他设置(HTTP Host Header、Chunked Encoding、Timeouts、Access)保留为默认值。
URL 使用 Docker 服务名称
fim-one,而不是 localhost,因为 cloudflared 作为同一 Docker 网络中的单独容器运行。3
复制隧道令牌
在隧道的 Configure 页面中,找到安装命令 — 它包含一个以
eyJ... 开头的令牌。复制它。4
将令牌添加到 .env
5
使用隧道覆盖层部署
docker-compose.tunnel.yml 覆盖层添加了一个 cloudflared sidecar 容器。基础 docker-compose.yml 保持不变 — 没有 Cloudflare 的社区用户可以继续使用 docker compose up -d。6
删除旧的 DNS 记录
如果您的域名之前有一条 A 记录指向您的服务器 IP,在 Cloudflare DNS 中删除它。隧道会自动创建一条 CNAME 记录指向其边缘端点。
7
关闭服务器端口
从服务器上的
docker-compose.yml 中删除(或注释掉)ports 部分。流量现在完全通过隧道流动 — 无需入站端口。脚本部署(裸机)
对于裸机服务器或自定义进程管理器,直接使用./start.sh: