本文在下载好媒体库内容的情况下,从零开始搭建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
whoami0.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 smartstrm5)连上 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_id和client secret以站内信形式发送给我们,妥善保存,后面会用到。

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

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

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

创建存储
打开SmartStrm,创建存储,驱动选123开放平台。
把之前收到的client_id和client 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是拒绝
评论区