不用花钱买NAS也可以享受本地家庭影院.

Nginx反代可有可无,可以直接在jellyfin里面配置。习惯了Nginx而已

一、准备工作

  • 本地Linux虚拟机 + docker环境 + docker-compose命令工具

  • 域名(movie.baidu.com)+ 解析到虚拟机IP(192.168.88.105

  • SSL证书(movie.baidu.com.crtmovie.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

四、刮削插件

MetaShark

五、启动停止服务

# 启动
root@root:/data/nginx# docker-compose up -d
# 停止
root@root:/data/nginx# docker-compose down

六、效果

image-20240525164636519.png
image-20240525164946592.png
image-20240525165120322.png

七、客户端

https://jellyfin.org/downloads/

八、问题与修复

Q:SQLitePCL.pretty.SQLiteException: database disk image is malformed

A:原因:可能是意外断电,或没有正常关机导致。修复方案:这样修复