Debian + SmartStrm + WebDAV + 网易爆米花 家庭影音服务部署教程

适用环境:Debian 12/13(64位),局域网访问,IP 以 192.168.1.2 为例 目标:将网盘影视资源通过 STRM 方式挂载,经 WebDAV 共享给网易爆米花,实现海报墙刮削与无广告播放 架构总览

适用环境:Debian 12/13(64位),局域网访问,IP 以 192.168.1.2 为例
目标:将网盘影视资源通过 STRM 方式挂载,经 WebDAV 共享给网易爆米花,实现海报墙刮削与无广告播放

架构总览

text

网盘(夸克/115/阿里云盘等)
        │
        ▼
┌──────────────────┐     ┌─────────────────┐     ┌──────────────────┐
│   SmartStrm      │────▶│  /mnt/sata/strm  │────▶│   Apache WebDAV  │
│  (Docker容器)    │     │  (STRM文件目录)   │     │   (端口 8091)    │
└──────────────────┘     └─────────────────┘     └──────────────────┘
                                                          │
                                                          ▼
                                                  ┌──────────────────┐
                                                  │  网易爆米花 App   │
                                                  │ (WebDAV 客户端)  │
                                                  └──────────────────┘
  • SmartStrm:扫描网盘,为每个视频生成 .strm 快捷文件(KB 级文本),不下载实际视频。

  • WebDAV:将 STRM 文件目录共享给客户端。

  • 网易爆米花:读取 STRM 文件,自动刮削生成海报墙,播放时由 SmartStrm 的 302 代理将视频流直连到网盘 CDN。

一、Debian 系统准备

1.1 更新系统并安装基础工具

bash

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg ca-certificates lsb-release

1.2 确认 IP 地址

bash

ip a | grep "inet " | grep -v 127.0.0.1

记录局域网 IP(如 192.168.1.2),后续所有配置都会用到。

二、安装 Docker 与 Docker Compose

SmartStrm 通过 Docker 镜像分发,推荐使用 Compose 部署。

2.1 安装 Docker(官方 APT 仓库方式)

bash

# 卸载旧版本(如有)
sudo apt remove docker docker-engine docker.io containerd runc

# 添加 Docker 官方 GPG 密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 添加 Docker APT 源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/debian $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装 Docker Engine 与 Compose 插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 启动并设置开机自启
sudo systemctl enable --now docker

2.2 验证安装

bash

sudo docker run hello-world

看到 “Hello from Docker!” 即成功。

2.3 将当前用户加入 docker 组(可选,免 sudo)

bash

sudo usermod -aG docker $USER
# 重新登录 shell 后生效

三、部署 SmartStrm

3.1 创建数据目录

bash

sudo mkdir -p /opt/smartstrm/{config,strm,logs,tools}
sudo mkdir -p /mnt/sata/strm
sudo chown -R $USER:$USER /opt/smartstrm

3.2 编写 docker-compose.yml

bash

nano /opt/smartstrm/docker-compose.yml

yaml

name: smartstrm

services:
  smartstrm:
    image: cp0204/smartstrm:latest
    container_name: smartstrm
    restart: unless-stopped
    network_mode: host
    volumes:
      - /opt/smartstrm/config:/app/config     # 配置目录
      - /mnt/sata/strm:/strm                   # STRM 生成目录(与 WebDAV 共享同一目录)
      - /opt/smartstrm/logs:/app/logs          # 日志目录(可选)
      - /opt/smartstrm/tools:/app/tools        # 工具目录(可选)
    environment:
      - PORT=8024                              # 管理后台端口
      - ADMIN_USERNAME=admin                   # 管理用户名
      - ADMIN_PASSWORD=你的强密码              # 管理密码,务必修改

关键点:/mnt/sata/strm:/strm 将宿主机的 /mnt/sata/strm 挂载为容器内的 /strm,SmartStrm 生成的 STRM 文件会直接写入这个目录。network_mode: host 是必须的,因为 SmartStrm 的 302 代理需要绑定自定义端口。

3.3 启动 SmartStrm

bash

cd /opt/smartstrm
sudo docker compose up -d

查看日志确认启动成功:

bash

sudo docker logs -f smartstrm

3.4 访问管理后台

浏览器打开 http://192.168.1.2:8024,使用 ADMIN_USERNAME / ADMIN_PASSWORD 登录。

3.5 配置存储(连接网盘)

进入「存储管理」→「添加存储」:

字段

说明

存储名称

自定义别名,如 myquark

驱动

选择网盘类型(夸克、115、WebDAV、OpenList 等)

鉴权信息

根据驱动扫码登录或填写 Cookie

SmartStrm 支持 OpenList、WebDAV、夸克、115、123、天翼、迅雷等主流网络存储驱动。保存后点击「测试」确认连接成功。

3.6 创建 STRM 生成任务

进入「任务管理」→「创建任务」:

  • 扫描路径:选择网盘中媒体文件所在的目录

  • 输出目录:选择 /strm(容器内路径,对应宿主机 /mnt/sata/strm)

  • 生成模式:选择「代理解析」模式(推荐),由 SmartStrm 处理 STRM 请求并 302 重定向到 CDN

保存并运行任务,STRM 文件将生成到 /mnt/sata/strm。

3.7 配置 302 代理(Pro 功能)

进入「系统设置」→「302 代理」:

配置项

值

服务端口

8097(默认)

媒体服务器地址

http://192.168.1.2:8024(SmartStrm 自身地址)

由于使用 network_mode: host,无需额外端口映射。302 代理的作用是让视频流直连网盘 CDN,不占用 NAS 带宽。

四、配置 WebDAV 服务

将 /mnt/sata/strm 通过 WebDAV 共享给网易爆米花。

4.1 确认端口规划

先检查端口占用情况:

bash

sudo ss -tlnp | grep -E ':(80|8080|8090|8091|8024|8097)\b'

本次案例中:

端口

占用者

用途

80

apache2

已有网站

8080

docker-proxy

已有容器

8090

docker-proxy

已有容器

8091

空闲

WebDAV

8024

smartstrm

SmartStrm 管理后台

8097

smartstrm

SmartStrm 302 代理

4.2 安装 Apache2 与 WebDAV 模块

bash

sudo apt install -y apache2 apache2-utils
sudo a2enmod dav dav_fs

4.3 创建认证用户

bash

sudo htpasswd -c /etc/apache2/webdav.passwd popcorn
# 后续添加用户去掉 -c 参数

sudo chown www-data:www-data /etc/apache2/webdav.passwd
sudo chmod 640 /etc/apache2/webdav.passwd

4.4 配置监听端口

编辑 /etc/apache2/ports.conf,添加:

apache

Listen 80
Listen 8091

4.5 配置 WebDAV 虚拟主机

创建 /etc/apache2/sites-available/webdav.conf:

apache

<VirtualHost *:8091>
    ServerAdmin webmaster@localhost
    ServerName 192.168.1.2

    Alias /strm /mnt/sata/strm

    <Directory /mnt/sata/strm>
        DAV On
        Options Indexes FollowSymLinks
        AllowOverride None

        AuthType Basic
        AuthName "WebDAV"
        AuthUserFile /etc/apache2/webdav.passwd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/webdav-error.log
    CustomLog ${APACHE_LOG_DIR}/webdav-access.log combined
</VirtualHost>

关键点:<Directory> 必须写真实文件系统路径 /mnt/sata/strm,不能写 URL 路径 /strm,否则 PROPFIND 等 WebDAV 方法会返回 405。

4.6 处理目录权限

Apache 以 www-data 运行,需要读取 /mnt/sata/strm:

bash

# 方式一:ACL(推荐,不影响 SmartStrm 容器的写入权限)
sudo apt install -y acl
sudo setfacl -R -m u:www-data:rwx /mnt/sata/strm
sudo setfacl -R -d -m u:www-data:rwx /mnt/sata/strm

# 验证
sudo -u www-data ls -la /mnt/sata/strm/ | head

注意:/mnt/sata/strm 同时被 SmartStrm 容器(以 root 运行)和 Apache(www-data)访问,使用 ACL 是最安全的方式,不会影响容器写入。

4.7 启用站点并重载

bash

sudo a2ensite webdav.conf
sudo apache2ctl configtest
sudo systemctl reload apache2

消除 ServerName 告警:在 /etc/apache2/apache2.conf 末尾添加:

apache

ServerName 192.168.1.2

4.8 验证 WebDAV

bash

# 目录读取
curl -u popcorn:你的密码 http://192.168.1.2:8091/strm/

# WebDAV 协议层验证
curl -u popcorn:你的密码 -X PROPFIND -H "Depth: 1" \
     http://192.168.1.2:8091/strm/ -i | head -5

预期:200(目录列表)或 207 Multi-Status。

五、网易爆米花客户端配置

5.1 添加 WebDAV 源

打开网易爆米花 App → 右上角「+」→ 选择 WebDAV:

参数

值

协议

HTTP

服务器地址

192.168.1.2

端口

8091

用户名

popcorn

密码

你设置的密码

路径

/strm

5.2 使用深度链接快速添加(可选)

网易爆米花支持通过深度链接快捷添加 WebDAV 配置:

text

https://bmh.163.com/la/?import=webdav&scheme=http&host=192.168.1.2&port=8091&username=popcorn&password=你的密码&path=%2Fstrm

将链接生成二维码,用爆米花 App 扫码即可自动填入配置。

5.3 注意事项

  • 手机/平板必须与 Debian 服务器处于同一局域网(同一 WiFi 或网段)

  • 如果路由器开启了 AP 隔离(客户端隔离) ,需关闭,否则设备间无法互访

  • 如果开启了防火墙:

bash

sudo ufw allow 8091/tcp

5.4 刮削与播放

添加完成后,爆米花会自动扫描 STRM 文件并刮削媒体信息,生成海报墙。播放时,请求经 SmartStrm 302 代理重定向到网盘 CDN,视频流直连播放,不经过 NAS 中转。

六、日常维护

6.1 SmartStrm 更新

bash

sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower -cR smartstrm

或手动:

bash

cd /opt/smartstrm
sudo docker compose pull
sudo docker compose up -d

6.2 定时扫描新资源

SmartStrm 支持基于 Crontab 的定时计划,可在任务中设置「增量生成」模式,自动扫描网盘新增文件并生成 STRM。

6.3 添加更多 WebDAV 共享

如需共享其他目录(如 /mnt/sata/music),在 webdav.conf 中追加一组配置:

apache

Alias /music /mnt/sata/music
<Directory /mnt/sata/music>
    DAV On
    Options Indexes FollowSymLinks
    AllowOverride None
    AuthType Basic
    AuthName "WebDAV"
    AuthUserFile /etc/apache2/webdav.passwd
    Require valid-user
</Directory>

然后授权并 reload:

bash

sudo setfacl -R -m u:www-data:rwx /mnt/sata/music
sudo setfacl -R -d -m u:www-data:rwx /mnt/sata/music
sudo apache2ctl configtest && sudo systemctl reload apache2

6.4 查看日志

bash

# SmartStrm 日志
sudo docker logs -f smartstrm

# WebDAV 错误日志
sudo tail -f /var/log/apache2/webdav-error.log

6.5 常用命令速查

操作

命令

启动 SmartStrm

cd /opt/smartstrm && sudo docker compose up -d

停止 SmartStrm

cd /opt/smartstrm && sudo docker compose down

查看 SmartStrm 状态

sudo docker ps | grep smartstrm

重载 Apache

sudo systemctl reload apache2

查看端口占用

sudo ss -tlnp | grep -E ':(8024|8097|8091)'

验证 WebDAV

curl -u 用户:密码 http://IP:8091/strm/

七、故障排查

现象

可能原因

解决

SmartStrm 后台打不开

容器未启动 / 端口冲突

sudo docker logs smartstrm;检查 8024 是否被占用

WebDAV 返回 404

站点未启用 / ports.conf 缺 Listen

sudo a2ensite webdav.conf;检查 Listen 8091

WebDAV 返回 405

DAV On 写在了 <Location> 内

移到 <Directory> 内,路径用真实文件系统路径

WebDAV 返回 403

www-data 无读取权限

setfacl -R -m u:www-data:rwx /mnt/sata/strm

爆米花扫不出内容

STRM 文件未生成 / 路径填错

检查 /mnt/sata/strm 是否有 .strm 文件;路径应为 /strm

爆米花能连但播放卡顿

302 代理未启用 / 直链模式兼容性问题

在 SmartStrm 中启用 302 代理;使用「代理解析」而非「直链模式」

播放提示无法连接

网盘授权过期

在 SmartStrm 存储管理中重新鉴权

端口冲突

Docker 容器占用

sudo ss -tlnp | grep :端口号,更换端口

八、完整配置文件参考

/opt/smartstrm/docker-compose.yml

yaml

name: smartstrm
services:
  smartstrm:
    image: cp0204/smartstrm:latest
    container_name: smartstrm
    restart: unless-stopped
    network_mode: host
    volumes:
      - /opt/smartstrm/config:/app/config
      - /mnt/sata/strm:/strm
      - /opt/smartstrm/logs:/app/logs
      - /opt/smartstrm/tools:/app/tools
    environment:
      - PORT=8024
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=你的强密码

/etc/apache2/ports.conf(关键行)

apache

Listen 80
Listen 8091

/etc/apache2/sites-available/webdav.conf

apache

<VirtualHost *:8091>
    ServerAdmin webmaster@localhost
    ServerName 192.168.1.2

    Alias /strm /mnt/sata/strm
    <Directory /mnt/sata/strm>
        DAV On
        Options Indexes FollowSymLinks
        AllowOverride None
        AuthType Basic
        AuthName "WebDAV"
        AuthUserFile /etc/apache2/webdav.passwd
        Require valid-user
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/webdav-error.log
    CustomLog ${APACHE_LOG_DIR}/webdav-access.log combined
</VirtualHost>

网易爆米花连接参数

参数

值

协议

HTTP

服务器地址

192.168.1.2

端口

8091

用户名

popcorn

密码

你的密码

路径

/strm

结语

整套方案的核心逻辑是:SmartStrm 负责“生成 STRM 快捷方式 + 302 代理直链”,Apache WebDAV 负责“把 STRM 目录共享出去”,网易爆米花负责“刮削海报墙 + 播放”。

整个部署过程中最容易踩坑的三个点:

  1. SmartStrm 必须用 network_mode: host,否则 302 代理无法正常工作。

  2. WebDAV 的 <Directory> 必须用真实文件系统路径,URL 路径只用于 Alias。

  3. /mnt/sata/strm 的权限要同时满足 SmartStrm(写入)和 www-data(读取) ,ACL 是最稳妥的方案。

评论