标签 NAS 下的文章




我有一台有公网的服务器,用这台服务使用 wireguard (内核自带功能)把家庭网络和办公室网络打通,可以直接在办公室通过家里的内网 IP 地址访问家里的所有设备和其他虚拟机(包含 NAS),NAS 本身就是可以通过飞牛的 FN Connect 访问,打通内网的意义想要在公司无缝访问家里的所有 IP 地址。整个链路没有端口转发,全是 VPN 隧道。

  1. 物理机直接安装 ubuntu, 所有应用都部署在 docker
  2. ssh 只允许密钥登录, 禁止 root 用户登录
  3. 所有访问( http, tcp)都通过 nginx 代理, ufw 只暴露固定的几个端口, nginx 开启 https 证书
  4. nginx 配置 geolite2, 禁止任何 国外 ip 访问, 异常访问基本都是国外 ip
  5. fail2ban 自动封禁所有 nginx 日志里面国外 ip
  6. 不安装 1panel,宝塔等任何 web 管理工具, 直接 ssh 到机器上命令行管理

分享下我的 nginx 配置

load_module "modules/ngx_http_geoip2_module.so";
load_module "modules/ngx_stream_geoip2_module.so";

worker_processes 4;

error_log /var/log/nginx/nginx_error.log;
error_log /var/log/nginx/nginx_error.log notice;
error_log /var/log/nginx/nginx_error.log info;

pid /var/log/nginx/nginx.pid;

events {
    worker_connections 1024;
}


http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
      auto_reload 24h;
      $geoip_country_code  default=Unknown source=$remote_addr country iso_code;
      $geoip_country_name  country  names  en;
    }
    geoip2 /etc/nginx/geoip/GeoLite2-City.mmdb {
      auto_reload 24h;
      $geoip_city   default=Unknown city names en;
    }

    map $geoip_country_code $allowed_country {
        default no;
        CN yes;
    }

    map $remote_addr $allowed {
        default $allowed_country;
        127.0.0.1 yes;
        ~^192\.168\.\\d+\.\\d+$ yes;
        ~^172\.16\.0\.\\d+$ yes;
        ~^172\.17\.\\d+\.\\d+$ yes;
    }

    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' "";
    }

    log_format json_analytics escape=json '{'
    '"timestamp": "$msec", ' # request unixtime in seconds with a milliseconds resolution
    '"request_id": "$request_id", ' # the unique request id
    '"request_length": "$request_length", ' # request length (including headers and body)
    '"body_bytes_sent": "$body_bytes_sent", '
    '"remote_addr": "$remote_addr", ' # client IP
    '"time_iso8601": "$time_iso8601", '
    '"request_uri": "$request_uri", ' # full path and arguments if the request
    '"code": "$status", ' # response status code
    '"http_host": "$http_host", ' # the request Host: header
    '"server_name": "$server_name", ' # the name of the vhost serving the request
    '"request_time": "$request_time", ' # request processing time in seconds with msec resolution
    '"upstream": "$upstream_addr", ' # upstream backend server for proxied requests
    '"request_method": "$request_method", ' # request method
    '"allowed": "$allowed", '
    '"geoip_country_code": "$geoip_country_code", '
    '"geoip_country_name": "$geoip_country_name", '
    '"geoip_city": "$geoip_city"'
    '}';

    access_log /var/log/nginx/access.log json_analytics;
    error_log /var/log/nginx/error.log warn;

    set_real_ip_from 0.0.0.0/0;
    real_ip_header X-Real-IP;
    real_ip_recursive on;

    sendfile on;
    server_tokens off;
    keepalive_timeout 65;

    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    proxy_buffering off;
    proxy_buffers 4 128k;
    proxy_buffer_size 256k;
    proxy_busy_buffers_size 256k;



    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:-LOW:!aNULL:!eNULL;

    ssl_certificate /etc/nginx/ssl/fullchain.cer;
    ssl_certificate_key /etc/nginx/ssl/xxx.cc.key;


    include /etc/nginx/conf.d/*.conf;

}


stream {

    geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb {
      auto_reload 24h;
      $geoip_country_code  default=Unknown source=$remote_addr country iso_code;
      $geoip_country_name  country  names  en;
    }
    geoip2 /etc/nginx/geoip/GeoLite2-City.mmdb {
      auto_reload 24h;
      $geoip_city   default=Unknown city names en;
    }



    map $geoip_country_code $allowed_country {
        default no;
        CN yes;
    }

    map $remote_addr $allowed {
        default $allowed_country;
        127.0.0.1 yes;
        ~^192\.168\.\\d+\.\\d+$ yes;
        ~^172\.16\.0\.\\d+$ yes;
        ~^172\.17\.\\d+\.\\d+$ yes;
    }

    log_format json_analytics escape=json '{'
    '"timestamp": "$msec", ' # request unixtime in seconds with a milliseconds resolution
    '"connection": "$connection", ' # connection serial number
    '"pid": "$pid", ' # process pid
    '"remote_addr": "$remote_addr", ' # client IP
    '"remote_port": "$remote_port", ' # client port
    '"time_iso8601": "$time_iso8601", ' # local time in the ISO 8601 standard format
    '"upstream": "$upstream_addr", '
    '"protocol": "$protocol", '
    '"allowed": "$allowed", '
    '"request_method": "STREAM", '
    '"geoip_country_code": "$geoip_country_code", '
    '"geoip_country_name": "$geoip_country_name", '
    '"geoip_city": "$geoip_city"'
    '}';

    access_log /var/log/nginx/access.log json_analytics;
    error_log /var/log/nginx/error.log warn;

    include /etc/nginx/stream.d/*.conf;
}

ssh 代理

map $allowed $ssh_server {
    yes ssh;
}

upstream ssh {
    server  192.168.5.1:1234;
}

server {
    listen    5678;
    listen [::]:5678;
    proxy_pass $ssh_server;
    proxy_connect_timeout 30s;
    proxy_timeout 60s;

    ssl_preread on;
}

http 代理

server {
    server_name x.x.com;
    listen 1233 ssl;
    listen [::]:1233 ssl;

    http2 on;
    charset "utf-8";

    if ($allowed != yes) {
        return 404;
    }

    error_page 497 =307 https://$host:$server_port$request_uri;

    client_max_body_size 512M;
    proxy_buffering off;


    set $backend "http://192.168.5.1:1234";
    include /etc/nginx/conf.d/basic/no_log.conf;

    location / {
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_pass $backend;
    }

}

倒腾了很长时间的 NAS ,乐趣就是拆了装装了拆,去年全面换了飞牛,所以没逃过这次的坑。提提关于我倒腾过的各类 NAS 的感受吧。

黑群/白群:倒腾过黑群和白群的 DS920+。感受是 web ui 操作舒服,功能齐全且描述直观,文件同步客户端多版本管理这些功能对比飞牛可好太多了。白群有 QC 公网链接(但速度感觉很一般)。黑群其实还是挺稳定的,功能基本和白群一致,没有 QC ,安装好以后不倒腾太多基本没问题,印象里黑群的升级挺麻烦的。媒体库要用 jellyfin 或者 emby ,虚拟机和 docker 都支持。群晖最大的问题在于,白群那个万年不变的低规格配置(我的 DS920 得靠着一个 USB 转 2.5G 网卡过日子,赛博尿袋了属于是),以及堪比诸子百家的移动端 APP ,至今看不明白。
PS:我 NAS 入坑就是星际蜗牛入门套装开始的,再来一次我绝对不碰,浪费的钱都可以买辆便宜小四轮了。

威联通:没折腾过黑威联通,门槛比较高。白的用过 TVS951N 和 TS873A 。感受是硬件性价比高且有设计特点,OS 的专业性很强但描述很晦涩,WEB UI 卡是真的卡(哪怕后来说更新了优化了,还是卡),APP 这块没有比群晖强多少。威联通的机器设计亮点比较多,特别是 951N 这些,是带 2.5 寸的小盘位的,有几款甚至带 SATA/兼容 U2 盘位,加上威联通的 qtier 分层存储(说白了,高频读取的丢 ssd 层,冷数据丢 hdd ),我拿他挂了很久的 PT 。另外威联通有一个套件叫做 Qsirch ,在 pdf 等文档传入 nas 以后,先进行 ocr 并建立索引,之后使用时能实现搜索图片文字内容,算是很好用的功能,但要收费。有类似白群的外网 ID 连接方式,不好用+1 。

Unraid:自建 NAS 最早使用的就是 unraid ,也是从这里开始接触到 snapraid 的理念的,我觉得 snapraid 真的是垃圾佬的终极方案,可以充分利用多个不同容量的硬盘,组成超大容量的单一存储池,并且多块硬盘之间还可以按需唤醒和休眠,并且可以设置文件夹写入的硬盘实现类似分层存储的效果。当时用的机箱是万由 810A ,8 块企业盘炒豆子,这个休眠机制算是拯救了我的耳朵。unraid 的虚拟机效率很高,直通方便,但是没有配套的 app 应用,需要自己解决外网访问问题,并且自建 nextcloud 、emby 这些服务,算是比较倒腾的。之前 unraid 是买断制的,我觉得价格相对公道,转订阅制以后我觉得性价比直线下降。

Truenas:只负责存储的 NAS 系统,支持 ZFS 的很多高级特性,读写性能很强,但是配置要求高、应用安装复杂,我觉得家用的情况下完全不要尝试。我倒腾 NAS 最巅峰的一次就是组的 truenas ,买了个 H12SSL-i 主板(服务器主板的噪音真的大,散热器很难选)+epyc 处理器+256G 服务器内存+8x16T HDD+4x2T SSD+半人马座机箱,趁着矿潮卖了,怒赚一笔离场,换了极空间 Z423 。不过至今,我觉得全闪 NAS 最好的方案还是 epyc 服务器平台+80 块钱左右一张的 pcie 拆分转 4m2 卡,不过全闪的价格涨的已经让人没希望了。

极空间:只用过 Z423 pro ,看中高配置+小体积+4 个 M2 盘位。说实话,极空间的 app 做的不错,官方带的外网穿透服务速率给力,PC 端文件夹同步功能也好用,影视应用好用到让我直接把 emby 的授权卖掉了。但是极空间首先必须绑定手机号,并且权限管理真的很反智,谁家建 NAS 的管理员不能查看系统的全盘文件的?另外 Z423 这个机器也很迷,散热不舍得多给一点点,日常待机 CPU 60 度+,跑点任务 CPU 负载维持不到 20%也能直接 90 度+,接手的买家跟我说这机器热的死机了,还返厂维修了一次。

FNos:现在在用的,我已经把机械盘都卖掉了,飞牛本地只放一些重要的文件到闪存上,媒体库通过挂在网盘直链播放。说实话,飞牛的官方 ID 穿透服务我还是比较满意的,199 买了包年,在 v4 地址被收回以后这个穿透我用的还比较频繁。网盘挂载+直链播放确实很方便,平时媒体库的维护直接在网盘上转存就好了,不用浪费时间下载和整理。不过其他的小问题确实挺多,比如飞牛的系统盘不支持备份(群晖和威联通这种会把系统信息在所有硬盘上都存一份),刚支持 zfs 的版本把我的一块 m2 盘干到不认盘等等。

至今还有几个想碰没碰过的:Openmediavault (很早的时候看 linustechtips ,他们用的这个,但我没有动力尝试)。铁威马和华芸,绿联的成品 NAS 。铭凡之前推出 n5 的时候,似乎自带的 ssd 里面装了一个铭凡的 nas 系统,也不知道什么样的。网易爆米花,了解不多,但似乎也支持直链播放,不知道体验会不会比飞牛的好。

另外,现在云盘的空间是越来越足了,115 有很大的空间,google 的 ultra 会员也有 30t ,其实我有点想把文档也放到云端加密存储+NAS 侧解密,不过还是只限想想。。

飞牛用户,检查了自己设备,目前没中招,昨晚 0day 漏洞网上很沸腾,我翻遍论坛,没找到官方正式的回复和公告。

社区很多评论在骂的,说这么严重的漏洞应该发布公告。

昨晚发评论互动还能正常发布。今晚想回复个信息,发现都要审核了,无法及时发布。他们好像意识到问题的严重性,好像也没意识面对这个问题造成影响态度的问题。

今天上午发现已经发布更新 1.1.18 。不过我设备升级几次,均无法升级,一直在下载更新,几个小时没反应。

论坛发现发布了一个紧急公告:

近日,飞牛技术团队在安全巡检与用户反馈分析过程中,发现部分设备在公网环境下,存在异常访问风险。受影响设备在提供网络服务的过程中,可能因外部异常流量导致系统及部分应用稳定性受到影响。

针对该异常行为,此前我们已于第一时间推送了 1.1.15 版本安全更新,并向全体用户发出了升级通知,阻断异常行为。

经深入分析,此次攻击行为具有明显针对 fnOS 的定向属性,且采用了多维度复合型攻击手法。过去一周,技术团队已紧急排查大量异常设备,持续追踪木马样本及其变种并展开深度分析。目前,安全团队已完成对该攻击链路的逆向工程,并发布系统安全更新以阻断此类攻击行为。

请您尽快升级至 1.1.18 最新版本,补丁安装完成后无需额外配置,即可有效提升设备安全性及系统稳定性。

我们对本次事件可能造成的不便深表歉意。在追查木马过程中,我们发现了自身代码的一些疏漏。未来,飞牛将持续加大安全投入,定期开展安全**与系统优化,直面大小漏洞,让系统更加健壮。同时,建议在 NAS 设备开放公网访问权限时,优先采用安全访问方式(加密隧道/2FA 验证/开启防火墙等),以进一步降低潜在安全风险。

与此同时,为更好地保障用户安全,飞牛将成立安全快速响应团队,第一时间处理用户反馈的漏洞,筑牢产品安全防线。欢迎广大用户通过官方渠道积极提交安全问题与建议,对于首次有效反馈的漏洞,将提供相应激励。

安全漏洞反馈入口:

https://trim-nas.feishu.cn/share/base/form/shrcnYhRB4ryb9K8Te9GEqeRYYe

安全问题联系邮箱:

[email protected]

感谢每一位用户的理解、耐心与监督。

广州铁刃智造技术有限公司

2026 年 2 月 1 日

点赞 + 关注 + 收藏 = 学会了

整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》

有些非技术出身的工友入手NAS后,只用来存照片、存电影,却不知道开启SSH后,NAS能变得更强大、更好用。其实SSH一点都不复杂,不用懂代码、不用搞技术,跟着这篇教程,就能轻松开启SSH,用电脑远程操控NAS。

先搞明白核心问题:我们为什么要费功夫开启SSH?

SSH简单说就是「安全的远程操控通道」。相当于给你的NAS装了一把“远程钥匙”,不用NAS客户端,不用浏览器也能让电脑操控NAS做一些事情。

有时候用 Docker 客户端拉不下的镜像,用 ssh 的方式可能能拉下来(跳过网页端或者客户端的限制和缓存)。

本文聊聊如何在 NAS 开启 SSH,并且用电脑的终端连上去。至于连上去之后能做什么,以后的文章会讲到。

NAS 开启 SSH

不管你用的是什么品牌的 NAS,开启 SSH 的核心逻辑都都差不多。

我手上只有绿联和群晖这两个品牌的 NAS,所以只介绍这两台。

绿联的话,在「控制面板 - 终端机」里启用 SSH,然后点击“应用”就能开启了。

端口可以自定义,默认是 22

在「高级设置」里面还可以设置是否允许在外网的情况下访问。

在群晖这边其实也是差不多,「控制面板 - 终端机和 SNMP」,然后勾选“启动 SSH 功能”即可。

用终端连 NAS

如果你使用 Windows 电脑,系统自带的 powershell (可以在开始菜单里面搜索)可以用 SSH 的方式连接 NAS。

macOS 的话就使用「终端」。

用法都是一样的。

ssh username@NAS_IP -p port

# 翻译过来就是
ssh 用户名@NAS的IP -p 端口(例如22)

我在内网使用,我的 NAS 的 IP 是 192.168.31.202,SSH 配置的端口是 22,所以整句命令就是 ssh 用户名@192.168.31.202 -p 22

需要注意,这里的“用户名”指的是你在 NAS 登录时用到的用户名。

首次登录的话会问你知不知道自己在干嘛,回复 yes 即可。

然后要输入密码,这里输入的密码是不会展示出来的,不管你输入什么展示的都是“空白”,但其实你按的每一个键都成功输入的。

输入的密码正确的话,就能连上 NAS 了。

连上的标志是⬇️

用户名@NAS主机名:~$

接下来就可以在终端控制 NAS 了。


以上就是本文的全部内容啦,有疑问可以在评论区讨论~

想了解更多NAS玩法可以关注《NAS邪修》👏

点赞 + 关注 + 收藏 = 学会了

点赞 + 关注 + 收藏 = 学会了

整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》

Haptic 是一款开源极简的 Markdown 编辑器区别于传统编辑器的 “编辑 / 预览分屏” 模式,它能实时渲染 Markdown 语法(输入即显示最终效果,无割裂感),界面极简无多余干扰,还支持丰富格式,操作流畅如普通文本编辑,比同类工具更贴近 “自然书写” 的体验。

我很喜欢 Typora 这种”所见即所得“的编辑器,Typora 收费后我一直找同类产品。对于我来说在编辑体验方面 Haptic 是能取代 Typora 的。

这次我用群晖的 NAS 部署 Haptic,其他品牌的 NAS 部署流程差不多。

在”File Station“的”docker“文件夹下创建一个”haptic“文件夹。

打开”Container Manager“,新增一个「项目」。

填入以下信息。

输入以下代码,然后点击“下一步”。

services:
  haptic:
    image: chroxify/haptic-web:latest
    container_name: haptic
    ports:
      - 3002:80

「网页门户设置」这里要开启“通过 Web Station 设置网页门户”。

完成上述操作后,打开”Web Station“(没有的话就去「套件中心」下载),新增一个”网络门户“。填入以下信息。

注意,端口要设置一个和其他项目不冲突的数字,比如我这里设置的是 2388

完成上面的操作后,等待 Haptic 镜像下载成功后,打开浏览器输入 你NAS的IP + haptic端口 就能使用 Haptic 了。

比如我的是 http://192.168.31.85:2388


以上就是本文的全部内容啦,有疑问可以在评论区讨论~

想了解更多NAS玩法可以关注《NAS邪修》👏

点赞 + 关注 + 收藏 = 学会了

起因:
在近期使用飞牛时,发现会时不时的出现设备卡死、网络报错的情况,因为每天我都会通过飞牛去跑数据同步,所以没有关心这个问题,只以为是数据太多导致 FNOS 出现的什么莫名奇妙 Bug 。

直到本周周五,我又出现了这个问题,于是就想去查询一下是什么起因。
没想到,不查不知道,一查吓一跳,社区中许多人都出现了设备连接数异常、导致断网或无法连接飞牛服务器的情况。

再一搜索,这居然是一个很普遍的问题!社区中有人已经分析出这是一个专门针对 FNOS 的恶意程序,即便我已经开启了 SSL 、2FA ,且密码为非弱密码的情况下,这个恶意程序仍然植入到了我的设备。

根据一些大佬分析,飞牛疑似存在的 0day (路径穿越漏洞)可以在未授权的情况下可以访问整个 NAS 全部文件,包括系统的配置文件,这可能也是导致如上安全措施归零的主因之一。

这种 T0 级别的重大问题居然被官方一句 “别走 http 明文方式访问设备” 一笔带过,没有任何安全预警。像我一样的普通用户如果不是注意到近期的设备异常,甚至根本不知道有这么一回事。



这么大的一个技术团队,在出现这么大的安全事件后没有任何官方公告是什么用意?能不能有一个正面的态度???


附一些官方社群的分析:
https://club.fnnas.com/forum.php?mod=viewthread&tid=53230
https://club.fnnas.com/forum.php?mod=viewthread&tid=52580

老婆喜欢用 Apple TV 看剧,自己找资源的话还是 115 更新的最快,而且直接转存播放就行,也不需要再通过 nas 下载

好奇问一下 115 网盘还可以用来干嘛,或者追剧有没有其他软件可以配合,以更愉快的观影?

点赞 + 关注 + 收藏 = 学会了

整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》

aipan(中文名叫“爱盼”)是一款开源免费的搜片工具。

本次使用群晖NAS做演示。

在“Container Manager”的「镜像仓库」里搜索“aipan”,下载“fooololo/aipan-netdisk-search”这个。

下载成功后,切换到「映像」,选择刚刚下载的 aipan,运行它。

「常规设置」这里勾选“启用自动重新启动”,勾选“通过 Web Station 设置网页门户”。

「高级设置」这里什么都不用改。

打开”Web Station“新增一个”网络门户“,相关配置项如下图所示。

这里我设置了 HTTP 的端口为 2222,你可以设置要给不跟其他项目冲突的端口。

完成上面的操作后,打开浏览器,输入 NAS的IP + aipan的端口 就可以使用 aipan 了。

比如我这里是 192.168.31.85:2222

aipan 的搜出来的都是片子~


以上就是本文的全部内容啦,想了解更多NAS玩法可以关注《NAS邪修》👏

最后推荐一下玩 NAS 的工友,在 NAS 上装一个 n8n 接入大模型,可以帮你定时定候完成各种工作,比如签到啦、写文章啦、生成海报和视频啦、自动发布到各大平台啦~

想了解 n8n 的工友可以关注我的专栏👉 《n8n修炼手册》

点赞 + 关注 + 收藏 = 学会了

Matrix 首页推荐 

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。 

文章代表作者个人观点,少数派仅对标题和排版略作修改。


大家好,我是飘雷。

在这个全民刷手机的时代,我们看似阅尽天下事,实则很容易被困在信息茧房里。

各种资讯 app 每天都在争先恐后地把它们认为用户可能喜欢的内容推送给我们,久而久之,我们获得的信息难免会落入同质化,真正有价值的信息其实不多。想要解决这个问题,就要尝试从被动投喂,变成主动获取。

最近 GitHub 上大火的 TrendRadar 项目,恰好击中了这个痛点。

项目地址:https://github.com/sansan0/TrendRadar

它能根据咱们自己设置的关键词和监控策略,聚合多平台热点和 RSS 订阅,还能将 AI 分析简报直推手机,也支持接入 MCP 架构,利用AI大模型进行自然语言的对话分析、情感洞察与趋势预测。

TrendRadar 特别适合投资者、自媒体人、企业公关、关注时事等用户使用,这也使得它在 GitHub 上获得了 4.3 万的超高星收藏。

趁着这几天有空,我用手头的威联通 NAS 把这个情报雷达搭建了起来,部署和配置的过程虽然有些繁琐,但成果也是喜人的。

我们可以通过网页访问 NAS IP 来查阅自己感兴趣的新闻:

也可以让它把热点新闻自动推送到邮箱等平台:

还可以在推送信息中看到 AI 分析的简报:

这种对信息掌控感真的拉满了情绪价值,个人觉得特别好用,所以本期我就同大家分享 TrendRadar 的手把手部署配置教程。

TrendRadar 部署流程

这里我们来展示如何在威联通 NAS 上通过 Docker Compose 进行部署,用到的设备是威联通最新的八盘位旗舰新品 Qu805。

下载项目文件

解压下载的压缩包,会得到一个名为 TrendRadar-master 的文件夹:

接下来咱们将上图中这些文件和文件夹全部上传到威联通 NAS 里,这里我放在了 /Container/TrendRadar 目录内,大家可以根据自己的实际情况灵活调整,只需要记住保存位置即可。

Docker Compose 部署

TrendRadar 自带的 Docker Compose 文件是根据本机访问的默认情况配置的,不太适合 NAS 场景,所以这里我们需要进行一些改动。

登录威联通 NAS 后台,打开 Container Station 容器工作站,点击左侧的应用程序,然后点击右侧黑色创建按钮。

在弹出的代码输入框中,我们输入以下 YAML 代码。注意里面的注释部分,像推送设置之类的选项可以在 YAML 代码中提前指定,也可以通过修改文件后期进行调整,这里大家需要根据自己的实际情况进行配置:

services:
  trendradar:
    image: wantcat/trendradar:latest
    container_name: trendradar
    restart: unless-stopped
    # 左边 8848 是你访问 NAS 的端口 (http://nas-ip:8848),根据需要修改
    # 右边 8080 是容器内部端口,不要改
    ports:
      - "8848:8080"


    # 映射目录,左侧为NAS文件夹路径,这里需要根据实际情况修改,比如我是在NAS的 /share/Container/TrendRadar
    volumes:
      - /share/Container/TrendRadar/config:/app/config
      - /share/Container/TrendRadar/output:/app/output


    environment:
      - TZ=Asia/Shanghai
      # 核心配置
      - ENABLE_CRAWLER=${ENABLE_CRAWLER:-}
      - ENABLE_NOTIFICATION=${ENABLE_NOTIFICATION:-}
      - REPORT_MODE=${REPORT_MODE:-}
      - DISPLAY_MODE=${DISPLAY_MODE:-}
      # Web 服务器,True为强制启用,启用后可以通过网页访问
      - ENABLE_WEBSERVER=true
      - WEBSERVER_PORT=${WEBSERVER_PORT:-8080}
      # 通知渠道
      # 飞书
      - FEISHU_WEBHOOK_URL=${FEISHU_WEBHOOK_URL:-}
      # 电报
      - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN:-}
      - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID:-}
      # 钉钉
      - DINGTALK_WEBHOOK_URL=${DINGTALK_WEBHOOK_URL:-}
      # 企业微信
      - WEWORK_WEBHOOK_URL=${WEWORK_WEBHOOK_URL:-}
      - WEWORK_MSG_TYPE=${WEWORK_MSG_TYPE:-}
      # 邮件配置
      - EMAIL_FROM=${EMAIL_FROM:-}
      - EMAIL_PASSWORD=${EMAIL_PASSWORD:-}
      - EMAIL_TO=${EMAIL_TO:-}
      - EMAIL_SMTP_SERVER=${EMAIL_SMTP_SERVER:-}
      - EMAIL_SMTP_PORT=${EMAIL_SMTP_PORT:-}
      # ntfy配置
      - NTFY_SERVER_URL=${NTFY_SERVER_URL:-https://ntfy.sh}
      - NTFY_TOPIC=${NTFY_TOPIC:-}
      - NTFY_TOKEN=${NTFY_TOKEN:-}
      # Bark配置
      - BARK_URL=${BARK_URL:-}
      # Slack配置
      - SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL:-}
      # 通用Webhook配置
      - GENERIC_WEBHOOK_URL=${GENERIC_WEBHOOK_URL:-}
      - GENERIC_WEBHOOK_TEMPLATE=${GENERIC_WEBHOOK_TEMPLATE:-}
      # AI 分析配置,如果你需要开启 AI 分析,可以在这里填,或者去config.yaml填
      - AI_ANALYSIS_ENABLED=${AI_ANALYSIS_ENABLED:-false}
      - AI_API_KEY=${AI_API_KEY:-}
      - AI_PROVIDER=${AI_PROVIDER:-}
      - AI_MODEL=${AI_MODEL:-}
      - AI_BASE_URL=${AI_BASE_URL:-}
      # 远程存储配置(S3 兼容协议)
      - S3_ENDPOINT_URL=${S3_ENDPOINT_URL:-}
      - S3_BUCKET_NAME=${S3_BUCKET_NAME:-}
      - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID:-}
      - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY:-}
      - S3_REGION=${S3_REGION:-}
      # 运行模式
      - CRON_SCHEDULE=${CRON_SCHEDULE:-*/30 * * * *}
      - RUN_MODE=${RUN_MODE:-cron}
      - IMMEDIATE_RUN=${IMMEDIATE_RUN:-true}


# MCP 服务:提供接口给 Claude Desktop 等客户端,用不上的话下面这些代码可以删除
  trendradar-mcp:
    image: wantcat/trendradar-mcp:latest
    container_name: trendradar-mcp
    restart: unless-stopped


    ports:
      - "3333:3333"


    # 必须挂载与上面相同的路径,否则读取不到数据
    volumes:
      - /share/Container/TrendRadar/config:/app/config:ro
      - /share/Container/TrendRadar/output:/app/output


    environment:
      - TZ=Asia/Shanghai

代码粘贴无误后,记得点击下方的验证按钮,确保 YAML 格式正确。

最后点击创建按钮,系统就会自动拉取这个非常精简的镜像并启动服务,咱们可以在概览或容器列表中看到 trendradar trendradar-mcp 两个容器正在运行,状态显示为绿色小圆点。

常用配置选项解析

TrendRadar 的作者在项目页面提供了详细的个性化配置方法,感兴趣的朋友可以去详细阅读下,这里咱们就来看看一些常用的部分。

1配置监控平台

TrendRadar 的资讯数据来源于 newsnow,默认会抓取11个平台的热点新闻,需要抓取其他平台数据的的朋友可以去 newsnow 网站里查找一下。

查询地址:https://newsnow.busiyi.world/

需要对监控平台进行修改的话,可以打开 config 文件夹下的 config.yaml 文件,修改 platforms 部分:

威联通自带文本编辑器。你可以右键点击该文件,选择「打开方式 -> Text Editor」直接在线编辑,改完保存即可,无需下载到本地再上传。

platforms:
  - id: "toutiao"
    name: "今日头条"
  - id: "baidu"
    name: "百度热搜"
  - id: "wallstreetcn-hot"
    name: "华尔街见闻"
  # 添加更多平台...

去 newsnow 添加有点麻烦,图省事儿的话可以去下面的项目复制别人整理的 config.yaml 文件。

项目地址:https://github.com/sansan0/TrendRadar/issues/95

不过需要注意,监控的平台不是越多越好,建议选择 10 到 15 个核心平台,平台过多会导致信息过载,反而降低使用体验。

配置关键词

TrendRadar 的关键词设置是决定我们每天看到的是满屏含金量的干货,还是充斥着垃圾信息的关键一步。TrendRadar 的核心过滤逻辑存放在 config 文件夹下的 frequency_words.txt 文件中,需要手动细心配置。

这里打开威联通的 File Station,定位到我们部署时映射的路径,比如我使用的是 /share/Container/TrendRadar/config/,找到名为 frequency_words.txt 的文件。

TrendRadar 对关键字的配置不仅仅是写几个词那么简单,它支持七种语法,咱们简单举例来介绍下。

# --- 核心关注区 ---
NAS
威联通
群晖
Docker
TrendRadar
DeepSeek
ChatGPT
显卡 & 降价
# --- 必须屏蔽区 (净化眼球) ---
!出轨
!离婚
!绯闻
!男星
!女星
!只有我一个人
!震惊
!拼多多 & 砍一刀
# --- 行业观察 ---
人工智能
开源项目
# --- 这里的每一行代表一个规则,系统会逐行扫描 ---

  • 基础匹配(直接写词):威联通:只要标题或内容里有「威联通」,就会被抓取。
  • 强制屏蔽(使用 ! 表示「非」);在关键字前面加上感叹号后,包含此关键字的新闻会被直接丢弃。比如不想看娱乐圈的出轨八卦破事,使用「!出轨」,任何包含出轨的新闻就不会被显示出了。
  • 组合逻辑(使用 & 表示「与」):「NAS & 教程」的意思是,只有同时包含「NAS」和「教程」的文章才会被抓取,这能帮你过滤掉单纯的NAS降价广告,只看干货。
  • 多选逻辑(使用 | 表示「或」):「DeepSeek | ChatGPT | Claude」的意思是,只要包含这三个 AI 模型中的任意一个,都抓取。
  • 短语匹配(使用英文双引号""):以"Black Myth"为例,如果你直接写 Black Myth(没引号),系统可能会分别匹配 Black 和 Myth。加上引号后,会强制匹配由于空格隔开的专有名词(如《黑神话》)。
  • 权重提升(使用 ^):「^漏洞」的意思是,给「漏洞」这个词极高的权重,一旦出现,即使它在热榜排名不高,也会被强制推送到显眼位置。
  • 正则匹配式(使用 ~,适合硬核玩家):这部分就有点复杂了,不太适合普通玩家折腾,感兴趣的硬核玩家直接去项目原网页详细研究即可。

编辑完成后,点击威联通 Text Editor 右上角的「保存」,最后别忘了,修改关键词后,需要重启容器才能生效。

热点权重新调整

很多时候我们觉得热搜没啥意思,是因为平台的算法优先推荐短时间内爆发力强的内容,比如什么某明星忘本了道歉了之类的。但很多用户往往更关注那些有持久影响力的大事,比如国家重大政策和科技突破的消息等等。

advanced:
  weight:
    rank: 0.6           # 排名权重
    frequency: 0.3      # 频次权重
    hotness: 0.1        # 热度权重

在 TrendRadar 的 config/config.yaml 文件中,有一个 advanced -> weight 模块,这里就是控制热点筛选逻辑的地方,包含 rank、frequency、hotness 三个参数,这三个数字相加必须严格等于 1.0,否则程序会报错罢工。

在修改之前,咱们需要明白这三个数字代表什么,TrendRadar 默认使用的是较为平衡的配置:

  • rank(排名权重):代表爆发力,数值越高,越倾向于抓取各大榜单前几名的内容,哪怕它只火了十分钟。
  • frequency(频次权重):代表持久力,数值越高,越倾向于抓取那些在一天内反复上榜、被不同平台多次讨论的内容。这是过滤标题党的关键。
  • hotness(热度权重):代表绝对数值,由于不同平台的热度单位不同,有的几百万,有的几万,参考价值较低,通常保持低位即可。

一般来说,追求速度和时效性的用户提高排名权重,追求深度和稳定性的用户提高频次权重。

建议每次只调整 0.1 到 0.2 的数值,调完后保存文件,并在 Container Station 中重启容器生效。

修改后观察一两天的推送效果,如果觉得信息太滞后,就稍微调高 rank;如果觉得垃圾信息还是多,就继续调高 frequency。

接下来咱们来看看两个典型的配置案例。

抓取实时热点

如果你是自媒体博主或者营销人员,不想错过任何稍纵即逝的大瓜,想快速了解当前最火话题,可以使用这个配置,把所有瞬间冲上榜首的内容都推给你:

advanced:
  weight:
    rank: 0.8       # 拉高排名权重,只要进前三,立刻抓取
    frequency: 0.1  # 稍微关注一下持续性,不太在乎
    hotness: 0.1    # 保持默认

追踪重点话题

如果想要多看一些经过时间沉淀的重大新闻,可以使用这个配置:

advanced:
  weight:
    rank: 0.4           # 降低排名权重,不迷信热度榜首
    frequency: 0.5      # 拉高频次权重,更偏向持续热度
    hotness: 0.1

推送配置

TrendRadar v5.0 版本对推送内容进行了大规模重构,现在的推送内容不再是简单的链接堆砌,而是被划分为热榜新闻、RSS 订阅、全新热点(New 标记)、独立展示区、AI 分析五大核心板块。

而在推送方式方面,TrendRadar 支持微信、飞书、钉钉、Telegram、邮件、ntfy、bark、Slack 等渠道的智能推送,并且有当日汇总、当前榜单、增量监控三种推送模式。

推送相关的配置也是通过 config/config.yaml 文件来修改,同时也可以在 Docker Compose 代码中提前写好,在部署容器时就完整设置。这里我们以邮件推送为例进行展示。

开启 HTML 格式

很多用户反馈邮件收到的是一堆乱码或者纯文本,没有任何排版,原因就是没开启 HTML 支持。

得确保 config/config.yaml,找到 storage -> formats -> html,设置为 true

storage:
  formats:
    sqlite: true
    txt: false
    html: true   # 必须启用,否则邮件推送会失败

配置 SMTP 发送服务(以 163 邮箱为例)

虽然 TrendRadar 支持多种推送方式(如飞书、钉钉),但邮件依然是阅读长文和 AI 分析报告的最佳载体。

国内网络环境下,我自己是选择使用 163 邮箱作为发送方,稳定性非常高。当然 QQ 邮箱也可以,就是容易被系统判定为垃圾邮件。

首先登录你的 163 网页版邮箱,点击顶部「设置」 -> 「POP3/SMTP/IMAP」,开启「IMAP/SMTP 服务」或「POP3/SMTP 服务」,然后新增一个授权码。

系统会让你发送短信验证,验证成功后会弹出一个只显示一次的授权码,复制这个授权码,这是我们接下来要填的密码。

接下来咱们继续编辑 config.yaml,首先找到 notification 通知总开关的位置,将 enabled 设置为 true,开启通知。

然后找到 email 相关的配置区域:

具体设置方法如下所示:

      # 邮件发送方配置 (163邮箱)
      - EMAIL_FROM=你的账号@163.com
      # 注意:这里填的是刚刚获得的【授权码】,不是邮箱登录密码!
      - EMAIL_PASSWORD=填入你刚才获取的授权码
      - EMAIL_SMTP_SERVER=smtp.163.com
      - EMAIL_SMTP_PORT=465
      
      # 邮件接收方配置
      # 接收邮箱可以是同一个163邮箱,也可以是QQ邮箱或Gmail
      - EMAIL_TO=接收通知的邮箱@qq.com

如果这里不适用 163 邮箱来推送,可以根据作者提供的表格来修改 SMTP 服务器和端口地址:

配置完成后,保存文件并重启容器。

如果配置正确,TrendRadar 运行完毕后,你会收到一封标题类似《TrendRadar 每日热点报告》的邮件。

如果还想要设置推送频率和推送模式的话,同样可以查看作者给出的详细配置说明,限于篇幅这里不赘述了。

AI 分析配置

在 5.0 版本之前,TrendRadar 只能算一个勤恳的新闻搬运工;但从 5.0 开始,作者进行了重大升级,通过接入 AI 大模型 API 来对内容进行深度分析,自动生成热点洞察。

分析的内容包括:

  • 热点趋势概述
  • 关键词热度分析
  • 跨平台关联分析
  • 潜在影响评估
  • 值得关注的信号
  • 总结与建议

这里我们以 DeepSeek 为例,展示如何进行设置。

获取 API 的过程这里不再赘述,大家去自己的 API 提供商平台上复制即可,我们主要讲讲本地设置,同样要修改 config/config.yaml 这个配置文件,找到 ai_analysis 部分:

以 DeepSeek 官方 API 为例,如下设置:

ai_analysis:
  enabled: true                     # 是否启用 AI 分析,true为开启
  provider: "deepseek"              # AI 提供商
  api_key: ""                       # API Key
  model: "deepseek-reasoner"        # 模型名称,deepseek-reasoner为深度思考模式
  base_url: ""                      # 自定义 API 端点(可选)
  timeout: 120                      # 请求超时(秒)
  push_mode: "both"                 # 推送模式,both (推送到所有渠道)
  max_news_for_analysis: 50         # 最多分析多少条新闻
  include_rss: true                 # 是否包含 RSS 内容
  prompt_file: "ai_analysis_prompt.txt"  # 提示词配置文件

另外在 config 文件夹下,还有一个名为 ai_analysis_prompt.txt 的文件。这里存放的是发给 AI 的 Prompt 提示词。

作者已经将默认的提示词写好,包含趋势概述、关键词热度、跨平台关联、潜在影响等。但如果你有特殊需求,那可以根据自己需求进行针对性修改。

配置并重启容器后,AI 模块会在每次的抓取任务结束后运行,我们能在推送消息的底部看到像这样的分析报告:

总结

经过这一番折腾,当看到自己想看的新闻躺在邮箱里时,之前所有的复杂的配置都是值得的了。

以前,我们是算法的猎物,被锁在各大平台推送算法打造的信息茧房里,免不了被标题党牵着鼻子走。

而现在借助 TrendRadar 和 AI 的深度思考,我们终于可以翻身成为信息的主人,可以更清晰的知道这个世界发生了什么,哪些是转瞬即逝的信息泡沫,哪些是真正值得关注的行业暗流。

写到这里我又想到,像 TrendRadar 这类应用,或许才是许多公司和工作室采购 NAS 的原因之一。NAS 并非只能在家用环境中保存照片、挂挂 PT,更是能通过持久稳定工作,帮助用户圈出一块清醒的自留地,把实现各种功能的主动权重新握在自己手里。

> 关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀

    情况是这样的

    两年前在 JD 自营店买了两块希捷银河硬盘,出于对自营的信任,也没看 smart 数据,就插在 NAS 里用了

    去年年中开始,其中一块频繁出现 xfs 文件系统无法加载的情况,但是每次 repair 一下就 ok 了,当时我怀疑是 sata 线缆的问题,也就没有上心。直到去年年底 12 月份,我排查的时候认真看了一下 smart 里的 power on hours,发现竟然长达 3 年半之久,比盘体上标注的组装日期还长了 1 年多。

    鉴于硬盘还在质保期内,我开始联系客服,没想到我天真了
    1 、开始联系 JD 自营店客服,要求更换新盘并重新计算质保期,但是客服是个复读机,只会说“我们硬盘都是全新包装销售”,拒绝承认问题
    2 、联系 JD 客服,说该店铺已经于去年清退改为第三方了,支持我维权,建议我送希捷官方鉴定,只要确认是二手或者翻新,按假一赔三处理
    3 、联系希捷官方微信客服,连续一周扯皮,表示认可 smart 报告的数据有问题,但是希捷官方不负责售后,要求我联系经销商解决
    4 、联系该盘总代,电话另一端态度极其恶劣,大致意思就是我要修就修,不修就滚的意思

    现在貌似只有 12315 和报警两条路可走了?
    有没有有过类似维权经历的 V 友,能否指点一下接下来如何才能高效的解决这个问题?我应该注意什么呢?

    不差这块硬盘,但实在是咽不下这口气
    谢谢

    9 月被电信限速之后从朋友那边搞来了一条带公网 ip 的联通宽带,下行 1000m 上行 350m 貌似是商企宽带,近期发现 nas 传文件极慢后查询 ip 及遍历论坛后发现意思进入小黑屋?
    ip:116.147.151.xxx 地址在江苏淮安
    有的时候重新拨号会变成 122.192.198.xx 地址在江苏徐州
    症状均为 http/https 直连 nas 下载文件不超过 500kb/s 且传输时远程桌面类软件丢包极其严重高达 70%+
    微信等软件发送图片、视频极其卡顿
    常用测速站点测速正常但寻找到小众站点会发现上传限速在 2-3 兆?(排除站点本身问题)
    询问装维师傅表示在管控名单?商企客户经理表示不清楚解封流程...10010 的工单又会转移至客户经理死循环

    点赞 + 关注 + 收藏 = 学会了

    整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》

    withoutbg 是一款 AI 图片去背景工具,支持本地免费离线处理(隐私保护)和 Pro 版高质量处理,能通过 Docker 轻松部署到 NAS。

    这次用的是绿联DXP4800Plus。

    打开 Docker,打开“镜像”模块,搜索“withoutbg”。

    下载红框这个。

    下载完成后,打开“本地镜像”,点击“withoutbg/app”右侧的加号创建一个容器。

    “自动重启”建议开启。

    然后往下滑,NAS端口设置一个其他项目没用过的数字。比如我这里设置的是 39155

    接着在浏览器打开 绿联NAS的IP + 39155 就可以使用 withoutbg 抠图了。

    试了一下,物品、动物、人物都可以抠。

    但缺点就是它自己去识别抠什么,并没提供一个涂抹工具,让我涂什么它就在我涂抹的区域去抠图。

    而且界面没中文。


    以上就是本文的全部内容啦,想了解更多NAS玩法可以关注《NAS邪修》

    点赞 + 关注 + 收藏 = 学会了

    点赞 + 关注 + 收藏 = 学会了

    整理了一个n8n小专栏,有兴趣的工友可以关注一下 👉 《n8n修炼手册》

    不管是在电脑还是 NAS 通过 Docker 部署 n8n,环境变量没配置好的话,使用 Read/Write Files from Disk 节点「读取本地本地」或者「保存文件到本地」,有可能出现这个报错。

    这是 Docker + n8n 文件系统权限/路径隔离 的经典问题,不是 n8n 节点用错,而是容器只能访问被允许的目录

    ⚠️⚠️⚠️

    想解决这个问题,首先要将你 n8n 上已有的工作流等数据找个地方保存好。因为要改环境变量,有可能会丢失数据。

    ⚠️⚠️⚠️

    在电脑用 Docker 部署

    打开 Docker,首先要在 Containers 里删掉部署好的 n8n。

    然后到 Images,假设你没删掉 n8n 镜像的话,重新点击一下运行按钮。

    删掉镜像了就重新拉一遍吧。可以参考《『n8n』环境搭建》

    点击运行按钮后,需要添加在 Volumes 里添加一项(下图红框)。

    在你的电脑,找个位置创建要给文件夹。

    • 上图红框的 Host path 这项就填入你在电脑创建的文件夹的绝对路径。
    • Container path 这项填入 /home/node/.n8n-files,必须是这个值!一个字一个符号都不能少!

    然后点击“Run”按钮(弹窗右下角蓝色底色那个按钮)。

    之后再浏览器输入 localhost:5678 就能运行 n8n 了。

    接下来使用 Read/Write Files from Disk 节点读写文件,都是指向你刚刚在电脑创建的那个文件夹。

    比如我的 /home/node/.n8n-files 指向了 文稿/n8n-data 这个文件夹,里面有一个 hello.txt 文件。

    在 n8n 里使用 Read/Write Files from Disk 节点时,File(s) Selector 项需要这么写:

    /home/node/.n8n-files/hello.txt

    可以看到文件读取成功了。

    记住记住!用法是这样的,别问为什么⬇️⬇️⬇️

    /home/node/.n8n-files/文件名.后缀

    在绿联 NAS 部署

    如果你是在 NAS 上部署 n8n,通常使用 Docker 部署的吧~

    不管你是用群晖还是其他牌子的NAS,如果使用新建项目,用是 yaml 拉镜像。

    services:
      n8n:
        image: n8nio/n8n:latest   # 为了汉化成功,这里需要指定镜像版本号
        container_name: n8n
        ports:
          - 5678:5678
        volumes:
          - n8n:/home/node/.n8n # 冒号前面映射n8n文件夹绝对路径
          - n8n-files:/home/node/.n8n-files # 冒号前面映射n8n-files文件夹绝对路径
        restart: unless-stopped

    那么 yaml 的代码必须在 volumes 里加一项 - n8n-files:/home/node/.n8n-files。冒号前面的 n8n-files 是允许 n8n 读写文件的文件夹的绝对路径

    如果你是使用《『NAS』不止娱乐,NAS也是生产力,在绿联部署AI工作流工具-n8n》里提到的方法,在 Docker 的「镜像」模块里搜索 n8n 下载部署的话,需要这么做。

    我用绿联 NAS 举例,其他品牌的 NAS 操作方法大同小异。

    在 Docker 的「容器」里找到 n8n,停止运行。

    然后编辑它。

    在 NAS 的「文件管理」里创建一个文件夹,用来给 n8n 读写文件使用的。

    然后在「编辑容器」的「存储空间」里添加一项 /home/node/.n8n-files 指向那个文件夹,提供“读写”权限,如下图红框所示。

    点击“保存”按钮,然后运行项目。

    我在 NAS 的 n8n-files 文件夹里准备了一个 雷猴世界.txt 文件。

    在 n8n 里,使用 /home/node/.n8n-files/雷猴世界.txt 这个路径就能读取到上面这个文件了。

    同样,也是这个格式:

    /home/node/.n8n-files/文件名.后缀

    以上就是本文的全部内容啦,想了解更多n8n玩法欢迎关注《n8n修炼手册》👏

    如果你有 NAS,我非常建议你在 NAS 上部署一套 n8n,搞搞副业也好,帮你完成工作任务也好 《『NAS』不止娱乐,NAS也是生产力,在绿联部署AI工作流工具-n8n》

    点赞 + 关注 + 收藏 = 学会了

    点赞 + 关注 + 收藏 = 学会了

    整理了一个NAS小专栏,有兴趣的工友可以关注一下 👉 《NAS邪修》

    Reubah 是一款基于网页的工具,具备图片格式转换、优化、批量处理(背景移除即将推出)和多种文档格式转换功能,支持暗黑模式与 API,无文件存储且自动清理,可通过 Docker 或本地部署,界面简洁易用。

    本次使用的是群晖 NAS 部署 Reubah,其他品牌的 NAS 操作步骤类似。

    首先在“File Station”里找到“docker”文件夹,在“docker”文件夹里创建“reubah”文件夹。

    打开“Container Manager”,新增一个项目。

    项目名称填 reubah

    路径选择刚刚在“docker”文件夹里创建的“reubah”。

    来源选择“创建 docker-mompose.yml”。

    然后填入以下代码(需要注意代码格式,空格和换行这些)。

    services:
      reubah:
        image: ghcr.io/dendianugerah/reubah:latest
        container_name: reubah
        ports:
          - "8081:8081"
        security_opt:
          - no-new-privileges:true
        cap_drop:
          - ALL
        restart: unless-stopped

    8081:8081 这句,冒号左侧的数字是可以改的,右侧那个不能改。

    输入完代码后点击“下一步”。

    勾选“通过 Web Station 设置网页门户”,然后点击“下一步”,等待 docker 下载相关代码。

    最后一步是打开“Web Station”(没有这个工具就去“套件中心”下载)。

    新增一个网络门户,参考下图选项。

    需要注意,端口要输入一个和其他项目不冲突的数字,我这里输入的是 2347

    完成上面所有操作后,在浏览器打开 NAS的IP + reubah端口号 就可以访问 Rebuah 了。

    比如我的是 http://192.168.31.85:2347

    在图片格式转换这边,还支持 iPhone 的实况照片格式(HEIC)转换。

    常见的 jpeg、png、webp、gif、bmp 以及将图片转换成 pdf 都是支持的。

    文件格式这边包含常见的pdf、docx、doc、odt、txt 和 rtf。

    切换到 Batch Processing 面板还可以做批量处理。


    以上就是本文的全部内容啦,想了解更多NAS玩法可以关注《NAS邪修》

    点赞 + 关注 + 收藏 = 学会了

    服务

    openlist

    • 一个支持多种存储的文件列表程序
    • 分享文件及 webdav
    Docker Compose
    services: openlist:  openlistteam/openlist:latest container_name: openlist ports: - "自定义端口:5244" user: '0:0' volumes: - /本地存储配置目录/docker/OpenList/data:/opt/openlist/data - /本地存储配置目录/docker/aria2-pro/temp/aria2:/opt/openlist/data/temp/aria2 environment: - UMASK=022 - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 depends_on: - aria2-pro # 单独部署aria2,因为据说后续没有aio后缀的镜像了。 aria2-pro:  p3terx/aria2-pro container_name: aria2-pro ports: - "自定义端口:11445" # 不用BT所以注释 # - '6888:6888' # - '6888:6888/udp' volumes: - /本地存储配置目录/docker/aria2-pro/config:/config - /本地存储配置目录/docker/aria2-pro/downloads:/downloads - /本地存储配置目录/docker/aria2-pro/temp/aria2:/opt/openlist/data/temp/aria2 environment: - PUID=0 - PGID=0 - TZ=Asia/Shanghai - UMASK_SET=022 # 设置密码 - RPC_SECRET=123456 - RPC_PORT=11445 - LISTEN_PORT=6888 - IPV6_MODE=true # 由于配置文件是从github拉取的,所以可以通过环境变量设置代理 # - HTTP_PROXY=http://192.168.1.2:7890 # - HTTPS_PROXY=http://192.168.1.2:7890 restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 ariang:  p3terx/ariang container_name: ariang network_mode: host environment: - PUID=0 - PGID=0 - TZ=Asia/Shanghai command: ["--port", "自定义端口", "--ipv6"]
        restart: unless-stopped mem_limit: 1g cpus: 2 depends_on: - aria2-pro networks: defaultnet: external: true 

    gitea

    • 代码仓库
    Docker Compose
    services: gitea:  gitea/gitea:latest container_name: gitea ports: - "自定义端口:22" - "自定义端口:3000" volumes: - /本地存储配置目录/docker/gitea/data:/data environment: - USER_UID=1000 - USER_GID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    qinglong

    • 定时任务,配合 dailycheckin 签到
    Docker Compose
    services: qinglong:  whyour/qinglong:debian container_name: qinglong ports: - "自定义端口:5700" volumes: - /本地存储配置目录/docker/qinglong/data:/ql/data restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    vaultwarden

    • 密码管理器
    Docker Compose
    services: vaultwarden:  vaultwarden/server:latest container_name: vaultwarden ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/vaultwarden/data:/data environment: - SIGNUPS_ALLOWED=false - INVITATIONS_ALLOWED=false - EXPERIMENTAL_CLIENT_FEATURE_FLAGS=ssh-key-vault-item,ssh-agent restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    authentik

    • 用于单点登录各个系统
    Docker Compose
    services: authentik-server:  ghcr.io/goauthentik/server:2025.10.3 container_name: authentik-server command: server restart: unless-stopped environment: AUTHENTIK_SECRET_KEY: 密钥 AUTHENTIK_POSTGRESQL__HOST: postgresql地址 AUTHENTIK_POSTGRESQL__PORT: postgresql端口 AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__USER: authentik AUTHENTIK_POSTGRESQL__PASSWORD: vUhJ5hGFIxvgK0 ports: - 自定义端口:9000 - 自定义端口:9443 volumes: - - /本地存储配置目录/docker/authentik/media:/media - - /本地存储配置目录/docker/authentik/templates:/templates networks: - defaultnet mem_limit: 3g cpus: 3 authentik-worker:  ghcr.io/goauthentik/server:2025.10.3 container_name: authentik-worker command: worker restart: unless-stopped user: root environment: AUTHENTIK_SECRET_KEY: 密钥 AUTHENTIK_POSTGRESQL__HOST: postgresql地址 AUTHENTIK_POSTGRESQL__PORT: postgresql端口 AUTHENTIK_POSTGRESQL__NAME: authentik AUTHENTIK_POSTGRESQL__USER: authentik AUTHENTIK_POSTGRESQL__PASSWORD: postgresql密码 volumes: # - /var/run/docker.sock:/var/run/docker.sock - - /本地存储配置目录/docker/authentik/media:/media - - /本地存储配置目录/docker/authentik/certs:/certs - - /本地存储配置目录/docker/authentik/templates:/templates networks: - defaultnet mem_limit: 3g cpus: 3 networks: defaultnet: external: true 

    opengist

    • 自部署文本托管,类似 Github Gist
    Docker Compose
    services: opengist:  thomiceli/opengist:latest container_name: opengist ports: - "自定义端口:6157" volumes: - /本地存储配置目录/docker/Opengist:/opengist environment: - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    rustDesk

    • 远程桌面
    Docker Compose
    services: hbbs:  rustdesk/rustdesk-server:latest container_name: hbbs command: hbbs ports: - "自定义端口:21115" - "自定义端口:21116/tcp" - "自定义端口:21116/udp" volumes: - /本地存储配置目录/docker/rustdesk/data:/root restart: unless-stopped networks: - defaultnet depends_on: - hbbr hbbr:  rustdesk/rustdesk-server:latest container_name: hbbr command: hbbr ports: - "自定义端口:21117" volumes: - /本地存储配置目录/docker/rustdesk/data:/root restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    glance

    • 主页导航,搭配 sun-panel 的浏览器插件使用
    Docker Compose
    services: glance:  glanceapp/glance:latest container_name: glance ports: - 自定义端口:8080 volumes: - /本地存储配置目录/docker/glance/config:/app/config - /本地存储配置目录/docker/glance/assets:/app/assets - /etc/localtime:/etc/localtime:ro - /var/run/docker.sock:/var/run/docker.sock restart: unless-stopped environment: - TZ=Asia/Shanghai # - HTTP_PROXY=http://192.168.1.2:7890 # - HTTPS_PROXY=http://192.168.1.2:7890 networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    dailyhot-api

    • 各大平台热榜接口 api、rss
    • 搭配 glance 使用
    Docker Compose
    services: dailyhot-api:  imsyy/dailyhot-api:latest container_name: dailyhot-api ports: - 自定义端口:6688 restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    HowToCook

    • 菜谱
    Docker Compose
    services: how-to-cook:  ghcr.io/anduin2017/how-to-cook:latest container_name: how-to-cook ports: - "自定义端口:5000" restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    sun-panel

    • 导航页
    • 暂时用的是 glance,感觉信息更多一点
    Docker Compose
    services: sun-panel:  hslr/sun-panel:latest container_name: sun-panel ports: - "自定义端口:3002" volumes: - /本地存储配置目录/docker/sun-panel/conf:/app/conf restart: unless-stopped networks: - defaultnet sun-panel-helper:  madrays/sun-panel-helper:latest container_name: sun-panel-helper ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/sun-panel/sun-panel-helper/data:/app/backend/data - /本地存储配置目录/docker/sun-panel/sun-panel-helper/backups:/app/backend/backups - /本地存储配置目录/docker/sun-panel/conf/custom:/app/backend/custom environment: - BACKEND_PORT=3001 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    RSS

    rsshub

    • 万物皆可 RSS
    Docker Compose
    services: rsshub:  diygod/rsshub:chromium-bundled container_name: rsshub ports: - "自定义端口:1200" environment: - REDIS_URL=redis://192.168.1.2:6379/ - PROXY_URI=http://192.168.1.2:7890 - PUPPETEER_WS_ENDPOINT=ws://browserless:3000 - ACCESS_KEY= #密钥 - CACHE_TYPE=redis depends_on: - redis - browserless restart: unless-stopped networks: - defaultnet browserless:  browserless/chrome:latest container_name: browserless ulimits: core: hard: 0 soft: 0 restart: unless-stopped networks: - defaultnet redis:  redis:alpine container_name: redis volumes: - /本地存储配置目录/docker/redis/data:/data restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    freshrss

    • 一个可自托管的 RSS 和 Atom 源聚合器
    Docker Compose
    services: freshrss:  linuxserver/freshrss:latest container_name: freshrss ports: - "自定义端口:80" volumes: - /本地存储配置目录/docker/FreshRSS/config:/config environment: - TZ=Asia/Shanghai - PUID=1000 - PGID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    rss-to-telegram

    • 将 RSS 推送到 Tg
    Docker Compose
    services: rss-to-telegram:  rongronggg9/rss-to-telegram:latest container_name: rss-to-telegram volumes: - /本地存储配置目录/docker/rsstt/config:/app/config environment: - TOKEN= #你的机器人token - MANAGER= #你的tgid - T_PROXY=socks5://192.168.1.2:7890 - R_PROXY=socks5://192.168.1.2:7890 - MULTIUSER=0 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    wewe-rss

    • 微信公众号 RSS
    Docker Compose
    services: wewe-rss:  cooderl/wewe-rss-sqlite:latest container_name: wewe-rss ports: - "自定义端口:4000" volumes: - /本地存储配置目录/docker/wewe-rss/data:/app/data environment: - SERVER_ORIGIN_URL= #你的域名 - MAX_REQUEST_PER_MINUTE=60 - AUTH_CODE= #你的密钥 - DATABASE_URL=file:../data/wewe-rss.db - AUTH_DATABASE_TYPECODE=sqlite - FEED_MODE=fulltext - ENABLE_CLEAN_HTML=true restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    影视

    moviepilot

    • 媒体库自动化管理
    Docker Compose
    services: moviepilot:  jxxghp/moviepilot-v2:latest container_name: moviepilot ports: - "自定义端口:3000" volumes: - /本地存储配置目录/docker/tr/config/torrents:/tr - /本地存储配置目录/docker/qb/qBittorrent/BT_backup:/qb - /本地存储配置目录/docker/MoviePilot-v2/config:/config - /本地存储配置目录/docker/MoviePilot-v2/core:/moviepilot/.cache/ms-playwright - # 剩下的自己加本地存储的映射 environment: - PGID=0 - PUID=0 - UMASK=000 - TZ=Asia/Shanghai - AUTH_SITE= #你的认证方式,现在似乎也可以不填,跑起来直接去网页里填 - # 对应的认证密钥 - PROXY_HOST=http://192.168.6.2:7890 - MOVIEPILOT_AUTO_UPDATE=release - PORT=3001 - NGINX_PORT=3000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    jellyfin

    • 媒体库
    Docker Compose
    services: jellyfin:  jellyfin/jellyfin container_name: jellyfin ports: - "自定义端口:8096" volumes: - /本地存储配置目录/docker/jellyfin/path/to/config:/config - /本地存储配置目录/docker/jellyfin/path/to/cache:/cache # :ro只读模式 - /本地存储配置目录/public/公共下载:/downloads:ro - /本地存储配置目录/public/公共下载1:/downloads1:ro environment: # 外部访问地址 - JELLYFIN_PublishedServerUrl=https://example.com # 为了刮削,添加代理 - HTTP_PROXY=http://192.168.1.2:7890 - HTTPS_PROXY=http://192.168.1.2:7890 # 调用核心显卡 devices: - /dev/dri:/dev/dri restart: unless-stopped networks: - defaultnet mem_limit: 2g cpus: 2 networks: defaultnet: external: true 

    qbittorrent

    • 下载器
    Docker Compose
    services: qbittorrent:  linuxserver/qbittorrent:4.6.7 container_name: qbittorrent network_mode: host volumes: - /本地存储配置目录/docker/qb:/config - # 剩下的自己加本地存储的映射 environment: - WEBUI_PORT=自定义端口 - PGID=0 - PUID=0 restart: unless-stopped 

    transmission

    • 保种
    Docker Compose
    services: transmission:  linuxserver/transmission:4.0.4 container_name: transmission network_mode: host volumes: - /本地存储配置目录/docker/tr/watch:/watch - /本地存储配置目录/docker/tr/web:/web #默认不用加,需要单独去下UI仓库的代码 - /本地存储配置目录/docker/tr/config:/config - # 剩下的自己加本地存储的映射 environment: - PGID=0 - PUID=0 - TZ=Asia/Shanghai - PEERPORT=自定义端口 - USER= #账号 - PASS= #密码 - TRANSMISSION_WEB_HOME=/web #默认不用加,有UI才需要 restart: unless-stopped 

    omnibox

    • 影视综合管理,集成影视站,网盘搜索,iptv,直播平台,支持 tvbox 订阅
    Docker Compose
    services: omnibox:  lampon/omnibox:latest container_name: omnibox ports: - 自定义端口:7023 volumes: - /本地存储配置目录/docker/omnibox/data:/app/data restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    pansou

    • 网盘搜索 api,搭配 OmniBox 使用
    Docker Compose
    services: pansou:  ghcr.io/fish2018/pansou:latest container_name: pansou ports: - 自定义端口:8888 environment: - PORT=8888 - CHANNELS=tgsearchers3,Aliyun_4K_Movies,bdbdndn11,yunpanx,bsbdbfjfjff,yp123pan,sbsbsnsqq,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,PanjClub,kkxlzy,baicaoZY,MCPH01,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,ucwpzy,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,ydypzyfx,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,qixingzhenren,taoxgzy,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,leoziyuan,pikpakpan,Q_dongman,yoyokuakeduanju,TG654TG,WFYSFX02,QukanMovie,yeqingjie_GJG666,movielover8888_film3,Baidu_netdisk,D_wusun,FLMdongtianfudi,KaiPanshare,QQZYDAPP,rjyxfx,PikPak_Share_Channel,btzhi,newproductsourcing,cctv1211,duan_ju,QuarkFree,yunpanNB,kkdj001,xxzlzn,pxyunpanxunlei,jxwpzy,kuakedongman,liangxingzhinan,xiangnikanj,solidsexydoll,guoman4K,zdqxm,kduanju,cilidianying,CBduanju,SharePanFilms,dzsgx,BooksRealm # 必须指定启用的插件,多个插件用逗号分隔 - ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou,hunhepan,jikepan,panwiki,pansearch,panta,qupansou,hdr4k,pan666,susu,thepiratebay,xuexizhinan,panyq,ouge,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang,libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe,sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan,discourse,yunsou - CACHE_ENABLED=true - CACHE_PATH=/app/cache - CACHE_MAX_SIZE=100 - CACHE_TTL=60 - ASYNC_PLUGIN_ENABLED=true - ASYNC_RESPONSE_TIMEOUT=4 - ASYNC_MAX_BACKGROUND_WORKERS=20 - ASYNC_MAX_BACKGROUND_TASKS=100 - ASYNC_CACHE_TTL_HOURS=1 # 认证配置(可选) # - AUTH_ENABLED=true # - AUTH_USERS=admin:admin123,user:pass456 # - AUTH_TOKEN_EXPIRY=24 # - AUTH_JWT_SECRET=your-secret-key-here # 如果需要代理,取消下面的注释并设置代理地址 # - PROXY=socks5://192.168.1.2:7890 volumes: - /本地存储配置目录/docker/pansou/app/cache.env:/app/cache restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    danmu-api

    • 弹幕 api,搭配 OmniBox 使用
    Docker Compose
    services: danmu-api:  logvar/danmu-api:latest container_name: danmu-api ports: - 自定义端口:9321 volumes: - /本地存储配置目录/docker/danmu-api/config.yaml:/app/config.yaml restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    管理

    dockge

    • 一个美观、易用且响应迅速的自托管 Docker compose.yaml 堆栈管理器。
    Docker Compose
    services: dockge:  louislam/dockge:latest container_name: dockge ports: - "自定义端口:5001" volumes: - /本地存储配置目录/docker/dockge/data:/app/data - /var/run/docker.sock:/var/run/docker.sock - /本地存储配置目录/docker/dockge/opt/stacks:/opt/stacks environment: - DOCKGE_STACKS_DIR=/opt/stacks restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    portainer

    • docker 管理面板
    • 暂时弃用了,没有遮罩层,web 页面用得很难受
    Docker Compose
    services: portainer:  6053537/portainer-ce:latest container_name: portainer ports: - "自定义端口:9000" volumes: - /本地存储配置目录/docker/portainer/data:/data - /var/run/docker.sock:/var/run/docker.sock environment: - HTTP_PROXY=http://192.168.1.2:7890 - HTTPS_PROXY=http://192.168.1.2:7890 - NO_PROXY=localhost,127.0.0.1,::1,docker.internal restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    home-assistant

    • 智能家居
    Docker Compose
    services: home-assistant:  ghcr.io/home-assistant/home-assistant:stable container_name: home-assistant network_mode: host privileged: true volumes: - /本地存储配置目录/docker/HomeAssistant/config:/config - /本地存储配置目录/docker/HomeAssistant/ssh:/root/.ssh environment: - TZ=Asia/Shanghai restart: unless-stopped 

    备份

    icloudpd

    • icloud 照片备份
    Docker Compose
    services: icloudpd:  boredazfcuk/icloudpd:latest container_name: icloudpd network_mode: host volumes: - /本地存储配置目录/docker/icloudpd/config:/config - /本地存储配置目录/Goalonez/Photos/iCloud:/iCloud environment: - apple_id= #你的appid - download_path=/iCloud - icloud_china=true - auth_china=true - auto_delete=true - skip_check=true #跳过检测,处理全部文件,否则只有在有新的照片的时候才能触发删除 - notification_type=Telegram #默认不需要,通知 - telegram_token= #你的机器人token - telegram_chat_id= #你的tgid - telegram_polling=true - telegram_server= #反代tg api地址。当然你也可以直接HTTP_PROXY去走代理 - telegram_http=false - TZ=Asia/Shanghai restart: unless-stopped 

    duplicati

    • 跨盘备份、备份到云盘
    Docker Compose
    services: duplicati:  duplicati/duplicati:latest container_name: duplicati ports: - 自定义端口:8200 volumes: - /本地存储配置目录/docker/duplicati/data:/data - /本地存储配置目录/:/sourcessd - /本地存储配置目录/backup:/backup restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    bili-sync

    • 哔哩哔哩收藏视频备份
    Docker Compose
    services: bili-sync-rs:  amtoaer/bili-sync-rs:latest container_name: bili-sync-rs ports: - 自定义端口:12345 volumes: - /本地存储配置目录/docker/bili-sync-rs/config:/app/.config/bili-sync - /本地存储配置目录/public/videos/Bilibilis:/Bilibilis # - /本地存储配置目录/docker/jellyfin/path/to/config/metadata/People:/app/.config/bili-sync/upper_face restart: unless-stopped networks: - defaultnet mem_limit: 1g cpus: 2 networks: defaultnet: external: true 

    syncthing

    • 同步文件
    Docker Compose
    services: syncthing:  syncthing/syncthing:latest container_name: syncthing ports: - 自定义端口:8384 # Web UI - 自定义端口:22000/tcp # TCP file transfers - 自定义端口:22000/udp # QUIC file transfers - 自定义端口:21027/udp # Receive local discovery broadcasts volumes: - /本地存储配置目录/docker/syncthing:/var/syncthing environment: - PUID=1000 - PGID=1000 restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    immich

    • 照片管理
    Docker Compose
    services: immich-server:  ghcr.io/immich-app/immich-server:release container_name: immich_server ports: - '自定义端口:2283' volumes: - /本地存储配置目录/docker/immich/data:/data # 中文地理编码https://github.com/ZingLix/immich-geodata-cn - /本地存储配置目录/docker/immich/geodata:/build/geodata - /本地存储配置目录/docker/immich/i18n-iso-countries/langs:/usr/src/app/server/node_modules/i18n-iso-countries/langs - /本地存储配置目录/Goalonez/Photos:/Photos environment: - DB_HOSTNAME=immich_postgres - DB_PORT=5432 - DB_USERNAME=postgres - DB_PASSWORD=自定义密码 - DB_DATABASE_NAME=immich # 我是复用了rsshub的redis,请自行参考上方rsshub中的redis镜像 - REDIS_HOSTNAME=redis - REDIS_PORT=6379 # 同实例不同库 - REDIS_DBINDEX=1 - TZ=Asia/Shanghai depends_on: - immich_postgres restart: unless-stopped networks: - defaultnet mem_limit: 2g cpus: 3 immich-machine-learning:  ghcr.io/immich-app/immich-machine-learning:release container_name: immich_machine_learning volumes: - /本地存储配置目录/docker/immich/model-cache:/cache environment: # 代理 - HTTP_PROXY=http://192.168.5.2:7890 - HTTPS_PROXY=http://192.168.5.2:7890 - NO_PROXY=localhost,127.0.0.1,immich - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet mem_limit: 4g cpus: 4 immich_postgres:  ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:32324a2f41df5de9efe1af166b7008c3f55646f8d0e00d9550c16c9822366b4a container_name: immich_postgres ports: - '5432:5432' volumes: - /本地存储配置目录/docker/immich/postgresql/data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=自定义密码 - POSTGRES_USER=postgres - POSTGRES_DB=immich - POSTGRES_INITDB_ARGS=--data-checksums - TZ=Asia/Shanghai restart: unless-stopped networks: - defaultnet shm_size:  mem_limit: 3g cpus: 2 networks: defaultnet: external: true 

    网络

    lucky

    • 自动续 ssl 证书,反代
    • 还有一堆功能
    Docker Compose
    services: lucky:  gdy666/lucky:latest container_name: lucky network_mode: host volumes: - /本地存储配置目录/docker/lucky/luckyconf:/goodluck restart: unless-stopped 

    mihomo

    Docker Compose
    services: mihomo:  metacubex/mihomo:latest container_name: mihomo ports: - "自定义端口:7890" - "自定义端口:9090" volumes: - /本地存储配置目录/docker/mihomo/metacubexd:/metacubexd #默认不用,图形化界面需要单独去git拉代码映射 - /本地存储配置目录/docker/mihomo/config:/root/.config/mihomo restart: unless-stopped networks: - defaultnet networks: defaultnet: external: true 

    📌 转载信息
    转载时间:
    2026/1/14 11:05:30

    🚀 懒猫微服 2026 新年抽奖:总价值 19000 元好礼回馈 V 友!

    感谢各位 V 友在 2025 年对「懒猫微服」的支持!过去一年,我们的内网穿透技术云端微信方案得到了不少朋友的认可。为了回馈社区,新年开启两轮抽奖活动,总价值约 19000 元

    历史抽奖贴一,490+参加

    历史抽奖贴二,500+参加

    🔗 官方阵地


    🎁 活动奖品清单(总价值 19000 元)

    奖项 奖品内容 名额
    一等奖 价值 8899 元 「懒猫微服」 LC-02 (32G+8T) 创始珍藏版 1 名
    二等奖 CHERRY MX1.1 茶轴机械键盘 + 300 元 LC03 购机券 5 名
    三等奖 700 元 LC02 新年购机券 10 名


    📅 活动时间与节奏:第二轮

    • 活动时间:1.13 - 1.16
    • 本轮奖品:一等奖 × 1 、 二等奖 × 2 、三等奖 × 5
    • 开奖时间1 月 16 日 (周五) 20:00


    📝 如何参加(必读)

    本次活动主要基于推特联动及微信群公示,请按以下步骤操作:

    1. 互动评论:评论区留言:懒猫微服,内网穿透真丝滑,远程微信能多开,新年抽奖送好礼!
    2. 进交流群(硬性要求)必须加入微信交流群才有中奖资格。请添加工作人员微信(lanmaoweifu),备注“V2EX”进群。


    💡 特别提醒

    • 资格验证:中奖后需提供本帖评论参与截图主页截图进行验证。
    • 公平公正:使用开源抽奖工具打乱名单,结果第一时间在微信群公布。
    • 有效期:中奖后请在 3 个工作日内联系领奖。
    • 全球包邮:购买或中奖产品均发 UPS 红牌,全球约 3 天送达。


    🛒 购买渠道

    如果您急于上手或想了解更多:

    • 专属优惠:加微信备注“新年优惠”获取最新折扣。
    • 购买链接京东购买 | 海外购买
    • 专属小程序咨询:17820700354, 17612774028, 18627819480, 18627819427

    :名单统计以 V2EX ID 为准,每人限中奖一次。

    Hacker Flag 5pqX5Y+3OiBEb24ndCBQYW5pY++8jOWKoDE3ODIwNzAwMzU077yM5Lqr5Y+X5pu05aSn5LyY5oOgCg==

    活动图

    1. 技术支持类: 由于前几年 nas 火热,用家里剩余的一些配件攒了个黑群晖,后面在一些碰壁解决问题的过程中掌握一点小技巧,遂将其挂在咸鱼做技术支持,客单价不高,但胜在快速,90%的单子几分钟即可快速解决。主要是 nas 安装一些 docker 容器类,解决一些常见的 nas 问题,主要集中在影音三件套( qb/emby/nastool/mp ),玩 nas 的大佬们应该都懂。这部分收入粗略计算了下大概在 3000 左右。

    2. 内存篇 国庆回家无意关注到内存要涨价的消息,出的第一套是闲置的金士顿 32Gx2 年初从群友手上 300 出头收的,880 就出了(此时小后悔),后续还出了三根 32G 工包条。然后在十月中旬喊朋友从 jd 下 1599 的宏碁冰刃,下了 20 套,到手不久就连涨了两波,感叹自己意识太差,撸货思维一下给套进去了,涨价没多少我就以 1799 的价格都抛掉了。而且被咸鱼坑了 400+手续费,本来和买家商议好到手取消订单走转账,买家说手滑就点了确认。截止到这里,内存赚了 2000 出头的样子。后续价格不断上涨的过程中从咸鱼一套一套的囤货,顺带买了些固态,截止到发帖日的报价计算,利润在 4 个多,这里插一句,我太圣母了,每次有各种线报总喜欢选一堆群和朋友发,特别是内存,我真的发了超级多人,让他们买,不过真正做的人比例极少(我知道看到这里大家会想什么,但这里的背景是:我是一个“撸货、倒🐶”这种层面从不会让自己亏钱的人,所以我乐于带一些我觉得有“感恩之心”的朋友赚点小钱)。加上之前卖过的一些散货内存 30 余套,利润在 3000 上下。遂内存篇目前到手的钱有 5000+。

    3. 撸货 说起撸货其实已经好久不撸货了,但是这部分依然是 2025 收入占比的大头,先说说撸货的经历吧,17 年经常在 wp7 福利区吧( baidu 贴吧)混水,那时候大家乐于奉献一些精品线报,经常回帖刷帖以此认识了一些老哥就被带入了这个圈子,那是 17 年的 618 ,那会儿还没 plus 会员,但是我仅靠一个京东账户,是一个纯新手的情况下,就撸了 1600 块钱左右。自此,我开始带经常混的一个小群群友撸货,所以大家很信任我,有些人会懒得撸,但是会把号借给我,我帮他们开 plus 会员,撸的京豆都给他们用。最高峰时我大概有 20 来个 plus 账户,撸日化、奶粉、手机,前几年撸货统一都是货到付款,没有任何资金压力,那时候黑号也不严重,同设备 ip 随便登录随便下,洗衣液一单就是几十瓶,百元机,领 5000-500 的手机券,红米啊荣耀啊,一单就是 10 台,我记得在 plus 页面还能看到当前账户一共返还了多少京豆(这个页面后面下架了),仅一个账户就返了 20w 京豆。但从 20 年后撸货渐渐没落,黑号严重,僧多肉少,活动越来越难,后面就渐渐放弃了。但是有刷到利润比较高的还是会撸一下,比如每年的苹果首发,618 、1111 的时候 pxx 百亿补贴,只要发货,利润非常可观(很遗憾我自己号这么多年也就发了一单),大部分都是亲朋下的,我帮忙卖掉抽取一点点利润。说回开头,为什么撸货赚的钱依然在 2025 年占比比较大,苹果首发的时候从京东撸了两台,在咸鱼逛的时候加到一个深圳的贩子群(骗子群),但是在群里认识到一个老哥,最开始只是探讨报价,不过后面交流过程中知道他也是第一次撸货,我就跟他聊了聊我上面说的一些往事,这个哥们执行力非常强,拉上了自己所有朋友和师兄师姐师弟师妹一起撸(很羡慕他有这么一群听指挥执行力高的朋友),后面每次放货他也会给我发一手消息,我就被间接的带动了,在首发往后的一个月内,我大概撸了 10-12 台 17pm 吧,具体数字记不大清楚了,绝大部分到手直接送档口现结。利润低的就挂🐟出给个人买家,价格会稍微高一丢丢,线下取货的时候一起拿。(比较搞笑的是我线下出了三台,三台都是男的买,但都不是给自己买。在这里也希望老哥们从副业里赚到钱了对自己也稍微好点)。所以在撸货篇的收入为 7000 。

    4. 一个小项目,收入 1700

    5. 返利篇 这部分只是想起来顺嘴一提不算入 2025 的副业中,我特地把京粉注册以来的所有提现金额大概计算了下,大概有 2w1 。当然在 2026 年的现在,特别是 v 站,应该没几个人不知道返利。我认识的绝大部分人都会嫌麻烦,我想说的是,积少成多,这玩意儿不就是多花 30 秒时间,纯粹捡钱。少的可以嫌麻烦,买大件一定要走哇。

    6. 理财篇 我是一个纯韭,还是懒得学习的韭,手上的钱散布在 zfb 、证券、jd 金融。基本以存款、基金、股票几个大类为主。在疫情那波购买韭菜三件套(什么医药、白酒 balabala )后,其实有一段时间利润比较可观,但是新手的通病大是是不知道跑路,我亦如此。在后期很不幸的基金-2w ,股票-1w+。到后面我索性直接不看,一年都不打开两次证券 app ,但在 2025 年的某一天,我打开 jd 金融,我发现我不仅回本了,还塔马的赚了,截止到发帖日,jd 金融近一年收益率 94%。股票也差 1000 出头回本。遗憾的是 zfb 的韭菜几件套依然差 1w 回本。不过总体来说依然是好事儿。再提一个篇外话,最近又跟风白银套利机赚了几杯奶茶钱,还从群里看到一个老哥多账户开拖拉机套了 10 个。(虽不知真假,但为这做好准备总归没错,这就好比撸货,来大利润单的时候你号越多肯定是赚的越多的)。过年回去准备把家人的号都开起,有开户资源的老哥看到这里请带带我,谢谢。

    7. 纪念币 这个属于比较稳定的每年都会发行各类纪念币,一般异性、生肖相对之前。我从 17 年就开始抢,不过逐年难度上升,可以多收集家人的身份证抢试试。

    8. 总结:3000+5000+7000+1700 。内存篇还有一些在囤,就不计入总账了。发帖只是临时起意,可能还忽略了很多东西,想起来再补充。文笔差读起来比较累,见谅。

    2020 年 7 月份,首发买的群晖 220+,花费 2350 元,我的第一台 nas 。2023 年 8 月份,花费 1350 元买入极空间 z2pro ,两者都是入门款,但该有的功能基本还是齐全的。

    如今二者已经并存使用了两年半,大概是可以说说二者的优缺点。
    本来是打算群晖用到老的,先说说为什么会买极空间,一开始看到极空间是在张大妈上,当时极空间名声不太好,首先是国产厂家做 nas ,隐私性受到质疑(这点现在还是会有人提到),然后是说好的功能跳水,我之所以在使用群晖 3 年后购入极空间,是因为我实在无法在安卓盒子上找到一个好用的影视播放 app ,要么操作繁琐,要么不稳定,反正折腾了挺久,后来看到评论说极空间的极影视挺好用的,而且那时候硬盘便宜,囤了好几块硬盘,怀念 4t 硬盘 350 元的时候,我又想把 pt 下载和影视库与群晖剥离开,就买了台极空间,纯当做影视下载和挂 pt 用。

    目前用下来,群晖的优点:
    照片备份软件 photos 好用,系统完善,该有的功能都有,并且网上教程多,遇到问题基本可以解决,玩法也多。权限管理精细。
    群晖的缺点:
    没有好用的影视 app ,手机端 DS file 说是一坨不为过,复古的 ui ,简陋的功能,看个视频还要调用第三方,软件多且杂,配置一般,只有千兆口。总而言之就是手机端体验太差,但是现在基本只用手机,不会用网页端。而且去年四月份,新系统要使用群晖认证的硬盘,这点确实让我反感,虽然前段时间服软了,可以使用非认证硬盘了,但群晖官方并没有保证可以一直使用。
    极空间的优点:
    极影视确实好用,刮削准,海报墙也不错,杜比源码输出,自带的相册用着也还行,系统更新的很勤快,之前我打开存放监控的文件夹,因为文件数多,读取全部视频会转半天,现在基本是秒读取,让我感觉到确实是在认真优化的。一个 app 集成了所有功能,操作便捷,直观明了。
    极空间的缺点:
    z2pro 的 cpu 是 rk3568,能力羸弱,pt 下载跑满网速,系统会变卡。专业度不够,权限分配,系统稳定性不足,会有一些莫名其妙的 bug ,第三方插件资源不足。至于隐私问题,目前还没有看到极空间有相关的问题被爆出来,我想隐私问题是所有 nas 厂家的命根,一旦触及,将会是死刑。

    总结下来,二者优缺点都挺明显的,我现在打算将两者都卖掉,买一个四盘位的极空间,最后让我选择极空间的原因还是易用性,在没有极空间之前,我给我老婆推荐了好久的群晖,完全推销不出去,手机端 app 做的实在太烂,她用了几天就不想用了,极空间她一直在用,而且有娃以后,我把娃的照片放上面,还有个专门的极空间亲情 app 给家里的老人用,让他们可以方便的看到娃的照片,想看电影了,直接 pt 下好,极影视刷新一下就行,那种一个人用和全家人一起用的感觉是完全不同的,不是群晖不好,而是极空间太适合家庭用户了。

    都说中年男人爱好:NAS 、软路由、充电头和钓鱼

    所以我想做这么一个社区,定位就是中年男人的兴趣社区。不仅仅是发帖交流,而是把帖子的知识沉淀下来成为知识,当你对一个事情感兴趣的时候,有完整的新人指南和入门会用的资源(软硬件、装备推荐)。所以我称之为知识型兴趣社区。

    看过太多做社区失败的了,我也没信心,但是这个念头一但有了就挥之不去。

    还请各位给我建议!

    如果你有兴趣,可以先注册查看 Demo: https://www.middlefun.com/

    花了心思参考 Vercel 的设计做了这么一张卡片,现在注册你就能看到它

    为什么要存到 NAS

    一直不愿意用一些云相册或者网盘之类的服务来备份和保存自己的照片,主要是两个原因:

    1. 不想自己的隐私被这些服务方一直视奸,你传上去的照片视频肯定会被这些服务方扫描一遍的,就算没有私密的照片,我也接受不了隐私被这样侵犯
    2. 不想自己的数据被绑架,毕竟数据是别人手上,哪天别人要跑路或者涨价,你也没有任何办法

    尝试的方案

    群晖 moments
    最开始 NAS 装了群晖,于是就用了群晖自带的 moments 来同步照片.用了一段时间后出现了一些问题:

    1. moments app 几乎不再更新,体验不算差,但绝对不好,老婆总是抱怨 ios 上这不好用那不好用
    2. 与群晖绑定,因为必须搭配 moments 服务端一起使用,所以你没有任何别的选择,这让我感觉很被动
      现在似乎群晖已经淘汰 moments 了,出了新的群晖 photos,这个我没有试用过,因为群晖硬件还是太贵了,现在已经改用 Unraid 了

    PhotoPrism - 超好用
    不得不说 PhotoPrism 确实太好用了,我最喜欢它的一点是他的兼容性很强,你只要丢给它一个目录,他就能处理里面的所有照片,并且可以在各个维度进行检索,对于超大量的照片来说真的很好用.

    但问题就在于 PhotoPrism 只有服务端,把照片同步到 NAS 这个动作还要我自己想办法来完成

    PhotoSync - 不值得这个价格
    这个 app 的功能还是可以的,但是它的 UI 和交互是在是有点古老,我还需要专门用一个 app 来进行同步这个事情,最重要的是要付费才能用,我觉得不太值得,放弃.

    Nextcloud - 移动端 app 太差
    Nextcloud 作为网盘来说挺好用的,我尝试使用 Nextcloud 的移动端来同步相册照片.但我真的安装了安卓端 app 后,连接了我 https 反代后的 URL 居然直接崩溃了,完全没法用,放弃.

    Alist + Pho + Rclone + PhotoPrism - 终极方案

    这个方案最让我喜欢的一点是各个环节都不是耦合的,去掉其中任何一个环节都不会影响到其他环节,每个人完全可以根据自己的喜好来替换其中的某个部分.

    Alist
    官网: https://alist.nn.ci/zh/
    负责把各种可用的储存映射成webdav,支持各种云盘网盘以及本地储存
    Alist

    Pho
    官网: https://pho.tools/
    负责通过webdav上传照片到Alist映射的储存 它很好的一点是支持加密后上传,这样就可以在网盘上做二次备份,在能避免隐私泄露的前提下多一层数据保险
    而且我可以在手机上直接用这个 app 来浏览我本地和已经上传的照片,这个 app 的 UI 和交互都很好,可以直接用它来代替系统自带的相册
    Pho

    Rclone
    官网: https://rclone.org/
    负责把Alist的webdav映射到 NAS 的文件系统内,来把照片喂给 PhotoPrism

    PhotoPrism
    官网: https://www.photoprism.app/
    最终的"集大成者",全家所有设备备份的照片最终全部喂到这里,即使是海量照片也能根据它快速索引到自己想找的照片

    PhotoPrism

    最终效果

    平时手机上浏览和上传
    使用Pho浏览本地和最近上传的照片

    查找和浏览过去某个时候的照片
    根据信息用PhotoPrism检索即可