用一台 AI 工作台运维家里的 NAS 音乐+读书应用,一个人管 14 万资源也不累
背景:一个人维护一个小豆瓣 我在家里的 NAS 上跑了一个自建应用 MusicFlow,整合了音乐播放、读书记录、下载、BPM 分类和读者设置。规模不算小:音乐库 1400+ 首,图书库 10 万+ 本。 安全声明:下面所有网络细节(IP、端口、设备型号、运营商)均为示例值,真实环境请一律脱敏,不要对外暴露家庭网络入口。本文只讲思路。 一个人维护这么一套东西,最头疼的不是写功能,而是零散的运维琐事:批量整理音乐元数据、排查外网访问、定时跑维护脚本。后来我把 WorkBuddy 当成半个运维同事,把这类活儿交给它,效率提升很明显。下面是三个真实场景(细节已脱敏)。 场景一:批量给音乐库做 BPM 分类 音乐库有 1400+ 首,我想按 BPM(每分钟节拍数)自动分组,方便跑步时挑歌。手工一首首测不现实,我直接对 WorkBuddy 说: 帮我写个 Python 脚本,遍历音乐目录下的音频文件,用 librosa 估算每首歌的 BPM,按慢(0-100)/中(100-128)/快(128+)三档写入一个 CSV。 它给出的脚本核心逻辑如下: import librosa, os, csv, glob rows = [] for f in glob.glob(/volume1/music/**/*.mp3, recursive=True): # 示例路径 y, sr = librosa.load(f, duration=30) bpm = librosa.beat.beat_track(y=y, sr=sr)[0] if bpm < 100: band = slow elif bpm < 128: band = mid else: band = fast rows.append((os.path.basename(f), round(float(bpm), 1), band)) with open(/volume1/music/bpm_index.csv, w, newline=") as fp: csv.writer(fp).writerows([(file, bpm, band)] + rows) 我让它直接在 NAS 的 Python 环境里跑(WorkBuddy 能操作本地授权目录),十几分钟就生成了 bpm_index.csv。它还会提醒我:librosa 首次加载会下载模型,断网环境要提前缓存——这个坑它提前说中了。 场景二:排查 NAS 端口转发打不开 我想把 MusicFlow 的两个端口(示例:web 8080 / api 8081)从公网放出去,在家用路由器上配了转发却一直连不上。我对 WorkBuddy 描述现象后,它给了一个排查清单,按顺序验: 1. 确认 NAS 本机监听:ss -ltnp | grep -E 8080|8081,确认服务真在监听这两个端口。 2. 确认路由器转发规则:外部端口 8080/8081 → 内部 192.168.1.100:8080/8081(内网 IP 用示例),协议 TCP。 3. 确认 ISP 没封端口:家用宽带常封 80/443/8080,自定义端口一般没事,但可用 telnet 你的域名 8080 从手机流量测(用 DDNS 域名,别写真实公网 IP)。 4. 确认公网 IP 没变:家用宽带 IP 会漂移,得用 DDNS,否则转发目标失效。 5. 确认防火墙:NAS 自带的「防火墙」和「路由器防火墙」两层都要放行。 按这个顺序走,我定位到是 DDNS 没刷新 + NAS 防火墙那层没放行 api 端口,两处改完外网就能连了。它没让我瞎试,而是按网络分层逐步缩小范围,这点很省时间。 场景三:把每日维护变成自动任务 MusicFlow 每天要跑一次「图书库去重 + 索引刷新」。我让 WorkBuddy 帮我建了一个定时任务:每天凌晨 3 点自动执行维护脚本,失败就报错。它用客户端内置的自动化能力配好调度,我基本不用再管。 提示:WorkBuddy 的定时任务入口在对话里直接说「每天 X 点帮我做 XX」即可,它会创建 recurring 任务。 踩坑记录(值得记一笔) - 端口转发的根因往往是多层防火墙 + DDNS 漂移,不要只盯着路由器那一页配置。 - librosa 依赖 ffmpeg,NAS 上要先用包管理器装好,否则 librosa.load 会静默失败。 - 公网 IP 漂移是家用宽带的常态,外网访问一定要配 DDNS,不要硬编码真实公网 IP。 - 隐私优先:对外分享任何运维经验前,IP 地址、端口号、路由器/NAS 型号、运营商信息一律脱敏或改用示例值。暴露家庭公网入口 = 给攻击者递地图,这比功能本身重要得