目 录CONTENT

文章目录

搭建Emby+SmartStrm实现网盘影音丝滑播放

本文在下载好媒体库内容的情况下,从零开始搭建Emby、生成Strm并通过Nginx对Emby搭建反向代理方便访问

  • 目录:

  • 安装Emby

  • 安装SmartStrm

    • 总体思路

    • 0)环境配置

    • 1)安装 Docker(Ubuntu 24.04)

    • 2)选择部署方式:docker run vs docker compose

    • 3)写 compose 文件(完全对齐官方参数)

    • 4)启动 SmartStrm

    • 5)连上 Web 管理端并完成“首次登录”

    • 7)更新策略(官方给的“一键更新”)

  • 配置存储+生成Strm

    • 准备工作

    • 创建存储

    • 打开302代理

    • 生成strm

    • 扩展:利用SmartStrm刮削新的内容

  • 配置媒体库

  • 在Infuse上播放

    • 通过Emby Connect账号添加

    • 通过服务器信息添加

    • 播放检查302功能

  • 为Emby做反向代理方便访问,并通过UFW阻止8096、8097端口访问

    • 配置计划

    • 配置Nginx反向代理

    • 配置DNS解析

    • 通过ufw屏蔽外部直接通过端口访问

安装Emby

访问https://emby.media/linux-server.html,然后复制对应系统版本的deb链接,在服务器中通过wget下载 然后执行:

dpkg -i emby-server-deb_4.9.3.0_amd64.deb #版本号为4.9.3.0时的例子

会自动配置Emby服务,完成后访问IP:8096完成配置

一直下一步直到配置完成即可

安装SmartStrm

总体思路

SmartStrm 本质是一个 Web 服务 + 任务引擎:

  • Web 管理端:默认 8024(可改),用来配置存储、任务、Webhook 等。 (GitHub)

  • 生成 .strm文件:输出到你挂载的目录(我们会用 /opt/media-stack/smartstrm/strm),之后给 Emby 读。 (GitHub)

  • 日志与配置:建议都落盘挂载出来,否则容器一删全没。 (GitHub)

0)环境配置

0.1 确认系统和权限

lsb_release -a
whoami

0.2 选一个“干净的工作目录结构”

我们按官方推荐的挂载结构来:config / logs / strm 分开。 (GitHub)

sudo mkdir -p /opt/media-stack/smartstrm/{config,logs,strm}
sudo chown -R $USER:$USER /opt/media-stack

解释:

  • /opt

    通常用于放服务型应用

  • strm

    目录就是未来 Emby 只扫它的“索引库”(只存文本 .strm,很轻)。

  • config/logs

    挂出来,容器删了也不丢配置/日志。

---

1)安装 Docker(Ubuntu 24.04)

如果你已经装过 Docker,可以直接跳到第 2 步;否则:

sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
docker version
docker compose version

解释:

  • docker.io

    :Ubuntu 官方源版本,够用且稳定。

  • docker-compose-plugin

    :让你可以用 docker compose(新语法,推荐)。

  • enable --now

    :开机自启 + 立即启动。

把当前用户加入 docker 组(否则每次都要 sudo):

sudo usermod -aG docker $USER
newgrp docker

---

2)选择部署方式:docker run vs docker compose

官方 README 给了两种:docker run或 docker-compose.yml。(GitHub)

建议使用 docker compose:配置可读、可版本管理、以后加 Emby/反代更顺滑。

3)写 compose 文件(完全对齐官方参数)

在 /opt/media-stack/smartstrm/docker-compose.yml

cd /opt/media-stack/smartstrm
nano docker-compose.yml

粘贴(把密码改强一点):

name: smartstrm
services:
smartstrm:
image: cp0204/smartstrm:latest
container_name: smartstrm
restart: unless-stopped

# 官方推荐 host 网络:少折腾端口映射、对某些网络环境更省心
network_mode: host

volumes:
      - /opt/media-stack/smartstrm/config:/app/config
      - /opt/media-stack/smartstrm/logs:/app/logs
      - /opt/media-stack/smartstrm/strm:/strm

environment:
      - PORT=8024
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=ChangeMe_To_A_StrongPassword

解释:

  • network_mode: host

    :容器直接用宿主机网络栈,等于服务“裸跑”在 VPS 上的 8024 端口。官方示例就是这么做的。(GitHub)

  • 优点:简单、不用写 ports 映射。

  • 缺点:端口管理要更谨慎(安全部分我们会做)。

  • volumes

    :严格对齐官方挂载路径 /app/config/app/logs/strm。(GitHub)

  • PORT/ADMIN_USERNAME/ADMIN_PASSWORD

    :官方明确支持的环境变量。(GitHub)

---

4)启动 SmartStrm

cd /opt/media-stack/smartstrm
docker compose up -d
docker ps
docker logs -n 80 smartstrm

5)连上 Web 管理端并完成“首次登录”

浏览器打开:

  • http://你的VPS公网IP:8024

用你在 compose 里写的 ADMIN_USERNAME / ADMIN_PASSWORD登录。(GitHub)

管理端口 8024 不建议长期裸露在公网

7)更新策略(官方给的“一键更新”)

SmartStrm README 里推荐用 watchtower 对指定容器做更新:(GitHub)

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

解释:

  • -cR smartstrm

    :只更新 smartstrm 这个容器(避免误伤别的容器)。

配置存储+生成Strm

准备工作

使用123云盘的OpenAPI需要购买开发者权益包 20元一个月,不得不说这些东西真的是有钱人的玩具,没有大米啥也干不了

https://www.123pan.com/member

开发者权益包开通后会把client_idclient secret以站内信形式发送给我们,妥善保存,后面会用到。

另外,想要302就必须购买SmartStrm Pro但是价格明显不是很高,支持一下开发者我觉得也是理所应当

https://afdian.com/item/cd39184033a811f0b60b52540025c377

购买以后许可证会自动发送到你的邮箱里

然后在系统设置->关于填入许可证即可

创建存储

打开SmartStrm,创建存储,驱动选123开放平台。

把之前收到的client_idclient secret输入,如图配置

打开302代理

这个功能命名上有点谜语人,经过我查阅该项目的README.md发现这就是一个直链访问的功能

生成strm

进入存储浏览->添加任务,扫描路径输入云盘路径即可

非常建议每个目录都创建,即使SmartStrm会自动扫描并生成子目录内的文件strm,单线程速度也太慢了,我正创建多个任务以尝试多线程工作

另外,如果在任务页面点击编辑病修改任务名和路径,它就会自动创建一个新任务,可以用这个方法创建一些设置相似的任务

可以稍等一会生成完毕再添加Emby扫库

附:工具讲解

扩展:利用SmartStrm刮削新的内容

之前讲到过利用TinyMM刮削,这个软件有两个缺点

1.在只有一个新的内容时,要么为所有新内容单独创建一个目录,要么忍受扫描整个媒体库目录并获取视频信息的内容

2.刮削、重命名过程较复杂

虽然但是,TinyMM的可自行义性,准确性都是不可否认的

TinyMM刮削教程可以参考https://leander.blog/pt-with-tinymm/

TinyMM比较适合在本地用Kodi观看的用户,当我们准备搭建服务器时,SmartStrm提供的刮削功能或许是更好的选择。但是SmartStrm需要进入每个到视频的文件夹才能刮削,方式不同,依照个人喜好选择即可

首先在网盘上设置目录为类似/<Name>/Season 1/Ep1.mkv的格式,进入SmartStrm/存储浏览,选择影视识别

配置媒体库

因为我们用的是strm中转,所以扫库非常快,飞一般的速度

在Infuse上播放

通过Emby Connect账号添加

在https://emby.media/community/index.php?/register/

通过服务器信息添加

需要注意的是,地址前面还要加上协议,例如http://IP:8097

播放检查302功能

内容没问题,直接播放看看

进度条可以随便拖,同时服务器上行不大,就说明302可以正常访问了

折腾了半个多月终于弄好了。。。完结撒花

网页版支持调用播放器播放

为Emby做反向代理方便访问,并通过UFW阻止8096、8097端口访问

我之前已经预先搭建过Nginx,通过apt下载安装的,具体可以参考https://leander.blog/setup-ghost/

配置计划

IP:8097 --> emby.mydomain.com

配置Nginx反向代理

vim /etc/nginx/conf.d/emby.conf

内容如下:

server {
    listen 80;
    server_name emby.mydomain.com;
return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name emby.mydomain.com;

    ssl_certificate     /etc/ssl/cert.pem;
    ssl_certificate_key /etc/ssl/key.pem;

    client_max_body_size 20G;

    location / {
        proxy_pass http://127.0.0.1:8097;
        proxy_set_header Host $host;
        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_buffering off;
    }
}

检查配置文件语法正确性并重启 Nginx

nginx -t
systemctl reload nginx

配置DNS解析

我的域名解析托管交由Cloudflare,其他平台配置方法类似,这个过程非常简单

至此,Emby的长途跋涉算是结束了,打开日历看看我研究它的半个假期。。真是感慨万千!

通过ufw屏蔽外部直接通过端口访问

ufw emable
ufw allow 22
ufw allow 443
ufw allow 8024
ufw deny 8096
ufw deny 8097

以此类推,按照自己的需求设置即可,allow是允许,deny是拒绝

0

评论区