我是如何用 VPS 自建 Emby 的

本文最后更新于 2024年8月22日 晚上

最近放假回家,准备秋招之余有一些闲功夫,又正好在帮家里更新一些软硬件设备,就把自己目前搭建 Emby 的技术栈做一些简单的记录和配置罗列。

1 - Emby 的 Docker 配置

我的所有自建基本能放在 docker-compose 中的就尽量用 docker compose 管理,emby 也不例外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: "3"
services:
emby:
image: emby/embyserver:latest
container_name: embyserver
restart: always
user: root
volumes:
- ./config:/config # Configuration directory
- /theater/movie:/mnt/share1 # Media directory
- /theater/tv:/mnt/share2 # Media directory
ports:
- 8096:8096 # HTTP port
- 8920:8920 # HTTPS port

其中需要备份的目录就是 ./config 目录,而 /theater/movie/theater/tv 用于挂载自己的影视盘,这里我选用的是 rclone 挂载 Google Drive / One Drive,具体配置和方案会在下面说明。

光是 Emby 本身的搭建不是很吃 CPU 和内存,不过建议至少 2C2G 的 VPS 起步吧,我自己搭建的这个占用情况(运行了半年没重启和停机后的状态):

1
2
# docker stats --no-stream | grep emby
384f61138e22 embyserver 0.03% 1.412GiB / 9.716GiB 14.53% 4.31GB / 498GB 2.74GB / 5.23GB 82

也就是大概需要 1.4G 左右的 MEM,仅供参考。

关于 Emby 服务器启动后的配置

这里不对具体的每一项配置做多的说明,只说个比较重要的:由于 VPS 没有 GPU 并且 CPU 一般很拉胯, 记得把服务端解码全关了。

由于 VPS 配置有限,需要关闭服务端转码

2 - Rclone 挂载 Google Drive

要说国外挂载 Emby 最合适的网盘,目前比较合适的方案就是用 Google Drive 或者 One Drive,其他网盘的读写实测都受到了不同程度的限制,并且稳定性肯定也不如大厂(当然,也有可能还有很多更好更实惠的方案我没有探索出来)。

  • One Drive 可以上闲鱼购买合租的 Office365 套餐,大概 20 左右 1 年,有 1T 的空间,感觉也是挺划算的。
  • Google Drive 可以直接开土区的套餐,2T 大概在 100 RMB 左右(不过目前好像土区受到限制了,不知道未来是否会受影响)。

Google Drive 的 Plan

目前我用的 Plan 是土耳其 2TB 的套餐,目前资费是 500 土耳其里拉,换算成人民币也就是大概 100 块左右每年的样子。

Rclone 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3"
services:
rclone:
image: mumiehub/rclone-mount
container_name: rclone
user: root
network_mode: host
restart: always
cap_add:
- SYS_ADMIN
devices:
- /dev/fuse
security_opt:
- apparmor:unconfined
volumes:
- /root/.config/rclone:/root/.config/rclone
- /theater:/mnt/mediaefs:shared
environment:
- RemotePath=gdtry:/
- ConfigDir=/root/.config/rclone
- ConfigName=rclone.conf
- MountCommands=--use-mmap --umask 000 --default-permissions --no-check-certificate --allow-other --allow-non-empty --vfs-cache-mode full --buffer-size 256M --vfs-read-ahead 512M --vfs-read-chunk-size 32M --vfs-read-chunk-size-limit off --vfs-cache-max-size 30G --low-level-retries 200

rclone 的配置我也是用的 docker-compose,主要是为了方便日志管理和自动重启。

然后直接将宿主机的 rclone config 也就是 ~/.config/rclone 挂载到容器内部,这样就不需要容器内部再重新登录了。

这里的 Environment 部分添加了一些乱七八糟的 MountCommands 参数,也是网上搜索了一波后配的,自我感觉比较重要的是 --vfs-cache-mode full --vfs-cache-max-size 30G ,可以根据 VPS 的硬盘大小尽量扩大这个值,文件缓存到本地了自然就快了~。

3 - 反代服务器的配置

我的 emby 服务器本身是找了个大流量高性能的 US VPS (5C10G),然后实际上一般这种性能的美西服务器都不会配备一个好的线路,这时候就需要进行一波反代。

反代的线路如何选择就各种各样了,我本身是为了方便家里观看,实际上如果是自己看的话完全可以用代理连接,就不用再套一层反代了。

反代的配置我也写的很简单,就是单纯用 caddy 代理一层 https,实测也有不错的效果。

1
2
3
4
5
https://<反代域名> {
tls {$EMAIL}
encode gzip zstd
reverse_proxy <emby-ip>:8096
}

4 - PT 下载和上传

这部分就是涉及到如何从网上找资源,以及上传到 Google Drive。

这一部分内容只是我自己的极为简单的配置,仅仅为了满足我自己追剧的需要,不涉及刷 PT 这一系列的骚操作。

qbittorrent 配置

简单说一下我的 qbittorrent 的配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
qbittorrent:
image: lscr.io/linuxserver/qbittorrent:latest
container_name: qbittorrent
network_mode: host
environment:
- PUID=0
- PGID=0
- TZ=Etc/UTC
- WEBUI_PORT=8080
volumes:
- ./config:/config
- ./downloads:/downloads
- /resources:/resources
restart: unless-stopped

上传到 Google Drive 的 Shell Script

我用写了个简单的 script 用于在 qbit 下载结束后快速将资源上传到 Google Drive 对应的目录,这里也记录一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
uptv () {
local source_path="$1"
local destination="<google drive 目录>"
local filename=$(basename "$source_path")
echo "upload tv: $filename"
if [ -d "$source_path" ]
then
destination_path="$destination/$filename"
else
destination_path="$destination/"
fi
echo "source: $source_path --> destination: $destination_path"
rclone copy "$source_path" "$destination_path" -Pv
}

QB 自动删除脚本

一般在上传到 Google Drive 后,不能马上删除种子和文件。

需要在满足 PT 站的保种规则一段时间后,就可以删除种子了,我使用的是 autoremove-torrents 来做到自动清除,由于这个工具本身对于 qbittorrent 4.5.4+ 具有一些兼容性问题,我 fork 了一个并且把我的配置也记录在了其中:https://github.com/Lincest/autoremove-torrents/tree/master

安装

1
cd && git clone https://github.com/lincest/autoremove-torrents.git && cd autoremove-torrents && python3 setup.py install

配置文件:

PS: 这个配置文件的主要是用来适配北洋园的规则,可以根据自己的需求自助修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my_task:
client: qbittorrent
host: http://127.0.0.1:8080
username:
password:
strategies:
my_strategy:
remove: '
(size < 10 and seeding_time > 86400) or
(size > 10 and size < 20 and seeding_time > 172800) or
(size > 20 and size < 30 and seeding_time > 259200) or
(size > 30 and size < 40 and seeding_time > 345600) or
(size > 40 and size < 50 and seeding_time > 432000) or
seeding_time > 604800 or
ratio > 10 '
delete_data: true

cronjob 配置:

1
*/15 * * * * /usr/local/bin/autoremove-torrents --conf=<配置目录>/autoremove-config.yml --log=/root/logs

5 - Emby 的客户端

整体可以参考 Misakaf 的 Wiki 来下载各个平台的安卓客户端,个人体验下来比较好用的:

  • MacOS / IOS: infuse 和 vidhub
  • Windows: 小秘的客户端, TG Channel
  • Android: 小秘的客户端和 Yamby

我是如何用 VPS 自建 Emby 的
https://moreality.net/posts/41540/
作者
Moreality
发布于
2024年8月17日
许可协议