☁️ 选项 0:云版本(零配置)
不想自托管?立即在 cloud.fim.ai 尝试 FIM One — 无需 Docker、无需 API 密钥、无需配置。登录即可开始使用。早期访问。
选项 A:Docker(推荐)
无需本地 Python 或 Node.js — 所有内容都在容器内构建。
git clone https://github.com/fim-ai/fim-one.git
cd fim-one
# Configure — only LLM_API_KEY is required
cp example.env .env
# Edit .env: set LLM_API_KEY (and optionally LLM_BASE_URL, LLM_MODEL)
# Build and run (first time, or after pulling new code)
docker compose up --build -d
打开 http://localhost:3000 — 首次启动时,您将被引导创建管理员账户。就这样。
初始构建后,后续启动只需要:
docker compose up -d # start (skip rebuild if image unchanged)
docker compose down # stop
docker compose logs -f # view logs
数据持久化在 Docker 命名卷(fim-data、fim-uploads)中,容器重启后数据保留。
注意: Docker 模式不支持热重载。代码更改需要重新构建镜像(docker compose up --build -d)。如需进行带实时重载的活跃开发,请使用下面的选项 B。
选项 B:本地开发
前置条件:Python 3.11+、uv、Node.js 18+、pnpm。
git clone https://github.com/fim-ai/fim-one.git
cd fim-one
cp example.env .env
# Edit .env: set LLM_API_KEY
# Install
uv sync --all-extras
cd frontend && pnpm install && cd ..
# Launch (with hot reload)
./start.sh
| 命令 | 启动内容 | URL |
|---|
./start.sh | Next.js + FastAPI | http://localhost:3000 (UI) + :8000 (API) |
./start.sh dev | 相同,带热重载(Python --reload + Next.js HMR) | 相同 |
./start.sh dev:api | 仅 API,开发模式(--reload) | http://localhost:8000/api |
./start.sh dev:ui | 仅 Next.js,开发模式(HMR) | http://localhost:3000 |
./start.sh api | 仅 FastAPI(无界面,用于集成或测试) | http://localhost:8000/api |
FIM One 与任何 OpenAI 兼容的 LLM 提供商配合使用 — OpenAI、DeepSeek、Anthropic、Qwen、Ollama、vLLM 等。
| 提供商 | LLM_API_KEY | LLM_BASE_URL | LLM_MODEL |
|---|
| OpenAI | sk-... | (default) | gpt-4o |
| DeepSeek | sk-... | https://api.deepseek.com/v1 | deepseek-chat |
| Anthropic | sk-ant-... | https://api.anthropic.com/v1 | claude-sonnet-4-6 |
| Ollama (本地) | ollama | http://localhost:11434/v1 | qwen2.5:14b |
Jina AI 解锁网络搜索/获取、嵌入和完整的 RAG 管道(提供免费层)。
最小化 .env:
LLM_API_KEY=sk-your-key
# LLM_BASE_URL=https://api.openai.com/v1 # default — change for other providers
# LLM_MODEL=gpt-4o # default — change for other models
JINA_API_KEY=jina_... # unlocks web tools + RAG
有关所有配置选项的完整列表,请参阅环境变量参考。
生产部署
Docker(推荐)
docker compose up -d 启动您需要的所有服务 — 无需手动配置服务:
| 服务 | 用途 | 配置方式 |
|---|
| fim-one | API + 前端 | .env(您的 LLM 密钥等) |
| Redis | 跨工作进程中断中继 | 由 compose 自动配置 |
docker compose up --build -d # first time / after code changes
docker compose up -d # subsequent starts
docker compose logs -f # view logs
docker compose down # stop all services
使用 Workers 扩展
默认情况下,API 运行单个 worker 进程。要处理更多并发用户,请通过 .env 增加 workers:
WORKERS=4 # number of Uvicorn worker processes
多 worker 要求:
- PostgreSQL — SQLite 是单写入器,不支持并发写入。将
DATABASE_URL 设置为 PostgreSQL 连接字符串。
- Redis — 已包含在 Docker Compose 中(自动配置)。处理跨 worker 中断/注入中继。
使用 WORKERS=1(默认值)时,不需要 Redis 或 PostgreSQL — SQLite 可以正常工作。
Nginx 反向代理
对于 HTTPS 和自定义域名,在前面放置一个 Nginx 反向代理:
User → Nginx (443/HTTPS) → localhost:3000
API 在内部运行在端口 8000 — Next.js 自动代理 /api/* 请求。只需要暴露端口 3000。
代码执行沙箱
如果您使用代码执行沙箱(CODE_EXEC_BACKEND=docker),请挂载 Docker 套接字:
# docker-compose.yml
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Cloudflare Tunnel
对于零开放端口的设置,使用 Cloudflare Tunnel 代替 Nginx。所有流量都通过 Cloudflare 的边缘节点流动 — 无需暴露 80/443 端口、管理 SSL 证书或配置防火墙规则。
中国大陆用户:Cloudflare Free/Pro/Business 计划在中国大陆没有 PoP(存在点)。来自中国大陆的流量被路由到海外边缘节点(通常是美国西部),导致频繁的 502 错误和高延迟。如果您的主要用户在中国大陆,不要使用 Cloudflare Tunnel。需要 Cloudflare Enterprise with China Network(JD Cloud 合作)才能可靠地访问中国大陆。
User → Cloudflare Edge (SSL) → Tunnel → cloudflared → fim-one:3000
设置:
配置公共主机名
在隧道配置中,添加一个公共主机名:| 字段 | 值 |
|---|
| Type | HTTP |
| URL | fim-one:3000 |
将所有其他设置(HTTP Host Header、Chunked Encoding、Timeouts、Access)保留为默认值。URL 使用 Docker 服务名称 fim-one,而不是 localhost,因为 cloudflared 作为同一 Docker 网络中的单独容器运行。
复制隧道令牌
在隧道的 Configure 页面中,找到安装命令 — 它包含一个以 eyJ... 开头的令牌。复制它。
将令牌添加到 .env
# Add to your .env file on the server
CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoiNj...
使用隧道覆盖层部署
docker compose -f docker-compose.yml -f docker-compose.tunnel.yml build
docker compose -f docker-compose.yml -f docker-compose.tunnel.yml up -d
docker-compose.tunnel.yml 覆盖层添加了一个 cloudflared sidecar 容器。基础 docker-compose.yml 保持不变 — 没有 Cloudflare 的社区用户可以继续使用 docker compose up -d。删除旧的 DNS 记录
如果您的域名之前有一条 A 记录指向您的服务器 IP,在 Cloudflare DNS 中删除它。隧道会自动创建一条 CNAME 记录指向其边缘端点。
关闭服务器端口
从服务器上的 docker-compose.yml 中删除(或注释掉)ports 部分。流量现在完全通过隧道流动 — 无需入站端口。
Cloudflare Tunnel 在所有计划(包括 Free)上都是免费的。没有带宽或流量限制。
脚本部署(裸机)
对于裸机服务器或自定义进程管理器,直接使用 ./start.sh:
./start.sh # production mode
./start.sh portal # same as above (explicit)
./start.sh api # API only (headless)
在此模式下,Redis 不会自动包含。系统默认以单工作进程、进程内模式运行——适合低流量部署。
要在本地启用带 Redis 的多工作进程:
# Start a Redis instance (Docker or system package)
docker run -d --name redis -p 6379:6379 redis:7-alpine
# Add to .env
REDIS_URL=redis://localhost:6379/0
WORKERS=4
DATABASE_URL=postgresql+asyncpg://user:pass@localhost/fim_one