不用花钱买NAS也可以享受本地家庭影院.
Nginx反代可有可无,可以直接在
jellyfin
里面配置。习惯了Nginx
而已
一、准备工作
-
本地Linux虚拟机 + docker环境 +
docker-compose
命令工具 -
域名(
movie.baidu.com
)+ 解析到虚拟机IP(192.168.88.105
) -
SSL证书(
movie.baidu.com.crt
,movie.baidu.com.key
)
二、目录结构
# 存放nginx相关的配置
root@root:/data/nginx# tree .
.
├── conf.d
│ └── movie.baidu.com.conf
├── docker-compose.yml
├── ssl
│ ├── movie.baidu.com.crt
│ └── movie.baidu.com.key
└── wwwroot
# 存放jellyfin相关的内容. fonts目录下面存放中文字体,防止中文乱码; media目录下面存放电影电视剧等媒体数据
root@root:/opt/jellyfin# tree .
.
├── cache
├── config
│ └── fonts
│ ├── DejaVuSans-Bold.ttf
│ ├── DejaVuSansMono-Bold.ttf
│ ├── DejaVuSansMono.ttf
│ ├── DejaVuSans.ttf
│ ├── DejaVuSerif-Bold.ttf
│ └── DejaVuSerif.ttf
└── media
├── 电影
└── 电视剧
│ └── 地球脉动
│ └── 地球脉动.S03
│ ├── 地球脉动 - S03E01 - 第一集.mp4
│ ├── 地球脉动 - S03E02 - 第二集.mp4
│ ├── 地球脉动 - S03E03 - 第三集.mp4
│ ├── 地球脉动 - S03E04 - 第四集.mp4
│ ├── 地球脉动 - S03E05 - 第五集.mp4
│ ├── 地球脉动 - S03E06 - 第六集.mp4
│ ├── 地球脉动 - S03E07 - 第七集.mp4
│ └── 地球脉动 - S03E08 - 第八集.mp4
└── 演讲
三、相关配置文件
docker-compose.yml
services:
nginx:
container_name: nginx
image: nginx:1.26-alpine
ports:
- "443:443/tcp"
- "443:443/udp"
- "80:80"
volumes:
- /data/nginx/ssl:/etc/nginx/ssl
- /data/nginx/conf.d:/etc/nginx/conf.d
- /data/nginx/wwwroot:/wwwroot
environment:
- TZ=Asia/Shanghai
depends_on:
- "jellyfin"
networks:
- nginx
restart: always
jellyfin:
container_name: jellyfin
image: jellyfin/jellyfin
volumes:
- /opt/jellyfin/config:/config
- /opt/jellyfin/cache:/cache
- /opt/jellyfin/media:/media
- /opt/jellyfin/config/fonts:/usr/share/fonts/truetype/dejavu:ro
environment:
- TZ=Asia/Shanghai
networks:
- nginx
expose:
- "8096"
restart: always
networks:
nginx:
movie.baidu.com.conf
server {
listen 80;
server_name movie.baidu.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
http2 on;
http3 on;
listen 443 quic reuseport;
server_name movie.baidu.com;
client_max_body_size 20M;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_certificate /etc/nginx/ssl/movie.baidu.com.crt;
ssl_certificate_key /etc/nginx/ssl/movie.baidu.com.key;
add_header Strict-Transport-Security "max-age=31536000" always;
ssl_stapling on;
ssl_stapling_verify on;
ssl_early_data on;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Alt-Svc 'h3=":443"; ma=86400';
add_header QUIC-Status $http3;
location = / {
return 302 http://$host/web/index.html;
}
location / {
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;
proxy_buffering off;
}
location /socket {
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;
}
}
字体文件
下载地址:链接 提取码:AnrW
四、刮削插件
五、启动停止服务
# 启动
root@root:/data/nginx# docker-compose up -d
# 停止
root@root:/data/nginx# docker-compose down
六、效果



七、客户端
https://jellyfin.org/downloads/
- 电脑:浏览器
- 安卓:
- 浏览器
- Findroid for Jellyfin :个人觉得挺流畅的
- Jellyfin for Android :还行
- TV:
- Jellyfin for Android TV :个人觉得不好用,存在卡顿和不兼容的问题
- 投屏
八、问题与修复
Q:SQLitePCL.pretty.SQLiteException: database disk image is malformed
A:原因:可能是意外断电,或没有正常关机导致。修复方案:这样修复