群晖 NAS 常用 Docker Compose 项目部署汇总

发布于 2024-01-07 00:00 3226 字 17 min read

从零开始玩转 OpenWrt 2026:进阶网络架构与 Nikki 极速配置指南2026 自建节点实战:Xray VLESS-Vision-REALITY 部署指南AI 角色扮演进阶指南:从 SillyTavern 部署到 Telegram 接入从 WordPress 到 Astro 迁移记录ImmortalWrt固件overlay扩容安装指南基于mihomo内核的OpenWrt插件Nikki推荐yaml配置OpenWrt 插件 Passwall 推荐设置指南Cloudflare简易使用指南WordPress 网站向 Jekyll 静态博客迁移全记录OpenWrt 插件 OpenClash 推荐配置指南OpenWrt插件Passwall开启ipv6推荐配置OpenWrt插件Passwall推荐配置指南OpenWrt桥接后访问光猫方法PVE下快速更新OpenWrt固件方法群晖 Docker 容器版 Emby 添加弹弹 play 弹幕实战群晖 NAS 常用 Docker Compose 项目部署汇总群晖 Docker 开启 IPv6 双栈与 OpenWrt 协同配置指南软路由刷 PVE 并安装 OpenWrt 折腾记录群晖开启 macvlan 网络并通过 compose 命令安装 docker 指定 ip家庭网络布局:玩转 PT 与 Docker macvlan 避坑指南在本地运行 docker 连接 api 更稳定使用 chatGPT 服务网站添加石蒜模拟器OpenWrt建议设置(个人备份)家庭网络布局:群晖 VMM 虚拟机安装 OpenWrt 旁路由实战群晖种草教程——从玩机到佛系(自用备份版)一加3T手机刷机及安卓必备系统优化软件推荐利用 phpMyAdmin 指令将 WordPress 网站快速 HTTPS 化利用 Docker 快速安装 Aria2 + AriaNg 教程给 WordPress、Typecho、Emlog 等博客网站添加鼠标点击文字特效Windows 10 快捷方式小箭头去除与恢复指南自动化备份指南:利用 Dropbox Uploader 实现网站数据与 SQL 数据库同步Linux学习笔记(二)Linux学习笔记(一)建站之旅其一:一些想法建站之旅其三:多次尝试与一次挫败建站之旅其二:从 VPS 科学上网到自建站的萌芽建站之旅其四:常用命令与参考资料汇总
本文汇总了 15 个在群晖 NAS 上通过 Docker Compose 部署的实用项目,涵盖影音娱乐(Emby)、下载工具(qbittorrent)、自动化追番、个人库管理及各类签到脚本,并详细记录了 macvlan 网络配置及系统环境优化方案。

所有 docker 项目均采用 docker compose 的方式部署

1、emby(影音服务器)

version: "2.3"
services:
  emby:
    image: lovechen/embyserver:latest
    container_name: embyserver-cp
    network_mode: bridge
    environment:
      - UID=1026
      - GID=100
      - GIDLIST=100,0
    volumes:
      - /volume1/docker/emby:/config
      - /volume1/1/raws-Music:/data
      - /volume4/4:/data1
      - /volume3/3:/data2
      - /volume2/2:/data3
    ports:
      - 8095:8096
    devices:
      - /dev/dri:/dev/dri
    restart: unless-stopped

推荐关闭硬件转码功能,使用开心版只是因为可以显示歌词。数据库这里推荐将数据库缓存大小(MB)改为 512,分析行限制改为 4000。

另外,如果你启用了实时监控,但是没生效,不扫描新文件,网上很多人给的方法是定时重启 emby、去计划任务设置 Scan media library 狠狠地扫,这些都是错的,其实是元数据信息太多,然后群晖有限制上限导致的,具体可以参见——

解决方式:群晖控制面板-计划任务-添加一个 root 任务,取名随便,比如 fix for RTM,执行如下脚本即可——

sysctl fs.inotify.max_user_watches=1048576;
sysctl fs.inotify.max_user_instances=4096;

2、qbittorrent(BT 下载器)

使用下载器之前,推荐提前建立一个 macvlan 的网络接口,ssh 登录群晖——

sudo -i
#获取root权限
ip addr
#查看网络接口名称,通常不是eth0就是ovs_eth0
sudo ip link set ovs_eth0 promisc on
#开启混杂模式
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 --ipv6 --subnet=fd0d:7eb5:2afd::/64 --gateway=fd0d:7eb5:2afd::1 -o parent=ovs_eth0 macnet
#双栈版本,192.168.2.0改为你的ipv4网段,192.168.2.1改为你的ipv4网关,后面ipv6随便设置一个f开头的内网地址,可以照抄,macnet可以随便取名,后面建立容器需要用到
docker network create -d macvlan --subnet=192.168.2.0/24 --gateway=192.168.2.1 -o parent=ovs_eth0 macnet
#仅ipv4版本,如果添加错了,可以去群晖container manager网络里面直接删除,如果删除不了,取消已经链接的容器就可以执行删除了

这里推荐 qbittorrent 的 4.3.9 版本,给两个案例仅供参考——

version: "2.1"
services:
  qbittorrent:
    image: linuxserver/qbittorrent:14.3.9
    container_name: qbittorrent-pt
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: 192.168.2.4
    volumes:
      - /volume1/docker/qbittorrent-pt:/config
      - /volume3/3/PT:/downloads
    environment:
      - WEBUI_PORT=8080
      - TZ=Asia/Shanghai
      - PUID=1026
      - PGID=100
    ports:
      - 8080:8080
      - 52004:52004
      - 52004:52004/udp
networks:
  macnet:
    external: true
version: "2.1"
services:
  qbittorrent:
    image: johngong/qbittorrent:4.3.9
    container_name: qbittorrent-skyey2
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: 192.168.2.5
    volumes:
      - /volume1/docker/qbittorrent-skyey2:/config
      - /volume1/1/downloads/pt:/Downloads
    environment:
      - WEBUIPORT=8989
      - TZ=Asia/Shanghai
      - PUID=1026
      - PGID=100
      - UMASK=022
      - TRACKERSAUTO=NO
    ports:
      - 8989:8989
      - 52003:52003
      - 52003:52003/udp
networks:
  macnet:
    external: true

另外说下个人喜欢的配置——
选项-下载-默认 Torrent 管理模式改为自动,自己创建分类的时候请设置好下载地址,其他地方全不打钩;连接,全不勾选;
速度-设置速度限制,保持默认选 1、3;BitTorrent,如果是 BT 勾选隐私前三个,如果是 PT,隐私均不勾选,并关闭做种限制,均关掉 Torrent 排队和自动添加 tracker;
如果需要外网访问,在 Web UI-验证-启用 Host header 属性验证,取消勾选。
其他保持默认即可。另外,如果发现切换版本后种子信息不显示(没有文件、tracker 信息等),清除下浏览器 cookie 和缓存即可,并不是降级/升级版本失败。

3、AutoBangumi(自动追番神器)

因为群晖出于安全考虑,有默认限制 macvlan 网络的容器与宿主机之间的访问,所以如果把 AutoBangumi 建立在 host 或者 bridge 下面是没法访问 qbittorrent 的,但是 macvlan 网络的容器之间可以访问,而且路由器访问也是没问题,这里就不介绍如何用代码实现 macvlan 容器与群晖互通并添加计划任务了,直接将 AutoBangumi 也建立在 macvlan 下即可。

version: "3.8"

services:
  AutoBangumi:
    image: "estrellaxd/auto_bangumi:latest"
    container_name: AutoBangumi
    volumes:
      - ./config:/app/config
      - ./data:/app/data
    ports:
      - "7892:7892"
    restart: unless-stopped
    networks:
      macnet:
        ipv4_address: 192.168.2.3
    environment:
      - TZ=Asia/Shanghai
      - AB_METHOD=Advance
      - PGID=1026
      - PUID=100
      - UMASK=022
networks:
  macnet:
    external: true

AutoBangumi 经历多个版本,界面已经又换成了中文,配置非常简单,官方也有详细的说明文档,这里就简单说下我自己解析设置的排除内容:
720 \d+-\d BIG5 繁日双语 先行版 繁體 繁体 Bilibili 繁日内嵌 简体内嵌

4、zflie(简洁直观的在线文件目录程序)

version: "3"
services:
  zfile:
    image: stilleshan/zfile:latest
    container_name: zfile-cp
    ports:
      - 8094:8080
    volumes:
      - /volume1/docker/zfile:/root/.zfile-v4:rw
      - /volume1/1/Share:/root/zfile/data:rw
    restart: always
    network_mode: bridge

建议就把 zfile 作为本地共享的一种方式,配置比 alist 简单多了。

5、chatgpt-web(使用 api 的 ChatGPT 演示网页)

version: '3'

services:
  app:
    image: chenzhaoyu94/chatgpt-web:latest
    network_mode: host
    restart: always
    ports:
      - 3002:3002
    environment:
      # 二选一
      OPENAI_API_KEY: sk-*******************************
      # 二选一
      # OPENAI_ACCESS_TOKEN:
      # API接口地址,可选,设置 OPENAI_API_KEY 时可用
      OPENAI_API_BASE_URL: https://api.chatanywhere.com.cn
      # API模型,可选,设置 OPENAI_API_KEY 时可用
      # OPENAI_API_MODEL:
      # 反向代理,可选
      # API_REVERSE_PROXY:
      # 访问权限密钥,可选
      AUTH_SECRET_KEY: *******************************
      # 每小时最大请求次数,可选,默认无限
      # MAX_REQUEST_PER_HOUR: 0
      # 超时,单位毫秒,可选
      TIMEOUT_MS: 60000
      # Socks代理,可选,和 SOCKS_PROXY_PORT 一起时生效
      # SOCKS_PROXY_HOST:
      # Socks代理端口,可选,和 SOCKS_PROXY_HOST 一起时生效
      # SOCKS_PROXY_PORT:

推荐去这里领取免费 api,https://github.com/chatanywhere/GPT_API_free,上面我自己用不到的部分都用#注释了,有需要可以自己去#添加。

6、speedtest(测速软件,测试你当前的设备和群晖之间的网速)

version: "3"

services:
  web:
    image: adolfintel/speedtest:latest
    container_name: speedtest
    hostname: speedtest
    restart: unless-stopped
    network_mode: bridge
    ports:
      - 8844:80

7、qdtoday(自动签到,支持大部分论坛和部分应用)

version: "3"
services:
  qiandao:
    image: qdtoday/qd:latest
    container_name: qiandao
    network_mode: bridge
    volumes:
      - /volume1/docker/qiandao:/usr/src/app/config
    ports:
      - 8923:80
    restart: unless-stopped

配置很复杂,不过主要难点还是在于获取 cookies,电脑上就用 Chrome 之类的按 F12 获取,手机上推荐 Alook 和 VNET,另外推荐一个仓库:https://github.com/wjf0214/qd-templates,分支写 master。

8、qinglong(自动京东打工签到,还支持阿里云盘)

version: '2'
services:
  web:
    container_name: qinglong
    image: whyour/qinglong:latest
    network_mode: bridge
    volumes:
      - /volume1/docker/qinglong:/ql/data
    ports:
      - "0.0.0.0:5700:5700"
    restart: unless-stopped

推荐 KingRan 库,https://github.com/KingRan/KR.git

阿里云盘每日签到,https://github.com/mrabit/aliyundriveDailyCheck.git

以及二次元虫洞的签到脚本
https://github.com/CelestialRipple/2cycd_Autosignin/blob/main/autosignin.py

直接去脚本管理新建一个文件,取名 2cycd.py,记得一定要加.py,复制上面的代码进去,然后去定时任务那里新建一个任务,命令/脚本填写 task 2cycd.py,定时规则比如每天 8 点,0 8 * * *,这样就可以了。
另外京东的环境变量可以只写 JD_WSCK,需要手机 app 抓取(推荐),也可以在网页抓 JD_COOKIE,失效很快就是。前者格式为 pin=123;wskey=123;(注意最后的;),后者格式为 pt_key=123;pt_pin=123;(注意最后的;)。

9、flaresolverr(签到 PT 站等脚本的依赖,作用是跳过 cloudflare 的验证)

version: "3"

services:
  web:
    image: 15cm/flaresolverr:3.0.0
    container_name: flaresolverr
    hostname: flaresolverr
    restart: unless-stopped
    network_mode: bridge
    ports:
      - 8191:8191
    environment:
      - TZ="Asia/Shanghai"
      - LOG_LEVEL=info

10、reader(非常有名的 Legado 的 docker 版阅读器)

version: '3.1'

services:
  reader:
    container_name: reader
    image: hectorqin/reader:latest
    restart: always
    network_mode: bridge
    ports:
      - 4395:8080
    volumes:
      - /volume1/docker/reader/logs:/logs
      - /volume1/docker/reader/storage:/storage
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - READER_APP_SECURE=true #开启登录鉴权,开启后将支持多用户模式
      - READER_APP_CACHECHAPTERCONTENT=true #是否开启缓存章节内容 V2.0
      - READER_APP_SECUREKEY=123456  #管理员密码  可自行修改
      - READER_APP_INVITECODE=123456 #注册邀请码,如需要取消注释 可自行修改

个人感觉比 calibre 好用,推荐作为本地书籍的在线阅读管理器,当然也可以添加网络源。

11、ms-ra-forwarder(一个本地的在线文本转语音 API,支持微软语音)

version: '3'

services:
  ms-ra-forwarder:
    container_name: ms-ra-forwarder
    image: wxxxcxx/ms-ra-forwarder:latest
    restart: unless-stopped
    network_mode: bridge
    ports:
      - 3000:3000
    environment:
      # 不需要可以不用设置环境变量
      - TOKEN=123456

搭配上面的 reader 使用。

12、Alist(多网盘文件列表程序)

version: '3.3'
services:
    alist:
        image: 'xhofe/alist:latest'
        container_name: alist
        volumes:
            - '/volume1/docker/alist:/opt/alist/data'
            - '/volume1/1/downloads/the story:/1'
            - '/volume2/2/after story:/2'
            - '/volume3/3/temp:/3'
            - '/volume4/4/before story:/4'
        ports:
            - '5244:5244'
        environment:
            - PUID=1026
            - PGID=100
            - UMASK=022
        restart: unless-stopped
        network_mode: host

群晖的 Alist 和 aria2、qb 的联动,导入种子后的下载权限总是有问题,提示下载错误。再加上离线下载这个功能并不太实用,试了很多权限添加方式后,都不行,果断放弃了,欢迎有爱的大佬告诉我解决方法呀~

13、NASTools(NAS 媒体库管理工具)

version: "3"
services:
  nas-tools:
    image: hsuyelin/nas-tools:latest
    ports:
      - 3003:3000
    volumes:
      - /volume1/docker/nas-tools:/config
      - /volume3/3:/3
    environment:
      - PUID=1026
      - PGID=100
      - UMASK=022
      - NASTOOL_AUTO_UPDATE=false
      - NASTOOL_CN_UPDATE=false
    restart: always
    network_mode: bridge
    hostname: nas-tools
    container_name: nas-tools

本人用 nastools 主要是用于创建硬链接,PT 刷流什么的,还是喜欢手动。

14、CloudDrive2(云盘本地挂载的一站式的多云盘解决方案)

sudo -i
#获取root权限
mkdir -p /etc/systemd/system/docker.service.d/
cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf
[Service]
MountFlags=shared
EOF
#开启MountFlags
mount --make-shared /volume1
#开启share类型挂载,这里需要预先在群晖控制面板-共享文件夹里新建一个共享文件夹,这里以建立在volume1硬盘下自定义名称为CloudNAS的共享文件夹为例进行演示,如果你建立在其他volume,请自行更改命令行里的数字
#后续每次启动docker前都需要运行mount……volume1这一行命令,建议在群辉控制面板-计划任务,新增触发的任务,并设置开机启动即可

事先准备完成后,下面是 compose——

version: "3.8"
services:
  cloudnas:
    image: cloudnas/clouddrive2:latest
    container_name: clouddrive2
    network_mode: bridge
    environment:
      - TZ=Asia/Shanghai
      - CLOUDDRIVE_HOME=/Config
    volumes:
      - /volume1/CloudNAS:/CloudNAS:shared
      - /volume1/docker/clouddrive2:/Config
      - /volume1/1:/1
      - /volume2/2:/2
      - /volume3/3:/3
      - /volume4/4:/4
    ports:
      - 29798:19798
    devices:
      - /dev/fuse:/dev/fuse
    restart: unless-stopped
    privileged: true

可以建立多个,比如我还建立了一个如下——

version: "3.8"
services:
  cloudnas:
    image: cloudnas/clouddrive2:latest
    container_name: clouddrive
    network_mode: bridge
    environment:
      - TZ=Asia/Shanghai
      - CLOUDDRIVE_HOME=/Config
    volumes:
      - /volume1/CloudNAS:/CloudNAS:shared
      - /volume1/docker/clouddrive:/Config
      - /volume1/1:/1
      - /volume2/2:/2
      - /volume3/3:/3
      - /volume4/4:/4
    ports:
      - 19798:19798
    devices:
      - /dev/fuse:/dev/fuse
    restart: unless-stopped
    privileged: true

注意:想要映射给容器里的本地文件夹目录,挂载时后面不需要加“:share”,容器创建完成后需要登录 clouddrive2 进行挂载网盘操作,具体可以参考https://www.huluohu.com/posts/332/的第四步——
1、选择需要挂载的网盘,然后点击上面的“电脑”图标
2、在弹出的界面中选择挂载点,选择/CloudNAS
3、选完以后,点击挂载,就 OK 啦(可自定义挂载文件夹名称)

如果嫌麻烦,也可以使用矿神源的套件版来安装 clouddrive2,套件地址——
https://spk7.imnks.com/

开机启动脚本更换为——

sudo sed -i 's/package/root/g' /var/packages/CloudDrive2/conf/privilege

不过套件每次安装后都会在群辉系统里残留很多垃圾,比如系统内部用户、一些缓存设置文件之类的,如果有强迫症,可以参考这篇文章进行删除https://www.takochan.moe/archives/91,需要 root 执行权限,请务必小心操作!

15、miniflux(开源轻量级 RSS 阅读器)

version: "3"
services:
  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - FETCH_YOUTUBE_WATCH_TIME=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=adminadmin
      - BASE_URL=http://127.0.0.1:8480
      - POLLING_FREQUENCY=20
      - POLLING_PARSING_ERROR_LIMIT=0
      - BATCH_SIZE=100
      - POLLING_SCHEDULER=entry_frequency
      - SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL=45
      - MEDIA_PROXY_PRIVATE_KEY=password
      - DATABASE_MAX_CONNS=50
      - DATABASE_MIN_CONNS=5
      - WORKER_POOL_SIZE=10
    restart: always
    ports:
      - "8480:8080"

  db:
    image: postgres:latest
    container_name: miniflux-postgres
    restart: always
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=miniflux
    volumes:
      - /volume1/docker/miniflux:/var/lib/postgresql/data

注意提前创建/volume1/docker/miniflux 目录来装 postgres 的数据库,开启文件夹 everyone 读写权限并保证为空白目录(目录下没有任何文件、文件夹)。admin/adminadmin 的用户名和密码登录后均可修改,SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL 变量最高就是 30min 刷新一次,我这里设置成 45 也没有效果,如果不需要如此频繁的刷新,建议手动禁止(如一些个人博客之类的)。
还有就是项目会自行创建一个 miniflux_default 的 bridge 网络,这个保持这样就好,不然会报错(miniflux 无法找到数据库,会一直去 dns 服务器:53 的地址找)。原因大概如下——

User-defined bridges provide automatic DNS resolution between containers. Containers on the default bridge network can only access each other by IP addresses, unless you use the —link option, which is considered legacy. On a user-defined bridge network, containers can resolve each other by name or alias.

翻译过来大意:就是用户自定义的网卡可以在容器之间提供自动的 DNS 解析,缺省的桥接网络上的容器只能通过 IP 地址互相访问,除非使用 —link 参数。在用户自定义的网卡上,容器直接可以通过名称或者别名相互解析。

如果需要自建 rsshub 服务,可以参考如下配置——

version: "3"
services:
  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    depends_on:
      - db
      - rsshub
    environment:
      - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1
      - FETCH_YOUTUBE_WATCH_TIME=1
      - CREATE_ADMIN=1
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=adminadmin
      - BASE_URL=http://127.0.0.1:8480
      - POLLING_FREQUENCY=60
      - POLLING_PARSING_ERROR_LIMIT=0
      - BATCH_SIZE=100
      - POLLING_SCHEDULER=entry_frequency
      - SCHEDULER_ENTRY_FREQUENCY_MAX_INTERVAL=30
      - MEDIA_PROXY_PRIVATE_KEY=password
      - DATABASE_MAX_CONNS=50
      - DATABASE_MIN_CONNS=5
      - WORKER_POOL_SIZE=10
    restart: always
    ports:
      - "8480:8080"

  db:
    image: postgres:latest
    container_name: miniflux-postgres
    restart: always
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=miniflux
    volumes:
      - /volume1/docker/miniflux:/var/lib/postgresql/data
  rsshub:
    image: diygod/rsshub:latest
    container_name: miniflux-rsshub
    restart: always
    ports:
      - "1200:1200"
    environment:
      NODE_ENV: production
      CACHE_TYPE: redis
      REDIS_URL: 'redis://redis:6379/'
      PUPPETEER_WS_ENDPOINT: 'ws://browserless:3000'
    depends_on:
      - redis
      - browserless
  browserless:
      image: browserless/chrome:latest
      container_name: miniflux-browserless
      restart: always
      ulimits:
        core:
          hard: 0
          soft: 0
  redis:
      image: redis:alpine
      container_name: miniflux-redis
      restart: always
      volumes:
          - redis-data:/data

volumes:
    redis-data:

我个人是觉得官方的 rsshub.app 已经足够好用了,没必要浪费服务器资源自己搭建,当然有需要用到个人 cookies 的除外。创建好后在订阅地址填写 http://rsshub:1200/或者 http://内网服务器 ip 地址

/就行,若要映射到公网请自行研究。
再提一嘴,大部分个人博客网站,包括 wordpress 在内的默认 rss 订阅地址都是网址/feed,比如本站就是RSS,阿里嘎多喵。

另外如果没有软路由还可以用 DDNS-GO 来进行 ddns。

以后发现了其他有意思好玩实用的 docker 项目再推荐给大家~祝大家新年快乐,天天开心。

喜欢的话,留下你的评论吧~