.jpg)
alist-strm + alist + jellyfin 使用网盘空间搭建自己的影视库
alist-strm
开源的strm文件生成脚本,git地址:GitHub - tefuirZ/alist-strm
因为 jellyfin+alist 有可能会引起网盘的风控,生成strm文件之后,所有的刮削动作都是在服务器本地目录进行。
部署
docker一键部署
docker run -d --name alist-strm -p 15000:5000 -v /home:/home - /volume1/alist-strm/config:/config itefuir/alist-strm:latest
#15000是宿主机端口,5000是容器端口
#/home是本地路径
docker-compose.yaml配置(推荐)
video 是生成strm文件的目录,后面jellyfin也需要读取此文件夹进行刮削
version: "3"
services:
alist-strm:
stdin_open: true
tty: true
volumes:
#跟命令行一样的 前面是宿主机的目录
- /volume1/video:/volume1/video
- /volume1/alist-strm/config:/config
#第二行填写的是容器中数据库的存放位置
ports:
#:前面是宿主机的端口,自由选择
- "15000:5000"
container_name: alist-strm
#restart: always
image: itefuir/alist-strm:latest
network_mode: bridge
运行测试
浏览器地址栏输入服务器地址+端口,如果跟配置文件一致,输入15000,看到如下界面就是成功了
alist
一个支持多种存储的文件列表程序,使用 Gin 和 Solidjs ,简单来说就是可以将网盘或者远程储存放在一起管理
部署
docker
docker run -d --restart=unless-stopped -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID=0 -e PGID=0 -e UMASK=022 --name="alist" xhofe/alist:latest
docker compose
version: '3.3'
services:
alist:
image: 'xhofe/alist:beta'
container_name: alist
volumes:
- '/etc/alist:/opt/alist/data'
ports:
- '5244:5244'
environment:
- PUID=0
- PGID=0
- UMASK=022
restart: unless-stopped
反向代理配置参考(可以忽略)
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
proxy_redirect off;
proxy_pass http://127.0.0.1:5244;
# the max size of file to upload
client_max_body_size 20000m;
}
运行测试
服务器+地址端口访问出现如下界面就是部署成功
jellyfin
Jellyfin是一款开源的媒体服务器,其实用emby也可以,但是jellyfin 你不用任何配置就可以使用302转发进行直连播放,对小白比较友好,并且完全开源免费,电视、手机、电脑客户端都是免费的。
因为我刮削的都是小姐姐,这里就不放图了
部署
docker
media目录需要注意以下,需要和alist-strm生成strm的文件夹一样
docker run -d \
--name jellyfin \
--user uid:gid \
--net=host \
--volume /path/to/config:/config \ # Alternatively --volume jellyfin-config:/config
--volume /path/to/cache:/cache \ # Alternatively --volume jellyfin-cache:/cache
--mount type=bind,source=/path/to/media,target=/media \
--restart=unless-stopped \
jellyfin/jellyfin
Docker Compose
services:
jellyfin:
image: jellyfin/jellyfin
container_name: jellyfin
user: uid:gid
network_mode: 'host'
volumes:
- /path/to/config:/config
- /path/to/cache:/cache
- type: bind
source: /path/to/media
target: /media
- type: bind
source: /path/to/media2
target: /media2
read_only: true
# Optional - extra fonts to be used during transcoding with subtitle burn-in
- type: bind
source: /path/to/fonts
target: /usr/local/share/fonts/custom
read_only: true
restart: 'unless-stopped'
# Optional - alternative address used for autodiscovery
environment:
- JELLYFIN_PublishedServerUrl=http://example.com
# Optional - may be necessary for docker healthcheck to pass if running in host network mode
extra_hosts:
- 'host.docker.internal:host-gateway'
nginx 配置参考
server {
# Nginx versions prior to 1.25
#listen 443 ssl http2;
#listen [::]:443 ssl http2;
# Nginx versions 1.25+
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name jellyfin.example.org;
## The default `client_max_body_size` is 1M, this might not be enough for some posters, etc.
client_max_body_size 20M;
# Comment next line to allow TLSv1.0 and TLSv1.1 if you have very old clients
ssl_protocols TLSv1.3 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/example.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.org/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ssl_trusted_certificate /etc/letsencrypt/live/example.org/chain.pem;
# use a variable to store the upstream proxy
set $jellyfin 127.0.0.1;
# Security / XSS Mitigation Headers
add_header X-Content-Type-Options "nosniff";
# Permissions policy. May cause issues with some clients
add_header Permissions-Policy "accelerometer=(), ambient-light-sensor=(), battery=(), bluetooth=(), camera=(), clipboard-read=(), display-capture=(), document-domain=(), encrypted-media=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), interest-cohort=(), keyboard-map=(), local-fonts=(), magnetometer=(), microphone=(), payment=(), publickey-credentials-get=(), serial=(), sync-xhr=(), usb=(), xr-spatial-tracking=()" always;
# Content Security Policy
# See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
# Enforces https content and restricts JS/CSS to origin
# External Javascript (such as cast_sender.js for Chromecast) must be whitelisted.
add_header Content-Security-Policy "default-src https: data: blob: ; img-src 'self' https://* ; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'; font-src 'self'";
location / {
# Proxy main Jellyfin traffic
proxy_pass http://$jellyfin:8096;
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_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
# Disable buffering when the nginx proxy gets very resource heavy upon streaming
proxy_buffering off;
}
location /socket {
# Proxy Jellyfin Websockets traffic
proxy_pass http://$jellyfin:8096;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_set_header X-Forwarded-Protocol $scheme;
proxy_set_header X-Forwarded-Host $http_host;
}
}
server {
listen 80;
listen [::]:80;
server_name jellyfin.example.org;
return 301 https://$host$request_uri;
}
运行测试
服务器IP地址+端口访问,有登录界面就算成功
配置
alist添加储存
参考文档:添加存储 | AList文档 是alist的文档,可以参考添加储存
alist-strm 配置
alist根路径就是你想根据alist中哪一个网盘下面的哪一个文件夹生成strm文件,dav不用输入,是自动生成的,直接输入路径即可
jellyfin配置
就是将strm的文件夹作为媒体库的地址就行
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果