为了数据隐私与安全我们经常面临一个现实问题:需要一个稳定、安全的知识库系统,但动辄数万元的AI服务器让人望而却步。
直到我自己动手用Cloudflare Tunnel + Windows服务搭建了一套私有化部署方案后,才意识到:有些看起来"高大上"的需求,本质上是几个开源工具和系统配置的组合。
这篇文章记录了我从零到一的完整实践过程,核心目标是用最低成本(仅需一个域名),实现三个生产级需求:永久在线、权限分级、开机自启。
方案核心架构
在进入操作步骤前,先理解这套方案的技术逻辑:
| 模块 | 功能定位 | 成本 |
|---|---|---|
| 域名 | 统一入口,便于记忆和分享 | 20-30元/年 |
| Cloudflare Tunnel | 内网穿透,无需公网IP | Free(无成本) |
| Cloudflare Access | 身份认证,权限隔离 | Free(无成本) |
| Windows Service | 开机自启,永不掉线 | 系统原生(无成本) |
这四个组件协同工作:用户访问域名 → Cloudflare解析 → Tunnel穿透内网 → 本地RAGFlow响应 → Access层验证权限。全链路0软件成本。
第一步:购置域名并接入Cloudflare
目的:为系统建立统一、永久的访问地址
1.1 选购域名
- 进入腾讯云、阿里云或Namecheap等域名注册商
- 避免.com(70元+/年),优先选择.top、.xyz、.online等二级域名(20-30元/年)
- 购买时长选1年即可,后续可按需续费
1.2 将域名接入Cloudflare
这一步是关键。我们需要将域名的DNS解析权从注册商转移到Cloudflare,以便使用其免费的隧道和防火墙功能。
操作流程:
- 注册Cloudflare账号(https://www.cloudflare.com),选择免费套餐
- 登录后点击"Add a Site",输入刚购买的域名
- 系统会显示两个Nameservers地址,形如:
xxx.ns.cloudflare.com
xxx.ns.cloudflare.com
- 复制这两个地址
- 返回域名注册商后台(以腾讯云为例)→ 域名管理 → 修改DNS服务器
- 删除原有DNS,粘贴Cloudflare提供的两个地址
- 等待5-15分钟,Cloudflare显示绿色"Active"状态即成功
验证方法:在终端执行 nslookup 你的域名,若返回Cloudflare的IP地址,则接入成功。
第二步:建立Cloudflare Tunnel隧道
目的:实现内网穿透,让外网用户无需公网IP也能访问本地RAGFlow
2.1 进入Zero Trust控制台
- Cloudflare后台 → 左侧菜单"Zero Trust"
- 首次进入需填写团队名称(任意),选择Free Plan
- 系统会要求绑定Visa/MasterCard或PayPal进行身份验证
说明:这仅用于防止滥用,Free Plan不会产生任何扣费
2.2 创建隧道
- Zero Trust后台 → Networks → Tunnels → "Create a tunnel"
- 选择"Cloudflared"作为连接器类型
- 为隧道命名(建议使用项目相关名称,如"rag-knowledge-base")
- 点击"Save tunnel",进入下一步
2.3 安装Cloudflared服务(Windows)
这是确保永不掉线的关键步骤。我不使用Docker容器方案,而是将其安装为Windows原生服务——这样即使电脑未登录桌面、仅保持通电状态,隧道也会自动运行。
操作步骤:
- 在Cloudflare隧道界面,找到"Install and run a connector"部分
- 选择Windows系统,下载cloudflared-windows-amd64.msi文件
- 双击运行安装程序,按默认配置安装
- 打开管理员命令行:
按Win键搜索"cmd"
右键选"以管理员身份运行"(这一步不能省略)
- 回到Cloudflare网页,复制"Windows Service"部分那条以
cloudflared.exe service install开头的长命令(通常包含Token和隧道ID) - 在管理员cmd窗口粘贴这条命令,按回车执行
- 等待安装完成,提示成功后可关闭cmd
- 回到Cloudflare网页,刷新后若看到Connector状态为绿色"Connected",则隧道建立成功
验证方法:重启电脑,Cloudflare后台应在30秒内显示隧道连接状态为Active。
第三步:配置权限分级访问
目的:区分用户权限——员工只能查询,管理员拥有完整后台权限
这一步的设计理念是:通过子域名和Page Rules实现流量自动分流,通过Access Policy实现身份认证。
3.1 创建员工查询通道(chat子域名)
背景需求:员工需要能查看知识库内容和PDF原文,但不能接触后台管理界面。
操作流程:
步骤1:获取RAGFlow分享链接
- 登录本地RAGFlow系统
- 进入知识库 → Chat → 选择要分享的对话或知识库
- 点击"Share",系统生成一条长链接(形如:http://127.0.0.1/xxxxx?token=xxxxxx)
- 复制这条完整链接(后续会用到)
步骤2:在Tunnel中添加子域名映射
- Cloudflare Zero Trust → Networks → Tunnels → 选择已创建的隧道
- 点击"Public Hostname"选项卡 → "Add public hostname"
- 填写如下信息:
Subdomain:chat
Domain:你的域名.com
Service type:HTTP
URL:http://127.0.0.1:80(根据本地RAGFlow实际端口调整)
点击"Save"
步骤3:配置Page Rule实现自动跳转
这一步很关键。我们需要让用户访问chat子域名时,自动跳转到RAGFlow的分享链接,但只跳转首页,不跳转子路径。为什么?因为如果全部跳转,员工点击"查看原文"下载PDF时请求会被拦截。
- Cloudflare后台 → Websites → 选择你的域名 → Rules → Page Rules
- 点击"Create Page Rule"
- 填写URL:
chat.你的域名.com/(必须以/结尾,不要加*号) - Setting选择"Forwarding URL"
- 状态码选"302 Temporary Redirect"
- Destination URL粘贴第一步复制的RAGFlow分享链接
- 点击"Save and Deploy"
效果验证:在浏览器访问 chat.你的域名.com,应自动跳转到RAGFlow对话界面。员工可查看历史消息和PDF,但找不到登录口。
3.2 创建管理员后台通道(admin子域名)
背景需求:仅管理员能访问完整后台,执行文件上传、知识库编辑等操作。
步骤1:添加admin子域名映射
- Cloudflare Zero Trust → Networks → Tunnels → "Public Hostname"
- 点击"Add public hostname"
- 配置信息:
Subdomain:admin
Domain:你的域名.com
Service type:HTTP
URL:http://127.0.0.1:80
保存
步骤2:配置Access策略(身份验证)
这一步为admin域名添加邮箱验证锁,只有授权邮箱收到的验证码才能进入。
- Cloudflare Zero Trust → Access → Applications → "Add an application"
- 选择"Self-hosted"(自托管应用)
- 填写应用信息:
- Application name:RAGFlow Admin
- Session duration:选择"12 hours"(登录有效期)
- 点击"Next",进入Application settings
- Subdomain:admin
- Domain:你的域名.com
- 点击"Next",进入Policy配置
- 新建一条Policy Rule:
- Rule name:Manager Only
- Selector:选择"Email"
- Value:填入你自己的邮箱地址
- Action:Allow
- 保存Policy
- 完成应用创建
效果验证:访问 admin.你的域名.com 时,系统要求输入邮箱,然后发送6位验证码。仅输入正确验证码才能进入RAGFlow后台。
安全说明:RAGFlow本身也需要账号密码认证,此Access Policy是第二层防护,确保即使密码泄露也难以被攻击。
第四步:远程API调用
目的:将本地RAGFlow转变为远程服务,支持脚本、机器人、第三方系统调用
到这一步,系统的价值不仅是"在线查询工具",而是成为了一个远程可调用的AI中枢。
4.1 远程文件上传
你不再需要远程桌面连回公司。可以在家直接调用API上传新文件。
示例脚本(Python):
import requests
# RAGFlow API上传端点
url = "https://admin.你的域名.com/api/v1/document/upload"
# 上传参数
files = {"file": open("新收到的图纸.pdf", "rb")}
data = {
"knowledge_base_id": "你的知识库ID", # 从后台获取
}
# 验证信息(如果access有配置,需先获取token;如果没配置则直接调用)
headers = {
"Authorization": "Bearer your_ragflow_token" # RAGFlow API密钥
}
response = requests.post(url, files=files, data=data, headers=headers)
print(response.json())
4.2 与微信/飞书机器人集成
可将RAGFlow作为后端知识库,在团队通讯工具中创建机器人,直接查询。实现路径:
- 微信/飞书接收用户消息 → 调用 https://admin.你的域名.com/api/v1/chat/completions → 返回AI回复
- 中间可用n8n、Make等无代码平台快速集成
4.3 与Claude Code、GPT联动
将RAGFlow的API Key配置到Claude Code或Custom GPT中,让大模型随时调用你的本地知识库。这样可实现:
- 用Claude分析某个问题时,自动检索本地工程规范
- 让GPT基于最新数据生成报告
常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 隧道显示"Disconnected" | Cloudflared服务未运行 | 检查Windows服务:按Win+R输入services.msc,找到"Cloudflared"服务,确保状态为"Running" |
| 访问chat域名提示404 | Page Rule配置错误或RAGFlow分享链接过期 | 检查Rule中的URL是否以/结尾;重新生成分享链接 |
| Cloudflare Access验证码收不到 | 邮箱地址填写错误或垃圾邮件过滤 | 检查垃圾邮件文件夹;确认Cloudflare后台邮箱配置正确 |
| 电脑重启后隧道未自动连接 | Cloudflared服务未设为自启 | 进services.msc,右键Cloudflared → 属性 → 启动类型改为"自动" |
| Page Rule跳转后PDF无法下载 | Rule配置了全路径转发(加了*号) | 编辑Rule,URL改为 chat.你的域名.com/(仅/,不加*) |
安全性建议
- 定期更换访问链接:每季度重新生成RAGFlow分享链接,使旧链接失效
- 启用Access MFA:可在Cloudflare Access中配置多因素认证,增加admin层防护
- 限制API调用频率:在RAGFlow或Cloudflare处配置Rate Limit,防止滥用
- 监控访问日志:Cloudflare Analytics提供完整的访问记录,定期审查异常登录
- 本地防火墙配置:Windows防火墙仅允许RAGFlow所在端口被Cloudflared访问
个人总结
这套方案本质上是对几个成熟开源工具的系统组合——Cloudflare的免费隧道解决了"无公网IP"的难题,Windows Service解决了"永久在线"的难题,子域名+Page Rules+Access解决了"权限隔离"的难题。
从产品角度看,我最大的收获是:很多看起来需要专业团队和高额成本的需求,实际上是多个成熟系统的正交组合。关键不在技术复杂度,而在需求分解能力和细节配置。
如果你的团队有类似需求(知识库分享、权限管理、远程协作),这套方案值得尝试。全程投入不超过100元,实现的功能足以覆盖大多数中小团队的生产需求。更重要的是,你完全掌控数据——知识库永远在自己的电脑上,没有第三方依赖,也没有续费压力。
下一步,我计划继承这套基础设施,接入更多场景——比如自动化文件处理、与ERP系统的数据同步等。有兴趣的话,后续再分享这些拓展方案。
有问题欢迎评论讨论!