协作平台文件通过 Cloudflare 受控访问的工程化记录
把群文件自动保存、受控浏览和外网访问拆成可复盘的工程链路,并隐藏域名、路径、端口和凭据信息。
目录
1. 目标2. 最终链路3. 机器分工3.1 懒猫微服 / aiagent3.2 Cloudflare3.3 阿里云 ECS4. DNS 接管流程4.1 在 Cloudflare 添加域名4.2 在阿里云修改 Nameserver4.3 验证 Nameserver5. Cloudflare Tunnel 配置5.1 授权 cloudflared5.2 创建 named tunnel5.3 添加 DNS 路由5.4 cloudflared 配置6. File Browser 文件管理器6.1 选择原因6.2 安装位置6.3 数据库位置6.4 文件根目录6.5 服务7. Cloudflare Access 配置7.1 作用7.2 创建 Access 应用7.3 验证 Access 生效8. 本地代理层8.1 为什么保留 受控代理端口8.2 服务9. 协作平台群文件自动保存9.1 脚本位置9.2 保存目录9.3 已下载记录9.4 关键环境9.5 手动运行验证10. 运行状态检查10.1 检查服务10.2 检查 Tunnel10.3 检查公网访问10.4 检查本地文件管理器10.5 检查本地代理11. 故障排查11.1 页面显示“暂无文件”11.2 File Browser 登录提示“用户名或密码错误”11.3 访问 files.example.com 没有跳转 Access11.4 cloudflared 提示找不到 cert.pem11.5 协作平台 CLI 报 not configured12. 安全注意事项12.1 不要公开固定密码12.2 Cloudflare API Token12.3 文件存储位置13. 当前最终状态协作平台群文件受控访问教程
日期:2026-05-11
1. 目标
把协作平台群聊里的文件自动保存到懒猫微服服务器本地,并通过一个安全的公网入口访问:
https://files.example.com/
最终效果:
- 协作平台群里上传的 Excel、PDF、图片等文件会被自动下载到服务器本地。
- 文件按群名分文件夹保存。
- 浏览器打开
files.example.com时,先经过 Cloudflare Access 登录验证。 - 验证通过后进入 File Browser 文件管理器,可以搜索、排序、预览和下载文件。
- 文件本体仍保存在懒猫微服本地,不保存在 Cloudflare,也不保存在阿里云 ECS。
2. 最终链路
协作平台群聊文件
↓
懒猫微服上的群文件监控脚本,每 5 分钟轮询
↓
<群文件目录>/<群名>/
↓
File Browser: 本机文件服务端口
↓
本地代理: 本机受控代理端口
↓
Cloudflare Tunnel: lanmao-files
↓
Cloudflare Access
↓
https://files.example.com/
3. 机器分工
3.1 懒猫微服 / aiagent
这是本方案的核心机器。
作用:
- 保存协作平台群文件。
- 运行协作平台轮询脚本。
- 运行 File Browser 文件管理器。
- 运行 cloudflared tunnel。
关键路径:
<群文件目录>
<脚本目录>/群文件监控脚本.py
<脚本目录>/文件浏览认证代理.py
<filebrowser 数据库路径>
<cloudflared 配置路径>
3.2 Cloudflare
作用:
- 接管
aicorevision.com的 DNS。 - 提供公网 HTTPS 入口。
- 通过 Tunnel 把公网请求转发到懒猫微服本地服务。
- 通过 Cloudflare Access 做邮箱/身份验证。
3.3 阿里云 ECS
当前主站由静态站托管,旧服务器仅作为历史迁移背景:
https://aicorevision.com
https://www.aicorevision.com
它不参与群文件保存链路。
4. DNS 接管流程
4.1 在 Cloudflare 添加域名
在 Cloudflare 添加:
aicorevision.com
Cloudflare 会扫描现有 DNS 记录,至少应保留:
A @ 139.224.58.80
A www 139.224.58.80
代理状态建议保持橙色云朵 Proxied。
4.2 在阿里云修改 Nameserver
阿里云修改位置不是“云解析 DNS”,而是:
域名控制台 -> aicorevision.com -> 管理 -> DNS 修改 / DNS服务器修改
把原来的:
dns23.hichina.com
dns24.hichina.com
改成 Cloudflare 提供的:
brad.ns.cloudflare.com
shaz.ns.cloudflare.com
注意:
- 一行一个 nameserver。
- 不要加
https://。 - 不要加
/。 - 不要加末尾句号。
4.3 验证 Nameserver
Windows PowerShell:
Resolve-DnsName -Type NS aicorevision.com -Server 1.1.1.1
Resolve-DnsName -Type NS aicorevision.com -Server 8.8.8.8
期望看到:
brad.ns.cloudflare.com
shaz.ns.cloudflare.com
本机 DNS 可能还缓存阿里云 nameserver,一般等 TTL 过期即可。
5. Cloudflare Tunnel 配置
5.1 授权 cloudflared
服务器上运行:
cloudflared tunnel login
打开输出的授权链接,选择:
aicorevision.com
授权成功后,服务器会生成:
<cloudflared 配置路径>
5.2 创建 named tunnel
创建 tunnel:
cloudflared tunnel create lanmao-files
当前 tunnel 信息:
Tunnel name: lanmao-files
Tunnel ID: <tunnel-id>
5.3 添加 DNS 路由
cloudflared tunnel route dns lanmao-files files.example.com
Cloudflare 会自动创建:
CNAME files.example.com -> <tunnel-id>.cfargotunnel.com
5.4 cloudflared 配置
配置文件:
<cloudflared 配置路径>
最终应类似:
tunnel: <tunnel-id>
credentials-file: <cloudflared 配置路径>
ingress:
- hostname: files.example.com
service: http://本机受控代理端口
- service: http_status:404
6. File Browser 文件管理器
6.1 选择原因
选用开源项目:
filebrowser/filebrowser
原因:
- 单二进制部署。
- 内置 Web 文件管理器。
- 支持搜索、排序、文件类型图标、预览和下载。
- 比手写目录页稳定。
6.2 安装位置
<filebrowser 可执行文件>
版本:
File Browser v2.63.3
6.3 数据库位置
<filebrowser 数据库路径>
6.4 文件根目录
<群文件目录>
6.5 服务
File Browser 监听:
本机文件服务端口
systemd 用户服务:
lanmao-filebrowser.service
检查:
systemctl --user status lanmao-filebrowser.service
curl -I http://本机文件服务端口/
7. Cloudflare Access 配置
7.1 作用
Cloudflare Tunnel 只负责“连通”:
files.example.com -> 懒猫微服本地服务
Cloudflare Access 负责“谁能访问”:
未登录用户 -> 跳转到 Cloudflare Access 登录页
通过邮箱验证码或身份验证 -> 进入 File Browser
7.2 创建 Access 应用
Cloudflare 控制台:
Zero Trust -> Access -> Applications -> Add an application
选择:
Self-hosted / Connect a private web application
应用配置:
Application name: 懒猫微服群文件
Subdomain: files
Domain: aicorevision.com
Path: 留空
最终域名:
files.example.com
内部服务:
Internal hostname or IP: 本机回环地址
Protocol: HTTP
Port: 受控代理端口
策略:
Policy name: Allow my email
Action: Allow
Include: Emails
Email: 你的邮箱
如果提示选择登录方式,启用:
One-time PIN
7.3 验证 Access 生效
未登录访问:
curl -I https://files.example.com/
期望:
HTTP/1.1 302 Found
Location: https://aicorevision.cloudflareaccess.com/...
Www-Authenticate: Cloudflare-Access ...
这说明访问已被 Cloudflare Access 拦截。
8. 本地代理层
8.1 为什么保留 受控代理端口
Cloudflare 向导里把源站配置成:
本机受控代理端口
所以保留一个本地代理服务:
本机受控代理端口 -> 本机文件服务端口
当前它不再做固定 Basic Auth,真正认证由 Cloudflare Access 完成。
8.2 服务
lanmao-file-server.service
脚本:
<脚本目录>/文件浏览认证代理.py
检查:
systemctl --user status lanmao-file-server.service
curl -I http://本机受控代理端口/
9. 协作平台群文件自动保存
9.1 脚本位置
主脚本:
<脚本目录>/群文件监控脚本.py
Hermes Cron 使用副本:
<Hermes 脚本目录>/群文件监控脚本.py
9.2 保存目录
<群文件目录>/<群名>/
示例:
<群文件目录>/<群聊 A>/
<群文件目录>/<群聊 B>/
9.3 已下载记录
<群文件目录>/.已下载消息记录.json
作用:防止重复下载。
9.4 关键环境
脚本必须能找到 Hermes 的协作平台配置:
HERMES_HOME=<Hermes 配置目录>
LARK_CLI_NO_PROXY=1
COLLAB_CLI_BIN=<服务器用户目录>/.local/node/bin/协作平台 CLI
否则 协作平台 CLI 会报:
not configured
9.5 手动运行验证
cd <群文件目录>
python3 <脚本目录>/群文件监控脚本.py
正常输出类似:
📋 已下载记录: 4 条
💬 检测到 2 个内部群聊
🔍 检查: 🏡 暖暖小家
🔍 检查: 兢兢业业为公司
✅ 本次新增下载: 0 个文件
10. 运行状态检查
10.1 检查服务
systemctl --user status lanmao-filebrowser.service
systemctl --user status lanmao-file-server.service
systemctl --user status lanmao-file-tunnel.service
systemctl --user status hermes-gateway.service
快速检查:
systemctl --user is-active lanmao-filebrowser.service lanmao-file-server.service lanmao-file-tunnel.service hermes-gateway.service
10.2 检查 Tunnel
cloudflared tunnel info lanmao-files
10.3 检查公网访问
未登录时:
curl -I https://files.example.com/
期望跳转到:
aicorevision.cloudflareaccess.com
10.4 检查本地文件管理器
curl -I http://本机文件服务端口/
期望:
HTTP/1.1 200 OK
10.5 检查本地代理
curl -I http://本机受控代理端口/
期望:
HTTP/1.1 200 OK
11. 故障排查
11.1 页面显示“暂无文件”
原因:目录下存在旧的 index.html,Python 简易文件服务器优先返回它。
处理:
cd <群文件目录>
mv index.html index.html.disabled_$(date +%Y%m%d_%H%M%S)
systemctl --user restart lanmao-file-server.service
当前已切换到 File Browser,正常不再依赖这个旧页面。
11.2 File Browser 登录提示“用户名或密码错误”
历史原因:把已哈希密码当成明文写入,导致二次哈希。
当前最终方案已经不使用 File Browser 自己的登录页,而由 Cloudflare Access 认证。
11.3 访问 files.example.com 没有跳转 Access
检查 Cloudflare Access 应用是否存在:
Zero Trust -> Access -> Applications
确认应用域名:
files.example.com
确认策略允许你的邮箱。
11.4 cloudflared 提示找不到 cert.pem
说明还没完成 Cloudflare 授权。
重新运行:
cloudflared tunnel login
打开链接选择 aicorevision.com。
11.5 协作平台 CLI 报 not configured
确保命令环境包含:
export HERMES_HOME=<Hermes 配置目录>
测试:
HERMES_HOME=<Hermes 配置目录> 协作平台 CLI config show
12. 安全注意事项
12.1 不要公开固定密码
之前的固定密码仅用于临时 Basic Auth。现在 Cloudflare Access 已替代它。
教程中不记录固定密码明文。若需要查看旧环境变量:
临时密码读取命令已隐藏。
12.2 Cloudflare API Token
配置完成后,应删除或吊销临时 API Token。
不要使用 Global API Key。
如果未来重新自动化,需要自定义 API Token,权限至少包括:
Account -> Access: Apps and Policies -> Edit
Account -> Access: Apps and Policies -> Read
Zone -> DNS -> Edit
Zone -> Zone -> Read
12.3 文件存储位置
文件只保存在:
<群文件目录>
Cloudflare 不长期保存文件,阿里云 ECS 也不保存这套群文件。
13. 当前最终状态
入口:
https://files.example.com/
公网认证:
Cloudflare Access
文件管理器:
File Browser v2.63.3
本地服务:
本机受控代理端口 -> 本地代理
本机文件服务端口 -> File Browser
文件目录:
<群文件目录>
核心服务:
lanmao-filebrowser.service
lanmao-file-server.service
lanmao-file-tunnel.service
hermes-gateway.service
最终认证链路:
Cloudflare Access 邮箱/身份验证
↓
File Browser 文件管理器