飞牛 NAS fnOS 部署 Telegram 媒体下载器 完整踩坑指南
Telegram(国内俗称 “纸飞机”)上有大量优质频道资源,tangyoha/telegram_media_downloader 是一款开源的 TG 媒体批量下载工具,支持自动增量下载、文件类型过滤、Web 管理界面等功能。本文基于飞牛 NAS(fnOS)环境,完整记录从配置到部署的全流程,以及过程中遇到的所有坑点与解决方案。
一、前置准备
1.1 获取 Telegram API 凭证
程序通过 Telegram 官方 API 连接账号,需要先申请 api_id 和 api_hash:
打开官方申请页面:https://my.telegram.org/apps
登录你的 Telegram 账号,按提示填写应用名称和描述
提交后即可获得
api_id(数字)和api_hash(字符串),妥善保存
1.2 飞牛 NAS 开启 SSH 并登录
飞牛后台 → 设置 → 安全 → 开启 SSH 开关
使用终端工具(如 PowerShell、Xshell)连接 NAS,命令格式:
ssh 管理员账号@你的NAS内网IP输入管理员密码登录,执行
sudo -i切换到 root 权限
💡 踩坑提醒:fnOS 基于 Debian,SSH 服务名为
ssh,不是sshd。如果修改配置后重启失败,使用systemctl restart ssh命令,不要用sshd。
1.3 创建工作目录
选择你的存储池路径,创建项目目录和必要子目录 / 文件:
# 进入你的存储目录,示例路径请替换为自己的
cd /vol1/1000/raid10
mkdir -p tg_downloader/{sessions,log,temp,downloads}
cd tg_downloader
# 必须提前创建空文件,否则Docker会误建为同名目录
touch data.yaml
二、编写核心配置文件
在项目目录下创建 config.yaml,这是程序的核心配置,所有参数提前写好即可实现免交互启动。
2.1 最小可用配置模板
api_hash: 你申请的api_bash
api_id: 你申请的纸飞机id
chat:
- chat_id: -1004375565798
last_read_message_id: 0
file_formats:
audio:
- all
document:
- all
video:
- all
file_path_prefix:
- chat_title
- media_datetime
media_types:
- audio
- photo
- video
- document
- voice
- video_note
# in linux please use /
# save_path: E:\github\telegram_media_downloader
2.2 关键注意事项
YAML 格式严格缩进,只能用空格,不能用 Tab
chat_id可通过 网页版地址栏获取
三、首次登录:必须前台交互启动
3.1 为什么不能直接后台启动
程序首次运行需要输入验证码完成登录。如果直接后台启动容器,没有交互输入流,程序会瞬间读到 EOF 并报错退出,这也是很多人遇到 “容器启动就闪退” 的核心原因。
飞牛 Docker 面板的「查看日志」窗口是纯只读的,无法输入内容,必须通过 SSH 命令行操作。
3.2 前台交互式启动命令
在项目目录下执行:
docker run -it --rm \
-v ./config.yaml:/app/config.yaml \
-v ./data.yaml:/app/data.yaml \
-v ./sessions:/app/sessions \
-v ./log:/app/log \
-v ./temp:/app/temp \
-v ./downloads:/app/downloads \
tangyoha/telegram_media_downloader:latest
3.3 登录操作步骤
命令执行后,程序会读取配置中的手机号,等待输入验证码
打开你的 TG 客户端(手机 / 网页版),查看官方发送的验证码
在终端输入验证码,回车
若账号开启了二步验证,再输入二步验证密码,回车
看到程序开始连接服务器、扫描频道,说明登录成功
按
Ctrl+C停止容器即可。--rm参数会自动删除临时容器,登录凭证已保存在本地sessions目录,不会丢失
四、Docker Compose 后台常驻部署
登录完成后,使用 Compose 配置后台常驻运行,后续直接在飞牛面板即可管理。
4.1 docker-compose.yml 配置
在项目目录下创建 docker-compose.yml:
services:
telegram_media_downloader:
image: tangyoha/telegram_media_downloader:latest
container_name: tg_downloader
restart: unless-stopped
volumes:
- ./config.yaml:/app/config.yaml
- ./data.yaml:/app/data.yaml
- ./sessions:/app/sessions
- ./log:/app/log
- ./temp:/app/temp
- ./downloads:/app/downloads
ports:
- "5000:5000" # WebUI 端口
environment:
- TZ=Asia/Shanghai
4.2 启动与验证
# 后台启动
docker compose up -d
# 查看运行日志
docker compose logs -f
正常启动后,程序会自动扫描配置的频道,按规则增量下载文件。浏览器访问 http://你的NAS_IP:8000 可进入 Web 管理界面。
五、高频报错与解决方案
5.1 报错:Failed to restart sshd.service
原因:fnOS 基于 Debian,SSH 服务名是 ssh,不是 CentOS 系的 sshd。 解决:使用正确命令重启服务
systemctl restart ssh
5.2 报错:not a directory 挂载失败
完整报错:error mounting ... not a directory: unknown: Are you trying to mount a directory onto a file 原因:宿主机上 data.yaml / config.yaml 不存在,Docker 会自动创建同名目录,导致文件挂载类型不匹配。 解决:删除错误目录,重建为空文件
rm -rf data.yaml
touch data.yaml
5.3 报错:EOFError 容器启动就闪退
完整报错:EOFError: EOF when reading a line 原因:
config.yaml未填写手机号,程序进入交互输入模式后台启动容器无输入流,程序读取不到输入直接崩溃 解决:
补全
config.yaml中的phone_number按本文第三步,前台交互启动一次完成登录
5.4 飞牛 Docker 面板日志窗口无法输入
原因:面板的日志查看窗口是只读输出,不支持标准输入。 解决:所有需要交互的操作,统一通过 SSH 命令行执行。
六、补充说明
登录持久化:只要
sessions目录不删除,容器重启、重建、升级镜像都无需重新登录。自动增量下载:在配置中开启
daemon模式,设置检查间隔,程序会定时轮询频道自动下载新内容。文件管理:下载的文件保存在
downloads目录,可通过飞牛的文件管理、SMB 共享直接访问。安全提示:公网环境不建议暴露 WebUI 和 SSH 端口,建议仅内网使用。
七、总结
飞牛 NAS 部署 TG 下载器的核心坑点集中在「首次登录交互」和「文件挂载类型」上。只要遵循「先前台交互登录 → 再后台常驻运行」的流程,提前创建好挂载文件,就能顺利跑通服务。后续日常使用几乎无需维护,程序会自动按配置完成媒体下载。