媒体库选择

本文选择pikpak作为媒体库。目前首年优惠价格为466.99元。

购买地址:https://mypikpak.com/drive/payment

产品参数:10TB,下行流量 - 4 TB / 月

如果下行流量不够使用需要购买额外流量。

pikpak服务器使用的新加坡阿里云,检测延时:

https://www.itdog.cn/ping/dav.mypikpak.com

发现并未做anycast。所谓全球超高速下载有点夸张,还不如猫子的cdn系统。

使用rclone挂载媒体库

安装rclone

安装地址:Rclone downloads

官方安装脚本

curl https://rclone.org/install.sh | sudo bash

安装fuse

apt-get install fuse

 高版本会出现

failed to mount FUSE fs: fusermount: exec: "fusermount3": executable file not found in $PATH错误。

解决

ln -s /bin/fusermount /bin/fusermount3

配置rclone

rclone config

 选择New remote

输入远程的名称

选择类型,56,各版数字不一样,注意数字

输入WebDav运行地址

接下来的容器选择其他

在PikPak界面右上角点击设置

实验室功能 - WebDAV(会员专享)

输入用户名和密码

剩下的高级配置不用管,直接回车即可。

推出配置页面,输入

rclone tree pikpak:/

出现文件目录则表示配置成功

挂载

 确保配置成功的情况下,使用

mkdir -p /data/movies
#rclone mount (远程的名称):/  需要挂载的路径
rclone mount pikpak:/ /data/movies

卸载

fusermount -qzu 挂载的本地目录

开机启动

[Unit]
Description=Rclone
After=network-online.target

[Service]
Type=simple
ExecStart=rclone mount pikpak:/ /data/movies
Restart=on-abort
User=root

[Install]
WantedBy=default.target
systemctl enable rclone

到此挂载完成

EMBY搭建

安装docker

curl -fsSL https://get.docker.com | sh

安装docker-compose

apt install docker-compose

docker-compose.yml

version: "2.3"
services:
  emby:
    image: amilys/embyserver
    container_name: embyserver
    network_mode: host
    volumes:
      - /data/emby:/config
      - /data/movies:/mnt/share
    restart: on-failure

启动empy

docker-compose up -d

域名证书

由于猫子的域名托管在Cloudflare,所以通过 Cloudflare API,一键申请 SSL 证书,并自动保存!

Cloudflare API获取

点击查看,输入密码即可查看API令牌

申请脚本

bash <(curl -Ls  https://v2rayssr.com/tool/acme.sh)

根据脚本提示输入主域名、 Cloudflare API、证书路径等信息,完成申请。

证书路径建议为/data/nginx/cert/目录,即Nginx证书目录。

Nginx反代

docker-compose.yml

  openresty:
    image: openresty/openresty:latest
    container_name: openresty
    restart: always
    network_mode: host
    volumes:
      - /etc/localtime:/etc/localtime
      - /data/nginx/conf/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf:ro
      - /data/nginx/logs:/usr/local/openresty/nginx/logs
      - /data/nginx/cert:/usr/local/openresty/nginx/cert
      - /data/nginx/html:/usr/local/openresty/nginx/www:ro

nginx.conf

路径:/data/nginx/conf/nginx.conf

user daemon daemon;
worker_processes  auto;

error_log  logs/error.log  notice;

pid        logs/nginx.pid;

events {
    use epoll;
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    server_tokens off;

    server_names_hash_bucket_size 2048;
    server_names_hash_max_size 4096;

    log_format main '{ "@timestamp": "$time_local", '
    '"@fields": { '
    '"uri":"$request_uri",'
    '"url":"$uri",'
    '"upstream_addr":"$upstream_addr",'
    '"remote_addr": "$remote_addr", '
    '"remote_user": "$remote_user", '
    '"body_bytes_sent": "$body_bytes_sent", '
    '"host":"$host",'
    '"server_addr":"$server_addr",'
    '"request_time": "$request_time", '
    '"request_time":"$request_time",'
    '"status":"$status",'
    '"request": "$request", '
    '"request_method": "$request_method", '
    '"size":$body_bytes_sent,'
    '"upstream_time":"$upstream_response_time"'
    '"http_referrer": "$http_referer", '
    '"body_bytes_sent":"$body_bytes_sent", '
    '"http_x_forwarded_for": "$http_x_forwarded_for", '
    '"http_user_agent": "$http_user_agent" } }';

    access_log off;

    sendfile on;
    tcp_nopush on;
    keepalive_timeout 10;
    client_header_timeout 10s;
    client_body_timeout 10s;
    send_timeout 10s;
    fastcgi_buffer_size 512k;
    fastcgi_buffers 6 512k;
    fastcgi_busy_buffers_size 512k;
    fastcgi_temp_file_write_size 512k;
    connection_pool_size 256;
    client_header_buffer_size 32k;
    large_client_header_buffers 4 32k;
    request_pool_size 4k;
    output_buffers 4 32k;
    postpone_output 1460;
    client_max_body_size 1m;
    client_body_buffer_size 1024k;
    client_body_temp_path /usr/local/openresty/nginx/client_body_temp;
    proxy_temp_path /usr/local/openresty/nginx/proxy_temp;
    fastcgi_temp_path /usr/local/openresty/nginx/fastcgi_temp;
    fastcgi_intercept_errors on;
    tcp_nodelay on;

    proxy_headers_hash_max_size 51200;
    proxy_headers_hash_bucket_size 6400;

    proxy_buffering on;
    proxy_buffers 64 128k;

    gzip off;
    gzip_min_length 1k;
    gzip_buffers 4 8k;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_types text/plain application/x-javascript text/css application/xml text/javascript image/jpeg image/gif image/png;

    server {
        listen       443 ssl http2;
        listen  [::]:443 ssl http2;
        server_name xxx.xxx.com;
        access_log logs/xxx.access.log main;
        error_log logs/xxx.error.log notice;

        ssl_certificate      /usr/local/openresty/nginx/cert/xxx.crt;
        ssl_certificate_key  /usr/local/openresty/nginx/cert/xxx.key;
        ssl_stapling on;
        ssl_session_timeout  1d;
        ssl_session_cache shared:SSL:10m; # 如果与其他配置冲突,请注释此项
        ssl_protocols TLSv1.2 TLSv1.3;

        location / {
            proxy_pass http://localhost:8096;
            proxy_cache off;
            proxy_buffering off;
            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;
        }
    }
}

启动nginx

docker-compose up -d

域名解析

添加A记录,并关闭小黄鱼。

如果使用Cloudflare CDN代理,可能会被封号,所以猫子选择简单的自建ssl证书。

配置EMBY

此时,我们已经可以通过https://xxx.xxx.com访问emby服务了。

EMBY初始化

设置新增用户

禁止视频转码,该选项会占用cpu资源。

新增媒体库

点击新增媒体库

点击添加

选择文件夹,选择子文件夹

媒体库设置

字幕下载,点击确认

最终效果。

相关文章