Kyoo自托管媒体服务器搭建教程 Docker部署影视库帕斯内网穿透远程访问全教程
作者
小编
发布时间

项目介绍
Kyoo 是一个专注于视频内容(电影、电视剧和动漫)的自托管媒体服务器,是 Jellyfin 或 Plex 的优秀替代品。它采用'一次设置,永久使用'的理念,无需手动重命名文件或特定的文件夹结构,能够无缝处理直接从下载目录获取的文件,最大程度减少服务器管理员的维护负担。
Kyoo 具有强大的功能特性:支持动态转码、视频预览缩略图、基于 Meilisearch 的高级搜索、OIDC 身份验证、观看列表同步、离线下载支持、增强的字幕支持以及智能的动漫名称解析。项目专注于电影、电视剧和动漫流媒体播放,不包含音乐、电子书或游戏功能,为用户提供纯粹的影视享受体验。
界面美观现代,支持 Web 和 Android 客户端,未来还将支持 Chromecast 和 Android TV。项目采用微服务架构,使用多个专门的容器来实现不同功能,确保系统的可扩展性和稳定性。
项目地址: 点我跳转
部署安装
如需在外也打开项目需要配置内网穿透使用,点击前往 帕斯内网穿透,先注册好账号备用。
Kyoo 使用 Docker Compose 进行部署,这是最简单快速的安装方式。
复制下列的配置文件
1x-transcoder: &transcoder-base2 image: ghcr.io/zoriya/kyoo_transcoder:edge3 networks:4 default:5 aliases:6 - transcoder7 restart: unless-stopped8 env_file:9 - ./.env10 volumes:11 - ${LIBRARY_ROOT}:/video:ro12 - ${CACHE_ROOT}:/cache13 - metadata:/metadata1415services:16 back:17 image: ghcr.io/zoriya/kyoo_back:edge18 restart: unless-stopped19 cpus: 1.520 environment:21 - TRANSCODER_URL=${TRANSCODER_URL:-http://transcoder:7666/video}22 env_file:23 - ./.env24 depends_on:25 postgres:26 condition: service_healthy27 meilisearch:28 condition: service_healthy29 rabbitmq:30 condition: service_healthy31 migrations:32 condition: service_completed_successfully33 volumes:34 - kyoo:/metadata35 labels:36 - "traefik.enable=true"37 - "traefik.http.routers.api.rule=PathPrefix(`/api/`)"38 - "traefik.http.services.back.loadbalancer.server.port=5000"3940 migrations:41 image: ghcr.io/zoriya/kyoo_migrations:edge42 restart: "no"43 depends_on:44 postgres:45 condition: service_healthy46 env_file:47 - ./.env4849 front:50 image: ghcr.io/zoriya/kyoo_front:edge51 restart: unless-stopped52 environment:53 - KYOO_URL=${KYOO_URL:-http://back:5000/api}54 labels:55 - "traefik.enable=true"56 - "traefik.http.routers.front.rule=PathPrefix(`/`)"57 - "traefik.http.services.front.loadbalancer.server.port=8901"5859 scanner:60 image: ghcr.io/zoriya/kyoo_scanner:edge61 restart: unless-stopped62 depends_on:63 back:64 condition: service_healthy65 env_file:66 - ./.env67 environment:68 - KYOO_URL=${KYOO_URL:-http://back:5000/api}69 volumes:70 - ${LIBRARY_ROOT}:/video:ro7172 matcher:73 image: ghcr.io/zoriya/kyoo_scanner:edge74 command: matcher75 restart: unless-stopped76 depends_on:77 back:78 condition: service_healthy79 env_file:80 - ./.env81 environment:82 - KYOO_URL=${KYOO_URL:-http://back:5000/api}8384 autosync:85 image: ghcr.io/zoriya/kyoo_autosync:edge86 restart: unless-stopped87 depends_on:88 rabbitmq:89 condition: service_healthy90 env_file:91 - ./.env9293 transcoder:94 <<: *transcoder-base95 profiles: ['', 'cpu']9697 traefik:98 image: traefik:v3.599 restart: unless-stopped100 command:101 - "--providers.docker=true"102 - "--providers.docker.exposedbydefault=false"103 - "--entryPoints.web.address=:8901"104 - "--accesslog=true"105 ports:106 - "8901:8901"107 volumes:108 - "/var/run/docker.sock:/var/run/docker.sock:ro"109110 postgres:111 image: postgres:15112 restart: unless-stopped113 env_file:114 - ./.env115 volumes:116 - db:/var/lib/postgresql/data117 healthcheck:118 test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]119 interval: 5s120 timeout: 5s121 retries: 5122123 meilisearch:124 image: getmeili/meilisearch:v1.4125 restart: unless-stopped126 volumes:127 - search:/meili_data128 environment:129 - MEILI_ENV=production130 env_file:131 - .env132 healthcheck:133 test: ["CMD", "wget", "--no-verbose", "--spider", "http://meilisearch:7700/health"]134 interval: 30s135 timeout: 5s136 retries: 5137138 rabbitmq:139 image: rabbitmq:4-alpine140 restart: unless-stopped141 environment:142 - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}143 - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}144 healthcheck:145 test: rabbitmq-diagnostics -q ping146 interval: 30s147 timeout: 10s148 retries: 5149 start_period: 10s150151volumes:152 kyoo:153 db:154 metadata:155 search:
同时需要创建一个 .env
文件,包含以下必要的环境变量:
1# 媒体库根目录路径2LIBRARY_ROOT=/path/to/your/media34# 缓存目录路径5CACHE_ROOT=/path/to/cache67# 数据库配置8POSTGRES_USER=kyoo9POSTGRES_PASSWORD=your_password_here10POSTGRES_DB=kyoo1112# RabbitMQ 配置13RABBITMQ_DEFAULT_USER=kyoo14RABBITMQ_DEFAULT_PASS=your_rabbitmq_password1516# Meilisearch 主密钥17MEILI_MASTER_KEY=your_master_key_here
打开飞牛 NAS 或其他的 NAS 设备

项目名称可以随便填,点击创建 docker-compose.yml

点击 Compose -> 新建项目
这里需要修改 .env
文件中的路径和密码配置:
- LIBRARY_ROOT
: 设置为你的媒体文件存储路径
- CACHE_ROOT
: 设置为缓存目录路径
- POSTGRES_PASSWORD
: 设置数据库密码
- RABBITMQ_DEFAULT_PASS
: 设置消息队列密码
- MEILI_MASTER_KEY
: 设置搜索引擎主密钥
如果提示端口被占用可以修改 traefik 服务中的端口映射,但是需要保持格式正确。
创建成功后可以访问 ip:8901 到这里就可以正常显示项目了
穿透公网
打开帕斯内网穿透控制台,点击隧道管理-隧道列表

点击创建新隧道
隧道节点可以随便选,一般选个负载低的就可以

接下来填写信息,隧道名称可以随便填写
本地 IP 默认就可以
传输协议可以选择 TCP 也可以选择 HTTP/HTTPS
HTTP 就是域名的形式,教程以使用 TCP 为演示
本项目默认是 8901 端口,这里本地端口就填 8901
远程端口可以留空也可以自定义。下图仅做参考,请按照实际项目端口添加。

填写完毕点击确定
点击刚才创建好的隧道,点击获取配置文件

回到飞牛 NAS,点击应用中心下载 frpc 客户端

打开后粘贴刚才复制的配置文件,点击确定即可
复制帕斯内网穿透控制台的访问 IP 和端口
可以看到已经正常穿透成功了
本篇教程结束